How Caper approaches this
A caper has no security council, no guardian, and no emergency multisig with a fast path over its balances. Verified against the on-ledger contract, a caper's state component holds no business logic and exposes no pause, freeze, or emergency-override method; its state-changing entry points are gated to a single admin authority held by the immortal registry and exercised only through the caper's own proposal and execution rules. There is no standing set of human signers who can step outside those rules to move member funds or fast-track a change.
That is a different trade-off, not a claim of superiority: a caper leans on a fixed, minimal core and rule-bound execution rather than a trusted council standing by for incidents. It is closer to the Stage-2 end of the ladder by construction – the price is that there is no nine-of-twelve to phone if something goes wrong, so correctness has to live in the rules and the immutable core, not in an emergency backstop. For teams weighing the two, the honest question is the one this whole page turns on: whether you would rather trust a small group to act fast, or design so that no small group needs to.
Verified against the contract source rather than any description of it: a caper's state component restricts every state-mutating method to admin, a badge the immortal registry holds, with three exceptions. buy_apply and sell_apply, which settle a trade, are public but refuse every caller except the logic component the registry currently names as live; donate_collateral, which funds a curve whose reserve is empty, is open to anyone. There is no pause, freeze, or emergency-override method to hold in reserve. The one privileged lever at platform level is the upgrade path for the swappable logic component – propose, wait out a delay, then activate. The registry's own source comment calls that delay the thing that makes a hostile swap visible on-ledger for the whole window, and it is worth reading its length rather than its description.
The delay is a stored field, upgrade_delay_seconds, and until 11 September 2026 an admin-only set_upgrade_delay could rewrite it at any moment. That made the timelock a constraint on $CAPER governance and never on the operator, since the same key that armed a delay could set it back to zero, re-propose and activate inside one transaction – which is exactly what the protocol’s own pen-test demonstrated. The setter is gone.
The delay is now an argument of CaperRegistry::new, fixed at construction and immortal like the registry itself, and the field’s source comment states the reason in a line: a delay the operator key could shorten would only ever constrain governance. The deploy script arms 48 hours when the target is mainnet and zero on every other network. So the swap routes through a $CAPER proposal, while the length of the window guarding it is settled once at deployment – neither governed nor, any longer, adjustable.
On the live Stokenet deployment that field reads zero, which is what the deploy script passes off mainnet. The registry component published by the 11 October 2026 redeploy carries upgrade_delay_seconds: 0, read from its on-ledger state the same day, as did the registry of every deployment before it, and the one governed upgrade the platform has performed, on the deployment then live, shows what that means in practice: the 16 August 2026 swap called execute_proposal_upgrade and execute_proposal_upgrade_activate back to back in a single manifest, the MainProposed event it emitted carries a not_before of 1786872474 – the same second the transaction committed – and MainActivated fires immediately after it in the same transaction.
The timelock's own audit trail therefore records a window zero seconds wide. Nothing here is broken, and a mainnet deployment would arm 48 hours rather than this testnet’s zero, but a team weighing this design against a council-plus-timelock should weigh the configured value rather than the mechanism – and should note that the value is no longer one admin call away from anything. With the setter removed, changing it means constructing a new registry, which is to say a new platform.
One thing a caper does not have, corrected here against the same source: there is no per-caper opt-out from a logic swap. A caper's state component carries no logic pointer of its own – current_main lives once on the registry and every caper resolves through it – so an individual caper cannot be held on incumbent logic while an upgrade lands. The forward-compatibility store on a caper's state component (aux, empty at genesis, its writers gated to the admin badge) is a generic blob store, and the only key logic writes to it today holds that caper's ballot-vault address; it is not a veto. What a caper has is not a negative power over the platform tier, but the absence of anyone holding a positive one over its balances.