Literal-sweep convictions — 2026-08-31

Full candidate table from the CANON lane's literal-leftover sweep (S2 of CANONICAL_CLIENT_EXPECTATIONS_V1.md, which carries the disposition rules and the adjudications). CONVICTED set owned by the LITERALS lane; SUSPECT set needs the emitters briefed in that doc. Line numbers as of 54888c5e.

Sweep complete. Candidate table below.

CONVICTED — hard drift (live refusal risk)

1. Core Market state magic/version pinned to a superseded generation

/Users/ember/dev/dclutch/apps/dclutch-web/lib/directHotChain.ts:911… market.data.length !== CORE_STATE_BYTES || ascii(market.data, 0, 8) !== 'DCLTCOR2' || u16(market.data, 8) !== 2 || market.data[10] !== 1
TwinCORE_STATE_MAGIC = DCLTCOR3 and CORE_VERSION = 3 — apps/dclutch-web/lib/generated/coreFound.ts:35, :4

The same function already imports CORE_STATE_BYTES from that exact module (line 10 of the import block). The literal 'DCLTCOR2'/2 sits beside its imported sibling. marketCoreV2.ts:273-275 is the correct implementation (ascii(CORE_STATE_MAGIC, 0, 8) / version !== CORE_VERSION) — and its own comment at marketCoreV2.ts:204-219 documents this exact defect having already bitten once on width. Also market.data[10] !== 1 has twins CORE_STATE_PHASE_OFFSET = 10 / CORE_PHASE_OPEN_TAG = 1 (generated/coreFound.ts:37, :54).

Same defect, second site: /Users/ember/dev/dclutch/apps/dclutch-web/lib/dealerEquityChain.ts:295-296 (imports CORE_STATE_BYTES at line 20).

SDK copies: packages/dclutch-sdk/lib/directHotChain.ts:896 (file otherwise differs from web — web has ~15 extra lines), packages/dclutch-sdk/lib/dealerEquityChain.ts:295 (identical twin).

2. AccountProfile operation stride as bare 16

/Users/ember/dev/dclutch/apps/dclutch-web/lib/directInlineV3.ts:654const expectedProfile = profileHeader + (fixed + stride) * RULE_BYTES + (fixedOperations + itemOperations) * 16;
TwinOPERATION_BYTES = 16 — apps/dclutch-web/lib/generated/directInlineV3.ts:199

HEADER_BYTES and RULE_BYTES are imported from that module in the same import list; OPERATION_BYTES appears zero times in the file. Purest form of the shape. Same line in SDK (files identical).

3. Dealer LP Position width as bare 256 inside a chain validator

/Users/ember/dev/dclutch/apps/dclutch-web/lib/dealerAccountProfileV3.ts:504|| profile.rules[DEALER_LP_STATE_ACCOUNT_V3]?.dataLength !== 256
TwinDEALER_LP_POSITION_BYTES_V3 = 256 — apps/dclutch-web/lib/generated/dealerEquityV3.ts:29

DEALER_LP_STATE_ACCOUNT_V3 on that very line is imported from the module that defines the twin (~50 siblings imported). SDK identical at :504.

CONVICTED — shadow constants (values currently agree; drift-exposed)

/Users/ember/dev/dclutch/apps/dclutch-web/lib/rationalRetireReceiptV4.ts:76-82 redefines by hand what import * as Hot from './generated/directInlineV3' (line 36) and ./generated/coreFound (line 34) already supply:

LocalEmitted twin
CLAIMS_MARKET_HEADER_BYTES = 256 (:77)LIABILITY_BASIS_MARKET_HEADER_BYTES_V2 = 256, generated/coreFound.ts:65
CAPABILITY_ROOT_HEADER_BYTES = 232 (:79)CAPABILITY_ROOT_HEADER_BYTES_V1 = 232, generated/directInlineV3.ts:103
CAPABILITY_SET_HEADER_BYTES = 32 (:80)CAPABILITY_PROGRAM_SET_HEADER_BYTES_V2 = 32, generated/directInlineV3.ts:146
CAPABILITY_SET_ENTRY_BYTES = 72 (:81)CAPABILITY_PROGRAM_SET_ENTRY_BYTES_V2 = 72, generated/directInlineV3.ts:147
CAPABILITY_PROGRAM_V4_BYTES = 600 (:82)CAPABILITY_PROGRAM_V4_BYTES = 600, generated/directInlineV3.ts:77 — identical name

SDK copy at packages/dclutch-sdk/lib/rationalRetireReceiptV4.ts:75-81 (file otherwise differs from web).

Same file, magic strings whose twins live in the already-star-imported module:

Claims aggregate / Position decode built entirely from literals while the full offset set is emitted — /Users/ember/dev/dclutch/apps/dclutch-web/lib/rationalOpenChainV4.ts:155-179 (SDK identical):

if (bytes.length !== 256 + input.outcomes * 8 || ascii(bytes, 0, 8) !== 'DCLLBM02' || u16(bytes, 8) !== 2 || u32(bytes, 12) !== input.outcomes)

The file imports LIABILITY_BASIS_MARKET_SEED_V2/LIABILITY_BASIS_POSITION_SEED_V2 from ./generated/coreFound (lines 10-13) — the same module that emits every literal used here: LIABILITY_BASIS_MARKET_HEADER_BYTES_V2 (256), ..._MAGIC_V2, LIABILITY_BASIS_STATE_VERSION_V2 (2), ..._CLAIM_COUNT_OFFSET (12), ..._REVISION_OFFSET (16), ..._LOGICAL_ID_OFFSET (24), ..._RELEASE_SET_OFFSET (56), ..._REGISTRY_OFFSET (88), ..._PRODUCT_OFFSET (120), ..._BASIS_OFFSET (152), ..._REALM_OFFSET (184), ..._CUSTODY_CONTEXT_OFFSET (216), ..._GENERATION_OFFSET (248). Position path at :173-179 mirrors it against LIABILITY_BASIS_POSITION_* (128, 12, 16, 24, 56, 88, 120).

Same file :200 — ascii(profile, 0, 8) !== 'DCLTAP02' || u16(profile, 8) !== 2 || u16(profile, 10) !== 11:

Also directInlineV3.ts:631 — decode(profile.slice(0, 8)) !== 'DCLTAP02' with view.getUint16(8) !== 2 and [2, 3, FIXED_DATA_PREDICATE_ARTIFACT_PROFILE]: the third element is imported from generated, the first two (ARTIFACT_PROFILE = 2, SELECTED_WINDOW_ARTIFACT_PROFILE = 3 in v2.rs:48,50) are literals.

SUSPECT

/Users/ember/dev/dclutch/apps/dclutch-web/lib/localSuccessor.ts:182 — whole Resolution-certificate decoder written in literals: bytes.length !== 312, u16(bytes,8) !== 1, bytes[10] < 1 || > 4, requireZero(…,11,5), requireZero(…,260,4), and reads at 16/240/248/252/256/264/272/280/296/304. Every one of those numbers has a named twin: RESOLUTION_CERTIFICATE_BYTES_V2 and the full CERTIFICATE_V2_*_OFFSET set in crates/dclutch-resolution-codec/src/generated_v2.rs:19-45, mirrored into TS as packages/dclutch-sdk/lib/generated/resolutionCertificateV2.ts. packages/dclutch-sdk/lib/resolutionCertificateV2.ts:58-86 is the reference implementation using all of them. Verdict is SUSPECT not CONVICTED because the magic here is DCSRCER1 (V1, formal/dclutch-semantics/DClutchSemantics/SourceResolutionAbi.lean:244-245) while the emitted TS module is V2 (DCSRCER2); offsets are numerically identical across both, and apps/dclutch-web/lib/generated/ has no resolutionCertificateV2.ts at all — the web tree cannot import the twin today. The Lean certificateSchema/certificateBytes/certificateMagic are scrapeable for a V1 emitter. Same file :181 uses literal 1288 for the activation cache while ACTIVATION_CACHE_BYTES = 1_288 is exported from sibling releaseRegistry.ts:18; :183 (DCLTSRS1, 224 bytes, offsets 15/48/184/192/208) has twins in crates/dclutch-source-contract/src/generated_source_resolution_state_v2.rs — I did not byte-verify the V1/V2 offset correspondence. SDK copy differs from web but carries the same block.

/Users/ember/dev/dclutch/apps/dclutch-web/lib/dealerAccountProfileV3.ts:415-422 — header field reads at 12/14/16/18/20/22/24/26 (fixed, itemStride, fixedOperations, itemOperations, commonScalars, itemScalarStride, commonIdentities, itemIdentityStride). I looked in generated/dealerEquityV3.ts, generated/directInlineV3.ts, crates/dclutch-account-profile-contract/src/v2.rs and .../generated.rs. The V1 file emits ACCOUNT_PROFILE_ACCOUNT_COUNT_OFFSET = 12 … ACCOUNT_PROFILE_IDENTITY_COUNT_OFFSET = 18, but those V1 names carry different field semantics than the V2 layout being read here, and no V2 header-offset constants are emitted anywhere. Twin plausible, not found. Sibling literals in the same validator with no twin found: :490 fixedOperations !== 3, :502 fixedOperations !== (open ? 14 : 13), :473 custody = add ? 2 : 3.

/Users/ember/dev/dclutch/apps/dclutch-web/lib/rationalCapabilityChainV4.ts:73 — bytes.length < 104 || ascii(bytes,0,8) !== 'DCRRGRP2' || u16(bytes,8) !== 2, plus :76 requireZero(bytes,92,4), :82 u64(bytes,96), :85 104 + index * 64. No DCRRGRP2 twin in any generated TS module or crates/*/src/generated_*.rs; I checked dclutch-rational-representation-v2-kernel/src/generated_descriptor.rs and generated_product_v3.rs. Same for :193 rootAccount.data.length !== 232 + capability.rootStateBytes (the 232 does have a twin — CAPABILITY_ROOT_HEADER_BYTES_V1, generated/directInlineV3.ts:103 — but this file does not import that module).

/Users/ember/dev/dclutch/apps/dclutch-web/lib/directHotChain.ts:843 — Direct capability seal: 'DCLTCSL1', u16(seal.data,12) !== 6, u16(seal.data,14) !== 0x00ff, readU32(seal.data,16) !== 1, identity slices at 24/56/88/120, and the PDA domain 'dclutch:capability-seal:v1' hand-carried at :127. crates/dclutch-capability-seal-contract has no generated_*.rs; nothing emitted found. The 0x00ff in particular reads like a wire constant that should be named.

/Users/ember/dev/dclutch/apps/dclutch-web/lib/dealerEquityChain.ts:164 — u32(bytes, 12) !== 10 || bytes[16] !== 2 || bytes[17] !== 0 for ProgramSet V1, immediately after using HotAbi.CAPABILITY_PROGRAM_SET_HEADER_BYTES_V1 on the previous line. Only ..._HEADER_BYTES_V1/..._ENTRY_BYTES_V1 are emitted for V1; no selector-count twin found.

/Users/ember/dev/dclutch/apps/dclutch-web/lib/rationalOpenChainV4.ts:~231 — coordinate !== 5 && observed.isSigner !== …: a bare account-index exemption inside the Profile11 privilege loop. Looked for a route-index twin in generated/claimsCustodyReplayV1.ts (REPLAY_ACCOUNT_*_V1) and generated/directInlineV3.ts (HOT_*_ACCOUNT_V3); none matches this frame.

BENIGN (checked, not reportable)

bytes.length !== 32 / !== 64 identity and signature guards throughout (bytes.ts:47, directCodec.ts:52, directTransaction.ts:99, directTicket.ts:63) — structural to ed25519/pubkey. Loader layout literals 36 / 45 / u32(data,0) !== 2|3 (rationalRetireReceiptV4.ts:765, localSuccessor.ts:166-167) — Solana upgradeable-loader shape, not dClutch ABI. SPL Token-2022 offsets in rationalTokenV2.ts:157,264-273 and registeredDirect.ts:264-273 — foreign program layout. Solana native program ids in activity.ts:29-36, rpc.ts:29-31 — canonical. deployments.ts:91-136 — this file is the deployment record; note only that genesisHash: 'EtWTRABZ…' at :91 duplicates SOLANA_DEVNET_GENESIS_HASH_V1 exported from sibling rpc.ts:29 (local twin, not generated). components/*.tsx: only RationalOpenPanel.tsx:42 and RationalRetireReceiptPanel.tsx:36 (addresses.length !== 38) carry ABI-shaped literals — the 38-account Hot frame; the sibling rationalOpenClaimsMetasV4 comment calls it "32+4*N", so the count is derived, not fixed — flagging as low-confidence SUSPECT rather than convicted.

Files with no findings: capabilityManifest.ts, realmRecord.ts, refusals.ts, productRuntimeV2Admission.ts, claimsCustodyReplay.ts, marketCoreV2.ts (reference-quality), generalPlanV5.ts and infrastructure.ts (near-clean; generalPlanV5.ts:345,409,428 use u16(bytes,8) !== 2 beside Abi.*_MAGIC_V2 where a *_VERSION_V2 twin was not emitted), explorer/**, founding/**.