feat(dashboard): renew ENS security council term, add Compound proposal guardian - #2097
feat(dashboard): renew ENS security council term, add Compound proposal guardian#2097alextnetto wants to merge 2 commits into
Conversation
…al guardian ENS seated a new Security Council in July 2026 after the previous one's veto power expired on 2026-07-24. Point the card at the new SecurityCouncil contract (0x2acB...e051, PROPOSER_ROLE granted 2026-07-22, expiration() = 1847389751 / 2028-07-16) and its 5-of-8 Safe (0x7101...9931). Add Compound's Proposal Guardian to the same card: CompoundGovernor.proposalGuardian() returns the Community Multisig (0xbbf3...012c, 5-of-9) with expiry 1898467200 / 2030-02-28, last extended on 2026-02-19. The card heading and multisig tooltip were hardcoded to ENS's wording and 4-of-8 numbers, so both now come from the DAO config.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
1 Skipped Deployment
|
|
🚅 Deployed to the anticapture-pr-2097 environment in anticapture-infra
|
🎨 UI Review
DAO Overview — Security Council / Proposal Guardian cardNice-to-have — naming inconsistency introduced by this PR Question for author — fallback tooltip copy assumes Timelock-based cancellation MobileNo layout changes in this diff (only copy/data become dynamic instead of hardcoded), and no live preview was reachable to double-check — nothing new to verify here. Design-system adherenceNo issues — the diff reuses existing DS primitives ( Scope noteThis is a UI-only review (copy accuracy, visual fidelity, DS adherence) — architecture, on-chain data verification, and other code-quality concerns are left to the code reviewer. Generated by Claude Code |
|
🔍 Vercel preview: https://anticapture-29ojdwwbx-ful.vercel.app |
…sistently Review follow-up. The Overview card now labels it "Proposal Guardian", so the Risk Analysis copy on the same page shouldn't call the same multisig a "Security Council". The L2Beat line keeps that wording since it names an external standard. Also document that the fallback multisig tooltip assumes cancellation happens on the Timelock, so the next DAO whose guardian cancels elsewhere doesn't silently inherit wrong copy.
|
Thanks — both points were valid, addressed in 899fbe6. 1. Naming inconsistency. Fixed, and extended slightly past the one line you flagged. Renamed to "Proposal Guardian" in
One deliberate exception: 2. Timelock assumption in the fallback tooltip. Good catch — documented on the /**
* Tooltip next to the multisig link. Falls back to a generated
* description that assumes cancellation happens on the Timelock, so set
* this explicitly whenever the cancellation path is somewhere else
* (Compound's guardian, for instance, cancels on the Governor).
*/
description?: string;I considered making the mechanism a required field instead of a documented default, but that would force every existing and future DAO to restate the common case. A comment felt like the right weight for two entries. On the preview: I tried the Vercel URL to do the visual check I couldn't do locally, but |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 899fbe609b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| multisig: { | ||
| threshold: 4, | ||
| threshold: 5, | ||
| signers: 8, |
There was a problem hiding this comment.
Refresh the ENS Security Council risk copy
When users open the Security Council detail in ENS Risk Analysis, the unchanged governanceImplementation.fields[SECURITY_COUNCIL].currentSetting in this same file still says the council is a 4/8 multisig expiring in July 2026. This update now configures a 5/8 council expiring in July 2028, so the overview card and risk-analysis drawer present contradictory council details; update the current-setting copy as part of the renewal.
Useful? React with 👍 / 👎.
What
The ENS Security Council card on
/enswas showing an expired term (ended 2026-07-24). ENS has since seated a new council, so this points the card at it — and adds Compound's Proposal Guardian to the same card, which had no entry at all.Data (verified on-chain, mainnet)
ENS
SecurityCouncilcontract0xb8fa0ce3…3ee0(config had0x552DF471…2a95)0x2acBf518b3759f6e1fA163294eda55bF1d0ae0510xaA5cD05f…2Cc7(4/8)0x7101B78638e34444F0a5AdE9e1149fbEeC029931(5/8)expiration()1784919179→ 2026-07-24 18:52:59 UTC1847389751→ 2028-07-16 19:49:11 UTCRoleGranted(PROPOSER_ROLE, 0x2acB…e051)on the ENS timelock0xFe89cc7a…44b7at block 25586264 (ts1784699099), tx0xb2f732c433471ce5274c77d1fe04bd060389319a3b32dfa26ee16164ef46812f— used as the term start date.0x2acB…e051:owner() = 0x7101B786…9931,timelock() = 0xFe89cc7a…44b7,expiration() = 1847389751. Safe reportsgetThreshold() = 5, 8 owners.Note: the previous council contract still holds
PROPOSER_ROLE(noRoleRevokedemitted) — nobody has calledrenounceTimelockRoleByExpiration()yet — but itsexpiration()has passed, so it can no longer cancel.Compound
CompoundGovernor.proposalGuardian()on0x309a862b…c8C0returns:0xbbf3f1421D886E9b2c5D716B5192aC998af2012c(Compound Community Multisig,getThreshold() = 5, 9 owners)1898467200→ 2030-02-28 00:00:00 UTCExtension history from
ProposalGuardianSetevents:1771524383, 2026-02-19)Term start uses the block time of the most recent extension (2026-02-19).
Changes
shared/dao-config/ens.ts— new council address, 5/8 Safe, new start/expiration.shared/dao-config/comp.ts— newsecurityCouncilentry for the Proposal Guardian.shared/dao-config/types.ts— optionallabel(card heading) andmultisig.description(tooltip).SecurityCouncilCard.tsx/ProgressBar.tsx— heading and multisig tooltip were hardcoded to ENS's wording and 4-of-8 numbers; both now read from config, so Compound renders "PROPOSAL GUARDIAN" with its own copy.Also fixed in passing
comp.tsSECURITY_COUNCIL.impactsaid "4/8 multisig approval". The Community Multisig is 5-of-9 on-chain, and leaving it would have contradicted the new card. Updated to 5/9. The adjacentrequirementsline ("raise the threshold to 75%") is unchanged — 5/9 is 55%, so the recommendation still stands.Verification
tsc --noEmit) and ESLint/Prettier clean on all touched files. The repo-widepnpm dashboard typecheckfails on pre-existing errors from@anticapture/clientcodegen (needs network to reach the Gateful spec) — unrelated to this diff and unchanged by it..envfor the dashboard. The card is pure config with no data fetching.