Skip to content

docs: governance timelock runbook - #288

Merged
thedavidmeister merged 5 commits into
mainfrom
docs/20260729-timelock-governance
Aug 11, 2026
Merged

docs: governance timelock runbook#288
thedavidmeister merged 5 commits into
mainfrom
docs/20260729-timelock-governance

Conversation

@hardyjosh

Copy link
Copy Markdown
Contributor

docs/TIMELOCK.md: role model (Safe = proposer/canceller/executor, 48h min
delay, timelock self-administered, deploy key never holds anything),
deterministic per-chain addresses + pin constants, the four-step per-chain
rollout (deploy broadcast -> pin PR -> CI-authored Safe bundle -> execute
-> post-execution flip PR), how future governance actions work
(schedule -> 48h -> execute, batching, cancellation), the invariant
surface, the dedicated-canceller placeholder, and explicit out-of-scope
follow-ups (beacon ownership, HyperEVM).

CLAUDE.md: Governance section pointing script authors at
LibTimelockInvariants.timelockForChainId and the schedule/execute pattern
for any bundle touching onlyOwner/_ADMIN surfaces.

Co-Authored-By: Claude Fable 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01RquYKmoEVSfuVHy8kwn1yT

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@thedavidmeister, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 41 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 8cd02ed8-14ed-4425-bd19-117c68891f83

📥 Commits

Reviewing files that changed from the base of the PR and between 1065fc9 and 229c61c.

📒 Files selected for processing (2)
  • CLAUDE.md
  • docs/TIMELOCK.md

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@hardyjosh
hardyjosh marked this pull request as ready for review July 29, 2026 07:11
@hardyjosh
hardyjosh force-pushed the feat/20260729-timelock-migration-invariants branch from c7d353c to bd359aa Compare August 3, 2026 14:00
@hardyjosh
hardyjosh force-pushed the docs/20260729-timelock-governance branch from cc87bc5 to 2f457cd Compare August 3, 2026 14:00
@hardyjosh
hardyjosh force-pushed the docs/20260729-timelock-governance branch 2 times, most recently from 8ee276d to ff072b0 Compare August 10, 2026 09:04
@hardyjosh
hardyjosh force-pushed the feat/20260729-timelock-migration-invariants branch from 195bd48 to e3d5ff7 Compare August 10, 2026 09:04
@hardyjosh
hardyjosh force-pushed the docs/20260729-timelock-governance branch from ff072b0 to a1250e5 Compare August 10, 2026 10:04
@hardyjosh
hardyjosh force-pushed the feat/20260729-timelock-migration-invariants branch from e3d5ff7 to 54124fc Compare August 10, 2026 10:04
@hardyjosh
hardyjosh force-pushed the docs/20260729-timelock-governance branch from a1250e5 to c416c40 Compare August 10, 2026 10:11
@hardyjosh
hardyjosh force-pushed the feat/20260729-timelock-migration-invariants branch 2 times, most recently from 38ca6c8 to 84cabb3 Compare August 10, 2026 11:28
@hardyjosh
hardyjosh force-pushed the docs/20260729-timelock-governance branch from c416c40 to 6e69e39 Compare August 10, 2026 11:28
@hardyjosh
hardyjosh force-pushed the feat/20260729-timelock-migration-invariants branch from 84cabb3 to 260c991 Compare August 10, 2026 11:50
@hardyjosh
hardyjosh force-pushed the docs/20260729-timelock-governance branch from 6e69e39 to ee70d26 Compare August 10, 2026 11:50
@hardyjosh
hardyjosh force-pushed the feat/20260729-timelock-migration-invariants branch from 260c991 to 009d091 Compare August 10, 2026 12:02
@hardyjosh
hardyjosh force-pushed the docs/20260729-timelock-governance branch from ee70d26 to af13b89 Compare August 10, 2026 12:03
@hardyjosh
hardyjosh force-pushed the feat/20260729-timelock-migration-invariants branch from 009d091 to b173b41 Compare August 11, 2026 09:56
@hardyjosh
hardyjosh force-pushed the docs/20260729-timelock-governance branch from af13b89 to 2c016ca Compare August 11, 2026 09:56
Josh Hardy and others added 3 commits August 11, 2026 10:12
docs/TIMELOCK.md: role model (Safe = proposer/canceller/executor, 48h min
delay, timelock self-administered, deploy key never holds anything),
deterministic per-chain addresses + pin constants, the four-step per-chain
rollout (deploy broadcast -> pin PR -> CI-authored Safe bundle -> execute
-> post-execution flip PR), how future governance actions work
(schedule -> 48h -> execute, batching, cancellation), the invariant
surface, the dedicated-canceller placeholder, and explicit out-of-scope
follow-ups (beacon ownership, HyperEVM).

CLAUDE.md: Governance section pointing script authors at
LibTimelockInvariants.timelockForChainId and the schedule/execute pattern
for any bundle touching onlyOwner/_ADMIN surfaces.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RquYKmoEVSfuVHy8kwn1yT
@hardyjosh
hardyjosh force-pushed the feat/20260729-timelock-migration-invariants branch from b173b41 to f11215e Compare August 11, 2026 10:12
@hardyjosh
hardyjosh force-pushed the docs/20260729-timelock-governance branch from 2c016ca to 025f7e6 Compare August 11, 2026 10:12
…tion

Match the runbook to the lib: assertTimelockState asserts against the
pinned TIMELOCK_RUNTIME_CODEHASH literal of the frozen
TIMELOCK_CREATION_CODE generation, so compiler-settings or dependency
changes cannot drift the expectation away from the live deployment.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@thedavidmeister
thedavidmeister changed the base branch from feat/20260729-timelock-migration-invariants to main August 11, 2026 16:20
…eploy

Two sections still described the retired rollout mechanics: pins framed
as address(0)-until-hydrated-by-a-post-deploy-PR (pins are now written
with the chain arm, derived from the frozen bytecode before any deploy,
zero refused by every consumer, the equality test unconditional and
renamed), and the deploy framed as a per-network dispatch (it is one
dispatch iterating networks() with skip-with-assert idempotency).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@thedavidmeister

Copy link
Copy Markdown
Contributor

Reviewed 229c61c: ship — the governance timelock runbook and CLAUDE.md governance section, fact-checked claim by claim against code, tests, and live chain state: role model, deploy-key-holds-nothing, no-open-roles, canceller mechanics, owner-freeze surface (verified onlyOwner in OwnerFreezable), operating mechanics, deadline paragraph matching the merged forcing function, and the frozen-pin invariants section. Docs-only diff; all checks green; no unresolved review threads.
Rulings-conformance: checked against every ruling stated for this work and the repo CLAUDE.md. (1) "timelock code needs to be a constant" — obeyed: the invariants section documents the pinned TIMELOCK_RUNTIME_CODEHASH / frozen TIMELOCK_CREATION_CODE doctrine (d640d17). (2) "zero is a checked case" — obeyed: the Addresses section and rollout steps were corrected (229c61c) to the pin-with-arm doctrine — zero refused by every consumer, equality unconditional via testPinsMatchDerivedAddresses — replacing the retired address(0)-until-hydrated flow, and the deploy step now describes the real single multi-chain dispatch. (3) comments describe CURRENT behavior only — obeyed: rollout-progress framing removed where it had gone stale; the beacons-out-of-scope section is transiently accurate at this layer and is superseded by the next stack layer (#290) editing that exact section. (4) docs-only: no code, pointer, or CHANGELOG obligations.

@thedavidmeister
thedavidmeister merged commit 130d924 into main Aug 11, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants