● OPERATOR OF RECORD · MICHAEL MOFFETT · accountable on every commit michael@caliperforge.com
BLOG

Notes from the workbench.

Shipped tooling, build arcs, what is verifiable today. Newest first.

A census of ten hooks drawn by pre-declared rule from the live v4 hook population, run cold, twice. On the first cold pass, ten of ten failed at the same step, and the step was ours. After two repairs the number held at 0 / 10, and every failure is now a measured property of the live population: its compiler pragmas, its dependency tails, its import-prefix conventions, its constructor shapes. The sampling rule is published in place of the table, the walls are named W1 through W7, and the honest recommendation is a different container, not a longer configuration file.

A document built specifically to be verified by hostile strangers passed nine consecutive quality gates while committing, cryptographically, to two model identifiers that do not exist. Two of three were fabricated; nine gates read them and none probed them. The finding, the tally, and the standing rule that came out of it: every externally-resolvable identifier in a publishable artifact is probed against its live source before publish, documentation is not evidence, and an unprobeable string stays pending while the artifact does not ship. The seat that now owns that question, and the gate it runs.

An external reviewer named a real gap in the standing planted-twin CI claim: a single-seed green does not exclude a lucky-seed miss on classes with long triggers. Same-day fix: a merge gate that requires the planted twin to fail on all 16 canonical fuzzer seeds. Two cases certified today, Euler Earn M-01 (Foundry) and Blend V2 H-01 (Rust/Soroban), both green at head. The reachability job is now the standing receipt behind the docs claim.

CaliperForge is a small AI-augmented contribution agency: one operator, thirty-nine specialized roles, each in its own single-context lane, each gated by a distinct reviewer role. Two weeks ago, one of those rails caught a gap in our own commit rail: the reconciler ran a secret scan, logged tainted paths, and committed anyway. Fix T-wave-c-close-f1-secretscan-2026-07-12 added the partitioning branch that refuses to land tainted paths, and a regression test pins the floor. Why the shape matters: same shape as the planted-twin CI receipts we ship for protocol audit tooling. The org caught its own gap because it had a rail that could refuse.

Code4rena wardens named H-01 in their published Blend V2 review: a flash-loan round-trip that leaves a reserve’s d_supply out of step with the sum of every user’s liability. The Blend team fixed it in the commit the audit’s mitigation review confirms. This post walks the invariant that names the class and the clean/planted twin in caliperforge/soroban-invariant-atlas that fires on it: a stateful proptest-style campaign against a minimal original soroban-sdk pool that isolates the identity, a deterministic regression, and both required legs green on CI.

Pashov Audit Group surfaced M-01 in their public Euler Earn security review (2025-07-25): a share-accounting drift in PublicAllocator when a strategy’s share delta reaches the vault outside EulerEarn.deposit. Euler Labs shipped the fix at commit f07f6b1c5e1e (2025-08-11), merged in PR #22. This post walks the invariants that name the class and the clean/planted twin in caliperforge/euler-earn-invariants that fires on it: 256 × 50 fuzz against the real Euler Earn contracts through IntegrationTest, deterministic regression mirroring the auditor’s 4-call sequence, and a short shrunk counterexample on the planted twin.

OpenZeppelin’s v1.1.0 RC-2 audit surfaced M-01 on their own BaseDynamicAfterFee: direction-blind fee arithmetic that computed against the wrong leg on exactOutput swaps. Commit 2678eb9 shipped the fix in tag v1.1.0; Zealynx’s Pattern 4 names the taxonomy. This post walks the direction-integrity invariant that names the class and the clean/planted twin in caliperforge/uniswap-v4-invariants that fires on it: 256 × 50 fuzz against the real PoolManager, deterministic regression, and a 1-call shrunk counterexample.

Written on activity day 41 and published later. A builder agent produced a clean twin and a planted twin that behaved exactly as they should: the property stayed silent on the clean twin and fired on the planted one. Then it wrote one sentence crediting the wrong line to an audit firm’s published fix. A reviewer agent with no shared context went to the primary source, found the commit, and did not match. Everything mechanical was right and the credit line was wrong, which is the shape of mistake that reads correct on the page. What the catch proves, and the three things it does not.

The Uniswap Foundation ships a reference LiquidityPenaltyHook through OpenZeppelin. Zealynx surfaced the donation-griefing class (their Pattern 3); OpenZeppelin’s v1.1.0 audit surfaced it independently; v1.2.0 already ships the add-time fee-state guard. This post walks the conservation invariant that names the class and the clean/planted twin in caliperforge/uniswap-v4-invariants that fires on it: 256 × 50 fuzz against the real PoolManager, deterministic regression, and a 3-call shrunk counterexample.

Around June 10, 2026, roughly $4.67M was drained from a wrapped-token contract on Secret Network. A modified CW20-ICS20 implementation validated the incoming denomination but not the source channel, because the channel check was commented out. This is not a postmortem. It names the invariant class the mechanism belongs to, states the two-counter property a stateful test would assert, and says plainly where our CI-verified coverage stops.

One operator, 12 to 15 hours a day, running the venture through a roster of AI agents with role cards, outboxes and review gates. The cockpit that makes the org observable, the gate catch-and-miss numbers as they stood on day 32, the places the agents miss and the operator cleans up, the bad days, and the zero on the revenue line.

An invariant test that fires on a planted bug tells you the property runs. It does not tell you the property catches anything. Only the second leg, the same property holding on the clean reference, makes the claim checkable. Written on day 31 and published from the backlog later. What it takes to wire both legs as a CI gate, what the gate refuses to let through, and the three things a green pair still does not prove.

On June 7, 2026, the Syscoin bridge lost a reported $8.56M to a malformed SPV proof accepted as valid: approximately 5 billion SYS minted on the destination side with no corresponding burn on the source side. The conservation invariant a bridge must enforce, how a stateful test that tracks both counters finds the violating call, and how this maps to CI-verified conservation reference pairs on Anchor/Solana (cf-invariants-anchor, cf-invariants-jito) and Cairo/Starknet (cf-invariants).

On June 14, 2026, approximately $2.19M was extracted from Aztec’s deprecated RollupProcessor contract. Proof scope and settlement scope diverged: the ZK proof validated all 32 batch slots; the L1 settlement loop processed only numRealTxs of them. The cross-layer conservation class, what CI-verified reference pairs cover today, and where the Aztec surface sits outside that set.

TrustedVolumes lost a reported $5.87M because the settlement contract keyed its signature lookup on the caller (msg.sender) instead of the order’s maker. The invariant property that catches the class, mapped to CI-verified access_control reference pairs on Anchor/Solana and Cairo. No Solidity-rail pair yet, said plainly.

A clean reference where the property holds, a planted twin where it fires, both on the same CI run: why a checkable pair beats a claim. hyperevm-safety v0.1 to M2 in the same week as the worked example, and the Verus bridge-conservation reference as the one-line case. Not an audit; not a runtime monitor.

Six real-world hacks across Cairo, Move, Solana, and EVM, each with a runnable invariant that would have caught the bug class on the pre-exploit code under CI. First cross-VM defender-side benchmark of this shape: pre-deploy CI gate, not a runtime guard, non-EVM-led.