Protocol capability and flow-test frontier — 2026-08-29

Evidence class: offline source-contract and checked-in evidence analysis at commit 6d9d4b362cc14039dfce6dc6b11d7b7e17e98573. No build, validator, RPC, wallet, key, deployment, or submission was used for this analysis. A devnet statement below means only what the checked release/evidence records establish; it is not mainnet evidence.

Result

The repository is not one uniformly callable protocol. It currently contains four distinct strata:

  1. durable private exteriors for founding, participant admission, Direct, Resolution, wallet payout, source abort, and retirement;
  2. complete public-wallet submission for redemption only;
  3. public-wallet signing and packet export, but deliberately no submission, for Dealer equity and release activation;
  4. constructor, projection, or real-SBF component artifacts without a durable capability caller for Series Shadow, the Series Hot plan, General submission, Product Runtime V2 admission, Dealer Accepted completion, and the funded failure walk.

The seven devnet programs are a previous-generation role deployment. Registry and Rent are installed, and the five execution roles Core, Claims, Trading, Resolution, and Custody were activated. That does not activate current-source Dealer, Series, or General links, and it does not prove a market selected any of those families. The current Upgrade/release/fresh-Market cycle is still pending. The prior devnet campaign published a Realm and reached real founding prestates, but no Market reached Open; therefore admission, trading, resolution, Claims payout, redemption, and retirement have no market-level devnet activation.

There is no current-source, all-stage economic system execution. The PRIVATE lifecycle preflight is an offline reachability and expected-execution model and states that its actual probe still stops before validator launch. There is also no concurrent runtime campaign. The twenty-seed multiwallet oracle includes simultaneous candidates and shared nonces, but deterministically orders and applies them in one offline model; it is not parallel Solana transaction execution.

Classification vocabulary

Capability matrix

SurfaceConstructor-only?Caller-backedPrivate runnerPublic walletDevnet activationEconomic / concurrent system evidence
Realmnoyes: the successor Market producer constructs RealmV1 and publishes the Registry record consumed by founding/admission/Direct/payout readersyes, inside the Market/founding runnerno; public clients only inspectrecord publication yes in the previous devnet lineage; no standalone Realm program and no Open Marketno economic transition; no concurrency test
Foundingnoyes: the successor runner and dclutch found own durable founding; the CLI also chains first participant admissionyes, local-validator campaign; focused real-SBF founding componentsno: Create Market is read-only and /found exports a legacy incomplete unsigned Found37 packetprevious generation reached Realm, Rent, Found31, and projected-Custody prestate, then TooManyAccountLocks; no Open Market. Current DCLTGMF2/GMF3 source is not activatedcomponent/local founding execution exists; current-source whole economic run no; concurrency no
Participant admissionnoyes: plan_user_position_admission_v1 is consumed by the durable successor admission exterior and by dclutch foundyes, owned-loopback command and focused ProgramTestno; web authenticates the participant state but does not build/sign/submit its caller transactionno Open Market, therefore no devnet admissionoffline ledger predicts it; current all-stage observed economy no; duplicate-admission race not tested
Product Runtime V2 record admissionyes at the non-test mutation boundaryno durable submitter: Rust builds an unsigned instruction and Product Studio only composes its 9-account requestnative ProgramTest executes the operator-built instruction; the real-ELF variant is checked in as ignored and requires external SBF outputno: compose only, no RPC/sign/submitnoisolated admission/rollback simulation only; no economic or concurrent execution
Directno privately; yes publicly at executionprivate yes: durable produce/execute/payout-schedule commands. Public CLI buy/sell intentionally refuse because the exact packet journal, ack, and ten finalized poststates are not yet ownedyes, real-SBF Direct campaigns and owned-loopback successor commandsno execution: browser is read-only; CLI can sign an offchain intent onlyold Trading role is activated, but no Open Direct Market and current source is not installedreal-SBF component effects and exact offline multiwallet economy exist; no current all-stage observed economy; shared-nonce cases are model-only, not runtime concurrency
Dealer equity selectors 1–6yes at durable submissionno durable submitter; the browser constructs, signs, and exports the packet onlyreal-ELF Dealer refusal campaign reaches the family program but explicitly proves no accepted transitionsign/export only; the workbench says nothing is submitted; LP/scenario flows are hiddenno Dealer program in the seven-program devnet release and no Market selectionno accepted economic execution and no concurrent Dealer campaign
Dealer scenario / Acceptedyesnone: Trading dispatches create/page/evaluate/reserve/rollback/cleanup and the operator builds packet/journal values, but every builder is referenced only in its own module/tests; Custody reservation producer and final 41-lock Accepted executor do not existcomponent only: fresh real-SBF build/frame evidence and codec/operator tests; unresolved aggregate ProgramTest dependency prevents the full routeno scenario surface; hidden in the workbenchno Dealer/accelerator program in the seven-program devnet release and no Market selectionno Accepted economic execution and no concurrent Dealer campaign
Series occurrence / Core consumeno for the Core action, but no production exteriortest-only caller: tier 4 invokes Core five times through series-consume-caller, explicitly not TradingProgramTest yes; it fabricates Loader-v3 state, so not validator evidencenono Series program or Market selection on devnetone-shot/replay/rollback component evidence only; no economic journey or concurrency
Series Hot planyesnone outside crates/dclutch-operator/src/series_hot_v3.rs and its tests for build_series_prepare_hot_v3, build_series_consume_hot_v3, and build_series_expire_hot_v3nonononone
Series Shadow acceleratoryesno real Trading caller; the nested harness exposes loader, selected-build, route-order, and rollback support onlyreal selected ELF/build evidence, but no caller-backed action executionnonono action CU, economic journey, or concurrency evidence
Generalno at plan/component boundary; yes at durable submissionpartial: build_general_hot_instruction_v3 has a real ProgramTest caller, V5 wraps it, and web consumes/exports the plan; no durable submit/finalize exteriorreal-ELF ProgramTest executes all seven actions at N=1 and N=258; not local-validator evidenceno: browser exports an unsigned packet and never signs/submitsno General/accelerator program in the seven-program devnet release and no Market selectioncomponent action execution and rollback yes; no end-to-end economy or concurrent submissions
Resolutionnoyes privately: successor terminal commands drive submit, provider execution, Core acceptance, reclaim, and direct closeyes: journey/ProgramTest and durable owned-loopback exteriorno mutation; SDK/browser read certificates and terminal stateprevious Resolution role activated; no current Open Market/certificate, and no current-source lifecyclereal-SBF component/journey evidence exists; current PRIVATE Pyth/Resolution runtime remains owed; no concurrent candidate campaign
Oracle / provider transportnoyes privately: Pyth VAA provisioning, Pyth provider, relay, and sponsored-push producers feed Resolutionyes, private journey/relayer tools and component campaignsno wallet actionPyth synthetic release record was published/read and old Resolution was activated; no open market observation was acceptedno all-stage observed economic run; provider-success/failure exist in model/component evidence; no competing-update race
Claimsnoyes through founding/admission/Direct/resolution/payout/retirement child calls; no standalone public Claims administratorextensive real-SBF component campaigns and private successor flowsindirect through public redemption replay/payoutClaims role activated; no Open Market aggregate/terminal Claims statecomponent conservation/rollback and offline full ledger yes; current all-stage observed economy no; payout replay concurrency no
Redemptionnoyes: CLI and browser each own Claims-Custody replay followed by terminal payout, durable unsigned/submitted journals, one-send recovery, and finalized poststatesyes: wallet-terminal payout producer/exterior; current PRIVATE runtime execution still owed by its preflight recordsubmit: RedeemFlow signs and submits both steps with Wallet Standardcode is ready, but no terminal devnet Market exists, so not exercisedexact offline positive and zero-payout ledger plus component tests; no current whole observed run and no same-Position payout race
Retirementnoyes privately: checkpoint operator plus terminal-sequence/aggregate-retirement exterior owns the four packet suffixfocused real-SBF Core/Claims/Custody/Rent campaign executes all four transactions; private validator completion is still owedno; web status is read-onlyno terminal devnet Marketisolated exact rent/refund conservation yes; current all-stage economy no; late-payout/retirement contention not tested
Recovery: staged founding abortnoyes: source-abort-v1 persists and advances the DCLTPCA1 -> DCLTCF1A -> DCLTCF2A suffixprivate/devnet-capable successor exteriornoprevious lineage records an abort-lane Market as staged and unwound; current DCLTPCB2 exterior is source, not current devnet release evidencesuffix conservation checks exist; no concurrent open-versus-abort runtime test
Recovery: funded failure walkyes at submissionpreview only: SDK builds it and dclutch walk requires --dry-run; CLI explicitly waits for durable Submitted/finalized certificate+bounty ownershipResolution components exist, but no caller-complete walk exterior was foundnono funded terminal Market and no submitted walkmodel/refusal tests only; no bounty economic or deadline race execution
Recovery: client crash/restartno single protocol capabilityyes per founding, admission, Direct-private, redemption, payout, abort, retirement, and upgrade exteriors; not yet common/conformance-ownedyesredemption only; Dealer/release export transfers recovery responsibility outside the appnot a Market activation propertystrong per-flow journal tests, but no cross-flow upgrade/interleaving system test
Releaseno privately; yes publicly at submissionprivate successor release/activation/upgrade runners exist. Web reacquires the release, wallet-signs one role at a time, then exports bytesyes, checked-release/private mutable runnersign/export only; Release Workspace has no submit path and does not update programsyes for the old release: seven programs deployed, five execution roles activated. Current 13-link checked source upgrade/activation is pendingrelease crash/model checks exist; no economic test; no concurrent activate/upgrade interleaving campaign
Public SDK as a wholenot purely; read/decode is broad, mutation completeness is narrowcaller-complete public mutation only for redemption. Failure walk/Direct remain refused; Dealer/General/release expose partial subpathslocal successor conformance is read/verification support, not a public runnerredemption submit; Dealer/release sign/export; otherwise inspect/previewpackage describes devnet state but does not make a capability activeABI/unit/model evidence only at package boundary; no SDK-wide journey or concurrency campaign

The SDK package is named @dclutch/sdk but currently declares "private": true. Its root comment is the correct governing rule: a packet constructor is not public until one caller owns the durable journal, acknowledgement, and finalized poststate. The wildcard subpath export makes many lib/*.ts modules importable even when they are not re-exported at the root, while directTransaction, directCodec, and registered Direct packet paths are explicitly nulled. Package reachability must therefore be tested as a real API boundary rather than inferred from index.ts alone.

Executable producer/caller trace

Durable fact or transitionProducerExecutable consumer/callerMissing edge
Realm recordtools/local-validator/bootstrap/successor/src/market.rs constructs RealmV1 and publishes it through Registrysuccessor founding; admission, Direct token setup, and wallet-terminal readerspublic Realm creator absent by design
Open Market and founder admissiongeneric founding operators plus successor Market campaignlocal-private-validator-market-v1, founding campaign, and dclutch foundno public wallet founding; no current devnet success
Participant Position/admissioncrates/dclutch-operator/src/user_position_admission_v1.rssuccessor user_position_admission.rs; dclutch found first-participant steppublic wallet caller absent
Direct packet/poststateDirect operator/transaction compiler and successor producerprivate durable Direct executorpublic CLI/web durable packet/ack/poststate owner absent
Dealer Accepted stateTrading checkpoint codecs/operatorsno non-test durable caller; SBF dispatch and module-local tests existartifact without caller, release-authenticated Custody reservations, and final Accepted commit absent
Series occurrenceCore Series consumetest-only series-consume-callerprojected Trading production caller absent
Series Hot prepare/consume/expireseries_hot_v3 operator buildersnone outside same module/testsartifact without caller
Series Shadow evaluationselected Series Shadow ELF and nested loader harnessnone reaches evaluator through real Tradingartifact without caller
General successor planGeneral operator V3/V5ProgramTest caller; web hostile decoder/exportdurable sign/submit/finalize exterior absent
Product Runtime V2 admissionRust operator and Product Studio request composernative ProgramTest submits it; no non-test durable callerartifact without production caller
Resolution terminal certificateResolution operators and successor Pyth/relay/flagship commandsprivate runner; public SDK reads certificatepublic resolution submitter absent; current full private run owed
Terminal payoutClaims replay + wallet-terminal buildersCLI redeem, browser RedeemFlow, private payout exteriordevnet terminal Market absent
Aggregate retirementcheckpoint retirement operatorfocused real-SBF campaign and private aggregate-retirement exteriorpublic retirement exterior absent; full private run owed
Staged source abortsource-abort plannerdurable successor source-abort-v1public caller absent
Funded failure walkSDK failureWalk builderCLI dry-run onlyartifact without submission caller
Release activationrelease registry plannerprivate release runner; browser sign/exportpublic submit/finalize owner absent

These gates are host/static/model work or focused existing-link work. None requires the expensive all-link build. The order prioritizes false capability claims and cross-stage seams before compute measurement.

P0 — machine-readable capability reachability

Add one source-owned manifest with a row per mutating action, not merely per program. Each row should name:

A static test should refuse an exported mutating constructor with no caller or an executable command hidden from accepted help. Seed the hostile cases with the Series three-builder orphan, Product Runtime V2 admission, Series Shadow, General's missing submission edge, Dealer's missing final commit, and failure walk submission. The existing PRIVATE preflight already proves dispatch/help reachability for its fourteen commands; generalize that pattern instead of creating a parallel list.

P0 — release deployment is not capability activation

Add a pure release/capability state classifier with exhaustive states:

Absent -> Installed -> RegistryActivated -> MarketSelected -> Executed

Require source digest and activation evidence at every transition. A test must refuse to label Dealer, Series, or General “devnet” merely because the SDK has an ABI or the current checked release enumerates 13 links. It must likewise report the old seven-role release honestly without projecting it onto current source. This gate is cheap and prevents the most damaging public-truth error.

P0 — cross-flow durable journal conformance

Extract a test contract, not a second implementation, for the common states:

Observed -> Planned/fsynced -> Signed+Submitted/fsynced -> Finalized+poststate

Run the existing founding, admission, Direct, payout, abort, retirement, and upgrade journal fixtures through it. Required hostile cases: ambiguous send never resubmits; expired unsigned packet may be archived/rebuilt; submitted packet may not be discarded; release/Market/generation/account scope cannot change; poststate must be read at or after the confirmed slot. This is a high-value pre-GMF3 architecture test because every later journey depends on the same crash semantics.

P0 — account-lock and packet census from constructors

Compile host-side v0 messages with two ComputeBudget instructions and count resolved unique transaction locks, not instruction metas. Cover one maximum fixture for:

Require packet <= 1232 and locks <= 64. Existing General, retirement, Direct, founding, and Dealer measurements can become fixtures. This catches transport impossibility before an all-link build without pretending to measure SBF frame or compute.

P1 — producer-to-consumer poststate graph

For each journey, feed the prior stage's decoded poststate into the next production constructor in memory. Do not permit hand-planted intermediate accounts. At minimum exercise:

Realm -> founding -> admission -> Direct -> Resolution -> payout -> retirement

and the sibling fronts:

Dealer prepare -> reservations -> commit/rollback
Series open -> prepare -> consume/expire -> close
General batch -> orders -> best valid submitted candidate -> settlement -> close

The test should fail today at the honest missing edge, not fabricate a green journey. This pulls the Series caller, Dealer reservation producer, and General durable exterior gaps into executable architecture.

P1 — exact economy against observed component snapshots

Keep tools/economic-lifecycle-ledger/ledger.py as the one economic arithmetic owner. Have focused real-SBF or private-runner stages emit its existing observed snapshot schema after admission, each Direct group, resolution, payout groups, and retirement. Check all twenty named seeds at the component boundary before the full validator campaign. Include zero-payout losing burns, the 50-bps gross-199/gross-200 floor, exact fee destination, Hoard principal conservation, and the five retirement refund classes.

This is still not a whole-system result until one runner observes all stages, but it converts the current detached oracle into a reusable differential gate.

P1 — transaction contention model, then focused runtime races

First derive a writable-account conflict matrix from the exact compiled messages. Then add small focused real-runtime campaigns for:

The conflict matrix is architecture evidence. Only the follow-on runtime runs may be called concurrent system tests.

P2 — Rust/report/client differential gates

For General, Dealer, Series, founding, failure walk, payout, retirement, and release, serialize production Rust operator reports and feed those exact bytes to the SDK/browser hostile decoders. Require canonical re-encoding or an exact named refusal. Series currently lacks the public caller/decoder completeness of the better-covered families; add it only with the production caller, not as another decorative ABI.

Add a package-boundary test that enumerates package.json exports and the root exports. It should prove that intentionally private Direct packet modules remain unreachable, that wildcard subpaths do not silently convert a preview into a supported mutation API, and that every advertised public mutation has the same-package durable caller contract.

P2 — upgrade/resume interleaving

Use the current upgrade dry-plan and existing operation journals to model a release change between Planned, Submitted, and Finalized. A submitted signature is polled against its original release; it is never rebuilt merely because activation moved. An unsigned plan may be rebuilt only after explicit archive and fresh reauthentication. Apply the same test vector to founding, admission, Direct, redemption, retirement, source abort, and release itself.

Evidence anchors