From the adversarial audit of #316 at pr:316 scope (survived refutation; 9 of 56 findings survived).
assertBeaconSet pins the orchestrator beacon owner to BEACON_INITIAL_OWNER = 0x8E4bdeec... - documented across this repo as "rainlang.eth, the deploy EOA" - and asserts it as the permanent expected state, with no migration window and no deadline. Cron CI therefore never red-lines it.
Every other beacon surface has moved the other way:
LibBeaconInvariants.sol:93-101 explicitly warns "do not conflate the two" against PROD_BEACON_OWNER = STOX_TOKEN_OWNER_SAFE.
- Other surfaces assert through
assertProdBeaconsOwnershipMigration(pre, post, deadline).
- CLAUDE.md states production
onlyOwner surfaces are held by a governance timelock.
The timelock migration cannot pick this beacon up, by construction rather than by omission:
LibBeaconInvariants.prodBeaconsForChainId returns a fixed address[3].
20260729-migrate-governance-to-timelock.s.sol captures address[3] beaconImplsBefore.
- The orchestrator beacon is a fourth beacon, outside that array.
GovernanceTimelockMigration.t.sol consequently stays green past the 2026-10-01 deadline, because it only checks the enumerated three.
Impact once #324 lands: the orchestrator holds DEPOSIT/WITHDRAW on every production vault, so a single upgradeTo from that one EOA key replaces the implementation holding mint/burn authority across Base, Ethereum and HyperEVM. The pin as written asserts that arrangement is correct forever.
Widening the address[3] to include the orchestrator beacon is the part the migration needs; the pin also needs a deadline so CI fails if the handover has not happened.
Related: #326 (the same audit, the instance address being claimable now).
From the adversarial audit of #316 at
pr:316scope (survived refutation; 9 of 56 findings survived).assertBeaconSetpins the orchestrator beacon owner toBEACON_INITIAL_OWNER = 0x8E4bdeec...- documented across this repo as "rainlang.eth, the deploy EOA" - and asserts it as the permanent expected state, with no migration window and no deadline. Cron CI therefore never red-lines it.Every other beacon surface has moved the other way:
LibBeaconInvariants.sol:93-101explicitly warns "do not conflate the two" againstPROD_BEACON_OWNER = STOX_TOKEN_OWNER_SAFE.assertProdBeaconsOwnershipMigration(pre, post, deadline).onlyOwnersurfaces are held by a governance timelock.The timelock migration cannot pick this beacon up, by construction rather than by omission:
LibBeaconInvariants.prodBeaconsForChainIdreturns a fixedaddress[3].20260729-migrate-governance-to-timelock.s.solcapturesaddress[3] beaconImplsBefore.GovernanceTimelockMigration.t.solconsequently stays green past the 2026-10-01 deadline, because it only checks the enumerated three.Impact once #324 lands: the orchestrator holds DEPOSIT/WITHDRAW on every production vault, so a single
upgradeTofrom that one EOA key replaces the implementation holding mint/burn authority across Base, Ethereum and HyperEVM. The pin as written asserts that arrangement is correct forever.Widening the
address[3]to include the orchestrator beacon is the part the migration needs; the pin also needs a deadline so CI fails if the handover has not happened.Related: #326 (the same audit, the instance address being claimable now).