C-16 rehearsal — an independent hostile walk of the completion matrix

Status: rehearsal, not an assurance-entry certificate. Owner: lane C16-REHEARSAL. Measured 2026-09-03 in the window 78176e644 → 9e3c4eeff on /Users/ember/dev/dclutch (the live tree; not the frozen subtree at /Users/ember/dev/dragons-clutch/dclutch). The tree took roughly forty commits during the walk, so every measurement below names the file, line or JSON key it came from rather than a commit-wide claim.

C-16 admits reviewers only when "no known material gap, unexplained authority, stale claim, unowned economic flow, never-executed intended route, or user-inaccessible capability remains" (docs/MASTER_COMPLETION_CONTRACT.md:101). That condition is not met. This file is what a reviewer would find on the first pass, organised by that row's own six categories, and it supersedes docs/evidence/C16_ENTRY_LIST_2026_09_01.md where the two disagree — that file is two days old and the tree has moved a great deal.

0. The three findings that reframe everything below

(a) The evidence classes are not what the register's vocabulary suggests. docs/reference/routes.md:30 reports 16 of 162 routes NEVER-EXECUTED, down from 57 of 161 on 2026-09-01 (the register's own figure at 3466740e9; the companion doc says 55 — §2.1). That is a real improvement and it is also the wrong number to read as coverage. Sorting the 101 witnessed rows by the substrate their campaign actually used:

substraterouteswhat it is
devnet0no gauntlet binding names a devnet transaction; 21 of 23 campaigns are -programtest
local validator (journey, relayed-vertical)19solana-test-validator; the only rows meeting contract item 5
solana-program-test bank only57an in-process SVM, not a validator (54 exclusively; 3 also carry a tier-1 row)
tier1 and nothing else25a campaign whose producer refuses to run at HEAD (below)
blocked, reason and owner written45every entry has both; 6 reasons are falsified and only 8 of 43 rules are structural (§2.3–2.4)
NEVER-EXECUTED16eleven already have a passing campaign and lack only a binding (§2)

The honest figure for C-16's never-executed intended route category is therefore 50 of 162 — the 16 with no stated reason, plus the 28 blocked entries that are status reports rather than blocks, plus the 6 that say in their own text that they are driven and unwired. Thirty-four of the fifty carry an owner and a sentence, which is a materially better position than 2026-09-01; none of them is a block.

Contract item 5 requires "a local validator or devnet transaction drives the route when the route is chain-facing" (docs/MASTER_COMPLETION_CONTRACT.md:52-53). 19 of 162 routes meet it.

(b) 25 routes' sole witness is a campaign that cannot be re-run. tools/gauntlet/run.sh:94 dies on --mode full with "the tier-1 campaign is parked at the retired demo-market boundary", and tools/gauntlet/TIERS.md:27 says the same. Every route whose status column reads only executed (tier1) — 25 of them, including custody/initialize#Initialize, registry/process_activate_role#ActivateRole, core/process_open#Open and trading/projected_custody_bootstrap_v1::process_projected_custody_abort_v1 — is asserted from evidence the tree can no longer reproduce. That fails contract item 9 ("a cold-machine command and machine-readable evidence pack reproduce it") on its own, independently of whether the transactions were real when they ran.

(c) The artifact the register itself names as "the evidence" is not in the tree. docs/reference/routes.md:14-20 tells a reader that bindings are only a claim, that corroboration lives in dclutch-route-census observe → CENSUS.md, and that "where the two disagree, CENSUS.md is the evidence". git ls-files finds no CENSUS.md: it is written to a run directory (tools/gauntlet/run.sh:139, REPORT="$OUT/CENSUS.md") and never committed. A reviewer cannot check a single witnessed row against corroboration without re-running a gauntlet — and for the 25 tier-1 rows, cannot at all.

---

1. The matrix, row by row

class is the strongest evidence that exists today: devnet act (a finalized transaction on a public cluster), validator (solana-test-validator via journey/relayed-vertical), real-ELF (solana-program-test against a built SBF ELF), kernel/fixture, or nothing. Categories are C-16's six: G material gap, A unexplained authority, S stale claim, E unowned economic flow, R never-executed intended route, U user-inaccessible capability.

C-00 — Scope closure

class: n/a (bookkeeping row). Strongest artifact: docs/OMISSION_INDEX.md.

C-01 — Infrastructure, Registry, release lineage, migration, Rent

class: devnet act. Strongest artifact: docs/evidence/COHORT14_SEALED_FOUNDED_FILLED_2026_09_03.md §3–§4 — seven programs redeployed with fresh identities, each image dumped back and compared before the next deploy started, then a 36-transaction ladder publishing ten record bodies with initialize, succession and activation all re-observed from the cluster rather than from the driver's exit code.

C-02 — Compiler-shaped product entrance

class: devnet act. Strongest artifact: four cohort-14 markets founded from compiled descriptors — Direct FgzbVSWV…, DUVcCGfj… (market B), BL8zsFok… (market C), General 8ExdC1Rwb… (docs/ledger/GOAL_2026-08-31_to_2026-09-04.md:3699-3707, 3785-3795, 3828-3832).

C-03 — Curved and structured payoff bases

class: real-ELF, degrees 0 through 3. Strongest artifact: a degree-2 curved Product graph with its own DCLTPGT1 certificate founded against the real Core ELF — programs/dclutch-core-sbf/tests/found_program_test.rs:596-660 builds it and :1652 founds with it.

C-04 — Direct

class: devnet act, and the most complete lifecycle the project has. Strongest artifact: cohort-14 market C BL8zsFokbz7aEdo3wjtcNffd5P1D8a9wVxwKq3mcMsMN — founded → activated → admitted → filled by a stranger (4Pr3tdp9…, 1,281,582 CU) → captured inside its window (3uBt7JnQ…, 140,019 CU) → settled (4uxF1vqy…, 154,152 CU, certificate 91XTHXWv…, kind byte = 1, honest) → Terminal (zrdFbSPF…, winner 2) → redeemed (fqcRNCVt…, 350,878 CU) into a 170-byte Token-2022 ImmutableOwner ATA holding 500,000,000 atoms, Hoard drained to 0. Every one of those signatures was re-read from devnet for this review and is finalized with err = null; 21 of 21 sampled signatures across cohorts 13 and 14 confirmed, with every stated slot and CU matching to the unit.

Two sibling markets are the honest qualifiers: market A FgzbVSWV… is filled (1,284,573 CU) and fee-settled and stops there — still phase 1 with its activation deadline slot 492,447,083 passed; market B DUVcCGfj… is resolved, Terminal and redeemed but was never filled. The complete arc exists on exactly one market.

C-05 — General

class: real-ELF only. Nothing General has ever executed on a chain. Strongest artifact: the General-hot suite green after 0948b0224, with the two-slot proof green at slots 1 and 48 producing byte-identical 55-entry account lists at 603,939 CU (docs/ledger/GOAL_2026-08-31_to_2026-09-04.md:3901-3910).

C-06 — Dealer

class: real-ELF only. No Dealer market has ever existed on a chain. Strongest artifact: the 31-action campaign at 31/0 on three consecutive full runs against real ELFs (docs/ledger/GOAL_2026-08-31_to_2026-09-04.md:3752-3762, commits 3c42f0ece, 40427e0f1, f6199f47e), covering LP Open → hostile Add → honest Add → LP Open

#2 → Add #2 → the selector-9 trade → its delivery → the partial equity Remove → both LP final Removes.

C-07 — Series

class: real-ELF, one route. Strongest artifact: tier4-series-occurrence-programtest, which witnesses a single route (docs/reference/routes.md), plus the Template-driven activation on a real ELF recorded in docs/MASTER_COMPLETION_CONTRACT.md:191 (929095f5).

C-08 — Structured / Fractional representation

class: real-ELF. Strongest artifact: the fractional-atomic and claim-check campaigns, whose 47-transaction run was folded through census observe and admitted 94 observations (docs/evidence/C16_ENTRY_LIST_2026_09_01.md §1.2, 939d0806), plus structured-v2-programtest.

C-09 — Objective resolution

class: devnet act. Strongest artifact: the honest resolutions of markets B and C — a capture committed inside the window, a settle strictly after end + max_age, a kind-1 certificate and Terminal, all re-read off chain for this review (91XTHXWv… for C, 6prkttkS… for B; commits 12a9b13a5, 3ba991025, evidence c09452e08). This is the strongest artifact in the matrix.

C-10 — Claims, Custody and terminal lifecycle

class: devnet act. Strongest artifact: three terminal payouts read back off devnet — market C fqcRNCVt… (350,878 CU, ATA 49ivrwyw… 170 B holding 500,000,000, Hoard Cjzv4FZB… at 0), market B 5aPHBEoa… (359,878 CU), and cohort-13 etUrsvhw… (353,233 CU) — plus the ledger census's seven applicable laws holding on market B (docs/ledger/GOAL_2026-08-31_to_2026-09-04.md:3838-3842).

C-11 — Liveness and sustainable economics

class: real-ELF for the paid-work half; nothing for the policy half. Strongest artifact: seven live permissionless-work routes, each funding from present capital — enumerated in §5.4.

C-12 — Stranger-operable product

class: devnet act (browser), real-ELF/none (CLI). Strongest artifact: the market page rendering market B's honest resolution and ATA payout derived from chain records, with the live redemption test 4/4 green (docs/ledger/GOAL_2026-08-31_to_2026-09-04.md:3706-3712, 3846-3856).

C-13 — Operator and cold-machine operation

class: devnet act, with a hole under it. Strongest artifact: tools/cohort14/steps.tsv + check-steps.py — a nineteen-row runbook with a verifier per row, replayed end to end by cohort-14, and tools/cohort15/ as a four-row delta.

C-14 — Reproducible release readiness

class: devnet act. The strongest row in the matrix. Strongest artifact: COHORT14_SEALED_FOUNDED_FILLED_2026_09_03.md §1–§3 — CANDIDATE_EXIT=0, sbf_build_diagnostics_total=0, seven ELFs reproduced byte-identically from a second detached worktree, every live image dumped back and compared, a projected 42.2453 SOL cost matching the measurement to five decimal places, and the Market account's own byte 208 carrying the release-set digest.

C-15 — Privacy/FHE/MPC horizon disposition

class: closed by ruling, and three authority documents do not know it.

C-16 — Assurance-entry audit

class: this file. Not met. Six categories, all non-empty; counts in §8.

---

2. The never-executed route list as of today — 16, each dispositioned

Read against docs/reference/routes.md (last written d72c97a7d, unchanged through the whole review window) and tools/gauntlet/blocked.json (last written 4879a54f7). campaign away = a driver could reach it with work and no protocol change; blocked with owner = something structural stops it and the reason is named; dead — delete = nothing in the accepted project wants it.

Zero are dead, and eleven of the sixteen already have a campaign that exists and passes. For those eleven what is missing is census evidence-emission and a bindings.json row — bookkeeping, not protocol work. That reverses the 2026-09-01 framing, which called the residue "protocol work rather than instrument work" (docs/evidence/UNWITNESSED_ROUTES_BY_ROW_2026_09_01.md:8-12).

#routerowdispositionthe driver that already exists, or what is missing
1claims/fractional_retirement_v3::processC-08campaign awayprograms/dclutch-claims-sbf/program-test/protocol-position/tests/lifecycle.rs; dispatch at programs/dclutch-claims-sbf/src/lib.rs:458. Needs emission + binding.
2claims/process_begin#BeginC-08campaign awaysame file :652 builds FractionalRetirementActionV3::Begin, :1902 plans it, :1909 submits, :1927 reads the receipt
3claims/process_coordinate#RetireCoordinateC-08campaign awaysame file :694, :1964, :1974
4claims/process_finish#FinishC-08campaign awaysame file :702, :2027, :2048
5claims/series_founding_transport_v1::processC-07blocked with owner — SeriesReached only as route_template(3) of a Series consume effect (programs/dclutch-trading-sbf/src/claims_composition_v3.rs:646, src/series/consume_artifacts_v4.rs:647); no bootstrap builds DCLSFTR1. Needs the Series family tier. Its sibling core/series_open::process is in blocked.json with the same owner; this one is not — an inconsistency, not a judgement.
6core/series_permit_expiry_precommit_v1::processC-07blocked with owner — SeriesIts prestate cannot exist: the route authenticates a Prepared TicketStateV3 (programs/dclutch-core-sbf/src/series_permit_expiry_precommit_v1.rs:1-9,16-24) and the ticket-state PDA is allocated by prepare_funding_artifacts_v5 as 64 zero bytes TicketStateV3::decode always refuses, no route writing the magic (docs/ledger/GOAL_2026-08-31_to_2026-09-04.md:3346-3349). tools/local-validator/bootstrap/successor/src/series_permit_expiry_campaign.rs builds no DCLSUPE1. Sibling core/series_permit_expiry::process is in blocked.json; this one is not.
7registry/lineage_v1::processC-01campaign awayA real-ELF campaign already exists: programs/dclutch-registry-sbf/tests/lineage_program_test.rs over the shipped operator crates/dclutch-operator/src/registry/declare_successor_v1.rs, with runner run-lineage-program-test.sh; also bootstrap/successor/src/release_lineage.rs. Needs emission + binding. Separately: the 2026-09-01 devnet-disposability ruling makes every devnet cohort genesis, so devnet will never exercise lineage — a local two-cohort campaign is the only chain-facing route to it.
8registry/process_abort#4C-01campaign away — cheapest of the sixteenprograms/dclutch-registry-sbf/src/record_v1.rs:73-76, the 4th arm of a dispatch whose other three are all tier-1 bound. Needs a host builder for AbortRecordV1 (only crates/dclutch-record-contract encodes it — no operator, no CLI) plus one transaction against a scratch staged record.
9trading/direct_begin_retiring_v1::process_direct_begin_retiring_v1C-04campaign awayprograms/dclutch-trading-sbf/program-test/tests/direct_begin_retiring_on_chain.rs with its own runner program-test/run-begin-retiring.sh; shipped builder crates/dclutch-operator/src/direct_begin_retiring_v1.rs; bootstrap/successor/src/terminal_sequence.rs. Needs emission + binding.
10trading/direct_replay_setup_v1::process_direct_replay_setup_v1C-04campaign away, with a caveatbootstrap/successor/src/direct_trade.rs:1457 builds it and the journal advances through advance_direct_setup_submitted_v1 (:3071). DCLTDRS1 is a known magic collision (tools/gauntlet/magic-collisions.json; crates/dclutch-series-v3-kernel/src/replay.rs uses the same eight bytes), so the census may not be able to attribute the observation until it is resolved.
11trading/direct_token_setup_v1::process_direct_token_setup_v1C-04campaign awaybootstrap/successor/src/direct_trade.rs:1538 → build_direct_trade_token_setup_v1; SDK producers packages/dclutch-sdk/lib/{directWalletPreparationV1,directParticipant}.ts. The gauntlet's direct campaign is direct-aot-programtest and binds only direct-aot/process_instruction.
12trading/generic_founding_stages_v1::process_generic_found_and_permit_v1 (DCLTGFP1)C-02blocked with owner — and the owner is unassignedProducer crates/dclutch-market-founding-v1-operator. tier 1's bootstrap depends on that crate and founds atomically through DCLTGMF3 only (market.rs:198 REMAINING_OPEN_SEAM, :3477). The split path is cited as the packet-limit escape hatch in docs/design/PACKET_LIMIT_2026_09_01.md and FEE_SECOND_TRANSACTION_V1.md — intended, not superseded — and its own module header records why it exists: the composed route's four child legs cost 1,062,298 CU plus ~182k outer, "leaving Core's final Open a 155,281-CU remainder it exhausted" (programs/dclutch-trading-sbf/src/generic_founding_stages_v1.rs:1-12). It is the remedy for a measured wall and nobody owns driving it.
13…::process_generic_market_open_v1 (DCLTGMO1)C-02blocked with owner — unassignedSame pair. Stage 2 is permissionless before expiry_slot (…:38-46), so it is also a stranger-facing route nobody has driven.
14trading/projected_custody_bootstrap_v1::process_controller_funding_prepare_v1C-02campaign away — and it is DRIVEN ON DEVNET TODAYtools/local-validator/bootstrap/successor/src/market.rs:7242 builds it, :7302 publishes its routing table, :7371 records "executed DCLTCFQ1", and it is named in the devnet evidence for cohorts 12, 13 and 14. tools/gauntlet/tier1/bindings.json already names its two siblings and skips this one. It needs one binding row.
15…::process_controller_funding_cleanup_step1_v1C-02campaign away — driven todaymarket.rs:7461 builds DCLTCF1A, :7482 submits it as an expected refusal; full-execution path at :8547; crates/dclutch-svm-harness/tests/controller_funding_split_abort.rs:713 drives it under ProgramTest. The refusal alone would witness it.
16…::process_controller_funding_cleanup_step2_v1C-02campaign away — driven todaymarket.rs:8585,8603,8608 (DCLTCF2A); source_abort_exterior.rs:69 names the DCLTPCA1 → DCLTCF1A → DCLTCF2A suffix; svm-harness :1371-1449.

Row 14 is the whole of §0(a) in one line: a route that has executed on a public chain three cohorts running reads as never-executed, because the register has no channel through which a devnet transaction can reach it.

2.1 The drop from 57 to 16 is real drive, not laundering

I expected laundering and measured the opposite. Full status transition matrix between the 2026-09-01 register (3466740e9) and today's (d72c97a7d):

from → tocount
never → witnessed36
never → blocked3
never → absent from register2
never → never16
blocked → witnessed4
witnessed → blocked (regression)2
absent → blocked (newly enumerated, born blocked)9

41 routes left NEVER-EXECUTED; 36 of them — 88% — moved by being driven, in fourteen binding commits over two days. blocked.json itself went 49 → 43 entries (5 added, 11 deleted), so the file's delete-on-execution rule is being exercised. One of the fourteen commits (3ddee4c2c, "the journey submitted a welded-shut instruction and bound it as executed") is a self-caught false binding being retracted, which is the behaviour the register exists to produce. The three that moved into blocked are each defensible: two are structural and argued (core/infrastructure_v2::process_initialize_v2; core/resolution::authenticate_recovery_policy#…, owner ember), and the third (trading/outer::process_capability_lifecycle#else) is a repointing of a pre-existing block whose census name changed.

The baseline itself was misreported: UNWITNESSED_ROUTES_BY_ROW_2026_09_01.md:12 says 55 and lists 55 rows, while routes.md at that same commit said 57. The doc was written against a register that was not regenerated.

2.2 What is being laundered, on a different axis

Nine routes were born directly into blocked and never appeared in the never-executed count at all — five claims/process_core_effect* child rows absorbed by a trailing-glob rule at 4879a54f7, two dealer-accelerator/set_return_data#*, one series-shadow/entrypoint::…#accepted, and resolution/core_effect::process_close#Retired. The census learned to walk let-bound guards on 2026-09-02, and every row it discovered landed pre-excused. That is the mechanism by which blocked route-rows grew 35 → 45 while the JSON shrank 49 → 43. It does not touch the 36-versus-3 number, and it means the denominator is doing work the numerator does not show.

2.3 blocked.json audited against its own rule

Rule: "keep an entry only while it is true, and delete it the moment its route executes."

checkresult
(a) written reason43 / 43
(b) named owner43 / 43
(c) cites a symbol or file that still exists43 / 43 — all 14 cited paths resolve
(d) reason still TRUE at HEAD37 / 43 — six are falsified

The six whose routes now execute: resolution/process_verify#VerifyFundReady, resolution/provider_instruction_v3::process_provider_resolution_v3, resolution/process_submit#magic and core/execute_provider_v3::process#ExecuteProvider (all executed (journey)), core/begin_retiring::process#BeginRetiring (journey + a claims programtest), and trading/hot_v3::process_hot_execution_v3 (five campaigns, against a reason that opens "No gauntlet campaign drives this route yet").

They are invisible in the register, and that is a defect in the generator rather than in the file: tools/genref/generate.mjs:231 returns witnessed before it consults blockedRuleFor at :233, so a route that is both bound and blocked renders as witnessed and its stale entry never surfaces. They are findable only by joining the two files directly.

Also worth naming: trading/direct_close_maker_v1's reason says it "has the same gauntlet gap as begin-retiring above it". The entry above it is the Core begin_retiring — one of the six now falsified — while the Direct begin-retiring the sentence actually describes has no entry at all and sits at row 9 of the sixteen.

2.4 Only eight of forty-three blocks are structural

classn
out-of-release-set scope (no tier deploys the program)3
genuinely structural at HEAD, argued5
"not a block at all" — a note saying nothing is owed1
self-admitted wiring gap ("Driven today, invisible to the census for a wiring reason")6
"no campaign / no tier drives it yet" — a status report28

The JSON's preamble anticipates and defends this: "'No tier drives it yet' is a real and admissible reason; it is deliberately NOT phrased as 'blocked' when nothing structural prevents it, so that a missing test never launders itself into an external blocker." routes.md erases exactly that distinction at render time, printing "blocked by rule …" for all of them under a legend that reads "blocked — the route cannot be driven yet." Two entries say so in their own text (rent/process_close_v2#Close: "it is not a structural blocker either"; registry/hot_continuation_v2::process: "remains honestly NEVER-EXECUTED"). The honest count for C-16's never-executed intended route category is therefore 16 + 28 + 6 = 50 of 162, of which 34 carry an owner and a sentence.

2.5 The corroboration layer does not exist in this tree

docs/reference/routes.md:18-20 tells every reader: "Corroboration … is a separate pipeline, dclutch-route-census observe, and its output is CENSUS.md. Where the two disagree, CENSUS.md is the evidence and this page is the claim." So does docs/evidence/C16_ENTRY_LIST_2026_09_01.md:37.

git ls-files | grep CENSUS.md → 0. git log --all --name-only -- '**/CENSUS.md' → 0 lines. No untracked copy exists either. It is a run artifact under $WORK/out (tools/gauntlet/run.sh:139, README.md:41-48), as is ledger.json, the "append-only chain-corroborated execution observations".

The consequence is exact and it is the positive-control problem in its purest form: "CENSUS.md corroborates everything" and "CENSUS.md was never generated" are indistinguishable from inside the repository. The corroborated count is not stale by N days; it is unmeasurable.

What can be measured in-tree, as a weak proxy:

measurecount
distinct route names across all 23 bindings.json108
of those, present in the 162-route inventory101
orphan binding names — a binding naming a route the code lacks7 distinct names over 13 rows (docs/reference/routes.md:299-320). C16_ENTRY_LIST_2026_09_01.md §1 reported 0.
witnessed only by refusals, never an executed0
witnessed only by *-programtest fast lanes54 of 101 (53%)
witnessed by at least one non-ProgramTest campaign47
bindings carrying a mechanically-derived observation string129 of 501 — and all 129 are dealer-checkpoint-programtest

That last row is the sharpest available statement about corroboration: exactly one campaign of twenty-three writes a machine-derived provenance string into its binding notes; the other twenty-two write authored prose. tools/gauntlet/DESIGN.md:60 admits solana-program-test "only as a labeled fast lane" and tools/gauntlet/README.md:88-95 draws the evidence boundary at local-validator — yet 53% of the witnessed register never reaches even that boundary, and nothing in the register's rendering says which rows those are.

---

3. Every authority the tree cannot explain

C-16's unexplained authority is the under-constraint question: which signer, PDA or cached role authorises an act, and whether any authority is asserted rather than derived from an authenticated record. It is the opposite question from seam-audit's PRIVILEGE class, which finds routes that refuse what they should admit.

3.1 The one open hazard from 2026-09-01 is closed, and the entry list is stale

docs/evidence/C16_ENTRY_LIST_2026_09_01.md §5 filed trading-sbf/hot_v3.rs selected_role_programs_v3 as hazard-cache-provenance-unverified, open, owner Trading. It was closed at d211cd728, 2026-09-01 11:39 — hours after the row was filed. programs/dclutch-trading-sbf/src/hot_v3.rs:12673 now calls require_activation_cache_account_v3 before the read, and that function (:1904-1953) checks owner == registry, the three privilege bits, the exact width, and then reproduces the address from [ACTIVATION_PDA_DOMAIN_V1, release_set, bump] via create_program_address with a find_program_address fallback, refusing on key mismatch at :1948-1950. The branch carries a comment naming the defect it fixed: "AUTHENTICATE, THEN READ — here, not upstream." tools/seam-audit/EXCEPTIONS.md:1006-1035 already records the closure. The tree's own register is current on this one and the C-16 gate document is not.

3.2 The instrument's baseline is stale and its gate is RED

tools/seam-audit/seam_audit.py is Python and runs read-only in seconds. Run for this review:

3.3 One of today's three findings is instrument noise

programs/dclutch-custody-sbf/src/lib.rs:787 authenticate_market is flagged and decodes nothing. Inside its brace-matched span (787-834) the matched type name appears twice: at :790 as a parameter type and at :798 inside a // comment. The decode the rule meant to catch is at :962, in a different function (authenticate_registry_continuation, 930-1018) which derives and owner-checks and is correctly cleared. Root cause: _AUTHORITY_CACHE_READ (tools/seam-audit/seam_rules.py:1223) is a regex over raw function text and seam_rules.py strips no comments. It over-reports rather than under-reports, but the class's own count cannot be read at face value.

3.4 The two real findings are benign by sibling ordering, not by their bodies

custody-sbf/src/lib.rs:1055 authenticate_calling_release_from_cache and :1078 authenticate_realm_from_cache each borrow and decode the activation cache with no owner check and no derivation of their own. At all seven call sites, authenticate_market_from_cache runs first on the same frame vector — programs/dclutch-custody-sbf/src/dealer_reservation_v1.rs:352/353/355, :1217/1218/1219, and :656, :871, :1373 — and that function (lib.rs:1031-1051) delegates to authenticate_activation_cache_identity_v1 (crates/dclutch-registry-activation-auth-v1/src/lib.rs:304-343), which owner-checks, width-checks, compares the release-set id, reproduces the address under ACTIVATION_PDA_DOMAIN_V1 and refuses on key mismatch at :340.

Not exploitable at HEAD. But the provenance is established by a sibling call, not by the reader — deleting or reordering one line silently makes both readers underived, and nothing in either body would notice. That is exactly the instrument's declared blind spot: its one level of call resolution resolves callees, not siblings. The one that actually spends the cache as authority is authenticate_calling_release (lib.rs:894-927), which at :916-922 requires release.program() == caller_program.key and release.programdata() == caller_programdata.key — "is my caller the blessed program for its role", read out of an account its own body never authenticates.

The same shape appears once more, cross-instruction: custody-sbf/src/lib.rs:2216-2221 read_replay is a bare borrow-and-decode of CustodyReplayV1, an account written by an earlier instruction, with no owner check and no derivation; its provenance comes from authenticate_replay_identity (lib.rs:1309-1347) called one line earlier at the call sites.

3.5 The out-of-scope ground: 121 unadjudicated candidates, 0 confirmed defects

Sweeping the ground the instrument declares out of scope, over programs/*/src/**/*.rs with comments and string literals stripped (the defect §3.3 found), 3,601 brace-matched functions, plus one hop of delegation:

channelcandidatesadjudicatedconfirmed
signer trusted with no key comparison anywhere2870
PDA bytes decoded with no owner check and no re-derivation in the body10330

All seven adjudicated signer candidates are privilege-shape checks, not authority reads — registry-sbf/src/record_v1.rs:960-973 require_privilege, :999-1009 require_system_wallet, claims-sbf/src/lib.rs:1024-1035 (which refuses a signer), claims-sbf/src/fractional_claim_check_v1.rs:1023-1038, general-accelerator-sbf/src/lib.rs:751-796. Positive controls that the query does clear: core-sbf/src/generic_founding_v1.rs:831 authenticate_generic_caller, trading-sbf/src/series/accounts.rs:153,190, custody-sbf/src/lib.rs:1885, and custody-sbf/src/lib.rs:930-1018 for the PDA channel.

A methodological catch, recorded because it nearly produced four false accusations: the first regex missed the deref spelling != *caller.key and reported all four positive controls as unbound. Fixing it cut the signer residue 65 → 41 → 28. An unfixed version of that query would have convicted four correct authenticators.

121 candidates remain unadjudicated and this is the honest state of the category. The dominant explanation is the sibling-ordering structure proved in §3.4, but that was verified on three sites, not on 121. The densest clusters each wanting an owner: resolution-proof-sbf/src/relay_transport_v1.rs (7 functions at :540, :674, :751, :812, :895, :1310, :1996), resolution-proof-sbf/src/core_effect.rs (8), and trading-sbf/src/execution_strategy_v2.rs:656-858 (five consecutive authenticate_* functions lacking both an owner check and a derivation). Nobody has done cross-instruction dataflow at all: whether the writer of a persisted account in a prior transaction was authenticated is not a single-function question, and neither the instrument nor this sweep answers it.

3.6 Authorities that are stated rather than checked

Three, each named by the tree itself:

3.7 The producer-missing pattern

A schema field, account or record whose only writers are literals or fixtures: the reader, the schema and the refusal were all built and the producer never was, so only the failure path is exercised.

The tree has a detector, it is Rust, it is build-gated, and it may be disconnected in the one crate CI compiles it in. reader_booleans_without_a_computing_producer_v1 (tools/local-validator/bootstrap/successor/src/campaign.rs:6773, register at :6752, gate at :6884, red control at :6908) resolves its inputs through env!("CARGO_MANIFEST_DIR") at :6872 and :6886. campaign.rs is #[path]-linked into tools/gauntlet/journey/src/main.rs:42, where that macro expands to tools/gauntlet/journey — whose src/ contains no campaign.rs, so .expect("campaign schema source") cannot resolve there. The same hazard applies to historical_boundary_reads (market.rs:17237, linked at journey/src/main.rs:54). tools/ci/run.sh:1078-1084 says the successor host tests "are simply not wired yet". The one detector this category has is an absent signal with no positive control — read statically; settling it needs a build.

The roster the tree numbers for itself: six instances, one open. 1st AlreadyCurrent (fixed 28ff0823), 2nd PERMANENT_DEVNET_UPGRADE_TARGETS_V1 (8e1f9850), 3rd recovered_finalized_founding (00793136), 4th the Series ticket state — OPEN, 5th the Claims-role Custody replay producer (31d09aed2), plus the browser redemption path (measured, not repaired). Three further doc-named gaps are each closed by the module that names them (crates/dclutch-operator/src/capability_seal_v1.rs:1-19, crates/dclutch-general-adapter-contract/src/collection_v1.rs:1431-1439, bootstrap/successor/src/sponsored_push.rs:2198-2212).

The open one, verified at HEAD, with the fixture standing in for the producer:

elementlocation
reader / refusalcrates/dclutch-series-v3-kernel/src/replay.rs:372-378 — TicketStateV3::decode requires SERIES_TICKET_STATE_MAGIC_V3 in bytes 0..8
the only writer of the magicreplay.rs:394, inside TicketStateV3::encode
the declared owner that never writesprepare_funding_artifacts_v5.rs:264,308,567 declares SERIES_TICKET_STATE_BYTES_V3 (= 64) with write permission
absent producerSERIES_TICKET_STATE_MAGIC_V3 has four hits tree-wide: the const, a doc line, the compare, the write. No route calls the write with a fresh value.
the fixtures standing incore-sbf/tests/found_program_test.rs:1064; trading-sbf/program-test/tests/support/series_premarket_expiry_chain_v1.rs:317,2286; trading-sbf/src/series/projector.rs:489 (inside a #[cfg(test)] mod opening at :314); series/accounts.rs:665-676,706-729; series-shadow-sbf/src/evaluator/tests.rs:200,457. The non-test writers are consumers wearing a producer's shape: hot_v3.rs:3248 decodes then :3249 re-encodes.

This is what makes core/series_permit_expiry_precommit_v1::process undrivable (§2 row 6) and it is C-07's central defect.

Four further candidates the tree has not named, found by censusing every 8-byte magic's copy_from_slice against its type's non-decode constructors, classifying test versus non-test by path and by brace-matched #[cfg(test)] mod span (77 magic→impl pairs, 1,146 types):

type (magic)non-test readeronly producers
DealerConfigV4 (DCLDDC04, encode at crates/dclutch-dealer-codec/src/config_v4.rs:92)trading-sbf/src/dealer/v4_equity_accelerator_accounts.rs:420, v4_lp_accelerator_accounts.rs:169config_v4.rs:185 (own test), dealer/v3_accelerator_accounts.rs:1325 (cfg(test)), dealer-accelerator-sbf/program-test/tests/accepted.rs:6394. Called "a release artifact" at crates/dclutch-dealer-codec/src/scenario.rs:93; its release producer does not exist in-tree.
GeneralInvocationReplayV1 (DCGIRP01, crates/dclutch-general-adapter-contract/src/invocation_v1.rs:335)crates/dclutch-operator/src/general_invocation_v1.rs:93::fresh only at invocation_v1.rs:543,553,554,555,597 — all past the #[cfg(test)] at :480
AdvanceMarketOpeningReadinessV1 (crates/dclutch-capability-contract/src/readiness_instruction.rs:240)dispatch decode at :92::new only at :317,334 (own tests) — instruction data with no builder
RationalReplayCloseRequestV1 (crates/dclutch-rational-representation-v2-contract/src/replay.rs:203)claims-sbf/src/rational_representation_v2.rs:389 decodes it from instruction_dataonly claims-sbf/tests/rational_representation_v2_program_test.rs:5284 — instruction data whose sole composer is a program-test

The fourth is also route #16-adjacent: claims/rational_representation_v2::process_replay_close was on the C-08 never-executed list on 2026-09-01. A route with no producer for its own request is not a coverage gap.

Blind spot of that census, stated because it matters: it counts an off-chain operator constructor as a producer, so it misses the Series ticket state itself (crates/dclutch-operator/src/series_lifecycle_v3.rs:569 constructs a TicketStateV3). The sharper question — whether an on-chain route writes the bytes — is not what the query asks, so expect both false positives and false negatives of exactly the Series kind.

---

4. Stale claims in the top-level and user-facing documents

47 confirmed stale, 11 verified now-fixed, 14 could not be settled by reading. Every row below was checked against the code or artifact it describes; nothing is relayed from the 2026-09-01 list without re-verification. The category is much worse than that list's "6 unfixed of 8", and the reason is structural rather than sloppy: the tree moved faster than its prose for three days, and the documents that moved least are the ones a stranger reads first.

4.1 The landing page contradicts itself by 170 lines

README.md is the worst single artifact in this category.

lineclaimfact
README.md:14-17"there is an open Market on them: 6WZXJ7jBPPA3eFZPc8hQmmNsf3R4zAZN4DRZzfhcV7a4 … with its trading capability activated"packages/dclutch-sdk/fixtures/market-registry.devnet.json:74, for that exact address: "The programs that ran it have been closed, so it no longer decodes and nothing can move it again."
README.md:19-20"The programs were updated in place, keeping the same addresses"packages/dclutch-sdk/lib/deployments.ts:94-100: cohort-14, "each cohort is a full redeploy with fresh identities and the previous one is abandoned in place and then CLOSED … These ids are not permanent."
README.md:30-34resolution's signature check "runs in a test harness rather than on a chain"market B and market C both resolved on devnet on honest certificates; README.md:203-208 in the same file says so.
README.md:35-39trading, transfer and payout: "None of the three has been driven on a validator yet, and winding a market all the way down to retired has not run anywhere yet"the first two halves are false (three fills, three payouts, all verified on chain for this review); the retirement half is the one true sentence in the block.
README.md:56-57the web app "does not publish authoritative prices or enable devnet trading today"apps/dclutch-web/lib/tradeFlowMachine.ts:704-725 submitDirectPacket() submits the signed wire through submitSignedTransactionV1, wired at apps/dclutch-web/components/MarketTradePanel.tsx:435 behind SignStep/SendStep.

A stranger who reads the top of that page and stops is told the protocol has never resolved or traded on a chain. A stranger who reads to line 203 is told it has done both. Both passages are in the file a reviewer is handed first.

4.2 Eleven guide passages say "not live yet" about markets that are live

Ground truth: apps/dclutch-web/fixtures/og-card-facts.devnet.json:5-25 — three "Open", one "Terminal".

4.3 A documented operator command that cannot run

docs/guides/devnet-release-capture.md:11-22 teaches devnet-permanent-substrate-capture-v1 and states "You do not supply program addresses. The command owns the fixed decision-0012 table of seven permanent Program/ProgramData pairs." tools/local-validator/bootstrap/successor/src/release_capture.rs:86-88: "Decision 0012, amended 2026-09-02: the seven roles are a caller-declared AUTHENTICATED input, not a fixed table." :498-503 requires all seven --expected-<role>-program flags and :552-556 errors "{flag} is required". The command as documented dies on --expected-registry-program is required. Its sibling docs/guides/devnet-permanent-id-upgrade.md:47-50 documents the amendment and still links to the stale guide at :41-42.

Adjacent, and the same shape: README.md:167-173 and docs/guides/reader.md:68-74 teach a run.py one-liner. The five required=True flags the 2026-09-01 list named have been added — and the invocation still aborts, because --seeds defaults to 20 (tools/release/private-validator-lifecycle/run.py:7199) and :7213-7215 raises "the founding/participant development probe requires exactly one named seed". The correct nine-flag form exists only at docs/operators/found-a-market.md:117-126.

4.4 The contract's own decision register

lineclaimfact
docs/MASTER_COMPLETION_CONTRACT.md:74-77"the register's 55 NEVER-EXECUTED routes … C-01 4, C-02 5, …"docs/reference/routes.md:30 — 16 of 162; and the 2026-09-01 register said 57, not 55
:185Privacy horizon "open; do not infer from the old horizon park"ruled out by Ember 2026-09-01, 5a371810
:187"the per-leg FailNext walk sits inside #[cfg(any())], so the ELF builds because the block never compiles"zero live #[cfg(any())] attributes tree-wide; all eight hits are comment text. The row's other half ("process_funded_transition has no definition") is true — six live citations, §4.6
:189"hot_v3.rs:5372 refuses every Direct-kind Hot action except InlineOrdinary"wrong line and wrong fact; §1 C-04
:191"outer.rs:1606 simply discarded that value"programs/dclutch-trading-sbf/src/outer.rs:1606 is a funding-ledger row_index bump; the only creation_lamports use is :1681
:192"declares Exact{0} for sixteen coordinates including the Rent sysvar and the System program"self-refuted in the same cell ("16 mismatches → 9" at d4cd3b27); the Rent sysvar is readonly(Observed) at crates/dclutch-bearer-v2-operator/src/hot_account_profile_v3.rs:287 and the System program program() at :293

Five of the seven decision-register rows carry a stale citation. That register is the tree's mechanism for asking Ember a question, and a question whose premise has moved is worse than no question.

4.5 docs/OMISSION_INDEX.md — the four "stale-open" rows are worse than reported

The 2026-09-01 list named U-013, U-003, U-006 and U-014. All four re-checked, plus four more:

Eight of fifteen U-/O-/P- rows a reviewer would be handed carry a claim the code refutes. That index is C-00's own scope instrument.

4.6 The instrument for this category is red, and gates nothing

tools/doc-citations/ exists precisely for the "citation outlives the thing cited" class, and it runs read-only in about ten seconds. Run at 9e3c4eeff for this review:

doc citations: 1156 files
  /// and //!   15239 spans   judged 1322 (1298 resolve, 24 do not)
  ordinary //    3856 spans   judged  192 ( 186 resolve,  6 do not)
30 citations name a symbol declared nowhere in this tree

--check --baseline tools/doc-citations/baseline.json exits 1 with "26 NEW dangling citation(s) since the baseline", and every line number in that 14-entry baseline has drifted. Two of the thirty are load-bearing:

rg 'doc-citations|doc_citations' tools/ci/run.sh tools/gauntlet/run.sh .github returns nothing. The instrument is wired into no tier. A red tripwire nobody is watching is the same as no tripwire, and this is the category where that costs the most.

4.7 Component and gate documents

4.8 The eleven that are now fixed

Recorded because a reviewer should be able to see which ground has been swept: the svm-harness CU table now carries "THAT CAMPAIGN HAS NO INSTRUCTION BUILDERS, AND THE TABLE ABOVE IS HISTORICAL" (README.md:93-110) with the #[ignore] and both panic! stubs enumerated — the sharpest 2026-09-01 finding, closed; docs/reference/ has been regenerated (12 programs, 162 routes, 341 codes at docs/reference/README.md:26-28), so the entry list's "docs/reference/ is stale at HEAD and is being held deliberately" is now itself the stale note; tools/release/README.md:612-622's two claims; the founding wizard's placeholder service identities and /local's ignored cluster <select> (both greps return nothing at HEAD); README.md:60-62 on the TypeScript CLI's refusing buy/sell; docs/OMISSION_INDEX.md:71 (P-005); and the flag/verb/env-var tables in two-clients.md, trader.md, trencher.md, docs/operators/found-a-market.md and author-a-ticket.md, each re-verified against both CLIs. AGENTS.md, SECURITY.md, COMPOST.md and PROJECT_METHOD.md are clean.

4.9 The gate document is the stalest document

docs/evidence/C16_ENTRY_LIST_2026_09_01.md — the file docs/MASTER_COMPLETION_CONTRACT.md:80-81 names as "the entry list for C-00/C-16" — has four wrong denominators at its head: :52-55 "routes 161 / witnessed 73 / blocked 33 / never executed 55" against 162/101/45/16, and :219 "1 of 297" refusal codes against 341. Its §0 warns that docs/reference/ is stale; docs/reference/ was regenerated and the warning was not. A reviewer handed the gate document starts from four wrong numbers and one inverted caveat. This file supersedes it.

---

5. Economic flows without an owner

The 2026-09-01 measurement swept the atom half (81 ordered compartment pairs through CustodyRequestV1::validate, 103 compartment-setting sites, all owned) and left the lamport half open. This is that half, plus the state of the one finding the atom half carried forward.

5.1 HoardPrincipal → FeeVault: narrowed to one route, open at both boundaries

Still shape-admissible where it was:

What is new since 2026-09-01 — one on-chain refusal, on one route. programs/dclutch-trading-sbf/src/dealer/v3_trade_artifacts.rs:1489-1527 classify_scenario_custody is a closed six-arm match with _ => None, enforced at :1144-1145 inside validate_scenario_custody_bank_v4 (:1123, no cfg gate, reached from project_dealer_scenario_hot_registers_v4 :1008 → v3_admitted.rs:182). Hoard→Fee is not among the six, so it is refused on-chain for the Dealer scenario-trade route and nowhere else.

Two other pair pins look live and are dead in the deployed SBF — the exact shape AGENTS.md warns about: v3_trade_artifacts.rs:809-810 validate_scenario_custody_shape is #[cfg(not(target_os = "solana"))]; dealer/v3_hot_artifact.rs:816 validate_template is uncfg'd but its only caller (:549-550) is #[cfg(not(target_os = "solana"))].

The 2026-09-01 statement of fact is stale. It said "both FeeVault-funding sites take TradingPrincipal". There are three on-chain FeeVault-funding sites and one takes External:

sitepair
dealer/v3_composer.rs:767-771 TransferKindV3::CounterpartyToFeeExternal → FeeVault
dealer/v3_composer.rs:777-781 TransferKindV3::PrincipalToFeeTradingPrincipal → FeeVault
dealer/v3_accelerator_accounts.rs:1202-1213 custody_shape_requestTradingPrincipal → FeeVault

And the composer's ownership is by omission: TransferKindV3 (v3_composer.rs:634-641) has six variants and no HoardToFee. That is a constructor that cannot build the pair, not a rule that refuses it — a distinction that survives only as long as nobody adds a seventh variant.

5.2 The lamport half: 80 sites, 68 owned, 12 unowned

Mechanism-disjoint census at HEAD: 92 try_borrow_mut_lamports / lamports.borrow_mut calls collapsing to 48 logical sites (38 owned / 10 not); 19 &transfer( CPI sites (18/1 — twelve inbound all owned, seven outbound 6/1); 5 SPL close_account rent destinations (4/1); 8 create_account CPIs, all payer→derived-PDA, all owned.

#sitereceiveshow the payee is chosen
1trading-sbf/src/hot_v3/seal.rs:392,395seal closeraccounts[1], any signer; whole seal balance. Argued at :232-243
2claims-sbf/src/claim_check_compaction_v1.rs:1141 via :993crankerat(0), signing caller, capped 200,000
3…claim_check_compaction_v1.rs:1141 via :994"opener"accounts[COMPACT_OPENER_ACCOUNT_V1]; the only check is :774 !is_writable. ClaimCheckEscrowV1.opener (crates/dclutch-claims-svm/src/claim_check_v1.rs:458) is written at :307 and never read back, while opener_outlay is decremented at :1000
4…claim_check_compaction_v1.rs:1141 via :995"rent credit"same slot pattern, only :773 !is_writable; no authenticate_rent_credit anywhere in the file
5claims-sbf/src/fractional_claim_check_v1.rs:1768 via :1772crankerat(0), capped
6…fractional_claim_check_v1.rs:1768 via :1773"opener"role slot, identity unread — stated in the tree at :1311-1313. The fractional route did pin its rent credit (:1452-1461) and did not pin the opener
7claims-sbf/src/claim_check_redemption_v1.rs:503,506calleraccounts[0], any signer; escrow record drain
8…claim_check_redemption_v1.rs:482callersame slot; the SPL close_account sends the vault's rent there too
9registry-sbf/src/record_v1.rs:664abort actoraccounts[3]; the check at :611 is circular — staging.cleanup_recipient() derives from the observation the frame built from that same account at :592
10resolution-proof-sbf/src/relay_transport_v1.rs:1515workeraccounts[0]; zero is_signer/is_writable/owner/executable check on the worker in process_deadline_failure_coordinates (:1086-1220) — the signer comes only from dclutch-relay-contract/src/frame.rs:125
11rent-sbf/src/lib.rs:546crankaccounts[3], optional by frame length; validate_sweep_crank_v2 (crates/dclutch-rent-contract/src/lifecycle_v2.rs:952-971) is shape-only and deliberately requires no signature (:942-948)
12core-sbf/src/series_permit_expiry.rs:645crankaccounts[25]; validate_crank (:135-145) shape-only, no signature

Seven of the twelve (1, 2, 5, 9, 10, 11, 12) are doctrine-sanctioned permissionless payees per docs/design/FUNDED_CRANK_V1.md §6. Four or five are not: rows 3, 4, 6 and the 7/8 pair.

Row 3 is the sharpest finding in this section. A cranker that supplies its own pubkey at the opener slot collects plan.opener_repayment() while the escrow's book records the real opener's debt as discharged. The escrow stores the opener's identity and the payout path never reads it back. Row 6 is the same route's fractional twin, and the tree already says so in a comment at fractional_claim_check_v1.rs:1311-1313 — a known gap that has an owner in prose and none in code.

Two "owned" verdicts that are structurally fragile, recorded because a reviewer should not read them as settled: custody-sbf/src/lib.rs:1385 (InitializeReplay excess sweep) is checked against the request (:1364), not persisted state, since persistence begins there — its only authority is the caller PDA's signature over the request digest. And pre_market_funding_v1.rs:575 / projected_custody_bootstrap_v1.rs:2490 inherit their rent-credit binding from a preceding Core ProjectFound CPI (core-sbf/src/found.rs:828-848); normalize_vacant_pda_lamports_v1 (:2467) is a generic helper that becomes unowned at any new call site lacking that CPI.

5.3 The rent declaration is real and reaches 1 of 80 sites

Byte five landed and is exactly what docs/ledger/GOAL_2026-08-31_to_2026-09-04.md:3289-3293 describes: crates/dclutch-account-profile-contract/src/lifecycle_v3.rs:138-139 (REFUND_SOURCE_CREDIT = 0 / REFUND_SOURCE_PAYER = 1), decoded at :2195, enum at :498-511, with kernel rules for create-beneficiary selection (:3395-3397), funding-admission equality (:3405-3416), close (closing_refund_identity, :3507-3532) and Authenticate-arm canonicality (:2235). All four named commits are ancestors of HEAD.

And it has one on-chain reader, not two. The only one is programs/dclutch-trading-sbf/src/hot_v3.rs:10358-10366 closing_refund_identity_admitted_v3, consumed at :10409. The second reader 5fc108bd's own message names — direct::lifecycle, "Direct requires Credit at both plan readers" — lived in programs/dclutch-trading-sbf/src/direct/lifecycle.rs, deleted at 4d13fe2af the same day as part of the 6,572-line never-dispatched plan layer whose removal left the ELF byte-identical. So half the declaration was landed into code with zero on-chain effect and is now gone. validate_registered_record_close_lifecycle_v3, still cited in the live doc comment at lifecycle_v3.rs:3505, does not exist in the tree — a §4.6 citation the doc-citations baseline has not caught because it is a bare identifier rather than a namespaced path.

The gap, measured three ways. REFUND_SOURCE / RefundSource / refund_source / SOURCE_CREDIT is absent from all 26 other program files carrying a lamport flow — zero hits across the whole of programs/dclutch-claims-sbf/src/, all ten resolution/registry/core/custody files, and the other eight trading files. Every other owned site pins a full 32-byte pubkey against persisted state; no site outside hot_v3 reads a refund-source discriminant. The Payer arm is also weaker than it reads: LifecycleRefundSourceV3::Payer => plan.beneficiary != [0; 32] is an existence check, and lamports land in the authenticated RentCredit either way — it asserts provenance, not a destination.

5.4 Seven live permissionless-work routes, all funded from present capital

The tree does pay strangers, which contradicts programs/dclutch-registry-sbf/src/record_v1.rs:548-550's claim to be "the only route in the tree that pays a lamport bounty to its own caller".

routepaymentfunding sourceclass
rent sweeprent-sbf/src/lib.rs:541-548RentCredit claimable surplus, min(rent.minimum_balance(..), amount/16) (divisor lifecycle_v2.rs:519)present rent residual
series permit expirycore-sbf/src/series_permit_expiry.rs:642-648the expired permit PDA's own balance, capped rent.minimum_balance(0) (:630-633)present rent residual
claim-check compactionclaims-sbf/src/claim_check_compaction_v1.rs:1133Position + Admission rent, capped COMPACTION_CRANK_REWARD_LAMPORTS_V1present rent residual
fractional compactionclaims-sbf/src/fractional_claim_check_v1.rs:1768samesame
registry record abortregistry-sbf/src/record_v1.rs:624,660-666cleanup bounty prepaid at Begin (crates/dclutch-record-contract/src/lib.rs:427-433)present prepaid capital
capability seal closetrading-sbf/src/hot_v3/seal.rs:385-397the seal PDA's whole balancepresent rent
resolution deadline-failure walkresolution-proof-sbf/src/relay_transport_v1.rs:1513-1518FundingCompartment::Bounty via funded.rs:205-227, quote pre-disclosed in the capability manifest, nonzero enforced at crates/dclutch-capability-contract/src/lib.rs:508-514present prepaid capital

All seven fund from capital that is present — rent already leaving an account, or a bounty prepaid at founding. None draws on Hoard principal or on future revenue. For C-11's own invariant that is the good news of this section.

Contract-only, never on chain: FundingLedgerEntryClosePlanV2::crank_reward (crates/dclutch-capability-contract/src/funding.rs:1919-1927, no program references it) and the WorkEscrowClosePlanV1 cranker leg (crates/dclutch-general-adapter-contract/src/escrow_v1.rs:662-755, only consumer is a harness test). Zero-valued and awaiting a ruling: DIRECT_CLOSE_MAKER_CLOSER_REWARD_V1 = 0 (crates/dclutch-direct-codec/src/close_maker_v1.rs:61).

---

6. Capabilities a stranger cannot reach from the site, SDK or CLI

The 2026-09-01 figures (19 client-unreachable, "honest C-12" of 20) were an instrument artifact and the real numbers are far worse. That measurement grepped the magic as an ASCII string. In TypeScript the magics are written as hex byte arrays and never as strings: packages/dclutch-sdk/lib/generated/directInlineV3.ts:270 — export const HOT_EXECUTION_MAGIC_V3 = Uint8Array.from([0x44,0x43,0x4c,0x54,0x48,0x4f,0x54,0x33]); — while the literal "DCLTHOT3" appears only in lib/generated/routeCensus.ts:473. So a string grep says the SDK cannot build a hot execution, which is plainly false; and almost every "reachable" it scored was a routeCensus.ts row. Its third rung — "excluding all lib/generated/*" — deletes exactly the codec modules a browser builds through. And a fourth mechanism leaves no magic in TS at all: DCLTPUA1 is reached from apps/dclutch-web/components/JoinPanel.tsx → lib/userPositionAdmissionV1.ts → lib/generated/userPositionAdmissionWasm/ ← crates/dclutch-user-position-admission-wasm, and every literal grep scores it unreachable.

Re-measured with ASCII and 0x..-list and decimal-list patterns, an import-graph walk (@/*→./* per apps/dclutch-web/tsconfig.json), and a hand check of all seven client WASM modules.

6.1 The denominator was also wrong

Reading each programs/*/src/lib.rs process_instruction and its inlined continuations, extracting every magic-comparison arm and every is_*(instruction_data) predicate and resolving each predicate to its constant:

78 top-level arms / 77 distinct 8-byte magics — claims 21, trading 24, core 10, resolution-proof 10, custody 6, registry 3, dealer-accelerator 3, rent 1. (DCLTRIX1 serves two constants: crates/dclutch-record-contract/src/lib.rs:67 and crates/dclutch-relay-contract/src/instruction.rs:20.) Plus ~17 non-magic top-level arms the magic census cannot see — Core's Action enum (crates/dclutch-market-core-codec/src/generated.rs:676, no magic), Custody's five OperationV1 operations, Registry's ActivateRole/Reauthenticate, Trading's outer::process_capability_lifecycle fallthrough, Claims' shape fallthrough at claims-sbf/src/lib.rs:675, Rent's fallthrough. One of those — Core Found — is browser-reachable, so a magic-only universe undercounts both numerator and denominator.

6.2 The counts

definitionweb-unreachablereached
any mention at all, listings included3444
minus listings (routeCensus.ts, scripts/explorer-coverage.exempt.json, scripts/abi-coverage.baseline.json)6315
minus listings + all lib/generated/**6513
minus listings + generated + tests/fixtures708

The prior audit missed a second pure listing — apps/dclutch-web/scripts/explorer-coverage.exempt.json mentions routes and builds none, exactly like routeCensus.ts.

The two definitions worth defending:

The thirteen: DCFRRQ03 DCLTHOT3 DCLTGMF3 DCLTGFQ1 DCLTPCB2 DCLTPUA1 DCLTSQ03 DCRRPRQ2 DCRRLC02 DCLCCR01 DCLSDP03 DCLRNCI2 DCLCUSR1, via lib/founding/{genericMarketFounding,ladder}.ts, lib/walletTerminalPayoutV3.ts, lib/rationalTerminalHotV3.ts, lib/rationalRetireReceiptV4.ts, lib/claimsCustodyReplay.ts, lib/generated/coreFound.ts, lib/directInlineV3.ts, components/JoinPanel.tsx. Three of them (DCLSDP03, DCLCUSR1, DCLRNCI2) are built as a child or suffix payload inside another instruction rather than submitted standalone.

CLI: 2 of 78. tools/dclutch-cli/src/main.rs:127-131 dispatches five subcommands; market and capability decode only, ticket is off-chain (crates/dclutch-direct-ticket), and the binary states its own limit at tools/dclutch-cli/src/ticket.rs:22: "AUTHORING IS NOT SUBMITTING, and this binary still submits nothing." Only fractional-retirement-next → DCFRRQ03 and general plan → DCLTHOT3 reach a route at all. 76 of 78 arms are CLI-unreachable, against a C-12 row that asks for creation, discovery, maker/taker trade, liquidity, Series, resolution, portfolio, redemption and recovery across "Static web, Wallet Standard, SDK and CLI".

6.3 Delta since 2026-09-01

Newly reachable: none. Zero selectors gained a client builder. One became legible: DCLCRH01 (RETIREMENT_REPLAY_HANDOFF_REQUEST_MAGIC_V1) now appears in apps/dclutch-web/lib/marketActivity.ts and its SDK twin — a pure reader. Decoding an act is not performing one. Newly unreachable: none. 118 commits landed on the SDK and web app in that window, all census regeneration, readers, pulse/OG/market pages; the client's building surface did not grow. The CLI took 5 commits, all lockfiles and one rename.

6.4 The two plainest cases, unchanged

DCLTDFS1 / DIRECT_FEE_SETTLEMENT_REQUEST_MAGIC_V1 — declared crates/dclutch-direct-codec/src/fee_settlement_v1.rs:35, encoded :154, predicate :324, dispatched programs/dclutch-trading-sbf/src/lib.rs:883. The browser mentions it once, in a comment that says the opposite of reachability (apps/dclutch-web/lib/marketActivity.ts:41-44: "no generated table can turn a settlement instruction into a name, and this module does not invent one"), and otherwise only in the two listings. Zero in tools/dclutch-cli. No builder in either mirror. Its only exterior is tools/local-validator/bootstrap/successor/src/direct_fee_settlement.rs, whose own doc at :115 says it is "the only caller of the DCLTDFS1 route outside a program test". A permissionless third-party fee completion whose only caller is a Dragon-operated bootstrap is not permissionless — and completion item 7 forbids exactly a route that requires a Dragon-operated service.

DCLTPCA1 / PROJECTED_CUSTODY_ABORT_MAGIC_V1 — declared programs/dclutch-trading-sbf/src/projected_custody_bootstrap_v1.rs:201 ("Sole top-level projected-Custody founding-abort instruction", :200), dispatched programs/dclutch-trading-sbf/src/lib.rs:960. A name-token scan for projected_custody_abort / projectedCustodyAbort across all three client surfaces returns 0, 0, 0. Its only exteriors are bootstrap/successor/src/market.rs:7934 — which re-declares the magic locally, const PROJECTED_CUSTODY_ABORT_MAGIC_V1: [u8; 8] = *b"DCLTPCA1";, with the comment "restated here because a localhost host…" — plus source_abort_exterior.rs, journey/src/journey.rs, tier1/, and one svm-harness test. And §0(b) compounds it: this route's only register witness is tier1, which tools/gauntlet/run.sh:94 refuses to run. A fund-recovery path with no client, whose only evidence comes from a campaign the tree can no longer reproduce.

6.5 Twenty-six capabilities whose only exterior is our own harness

Completion item 7 requires that a caller "can acquire its inputs without inventing authority or requiring a Dragon-operated service". Of the 58 loose-unreachable arms, 26 have an operator-tool caller and no client:

Five of those nine bootstrap-only routes are also members of §2's never-executed sixteen, which is not a coincidence: a capability with no client tends to have no campaign either, because the same missing builder blocks both.

The remaining ~31 arms have no caller under tools/ at all — only program-test campaigns or nothing: DCFREQ02 DCLMCQ01 DCLABP02 DCLSPT01 DCLSFTR1 DCLFDR05 DCLPPR02 DCRRCL01 DCLSUPE1 DCLTSFX1 DCLTCSR1 DCLTPFQ2 DCLPCQ01 DCLTCRS1 DCLTCRB1 DCLTCAC1 DCLTCSX1 DCLTDCP1 DCLTDPG1 DCLTDEV1 DCLTDRB1 DCLTDCL1 DCLTDTS1 DCLRPAQ1 DCLRPFQ2 DCLTPRQ3 DCLTPSB3 DCLTPRL3 DCLTSPI1 DCLMLP03 DCLDST03. Read that as an upper bound on absence, not a proof: the tools/ grep matches the magic's name or value, and an operator caller that goes through a codec function leaves neither. DCLTPUA1 proves the miss — it scores 0/0/0 under tools/ while bootstrap/successor/src/user_position_admission.rs exists.

6.6 What the browser itself says it cannot start

apps/dclutch-web/lib/generated/capabilitySurfaceV1.ts:9-10, generated from the browser's own import graph: "245 surveyed modules, 27 routes, 27 generated authorities, 3 published runbooks. 12 of those modules cannot start without a file produced outside this browser." Twelve acts a stranger cannot begin, said by the surface itself. Alongside it, docs/ledger/GOAL_2026-08-31_to_2026-09-04.md:3842 records the upstream gap: "the 27 capability acts declare only 9 of 162 routes."

---

7. The twenty items whose closure would most move the matrix

Ranked by how much of the matrix each unblocks, not by effort. Where a repair already exists in the tree and is waiting on a deploy, that is said.

#itemrows it moveswhy it ranks here
1Carry the observation-scale repair (4cd2b9cb5, ProviderScale 0x801C) to a chain and re-resolve.C-03, C-09, C-10The only defect in this file that has already taken value from a stranger: market C committed selector 2 while the reading falls in cell 1, so participant-2's 200 paid claims pay zero (COHORT14_…:2033-2064). The fix is landed and unshipped; tools/cohort15/steps.tsv:00 is the vehicle.
2Replace or unpark the tier-1 transaction producer.C-13, C-16, C-01, C-0225 routes' sole witness comes from a campaign tools/gauntlet/run.sh:94 refuses to run. Until it runs, completion item 9 fails for 15% of the register and no reviewer can reproduce a quarter of the claimed evidence.
3Commit a corroboration artifact.C-16, and every row citing a witnessed routedocs/reference/routes.md:18-20 names CENSUS.md as "the evidence"; git ls-files has never contained it. "Corroborated" and "never generated" are currently indistinguishable from inside the repository.
4OpenBatch on a chain — cohort-15 steps 00-03.C-05General is the only family with a founded devnet market and zero executed acts. Both walls are diagnosed and one is repaired in-tree (3a8ac205d); what remains is a redeploy plus a re-founding with observed widths.
5Ember's D1 economics ruling.C-11, and C-06's policy halfdocs/MASTER_COMPLETION_CONTRACT.md:186 and :180 — silence is never a ruling, and no lane may implement past it. C-11 cannot close by any amount of engineering. The docket is published (docs/ledger/GOAL_2026-08-31_to_2026-09-04.md:3944-3950).
6Retire one market on devnet, end to end.C-10, C-01, C-04A 13-market census across all three live Core programs finds none at phase 3. Retired is C-10's own endpoint and C-01's migration/retirement replay requirement, and trading/direct_begin_retiring_v1 (§2 row 9) is the cheapest unopened door to it.
7Bind the claim-check opener and rent-credit payees.C-10, C-11§5.2 rows 3, 4 and 6: the escrow stores opener and the payout path never reads it back, so a cranker supplying its own pubkey collects opener_repayment() while the book records the real opener discharged. The fractional twin already pins its rent credit and not its opener.
8Pin HoardPrincipal → FeeVault at the Custody contract, or enumerate every caller's rule.C-10, C-11crates/dclutch-custody-contract/src/lib.rs:1994 asserts the pair is shape-admissible and that the rule lives in callers; nothing enumerates the callers. Two of the three pins that look live are cfg-dead in the deployed SBF (§5.1).
9Regenerate the six stale authority documents.C-00, C-12, C-1647 confirmed stale claims (§4), concentrated in the files a stranger opens first. README.md tells a reader on line 30 that resolution has never run on a chain and on line 203 that two markets resolved on devnet.
10Bind the three controller-funding routes.C-02, C-16The cheapest register move available: process_controller_funding_prepare_v1 has executed on devnet in cohorts 12, 13 and 14 (market.rs:7371, "executed DCLTCFQ1") and reads NEVER-EXECUTED because tier1/bindings.json names its two siblings and skips it.
11Wire doc-citations --check into a CI tier and re-baseline it.C-16, C-09It exits 1 with 26 new dangling citations, it is in no tier, and two of the thirty are load-bearing: six live citations of a deleted process_funded_transition (one a lifting plan), and four of a GeneralAccelerator enum variant cited as the remedy for a released identity's unchecked authority.
12Re-baseline seam-audit AUTHORITY and strip comments in seam_rules.py.C-16The gate is RED with 3 NEW / 2 GONE because a 2026-09-02 refactor moved the decode and nobody re-ran --write; one of today's three findings is a regex match inside a // comment. A red gate nobody re-baselined and a checker that matches comments cannot answer this category.
13Execute one LivenessVault work-funding leg on a real ELF.C-11, C-06The compartment C-11's economics rests on has never moved an atom on any substrate: the only real-ELF site sets pending_work_funding: 0 and Plan::push returns early on zero. C-06's "consent-safe policy/epoch evolution" terminates at the same line.
14Write the Series ticket-state producer.C-07The 4th producer-missing instance, verified: the PDA is allocated as 64 zero bytes, TicketStateV3::decode always refuses, no route writes the magic, and eight test fixtures stand in for the producer. It is what makes §2 row 6 undrivable.
15Repair expire_funding_artifacts_v5.C-07A shipped route that is unsatisfiable as shipped — a 128-byte V1 request pinned while the effect declares a nonempty borrowed range (docs/ledger/GOAL_2026-08-31_to_2026-09-04.md:3936-3939). Expiry is one of the two occurrence paths C-07 names.
16Schedule the Structured account-widths release event.C-08docs/MASTER_COMPLETION_CONTRACT.md:192 — the engineering is done and proven; the remaining seven widths move the emitted profile bytes and therefore the release identity, so only Ember can schedule it. A profile nothing can satisfy ships today.
17Dispatch the registered-Direct fill and terminals.C-04hot_v3.rs:5881-5883 still refuses every registered action but the two creations. C-04 asks for all of them, and the contract's own decision row about it is stale in both its line number and its fact.
18Give DCLTDFS1 and DCLTPCA1 a client.C-12, C-04A permissionless act whose only caller is our bootstrap (which says so itself at direct_fee_settlement.rs:115), and a fund-recovery act with no client whose only register witness is the parked tier 1. These are C-16's named plain cases and they are exactly where 2026-09-01 left them.
19Rule the recovery ontology, and delete the prose that outlives it.C-09, C-00docs/MASTER_COMPLETION_CONTRACT.md:187 — live, green, kernel-complete, no on-chain route, and AGENTS.md forbids parallel authority paths so it cannot sit. Its five present-tense citations of a symbol nobody can locate are the most misleading prose in the tree.
20Fix tools/genref/generate.mjs's witnessed-before-blocked ordering and delete the six falsified blocks.C-16, C-00:231 returns witnessed before consulting blockedRuleFor at :233, so an entry whose route now executes is invisible in the register and can only be found by joining the two files. Six such entries exist today, and the file's own rule says delete on execution.

Just below the line, and named so they are not lost: re-found the General market with observed widths (a devnet founding took a #[cfg(test)] fixture's rent_credit = 48 as an input, COHORT14_… "WALL ONE"); add SourceSemanticRoleV1::GeneralAccelerator so the accelerator's release id is checked rather than operator-stated; refresh apps/dclutch-web/fixtures/{public-cut,market-registry}.devnet.json, which pin a Terminal market as featured and seven markets on closed programs; adjudicate the 121 unadjudicated authority candidates in §3.5 and the four new producer-missing candidates in §3.7; drive registry/lineage_v1 on a two-cohort local campaign, since the devnet-disposability ruling means devnet can never reach it; and write a README for apps/dclutch-web, the surface carrying the only live trade-submission path.

---

8. Counts, by C-16's own six categories

categorycountqualifier
never-executed intended route16 with no stated reason; 50 of 162 honestly16 + 28 blocked entries that are status reports + 6 that say they are driven and unwired. 34 of the 50 carry an owner and a sentence. Separately: 0 of 162 routes have a devnet witness, 19 have a validator witness, 25 rest solely on an unreproducible campaign, and 54 are ProgramTest-only.
user-inaccessible capability65 of 78 strict (a client builds the bytes); 58 loose; 76 of 78 for the CLIPlus 26 whose only exterior is a Dragon-operated harness, 12 browser modules that cannot start without an externally produced file, and ~17 non-magic arms this census cannot see. The 2026-09-01 figure of 19/20 was an ASCII grep over hex-encoded magics.
stale claim47 confirmed, 11 fixed, 14 unsettledFive of seven decision-register rows, eight of fifteen OMISSION_INDEX rows, eleven guide passages saying "not live yet", one documented command that cannot run, and the C-16 gate document's own four denominators.
unowned economic flow12 of 80 lamport sites; 4–5 outside doctrineHoardPrincipal → FeeVault refused on exactly one route and shape-admissible at both Custody boundaries; the 2026-09-02 rent declaration reaches 1 of 80 sites after its second reader was deleted the same day; one self-declared FUNDED_CRANK_V1 violation. The atom half stays "swept clean at the construction sites, correctness not asserted."
unexplained authority0 confirmed open; 121 unadjudicated candidatesThe 2026-09-01 hazard closed at d211cd728. Today's three instrument findings are 1 regex-in-a-comment false positive and 2 benign-by-sibling-ordering. Three authorities are stated rather than checked (the operator-stated release id, the PDA-signed-CPI ruling, the circular abort recipient). The gate is RED on a stale baseline and no cross-instruction dataflow has been done at all.
material gap13 of 17 rows carry at least one; C-11 is the emptiest and C-14 the strongestNamed per row in §1. Two rows are closed: C-15 by Ember's dated ruling, and C-14 is the only row whose terminal evidence a reviewer could accept today with a single reservation (an artifact this tree can no longer rebuild).

What a reviewer should distrust in this file