Series pre-Market expiry — real-ELF ProgramTest, 2026-09-07

Evidence level: real SBF execution in an in-process ProgramTest bank. This is not local-validator founding, packet-size/finalization evidence, devnet execution, or evidence for the complete two-occurrence Series lifecycle.

Source and result

The test host and Trading source were the clean committed revision 548a2f1f624f900fd99eb9aeff362af2972a1dbd, checked at hbox:/tank/dregg-build/dclutch-integrated-fa0198512 immediately before each run. Companion programs were the controlled release-B artifacts built at 56767e555d05ecd005edec4fc939d269e8757417. The mixed artifact set is deliberate component evidence; it is not a checked release of the newer source.

Both shipped and profiled Trading runs passed all seven named-target tests:

The four caller refusals are TradingSbfError::SeriesPrecommitCallerKey, SeriesPrecommitCallerPrivileges, SeriesPrecommitCallerOwner, and SeriesPrecommitCallerData. Their discriminants are owned by the enum and namespaced census; no earlier generic refusal or prior-CPI log substitutes for those assertions. The earlier assertion that Custody must already have executed before Core preflight was incorrect: preflight precedes every CPI.

For each accepted ordinary expiry control, Trading consumed 1,216,428 CU in the shipped build and 1,251,928 CU in the profiled build. The enclosing Registry continuation consumed 1,304,551 and 1,338,676 CU respectively, under the test's 1,399,700 available units after compute-budget instructions. These are measured costs of these artifacts, not new protocol limits.

Poststates and repairs

The future Market stays vacant. The transient projected Custody state and vault close, their exact recorded rent returns to RentCredit, the permit closes, and Trading commits the expected root and Ticket replay bytes. Ordinary collateral refund ownership remains the Ticket's wallet owner; rent credit is a different physical recipient. The comparison checks data, owner, lamports, executable bit and rent epoch. Expected surviving modified accounts use Agave 4.3's bank-owned u64::MAX rent-epoch normalization; no economic or byte comparison is omitted.

The integrated repair in fa0198512 authenticates the semantic Template id from the finalized config bytes, derives the Custody transfer bump for the future Market, carries the physical rent-credit address, specializes projected abort to its exact 768-byte wire and 11-account frame, verifies its typed receipt and rent poststate, and downgrades Core's two replay observations without granting it Trading's commit authority.

That combined shipped build initially emitted 58 frame-overwrite diagnostics in authenticate_and_execute_hot_v3. It was rejected before execution. Extracting selected-entry decoding into a non-inlined helper in 548a2f1f6 produced shipped and profiled Trading ELFs with zero occurrences of either compiler frame-error pattern. This does not discharge the later all-program frame baseline debt.

Reproduction and artifacts

Run from the exact clean host revision, on hbox through swarm-build, with SWARM_MEM_MAX=32G CARGO_BUILD_JOBS=6. Set SBF_OUT_DIR to the controlled release-b-test-elf directory below and DCLUTCH_TRADING_ELF_PATH to one of the explicit new Trading artifacts. The named target is intentionally serial:

cargo test --locked -p dclutch-trading-program-test \
  --test series_pre_market_expiry_program_test -- --nocapture --test-threads=1

All relative paths in this table are under hbox:/tank/dregg-build/dclutch-codex-evidence-20260907/.

ArtifactSHA-256
integrated-548a2f1f6/shipped/dclutch_trading_sbf.sod334cc52c57d796f8d1beccff1d8a273688e626246008ede64b2e500064a1e38
integrated-548a2f1f6/profiled/dclutch_trading_sbf.so60cce050098221081f6562c6ae5a3755b2db1be76268cd21ac16cd9ebec18021
integrated-548a2f1f6/series-target-shipped.log30d929d975490b49a4003890ee4d27643fe514245a91e7929ec831aae8b50966
integrated-548a2f1f6/series-target-profile.log15024ee651af88d1e34d4955e37c0fcada0e58b34ce6c873e2cf64fb09a52baf
integrated-548a2f1f6/trading-shipped-build.logb2f9c87ccdbd0617deed8487b74d85b3b25500e3c9ad6893ceda22c021483412
integrated-548a2f1f6/trading-profiled-build.logd6c31a0f24242a666d1f213c86c3e01f2a8fe24005bbdc4fd592093ee676ac11
release-b-test-elf/dclutch_core_sbf.so7013924151b5fbd1f3d5abf0c88fb6199adaf2a6ba7f2a91da89014c4cf086a9
release-b-test-elf/dclutch_claims_sbf.so19a3be2fcb625bf56166f8b638adba2e7d970421d1a08e9fdd1bc63d7ddaef5d
release-b-test-elf/dclutch_custody_sbf.so178bb636165036ef061dc2268868c845fed47e3f9bdd1632d2c06161b242a5b7
release-b-test-elf/dclutch_registry_sbf.so8eb3ccc0e9d0f895521be92b48f5ce6ac912fdca17c79018148581056150fc54
release-b-test-elf/dclutch_rent_sbf.so100f211918acc5764fd797b4e2070bc0dd7b1b6ce095351c2494ac6355653143
release-b-test-elf/spl_token_2022.soe2acdfb750881462ad613a15cc9c54ae17ce066580e867e1e635fbdfe01f5697

The native seam controls also passed: five Core precommit tests, two projected cleanup tests and the three family's mined-bump controls. The Series bump control was first observed red before the future-Market derivation repair. Complete Found→Prepare→Consume/Expire→retirement execution on a local validator remains assigned to the Series producer lane.