Architecture validation and qualification plan

Draft protocolSource at 169cbd2 ↗Source SHA-256 b5e81d6…ec6
Field Value
Status Design complete for review; every Makechain executable result is NOT RUN
Updated 2026-09-22
Protocol baseline Specification revision 14, 2026-09-22
Commonware baseline v2026.9.0, commit d476a2361ce6840d2b9d0aa6fb30a924429046d4
Qualification scope 71 specification invariants, APP-01–20, API-01–20, Q1–Q6, and MC-01–03

This plan maps each requirement to an owner, an interface-level observation, an acceptance criterion, and honest evidence status. A scenario definition, source inspection, compiling harness, or passing unit test is not production qualification for a network. Results change only through immutable run manifests that meet section 10.

The specification and companions define behavior. Architecture defines modules and semantic interfaces. Operations defines persistent ownership and Q1 crash cuts. Repository defines dependency, local-gate, deferred hosted-CI, and release rules. The canonical vector and fixture formats remain owned by encoding, with their inventory in data contracts.

1. Evidence vocabulary and module keys

Code Meaning
DEF Requirement is defined in reviewed prose only; no executable evidence
SRC-CW Relevant Commonware behavior was source-reviewed at the exact pin
SRC-TEMPO Relevant Tempo behavior/profile was source-reviewed at the recorded pin
SRC-CONTRACT Current settlement contract was source-reviewed and found insufficient for the required proof
SRC-GCP Relevant GKE/GCS documentation was reviewed for the selected disposable-devnet adapter/topology; no deployment evidence
NOT RUN No Makechain implementation/harness result exists; this is the current status of every executable row
BLOCKED-SETTLEMENT Positive settlement result awaits the immutable settlement deployment/profile and authentic proof
NOT WRITTEN The planned formal model and checked configuration do not yet exist
DRAFT MODEL A formal model exists and its fast configurations run under pinned tools, with no reviewer verdict and no implementation linkage; it is not evidence for any claim
PASS / FAIL / INCONCLUSIVE Allowed only in a complete result manifest; missing/bypassed evidence is INCONCLUSIVE

Source review supports the stated external contract only. It does not establish Makechain assembly, correctness, crash safety, performance, or production readiness. In the tables, a reference such as SRC-CW; NOT RUN means exactly that.

Key Owning module Interface/method named by this plan
CS Canonical schema DecodeCanonical, canonical encode/digest/tree helpers
RE Release evaluator ResolveRules, activation installer
CA Command authentication AuthenticateCommand
AE Application executor EvaluateCommand, ExecuteOrderedBlock
ST Three-member state adapter OpenParentView, MerkleizeBlock
EA Engine assembly Stateful adapter propose, verify, apply, capture, finalized; recovery lifecycle
MM Mesh membership TrackPeerSet
PV Proof verifier VerifyEvidence
AF Admission and fan-out OpenAdmissionSnapshot, Admit, DryRun, InsertCandidate, SelectForProposal, FanOut
FE Finalized export EnqueueFinalized, PublishFinalizedRange
QP Query projection project/replay/cursor interface
SA Service authentication service authorization and freshness policy
CW Client workflow, deferred PrepareCommand, signing-slot journal, ReconcileIntent, CompletePush

Tests observe these interfaces and their durable/public outcomes. They do not assert private helper calls or require a generic mock wall around Commonware. Production adapters are replaced only at real external seams: transport, filesystem/crash control, cloud/object/query storage, Tempo fixture acquisition, and the deferred client journal.

2. Common harness contract

Every deterministic or persistent harness uses:

  • canonical frozen inputs and the production codecs/verifiers for the enabled profile;
  • explicit chain/genesis/profile/ruleset, seed, consensus time, runtime, pin set, and fault schedule;
  • actual Commonware actors and the exact three-member database adapter when the claim crosses those seams; finality is a real threshold certificate, never a harness flag;
  • real captured Tempo evidence for a positive import. Dev/test uses Moderato; mainnet uses Mainnet;
  • bounded inputs, queues, clocks, work, and observation periods;
  • typed invalid, pending, fatal-local, and service outcomes without conflation;
  • an immutable result manifest on pass, failure, or inconclusive termination.

Deterministic Q1/Q2 harnesses may consume published reproducible synthetic shares/seeds only from the repository's exact TEST ONLY fixture allowlist. Persistent devnet/testnet/mainnet runs use operator-provisioned custody material that is never committed. Both paths use real threshold operations; neither permits a harness finality flag.

The smallest local stand-ins are allowed only where the architecture has a real adapter seam. An in-memory journal may test Client workflow; an in-memory transport may test a service protocol; a fake finality certificate, permissive settlement verifier, generic in-memory database replacing a QMDB durability claim, or edited recovery journal cannot earn qualification credit.

3. Staged qualification experiments

All six experiments are NOT RUN. “Smallest harness” describes the first useful experiment, not an implemented test.

ID Hypothesis and smallest harness Acceptance criterion Output and current limitation
Q1 Fixed-profile application/consensus/persistence: seven deterministic actors and then seven Tokio processes execute IMPORT_CREDITS.Credit → INIT_ACCOUNT → KEY_AUTHORIZE → PROJECT_CREATE → PUSH through the real executor, three QMDB members, WAL, marshal, sync plan, proof verifier, operations cuts C1–C11, and the selected GCS exporter-publication adapter in Q1-T Q1-D and Q1-T produce actual 5-of-7 finality; propose/verify/apply bytes and outcomes agree; roots/targets/replay/deposits/events agree after every cut; C9 proves fenced identity replacement. At C10 restart observes only native bootstrap and repeats the exact genesis batch, or observes the exact durable genesis root/target and writes nothing; any third state is fatal-local. At C11 the exact durable current target is the marshal genesis anchor, membership/history remain at native bootstrap size one, no reseed occurs, and duplicate genesis delivery causes no application transition. Receipt verifies and substitutions fail; GCS create-if-absent object and recovery behavior matches the finalized-export contract; object absence remains separate Per-cut Operations §4 manifest records pre/post/reopened roots and native targets, finalize-handle resolution, marshal anchor, transition count, and membership/history sizes; Operations §6 records the exact pinned source paths. SRC-CW covers ManagedDb::apply/finalize durability handles, native initial targets, and Stateful/marshal genesis handoff; SRC-TEMPO, SRC-CONTRACT, SRC-GCP; behavior NOT RUN, BLOCKED-SETTLEMENT for the positive flow
Q2 Dynamic membership/DKG: after an explicit reset to DynamicReshareV1, seven participants bootstrap, schedule one add/one departure, run real reshare across the required epochs, inject DkgFailed, restart each custody/public-journal cut, and catch up one lagging node Effective voters remain the last successful reshare until success; departing dealer stays where required; group key is invariant; shares/epochs/mesh union align; corruption/lost required secret blocks readiness; no fixed-profile evidence is reused Seeded DKG transcript, custody/public-journal digests, readiness/mesh/vote timeline. SRC-CW; NOT RUN
Q3 Release activation: one parameter release and one consensus-critical release execute across proposal, activation boundary, restart, catch-up, and historical verification; inject crash before/after installer marker and schedule lock ResolveRules follows executing parent including pending ancestors; critical activation occurs only at the first block of an epoch, after the handoff at the boundary; installer is bounded/exactly once; every active/historical format remains supported; no fallback or reversion Canonical release schedule/lineage, before/after roots, binary support manifest. SRC-CW for actor behavior; NOT RUN
Q4 Native/wasm parity: build the portable package in a separate target invocation with the minimum features required by the pinned native proof types, inspect resolved and reachable imports, then run the encoding-owner corpus through the same Rust protocol/proof logic natively and as wasm32-unknown-unknown, including signing presentations, finality/lineage, QMDB/BMT envelopes, receipts, WebAuthn grammar, and settlement proofs Selected Commonware crypto/proof types compile; emitted wasm has no reachable filesystem/socket/clock/native-I/O path; canonical bytes/digests and accept/reject error classes match for every case; exact consumption and all bounds hold. An unused transitive runtime trait crate alone is not failure Pinned source confirms BMT is outside storage's std gate while QMDB is inside it; the complete portable closure is unverified. Corpus/feature/import-graph report; SRC-CW; NOT RUN, BLOCKED-SETTLEMENT only for the positive settlement proof case
Q5 Exporter, store, and proof service: run validators with the retention window, one active and one standby exporter, the exoware-sql store and the mirror; pause and resume publication across a validator prune; kill the active exporter, resume from the standby, and recover a range that only the standby's own durable queue still holds; hold an exporter whose watermark sits below the validators' retained window and require it to stop rather than state-sync forward; install a replacement standby by state sync while blocks keep finalizing, and separately install a replacement active by state sync while blocks keep finalizing, in each case with the other roster member healthy and queuing, and repeat one of them with no other source holding (W, A]; project the block's history tables into the store atomically with the block, certificate, and operation-log slices; page one query by keyset and read one SubscribeFinalized frame; rebuild the store's history tables from the mirror into a new schema prefix; request membership proofs below the validator window and ancestry proofs from the proof service; run the checker and the replay job The exporter acknowledges a queue position only after both the store and the mirror accept it, so the published watermark never outruns durable objects; every query first bounds itself to the published watermark height and reports it, the exporter commits block batches to the store strictly in height order and one at a time so that a query bounded by that height never misses a lower height's rows, keyset pagination never uses OFFSET, and SubscribeFinalized resumes by sequence and dedups by EventId; a publication pause that spans a validator prune is repaired from the local queue with no gap in the mirror height index; the standby resumes from the store's publication watermark and writes identical objects for the same heights, and its own queue holds exactly the heights the store and the mirror have not both accepted, so it supplies the range an active exporter's lost disk took with it; an exporter state-syncs at its first installation only, records its sync anchor A durably and begins its own queue coverage at A + 1, and in both the replacement-standby and the replacement-active installation the heights (W, A] that its own queue never received are published from the other roster member's queue, so the store and the mirror show no gap over that range although blocks kept finalizing throughout the sync; the installation whose (W, A] no other source covers is refused and alerted rather than completed silently; the finalization pinned as the sync target is read from the store's finalized-by-height record and certificate-verified, and an exporter for which max(own queue coverage, publication watermark) is below the validators' retained window stops and alerts; the block-projected history tables rebuilt from the mirror into a new schema prefix are logically row-equal to the originals under the equality of history-query section 7, with no two rows of one table sharing a key, while the two ingestion tables are outside that equality because the mirror carries neither object bytes nor off-chain messages, which is the only restore path for the store because the store software ships no replication, snapshot, or backup of its own; the checker verifies each block's finalization certificate from its own trust anchor before it compares anything, then compares the store's root at the ingested size with that verified header's membership and history targets and fails ingestion, never a proof request, on mismatch, and a foreign self-consistent write into the store is detected by exactly that check; membership proofs below the validator window and ancestry proofs verify against one certified header; proof serving never mutates the exporter's head; the replay job re-executes stored blocks from genesis under every activated ruleset and reproduces the header roots; loss assumptions and unavailable outcomes are explicit Queue and watermark timeline, mirror height-index gap scan, per-block checker records, target/root comparison, standby takeover and store-rebuild measurement, replay-job manifest. SRC-CW, SRC-GCP for the devnet mirror adapter; NOT RUN; production store replication, publish-lag and restore objectives open
Q6 Edge-to-GKE request path: one minimal Cloudflare Worker adapter sends bounded admission/status/proof requests to a GKE gateway under accepted workload cases and injected timeout, retry, duplicate, stale, overload, and regional/zone network faults End-to-end sizes/latency fit the later accepted envelope; backpressure is bounded; retry never duplicates a fresh-sequence intent; service errors never become validity/proof; identities/ACLs and private endpoints match deployment policy Load/fault report with request/evidence sizes, percentiles, queue/timeout/retry traces, topology and cost. NOT RUN; workload percentile, topology, and product adapter remain deferred

Architecture-gate correspondence is explicit: Q1 supplies slices of G1–G4 and G7; Q2 supplies G5a/G5b; Q3 supplies G6; Q4 supplies portable portions of G1/G7; Q5 supplies recovery portions of G3/G7; and Q6 supplies G8. A Q result earns credit only for the rows listed in its manifest.

Q1 may run as a private partial-slice harness and establishes only its enabled command path and crash cuts; by itself it is not shared-devnet ruleset conformance. Q2 is required because the first devnet omits continuous reshare. Q3 does not prove every future release. Q4 proves parity only for its exact corpus/pins. Q5 proves the configured retention/recovery envelope. Q6 proves one chosen deployment path, not arbitrary Internet or cloud behavior.

4. Specification invariant matrix

Acceptance is evaluated through the named module interface even when several modules participate. “Evidence / limitation” always includes the current executable status. “Defines” is the specification section that states the invariant; section 20 of the specification indexes all 71 by identifier.

Invariant Defines Owner · interface Acceptance criterion Evidence / limitation
INV-CONS-01 12.3 AE · ExecuteOrderedBlock All honest executions over identical authenticated inputs return byte-identical outcome/root or the same typed failure DEF; APP-01/15/20, Q1/Q2/Q3; NOT RUN
INV-CONS-02 11.2 AE · ExecuteOrderedBlock Every committed derived header field equals independent re-derivation in propose, verify, apply, and recovery DEF; APP-01/11, Q1/Q3; NOT RUN
INV-CONS-03 12.3 AE · EvaluateCommand Any late failure leaves overlay, charges, appends, events, and command outcome unchanged and invalidates an included block DEF; APP-04, property P-EXEC-02; NOT RUN
INV-CONS-04 10.1 AE · ExecuteOrderedBlock Each resource dimension is checked independently before commit at exact boundary/overflow values DEF; property/fuzz P-EXEC-03; NOT RUN
INV-CONS-05 11.2 CS · command-tree helper Root covers exact signed-envelope leaves in order/count and is unchanged by events SRC-CW (BMT); Q4 vectors; NOT RUN
INV-CONS-06 7.4 CA · AuthenticateCommand Mutating any bound field/context or ruleset invalidates the signature; evidence-only replacement preserves intent only DEF; APP-02, API-01/03; NOT RUN
INV-CONS-07 5.4 EA · consensus-profile load/validation Profile is derived only from canonical genesis; local flags cannot alter epochs, validity, or block shape DEF; APP-15/19/20, API-17/20; NOT RUN
INV-CONS-08 11.3 EA · consensus-context validation Fixed profile rejects any nonzero epoch or present DKG payload before scheme use in all paths DEF; SRC-CW primitive/profile boundary reviewed; APP-16/20; NOT RUN
INV-FAULT-01 12.4 EA · verify/lifecycle Fault injection yields exactly invalid, pending, or fatal-local and never turns local failure into a vote SRC-CW; Q1/Q2/Q5; NOT RUN
INV-FAULT-02 11.4 AE · block-context execution Wall-clock variations with identical consensus time cannot change result DEF; deterministic property P-TIME-01; NOT RUN
INV-FAULT-03 11.4 EA · verify Future timestamp stays pending until bounded consensus-time condition; no invalid vote DEF; deterministic schedule; NOT RUN
INV-FAULT-04 12.4 AE · EvaluateCommand(PUSH) Availability adapter absent/failing after publication cannot change validation or finalized roots DEF; API-15/16, Q1/Q6; NOT RUN
INV-STATE-01 9.6 AE · ledger transition For every prefix, checked spent plus locked is at most credited and available is derived DEF; APP-05, state-machine property; NOT RUN
INV-STATE-02 9.2 AE · counter helper through EvaluateCommand Bases and checked increments match spec; u64::MAX rejects; delete/recreate cannot reset revision DEF; boundary/property corpus; NOT RUN
INV-STATE-03 9.6 CA · AuthenticateCommand Moving any bound generation/revision/lifecycle context permanently rejects delayed envelope DEF; APP-04/06/08/09; NOT RUN
INV-STATE-04 9.6 AE · typed record reads Expired/invalid record grants no authority while raw state preserves required incarnation/deposit/grace facts DEF; APP-06/09; NOT RUN
INV-STATE-05 9.6 AE · deposit accounting Physical deletion/replacement discharges once to stored payer without changing credited/spent or reservation DEF; APP-03/05, crash replay Q1; NOT RUN
INV-STATE-06 9.2 AE · access plan/EvaluateCommand Instrumented reads/writes stay within command/rules bounds independent of total state size DEF; property P-BOUND-01, workload checks; NOT RUN
INV-STATE-07 9.6 AE · resource reservation Gross implicit/explicit creations reserve before execution, do not net deletions, and never consult local capacity for validity DEF; APP-03, boundary/property corpus; NOT RUN
INV-STATE-09 9.6 CA · project authorization Control/grant generation changes invalidate old project-authorized commands DEF; APP-07; NOT RUN
INV-STATE-08 9.6 AE · child identity transition Delete/recreate uses a strictly advanced surviving-parent incarnation and checked revisions DEF; APP-08, stateful model; NOT RUN
INV-STATE-10 9.2 AE · project/slug transition Every successful prefix preserves a bijection between project slug and matching claim DEF; APP-08, stateful model; NOT RUN
INV-STATE-11 9.1 AE · ExecuteOrderedBlock Later commands see earlier success; failed candidate contributes no observable effect DEF; APP-01/04, Q1; NOT RUN
INV-AUTH-01 7.1 CA · root authorization Root reconfiguration changes version/owners/threshold while account ID remains byte-identical DEF; authorization corpus; NOT RUN
INV-AUTH-06 7.4 CA · root-witness verifier Current version, unique ordered owners, and exact threshold-crossing final signature are necessary and sufficient DEF; parser/property P-AUTH-01; NOT RUN
INV-AUTH-02 7.6 CA · replay validation Sequence must exceed mark for exact (key_id,generation); unrelated slots have no effect DEF; API-04–06/12 reconciliation plus executor model; NOT RUN
INV-AUTH-03 7.3 AE · key authorize/revoke Revoked generation cannot return; re-add advances generation DEF; APP-06; NOT RUN
INV-AUTH-04 7.6 CA · project authority Transfer/role generation change cannot revive earlier envelope DEF; APP-08; NOT RUN
INV-AUTH-05 8.5 AE · username transitions At every deadline, uniqueness and full owner-only grace survive release/rename DEF; APP-09; NOT RUN
INV-AUTH-07 7.3 CA · delegated-key validation Bulk revoke advances delegation epoch without reset of replay/finalized facts DEF; APP-06; NOT RUN
INV-AUTH-08 7.3 CA · scoped-key validation Project-scoped key succeeds only for named project/family and applicable role/lifecycle DEF; APP-07; NOT RUN
INV-AUTH-09 7.3 AE · key renewal Renew succeeds only for live current generation and never restores expired/revoked/old-epoch key DEF; APP-06; NOT RUN
INV-AUTH-10 7.1 AE · username extension Third-party extension changes only permitted deadline/payment facts, never owner/pointer/payer/resolution restoration DEF; APP-09; NOT RUN
INV-MEMBER-01 9.3 ST · MerkleizeBlock Finalized append remains in canonical log/root across pruning and recovery SRC-CW QMDB; APP-12, Q1/Q5; NOT RUN
INV-MEMBER-02 9.3 AE · block access/location plan Locations equal deterministic flat command order before lanes execute DEF; APP-12, differential schedules; NOT RUN
INV-MEMBER-03 9.3 AE · membership witness validation Each non-delete accepts only its exact eligible witness/target/parent window; missing source is pending, bad proof invalid SRC-CW proof primitives; APP-02/13; NOT RUN
INV-MEMBER-07 9.3 CA · evidence replacement Replacement leaves canonical intent bytes/digest equal and respects signed work/charge limits DEF; API-03; NOT RUN
INV-MEMBER-06 9.3 ST · MerkleizeBlock Every role commits equal inactivity floor and root at each height despite different byte retention SRC-CW QMDB; APP-13, Q5; NOT RUN
INV-MEMBER-04 9.3 ST · member target capture/recovery Process/recovery ends with membership target exactly equal to certified header SRC-CW database set; Q1/Q5; NOT RUN
INV-MEMBER-05 9.2 PV · current-state verification No response is accepted as cryptographic absence; unavailable/not-found remains service evidence SRC-CW unordered QMDB limitation; API-12/14; NOT RUN
INV-SETTLE-01 16.4 AE · EvaluateCommand(IMPORT_CREDITS) Credit changes state only for a valid cumulative strictly above beneficiary frontier DEF; SRC-TEMPO covers certificate leg and SRC-CONTRACT is negative contract-layout evidence only; APP-01/10/18, API-19; NOT RUN, BLOCKED-SETTLEMENT
INV-SETTLE-02 16.8 RE · activation installer Identity changes only at genesis or an authenticated release activation; commands cannot install it DEF; Q3; NOT RUN
INV-SETTLE-03 16.6 AE · settlement time checks Both forward variants reject once dual deadline expires, regardless of previous extension path DEF; APP-10; NOT RUN
INV-SETTLE-04 16.4 makechain-protocol settlement verifier · verified fact Beneficiary/amount are derived only from authenticated slot/value; any request duplicate is ignored/compared DEF; SRC-TEMPO covers certificate leg and SRC-CONTRACT is negative contract-layout evidence only; APP-18/API-19/Q4; NOT RUN, BLOCKED-SETTLEMENT
INV-SETTLE-05 16.2 makechain-protocol settlement verifier · accepted-asset profile Only a deposit of the fixed accepted asset can yield an accepted cumulative DEF; SRC-CONTRACT shows a contract-layout mismatch only; contract/profile cases; NOT RUN, BLOCKED-SETTLEMENT
INV-SETTLE-06 16.6 AE · settlement deadline evaluation Earlier of local deadline and source-age deadline governs using consensus time DEF; APP-10, time-boundary property; NOT RUN
INV-SETTLE-07 16.5 ST · settlement typed-state contract State diff contains exactly identity anchor/checkpoint/pause/frontiers and no evidence/history record DEF; schema/state inspection plus APP-10/18; NOT RUN
INV-SETTLE-08 16.2 AE · genesis/import path Genesis has no ledger; only valid strict-advance import creates/funds one before init DEF; SRC-CONTRACT is negative contract-layout evidence only; APP-01/18, API-19, Q1; NOT RUN, BLOCKED-SETTLEMENT
INV-PROOF-01 15.1 PV · VerifyEvidence Altering/removing caller trust while response is fixed never causes success under response-supplied trust DEF; API-17/20, Q4; NOT RUN
INV-PROOF-02 15.5 PV · finality/ancestry verifier Exact block hash verifies by direct certificate or logarithmic authenticated ancestry from certified descendant SRC-CW; API-09, Q4/Q5; NOT RUN
INV-PROOF-07 15.8 PV/CW · verified fact + freshness policy Row proof exposes exact cut/coverage; client rejects stale/incomplete authorization and never infers completeness DEF; API-04–06/12/14; NOT RUN
INV-PROOF-03 15.6 PV · release-lineage verifier Exactly one authenticated predecessor chain and proved schedule state are required, including empty predecessor case DEF; API-07/09, Q3/Q4; NOT RUN
INV-PROOF-04 15.2 PV · VerifyEvidence Decoder/profile selected from authenticated header; proof checks both root and count SRC-CW; API-07/10/13, Q4; NOT RUN
INV-PROOF-05 15.8 QP/PV · query with evidence Query output without independently verified proof never upgrades to consensus fact DEF; API-11/13/16, Q5; NOT RUN
INV-PROOF-06 15.4 Exporter proof serving · live-database read Concurrent proof serving from the exporter's live databases leaves the serving head's bytes and target unchanged SRC-CW primitives; Q5 concurrency check; NOT RUN
INV-PROOF-08 15.9 PV · publication receipt verifier Output fields are re-derived from finalized included PUSH and exact occurrence, never summaries/object/leaf equality SRC-CW BMT; API-07/08/13, Q1/Q4; NOT RUN
INV-EVENT-01 14.5 FE/QP · export and consumer cursor Crash/redelivery produces each logical effect once after EventId dedup and cursor+effects atomicity DEF; APP-11, Q1 C5–C8/Q5; NOT RUN
INV-EVENT-02 14.6 FE · event re-derivation Replay of same certified inputs yields byte-identical ordered event batch DEF; APP-11, Q1/Q5; NOT RUN
INV-EVENT-03 14.6 FE/PV · export evidence separation Mutating supplied event list cannot alter any root or verified fact; a store-supplied event list alone is rejected as evidence DEF; API-11, Q5; NOT RUN
INV-GOV-01 18.3 RE · ResolveRules Activation result depends only on finalized authenticated schedule and executing parent DEF; APP-14, Q3; NOT RUN
INV-GOV-02 13.3 AE · validator-schedule transition Model permits one immutable pending entry, pure cancel only, one-way deactivation, permanent key reservation DEF; Q2 stateful model; NOT RUN
INV-GOV-03 13.3 EA/MM · DKG progression/TrackPeerSet Departure remains dealer/tracked until excluding reshare certifies; schedule effectiveness is distinct SRC-CW; Q2; NOT RUN
INV-GOV-04 13.6 EA · DKG scheme progression Every successful reshare verifies same group public key; changed key is rejected as wrong chain/reset SRC-CW; Q2; NOT RUN
INV-GOV-05 13.4 EA · voter provider Votes use last successful reshare players until new output succeeds, through failure/restart SRC-CW; Q2; NOT RUN
INV-GOV-06 13.3 AE/RE · schedule cancel/ResolveRules Cancel accepted through exact allowed boundary and rejected after embedding lock DEF; APP-14, Q2/Q3 boundary cases; NOT RUN
INV-GOV-07 18.5 RE · ResolveRules Differential branches prove rules depend only on chain/schedule/effective parent parameters and active_release(h) DEF; Q3/property P-REL-01; NOT RUN
INV-GOV-08 18.3 AE/RE · release scheduling Critical releases activate at the first block of an epoch, after the handoff at the boundary, with a two-epoch lead; emergency critical is always rejected DEF; APP-17, Q3; NOT RUN
INV-GOV-09 18.6 RE · activation installer Installer work is constant-bounded, marker-guarded, one-batch, exactly-once after crash/sync, without historical reinterpretation DEF; APP-14, Q3 crash cuts; NOT RUN
INV-GOV-10 18.3 RE · schedule transition Activated release never reverts; pending transition only legal cancel/defer and never changes locked critical entry DEF; APP-14, stateful model/Q3; NOT RUN
INV-GOV-11 18.8 EA · startup/readiness Binary proves support for every genesis-to-active ruleset or remains non-voting/NotServing DEF; Q3 compatibility manifest; NOT RUN
INV-GOV-12 18.9 AE/AF/CW · fixed-profile scheduling checks Every validator schedule and critical schedule/move/cancel is rejected with no effects in admission/execution/preparation DEF; APP-17/API-18; NOT RUN

5. Application scenario matrix

Scenario Owner · interface Acceptance criterion Evidence / limitation
APP-01 AE · ExecuteOrderedBlock Full funded path succeeds with equal propose/verify/apply outcomes and roots Q1; NOT RUN, BLOCKED-SETTLEMENT
APP-02 AE/CA · EvaluateCommand/AuthenticateCommand Mixed ref ops preserve exact witness order; changed signed name/target rejects Q4 vectors + executor test; NOT RUN
APP-03 AE · ExecuteOrderedBlock Create/delete leaves no ref while gross reservation, fee, lock, and discharge remain exact Stateful property; NOT RUN
APP-04 AE · EvaluateCommand Late CAS failure leaks no state, location, sequence, money, or event Transactional overlay property; NOT RUN
APP-05 AE · accounting Two updates compose in overlay and discharge stored, not current, amount Stateful model; NOT RUN
APP-06 CA/AE · delegated-key transitions Bulk revoke blocks use; fresh generation works; old deposit discharges once; empty repeat rejects Stateful model; NOT RUN
APP-07 CA · project authorization Rejected/accepted role and scoped-key matrix matches specification exactly Exhaustive role table; NOT RUN
APP-08 AE · project lifecycle Transfer/reclaim/slug/offer cases preserve incarnations, uniqueness, and replay guards Stateful model; NOT RUN
APP-09 AE · username lifecycle Exact deadlines, grace, extension, release, rename, and pointer cleanup match model Boundary-time model; NOT RUN
APP-10 AE · settlement transitions Pause/deadline rejects credit and refresh; failed credit cannot refresh state DEF; negative cases NOT RUN; positive subset BLOCKED-SETTLEMENT
APP-11 EA/ST/FE · verify/apply/recovery/export Cancellation/restart preserves roots/replay/deposits; C10/C11 admit only the specified bootstrap/durable genesis states and never double-apply genesis; event gaps re-derive exactly Q1 cuts/Q5; SRC-CW for finalize handle, native initial targets, and genesis handoff; NOT RUN
APP-12 AE/ST · location planning/merkleize Duplicate commitments retain distinct ordered occurrences and no current-state key Executor/Q4 proof cases; NOT RUN
APP-13 ST/AE · MerkleizeBlock/witness validation Empty block commits once; window-edge proof uses speculative parent ancestry correctly SRC-CW; deterministic test; NOT RUN
APP-14 RE/EA · installer/recovery Lock-boundary cancel and crash/sync replay yield exactly-once installer result Q3; NOT RUN
APP-15 EA · genesis/fixed assembly Seven nodes derive identical identity/genesis/committee/output/quorum and each share verifies at position; reopened current state matches the exact genesis root/target while both logs remain at native bootstrap size one before Stateful starts Fixed-profile Q1 C10/C11 harness; SRC-CW for native initial targets and marshal genesis anchor; NOT RUN
APP-16 EA · consensus-context validation Every nonzero epoch/present DKG field rejects identically; canonical epoch-zero/None succeeds Fixed-profile negative corpus; NOT RUN
APP-17 AE/AF · profile scheduling Both validator variants/all critical paths reject without effects; ordinary non-critical path unchanged Fixed-profile corpus; NOT RUN
APP-18 protocol settlement verifier + AE Authentic proof funds before init; every named substitute rejects and refresh state is unchanged Q1/Q4; SRC-CONTRACT; NOT RUN, BLOCKED-SETTLEMENT
APP-19 EA/PV · reset/genesis binding Every pre-reset chain artifact fails the new chain; old state/credit absent; Tempo fact needs new valid import Reset differential harness; NOT RUN, BLOCKED-SETTLEMENT for positive reimport
APP-20 CS/EA · genesis decode/context Both profiles enforce genesis-only matching epoch info; dynamic projects to payload, fixed DKG options remain None Genesis conformance corpus; NOT RUN

6. Client/API scenario matrix

The Client workflow rows specify the future reusable Rust module and reference harness. They do not authorize a product SDK, CLI, explorer, website, or consuming application.

Scenario Owner · interface Acceptance criterion Evidence / limitation
API-01 CW/CS · PrepareCommand Any displayed/action substitution differs from locally rebuilt intent and prevents signing Reference client corpus; NOT RUN
API-02 CS/CW · canonical name validation Valid exact bytes remain distinct; invalid UTF-8/control/bounds reject without normalization Encoding corpus; NOT RUN
API-03 CW/CA · intent journal/authentication Refreshed evidence/approval subset preserves intent association, changes envelope ID, and either inclusion completes once Reference journal harness; NOT RUN
API-04 CW · ReconcileIntent Lost response plus evicted status stays Unknown until authenticated bounded history; no automatic new sequence Reference reconciliation model; NOT RUN
API-05 CW · ReconcileIntent Higher sequence alone never marks lower chunk complete; complete history is required before retry Reference reconciliation model; NOT RUN
API-06 CW/PV · reconciliation + proof Verified original inclusion overrides advisory pool replacement Reference reconciliation model; NOT RUN
API-07 PV · publication VerifyEvidence Every named substitution fails; only re-derived authenticated fields return Q1/Q4 receipt corpus; SRC-CW; NOT RUN
API-08 PV/QP · receipt verification/projection Equal commitment at different indices/accounts yields distinct occurrence and row Receipt/projection model; NOT RUN
API-09 PV · finality/ancestry Certified descendant plus valid accumulator path verifies absent direct certificate Q4/Q5; SRC-CW; NOT RUN
API-10 PV · receipt request Ref-only returns no publication fact; index equal to length rejects Q4 boundary corpus; NOT RUN
API-11 PV · verified-result typing Fabricated charge/revision cannot appear as receipt-authenticated output Type/interface and negative corpus; NOT RUN
API-12 CW · ReconcileIntent Any history gap/budget exhaustion remains Unknown and never becomes non-inclusion Reference reconciliation model; NOT RUN
API-13 PV · membership verification Valid equal-leaf proof authenticates its own location only, never occurrence linkage Q4 proof corpus; SRC-CW; NOT RUN
API-14 CW/PV · preparation freshness policy Stale/absence/service evidence is labeled and cannot authorize signing; supported rules refresh first Reference client corpus; NOT RUN
API-15 CW · CompletePush Storage and chain milestones remain independent; completion requires every configured milestone/chunk Reference workflow + Q6 adapter; NOT RUN
API-16 PV · evidence typing mkit attestation cannot become inclusion/time/authorship/correctness proof External-contract negative case; NOT RUN
API-17 CW/EA/PV · trusted profile comparison RPC metadata conflicting with caller genesis/authenticated state blocks prepare and verify Q4/profile corpus; NOT RUN
API-18 CW · PrepareCommand Fixed profile refuses disabled schedules before signing and preserves ordinary release checks Reference client corpus; NOT RUN
API-19 CW/protocol settlement verifier Authentic Moderato proof prepares import before init; global-issuance/synthetic/wrong identity/slot/beneficiary rejects, no fallback Q1/Q4; SRC-CONTRACT; NOT RUN, BLOCKED-SETTLEMENT
API-20 CW/PV · trust-partitioned journal/verification Old-chain journal/artifacts cannot complete new-chain operation; Tempo fact is re-enveloped and fully reverified Reset reference harness; NOT RUN, BLOCKED-SETTLEMENT for positive reimport

7. Properties, fuzzing, and security tests

Example-based APP/API scenarios are necessary but do not cover adversarial combinations. The first implementation plan must include the following minimal property/fuzz targets at the owning module interface.

ID Target Generator/action model Required property and stop condition
P-CODEC-01 CS DecodeCanonical Arbitrary bytes up to each named bound plus truncation/trailing/tag/length/order mutations Never panic/allocate beyond configured bound; accept iff exact decode and byte-identical re-encode; preserve minimal counterexample
P-AUTH-01 CA AuthenticateCommand Structured intents/witness trees/signature variants, depth/count boundaries, field mutations Accepted witness meets exact authority/threshold/ordering/context; any unauthorized mutation rejects; no stack overflow
P-EXEC-01 AE ExecuteOrderedBlock Valid/invalid command sequences over a bounded reference state model Implementation outcome equals model for records, money, counters, log order, resources, and events
P-EXEC-02 AE EvaluateCommand Inject failure after every read/check/staged effect Any rejection leaves parent overlay and all accumulators byte-identical
P-EXEC-03 AE resource accounting Values around every integer, byte/work, charge, deposit, and record boundary Checked arithmetic only; independent dimensions; gross creation never nets deletion
P-BOUND-01 AE access planning Grow unrelated state while command input stays fixed Read/write/work cardinality remains within the formula and independent of total state size
P-TIME-01 AE/EA Vary wall clock/runtime schedule with fixed consensus time, then vary consensus time at every boundary Wall clock has no validity effect; specified consensus-time boundary changes exactly once
P-STATE-01 AE/ST Stateful sequences of create/update/delete/reclaim/transfer/name/grant/key/import All ledger, incarnation, bijection, replay, deposit, and frontier invariants hold after every prefix
P-PROOF-01 PV VerifyEvidence Arbitrary bounded proof envelopes and mutations of root/count/index/anchor/lineage/profile Never panic; success only derives the exact authenticated fact; mutation cannot broaden it
P-REL-01 RE ResolveRules Forked parent/schedule graphs with pending ancestors, activation and lock boundaries Result equals pure reference evaluator; tip/local config/wall clock never affects it
P-RECOVER-01 EA/ST/FE Seeded crash at C1–C11 and Q2/Q3 cuts with restart/redelivery/identity replacement; C10/C11 record pre-crash, reopened, and adopted targets plus application-transition count Recovered durable/public state equals one uninterrupted valid prefix; genesis is exact-batch retry from native bootstrap or no-op from the exact durable target, membership/history stay at native bootstrap size one, duplicate genesis never invokes an application transition, and every third state is fatal-local; otherwise explicit fatal/pending, never a vote
P-CLIENT-01 CW ReconcileIntent Loss, duplication, reorder, stale status, alternative envelope, bounded history gaps Never auto-sign/retry unless future impossibility and prior non-inclusion are both established

Parser fuzzing covers every externally supplied canonical envelope, genesis/release artifact, signature presentation, WebAuthn JSON grammar, Commonware proof wrapper, Tempo account/storage proof, RPC byte wrapper, chainspec, and public network manifest. Seeds include the encoding-owner positive, boundary, and negative corpus. Fuzz findings become permanent regression cases with the exact pin and sanitized input digest.

Security-focused suites additionally cover algorithm/profile confusion, domain/chain/ruleset substitution, high-S and malformed signatures, recursive witness bombs, decompression/length/allocation bombs, duplicate-key JSON, invalid UTF-8, proof count/index mismatch, path/symlink traversal in local artifact tooling, unauthenticated configuration/trust-anchor injection, secret material in logs/run artifacts, queue exhaustion, and cancellation races. Native and wasm run the same portable subset.

7.1 Formal model-checking gates

Use TLA+ and TLC for these bounded state-machine checks. Tools are pinned by digest in formal/tools/pins.toml (decision D48); models live under formal/tla/ and run with formal/check.sh; TLC is the stable release v1.7.4. Lean 4 proofs under formal/lean/ complement the bounded search with unbounded results for the same rules; they are a separate evidence entry and never replace a model gate. Implementation linkage is trace validation in both directions: model witnesses and counterexamples replayed against the executor, as this section already required, and, by decisions D48 and D49, executor trace records (per the trace design record docs/execution/design/vp-02-trace-emission.md, with the post-state read back from storage) checked against the model by TLC (formal verification plan). Each model records finite bounds, symmetry and state constraints, constants, fairness assumptions, model/config/tool hashes, and the requirements it covers. Safety and liveness are separate checks. Liveness results name the fairness and environment assumptions that make progress possible; safety may permit a fail-closed halt.

Every campaign includes reachability and nonvacuity checks for its success, rejection, crash, and recovery paths. An incomplete state-space search, an omitted required path, or an assumption that asserts the desired invariant is never PASS. A minimized counterexample becomes a permanent implementation regression case. Qualification also requires a reviewed mapping from model state and actions to named implementation interfaces, plus representative successful, rejected, and recovery traces replayed against the real implementation. Record model-search and implementation-linkage results separately; both must pass. A failure blocks only its dependent claim and reopens the owning design. A model-search pass proves the declared abstract finite model only: it does not prove Rust code, Commonware, BFT, cryptography, native/wasm parity, vectors, or Q1–Q6. Implementation and campaign harness work may proceed while a model is built, but the affected qualification claim waits for the model gate. These are focused gates, not a blanket pre-code gate.

ID Scope, owner, and reviewer Finite model and required properties Entry inputs, exit evidence, and milestone
MC-01 Authority, lifecycle, and accounting. Owner: execution/authentication owner. Reviewer: independent protocol/security reviewer Bound accounts, keys, generations, records, command sequences, times, and amount/counter values, including maximum-value exhaustion. Preserve sparse expired/raw records. Treat a verified Tempo strict-advance import as a constrained trusted input; this grants no synthetic-positive qualification. Check reject atomicity; no stale authority resurrection; exactly-once discharge to the stored original payer; checked monotone counters reject at exhaustion and never wrap; and checked spent + locked <= credited after every reachable prefix Enter with reviewed state/authority transitions, accounting formulas, and finite constants. Exit with full TLC exploration inside the declared bounds, reachability/nonvacuity witnesses, hashes, reviewer verdict, regressions for every counterexample, and reviewed action/trace linkage to IP-04/IP-08. Required before full fixed-application qualification and a shared D0 claim; maps to P-AUTH-01, P-EXEC-01/02/03, and P-STATE-01. It does not block FB-01–12
MC-02 Genesis and recovery coordination. Owner: state/node/history owner. Reviewer: independent Commonware/operations reviewer Bound three members, heights/targets, crash cuts, marshal/export progress, and fence states. Model fresh genesis separately from ordinary restart and rebootstrap: native bootstrap retries the exact seed batch; the exact durable genesis target is a no-op; any other fresh-genesis state is fatal-local. Ordinary restart may open later committed targets and must reconcile one agreeing durable certified prefix. Rebootstrap attaches a certified floor and skips local seeding. Check actual-old-process termination and custody/partition handoff assumptions for fencing, plus watermark <= durable complete artifacts. Abstract Commonware only through source-reviewed contracts at v2026.9.0; split independent submodels if the product state explodes A planned export installation extension (D50, formal verification plan section 8) adds the exporter's first-installation state sync toward a moving target, the (W, A] coverage rule re-evaluated at every retarget, the standby's release on an observed watermark, and the retained-window stop (R-17.17, R-17.21, R-17.22); it is PLANNED and not written. Enter with operations §2.4/§2.5, C1–C11, Q1/Q5 artifact rules, and the pinned source-contract ledger. Exit with complete bounded safety results, separately stated conditional progress/fairness results, nonvacuity witnesses for all three procedures, hashes, reviewer verdict, regressions, and reviewed action/trace linkage to IP-05/IP-06C/IP-07. Implementation linkage uses the MC-04 event log: VP-07 crash runs are checked as traces against MC02RecoveryNode. Required before persistent Q1-T acceptance and D0, and the installation extension before IP-06C acceptance; it does not replace actual C1–C11, process/filesystem, Commonware, or exporter and store tests
MC-03 Release and validator transitions. Owner: release/dynamic-consensus owner. Reviewer: independent protocol/security reviewer Bound schedule entries, heights/epochs, rulesets, installers, validator sets, reshare outcomes, restarts, and catch-up. Check exact release and validator cancel/lock cutoffs; selected active rules follow the executing parent; finalized installers apply exactly once; and scheduled membership stays distinct from effective voters until successful reshare. Safety permits halt. Liveness states its progress/fairness/environment assumptions and does not assume every reshare succeeds or every departing validator cooperates Enter with reviewed release/validator transition tables and fixed/dynamic profile constants. Exit with complete bounded safety results, conditional liveness results, cutoff/restart reachability witnesses, hashes, reviewer verdict, regressions, and reviewed action/trace linkage to IP-04A/IP-10. Dynamic parts are required before relevant Q2/Q3 acceptance and T0. D0 still requires its existing fixed-profile rejection and non-critical release tests, but MC-03 creates no new fixed-model prerequisite
MC-04 Consensus-to-execution lifecycle: Simplex quorum counting, Deferred vote gating, the Stateful verify, apply, lazy-recovery and finalization path, and restart readiness. Owner: node owner. Reviewer: independent Commonware/consensus reviewer Bound four validators (f = 1) in a Byzantine-proposer and a crash-only configuration, three heights, four views, and blocks that are valid, command-invalid, canonical-root-invalid with a correct ops target, or ops-invalid, plus pending verification. Check that no invalid block finalizes; equal parent and block give equal verdicts and applied roots; a finalize vote needs a valid verdict and never comes from a pending, invalid, or fatal state; no durable effect precedes finalization; a replay is never a verdict; readiness requires a canonical root match; no vote precedes readiness; a Byzantine uncertified ancestor never makes an honest node fatal; and a finalized winner always reconstructs. Execution is an abstract function; Simplex agreement is a trusted contract, and Simplex beyond it and every Commonware behaviour enter only through cited contracts at v2026.9.0 (formal verification plan section 7) Enter with R-12.8 to R-12.29, the SB-14 adapter, and the VP-07 event log. Exit with complete bounded safety results, separately stated conditional liveness, nonvacuity witnesses, every named mutation caught, hashes, reviewer verdict, regressions, and trace linkage through the VP-07 seed sweep. PLANNED (D50) and not written, so no MC-04 claim exists. The bounded safety search (TLC, no linkage) is required before D0 and the trace linkage before T0 (D50); it does not replace the SB-14 negative tests or Q1

Crash-cut tests stop processes or abort owned storage handles at named barriers. They may not edit WALs, QMDB state, sync markers, certificates, or DKG journals to manufacture recovery. Each cut is a fresh seeded run and must observe fencing before the identity votes again.

glue::simulate cannot stop a validator at a named barrier. It crashes a validator by aborting its task at a scheduled time or inside a processed-height window (Crash::DelayRound only delays a validator's start and crashes nothing), and it injects storage faults (glue/src/simulate/action.rs:9-44, :81-102; glue/src/simulate/team.rs:142-151). A barrier cut such as C4 is therefore reached in simulation only by a seed sweep over height windows that records which cut each run hit, and otherwise by the crash-cut tests above or by runtime storage-fault injection; a simulated run is credited to a cut only when its record shows the cut. Whether a task abort in the deterministic runtime drops a validator's unsynced writes, as MC-02 contract K1 permits, is UNVERIFIED. By reading, a blob's unsynced content lives in its handle until sync copies it into the partition and a dropped handle does not flush (runtime/src/storage/memory.rs:241-252, :287-306), while the seeded partial-retention crash model runs only at the whole-runtime crash boundary (runtime/src/deterministic.rs:716-721, runtime/src/storage/faulty.rs:479-528). VP-07 settles it with a test before any simulated crash is credited to MC-02 linkage.

8. Dependency pin and update qualification

The baseline itself needs a proof package before code claims compatibility:

  1. Record exact Rust/Cargo, Commonware crates/versions/checksums, enabled features, target triples, lockfile digest, and all directly used source paths/types.
  2. Compile the selected primitives on their required native/wasm targets and run the owned expected vectors. Source review alone does not pass this step.
  3. Run Q1/Q4 subsets sufficient to bind codec, BMT, QMDB, certificate, Stateful/marshal, and profile wiring. Settlement-positive rows remain blocked rather than mocked.
  4. Store an evidence manifest with reviewer and limitations; until then the baseline is selected and source-reviewed, not qualified.

For every Commonware, Rust, cryptography, proof, database, or canonical dependency update:

  • diff old/new upstream sources for codec, proof, crypto, persistence, consensus, marshal, Stateful, DKG, runtime, and feature changes actually in the dependency closure;
  • regenerate and byte-compare every affected canonical artifact; run old and new corpora against the candidate and explicitly classify intended incompatibilities;
  • rerun affected property/fuzz targets and Q experiments, including crash cuts for persistence or actor changes and Q4 for portable/crypto/codec changes;
  • prove a mixed-version rollout only when the release plan allows it; otherwise require a reset or coordinated non-voting boundary and state that consequence;
  • update the support matrix, SBOM/provenance, and evidence limitations in the same change.

For a protocol rule, model bound, abstraction mapping, fairness assumption, or relevant source pin change, rerun each affected MC gate or justify reuse per claim through reviewed unchanged-surface evidence. A prior model result is not globally current after its assumptions change.

An update cannot inherit the old PASS merely because public type names compile. Evidence reuse is per row and justified by an unchanged transitive behavior surface. Commonware remains upstream and unforked; a required local patch blocks the update until accepted upstream or the architecture is revised.

9. Gates and implementation order

These gates separate design readiness, runnable devnet, and production qualification. They do not require already-implemented evidence before independent implementation starts.

Gate Must be true Does not require yet
I0: independent module implementation Owning RDY schema/bytes/bounds and interface are reviewed; crate edge and error/fault vocabulary fixed; mapped invariant/scenario acceptance is unambiguous; positive external prerequisites may be marked blocked; applicable future MC ownership is visible Passing MC-01–03 or Q1–Q6, model configuration, cloud topology, product SDK/CLI/site, settlement-contract deployment for unrelated codec/executor/state work
I1: integration/harness implementation I0 for all joined modules; exact Commonware/Rust pins; deterministic seed/time/fault interface; evidence manifest schema; no mocked positive settlement path; model and harness work may proceed together Completed model runs, public service ingress, production performance, dynamic DKG for fixed-profile harness
D0: disposable fixed devnet Encoding/profile/genesis vectors pass; every application command enabled by the declared fixed-profile ruleset passes its APP/API acceptance rows; MC-01 and MC-02 pass with implementation linkage; the MC-04 safety model passes its bounded TLC search, without implementation linkage (D50); APP-15/16/17/20 and API-17/18 pass; seven shares provisioned/fenced; Q1-D passes and Q1-T passes C1–C11 restart/barriers plus the selected same-region GCS exporter publication and mirror recovery path; authentic Moderato settlement contract/profile/proof enables funding; native proof/receipt Q4 subset passes Q2 dynamic membership, MC-03, production custody/topology, full product SDK/CLI/explorer/site
T0: dynamic qualification testnet after reset New genesis/chain_id; dynamic MC-03 claims pass; MC-04 passes with trace linkage (D50); Q2 passes including failures/restarts; Q3 active release path passes; Q1/Q4/Q5 rerun under dynamic profile; every enabled APP/API/invariant row has PASS evidence Mainnet Tempo proof, final production load/topology values
M0: mainnet release candidate All 71 invariants and APP/API 01–20 have complete applicable PASS evidence (Client workflow may be a reference Rust harness; product SDK packaging is not implied); current applicable MC evidence or reviewed per-claim reuse is complete; Q1–Q6 pass at accepted production profiles/limits; all 17 commands enabled/qualified; reproducible build and independent rebuild agree; recovery/custody/monitoring/security reviews close None of the launch-critical requirements in this plan
M1: mainnet genesis/launch M0 artifact unchanged; immutable dedicated Tempo Mainnet contract address/code/layout/profile reviewed; authentic Mainnet deposit proof passes production verifier; real DynamicReshareV1 mainnet DKG/genesis ceremony and custody checks complete; genesis/network artifacts independently reproduced and signed; operator fencing/rollback runbook exercised; final owner/independent-review verdict Future non-launch product features

The fixed devnet is disposable and epoch-zero only. Moving to Q2/T0 is an explicit reset with new genesis and chain_id; it is not an in-place upgrade. A fixed-profile pass cannot satisfy a dynamic gate. Dev/test Moderato evidence cannot satisfy a Mainnet settlement gate. A production binary may be promoted unchanged across environments only when it supports the environment's authenticated profiles and all required gates pass.

10. Result and coverage records

Every run emits the immutable manifest required by operations §5, plus: requirement/scenario IDs; module/interface revision; exact command; host/container/target; toolchain/lock/SBOM digests; source pins; generated/vector/fixture hashes; seed and minimized failing input; topology and fault schedule; per-case outcome; artifact/checksum links; reviewer; and explicit remaining limitation. Secrets and private DKG material are represented only by public identifiers/digests allowed by custody policy. Lean records include the toolchain, the digest of every proof file, and the axiom-audit output. Model records additionally include the exact TLA+/TLC version, specification and configuration hashes, finite bounds and constraints, fairness assumptions, explored-state/completeness result, reachability/nonvacuity witnesses, counterexample-to-regression links, reviewed abstraction/action mapping, and representative implementation trace results. Model search and implementation linkage remain separate evidence entries.

A machine-readable coverage map may be embedded as a fenced YAML or JSON block in this Markdown file when automation exists; it must be generated from or checked against the tables above and may not become a second authority. conformance/rule-assurance.toml (VP-09) is that map for the rules each brief puts in scope: every property: and sim: class of an invariant entry names only vehicles the invariant's section 4 row names, and xtask coverage-matrix checks that and each entry's evidence; section 5 is not yet consulted. The local gate (and future hosted CI) fails for an unknown invariant/scenario, missing owner/interface, missing acceptance criterion, stale artifact digest, or PASS without a complete manifest.

Current evidence disposition:

  • Commonware, Tempo, Constantinople, and the existing settlement-contract sources have been inspected only as cited by the architecture/operations/data-contract documents.
  • FB-01–FB-12 provide bounded native/wasm primitive harnesses, canonical scalar/collection source, and a reviewed 100-case primitive corpus. No complete application schema/executor, Q1–Q6 experiment, fuzz campaign, benchmark, reproducible release, devnet, testnet, or mainnet described here exists or has run.
  • MC-04 and the MC-02 export installation extension are PLANNED (D50): no model exists.
  • MC-01 (slices A, B and C), MC-02, and MC-03 are DRAFT MODEL: bounded safety searches, witnesses, and mutation campaigns run under the pinned TLC in formal/, with no reviewer verdict and no implementation linkage, so no MC claim is supported. A trace-validation harness runs in both directions against a reference executor only. Lean proofs of the ledger accounting, release dispatch, and canonical codecs exist under formal/lean/ with the same status.
  • The dedicated immutable beneficiary-cumulative contract profile/deployment and authentic positive proof do not yet exist in the evidence set. Settlement-positive rows remain BLOCKED-SETTLEMENT; they are never replaced by genesis credit, a faucet bypass, existing-contract evidence, or a mock.

11. Assurance layers and release qualification

This section holds material formerly stated in the specification and is not normative: it names qualification work, and no item below decides whether a block, a command, or a release is valid. It supports specification chapter 18 (releases and hardforks) and chapter 19 (parameters), whose calibration items are only fixed by a recorded measurement.

Each item is marked new to validation.md or already covered at section N. An item marked as covered is repeated here only by its identifier, not restated.

11.1 The first qualification milestone

The first implementation qualification milestone is a deterministic end-to-end application slice, reached before the broader service surface. Its funded path, Q1, imports credits with a real certified Tempo proof to create the ledger, initializes that funded account, delegates a key, creates a project, publishes a commit, verifies a publication receipt, and restarts through the three-member database set. The ref move, stale CAS, delete and recreate accounting, and authority revocation are carried by APP-03, APP-04, and APP-06 against the same executor, and the milestone is Q1 plus those three rows.

The same rules executor passes propose/verify/apply parity, command rollback, speculative cancellation, and recovery checks.

  • Already covered at section 3 (Q1) and section 9 (gate D0), with the crash cuts in section 4 of operations.md.
  • Already covered at section 4 for executor parity: INV-CONS-01, INV-CONS-02, INV-CONS-03, and INV-STATE-11; and at section 5 for APP-01 and APP-11.
  • Decided, 2026-09-22. Q1 stays the five-command slice of section 4.1 of operations.md: IMPORT_CREDITS.Credit, INIT_ACCOUNT, KEY_AUTHORIZE.Authorize, PROJECT_CREATE, and PUSH. The milestone is Q1 plus APP-03, APP-04, and APP-06, which carry the ref move, stale CAS, delete and recreate accounting, and authority revocation. The milestone is reached when the Q1 manifest and those three scenario rows are all recorded; Q1 alone does not reach it, and neither does a scenario row without Q1's persistent path. No transition moves into the Q1 command subset, so the operations crash cuts and the Q1 acceptance criterion are unchanged.

The required scenarios are listed by state-machine.md; retry and proof-substitution scenarios are added by client-api.md. Already covered at section 6 (API-03, API-04, API-07, API-12).

11.2 Profile-scoped qualification

FixedEpochZeroV1 qualification additionally requires:

  • byte-identical profile and genesis derivation across all seven validators;
  • signer and share validation;
  • deterministic rejection of every nonzero-epoch context, every present DKG payload, every validator-schedule variant, and every consensus-critical release path;
  • restart and reset-isolation tests.

Its workload, proof, and recovery results do not qualify bootstrap DKG, reshare, epoch or membership transitions, production custody, or the dynamic engine handoff.

Already covered at section 5 (APP-15, APP-16, APP-17, APP-19, APP-20), section 6 (API-17, API-18, API-20), section 4 (INV-CONS-07, INV-CONS-08, INV-GOV-12), and section 9 (gate G4 in architecture.md, gate D0 here).

Mainnet requires separate DynamicReshareV1 evidence for the all-party bootstrap ceremony, repeated same-set reshare, DkgFailed carry-over, membership changes, boundary restart, late join and state sync, secret handoff and erasure, and every consensus-critical surface the release intends to schedule.

Already covered at section 3 (Q2, Q3), section 4 (INV-GOV-03, INV-GOV-04, INV-GOV-05), and section 9 (gates T0 and M1).

Enablement gate for VALIDATOR_SET_SCHEDULE

New to validation.md as a gate. A deterministic simulation of "set change plus DkgFailed carry-over in the same epoch" is required before the command is enabled on any non-devnet chainspec.

Three properties of the gate are load-bearing and are not satisfied by the rows that resemble it:

  • the scenario is combined: one set change and one DkgFailed carry-over, in the same epoch, not two separately passing scenarios;
  • the gate is a precondition for enabling the command, not evidence collected afterwards;
  • it binds any non-devnet chainspec, testnet included, not only mainnet.

Section 3 (Q2) exercises a set change and an injected DkgFailed and section 11.3 lists set change with carry-over as a simulation property, but neither states the conjunction, the epoch scope, or the enablement precondition. Until the gate is recorded, a testnet chainspec that enables VALIDATOR_SET_SCHEDULE is outside the qualification plan.

11.3 The six assurance layers

Each layer has an owner and a trigger; a qualification gate that no one owns is not a gate. Owner roles follow the campaign table in implementation-plan.md (external site) section 12.

Layer Runs Owner Trigger Status against this document
Deterministic simulation glue::simulate with typed properties for restart, state sync, and set change with carry-over. Two cases exist because ordinary tests cannot reach them: a set change with carry-over, and a reclaim burst against a maximal stale cohort Node + history owners (IP-07) every engine, glue, or storage pin change; before each of D0, T0, and M0 Partly covered at section 3 (Q1, Q2, Q5) and section 7 (P-RECOVER-01). The named library harness, the typed-property framing, and the reclaim-burst case are new to validation.md
Invariant tests invariants::minifuzz for every rule with combinatorial input, including deposit conservation across delete/recreate cycles, sequence supersession, and witness resolution Executor + state owners (IP-04) every change to a rule in specification chapters 7 to 10 or 16; every executor pull request Partly covered at section 7 (P-EXEC-03, P-STATE-01, P-AUTH-01). The named harness is new to validation.md
Conformance byte vectors every canonical type and every root Encoding owner every canonical type, root, or tag change; every library pin change Already covered at section 8, step 2, and at gate G1 in architecture.md; the per-root scope is stated more tightly here
Fuzzing at decode boundaries every externally supplied canonical envelope Encoding owner continuous in the harness; a new corpus seed for every new envelope Already covered at section 7 (P-CODEC-01 and the parser-fuzzing paragraph)
Unit and integration tests ordinary per-crate coverage Each crate owner every pull request Already covered at section 2 as the harness contract's floor
Qualification gates on the reference validator profile every calibration item, including the speculative-memory gate of section 11.4 Protocol owner + operations owner each calibration item before the milestone that depends on it; every ALPHA pin bump (section 11.5) Partly covered at section 9 (gate G8). Per-calibration-item gating is new to validation.md

Two properties hold across the layers:

  • Application and engine crates are generic over the runtime, so the same assembled engine runs under production and deterministic runtimes. Already covered at section 2.
  • Deposit conservation across delete/recreate cycles is an invariant-test target, not only an example scenario. Already covered at section 4 (INV-STATE-05, INV-STATE-07) and section 5 (APP-03, APP-05); the combinatorial framing is new to validation.md.

11.4 Speculative-memory gate

New to validation.md. The engine is qualified under delayed finalization, repeated view changes, and cancelled verification. The gate accounts for:

  • pending merkleized batches across all three members, which glue caps only by branch compatibility and not by count or bytes;
  • retained ancestry;
  • decoded blocks;
  • worker jobs that keep running after their future is dropped, with worker permits charged until the work finishes.

Resource exhaustion produces backpressure or pending work, never an invalidity verdict. The invalidity boundary itself is already covered at section 4 (INV-FAULT-01).

11.5 ALPHA pin-bump re-run set

Every pin bump of an ALPHA dependency re-runs:

  1. root parity;
  2. compact-versus-full parity;
  3. crash and rewind;
  4. state sync;
  5. the wasm verifier vectors.

The exoware crates at 2026.9.0 are ALPHA members of this set and carry their own Commonware pins at 2026.9.0; the simplex crate publishes no status line and is treated as ALPHA with the rest. A bump of an exoware pin also re-runs the Q5 checker and the store rebuild from the mirror, because the store's persisted node layout is what those two items exercise.

Partly covered at section 8, whose dependency-update rules already require regenerated canonical artifacts, affected property and fuzz targets, crash cuts for persistence or actor changes, and Q4 for portable, crypto, or codec changes. The five-item set as the named minimum for an ALPHA bump is new to validation.md, as is its coupling to step 1.4 of release-process.md: a Commonware pin bump inside a release re-runs this set.

The ALPHA members are listed in the primitive map in section 10 of architecture.md.

11.6 Release assurance additions

These run in addition to sections 11.3 through 11.5, once per release.

Item What it asserts Status
Two-sided conformance vectors Every canonical type, root, and proof is produced under the old ruleset at heights before activation and under the new ruleset at and after it. A format-preserving or versioned-state release reproduces the old vectors byte for byte Partly covered at section 8 (byte-compare of affected canonical artifacts). The two-sidedness across the activation height is new to validation.md
Per-ruleset behaviour matrix Every rule the release touches runs under each ruleset it exists in, and the difference is exactly the declared one New to validation.md
Installer idempotence test The activation installer executes twice and produces one set of writes Already covered at section 4 (INV-GOV-09) and section 5 (APP-14)
Activation-crossing simulation The deterministic simulation gate crosses the activation height with a mid-window restart and state sync Already covered at section 3 (Q3), which crosses the activation height with restart and catch-up. The mid-window state-sync requirement is new to validation.md
Schedule-table conformance test The client crate's schedule table is pinned to the chain's New to validation.md
Peer-range handshake test The p2p handshake's supported-ruleset range behaves as declared New to validation.md

Regenerating a vector is an explicit format approval carrying a breaking-format label on the change, never a way to make a test pass. Already covered at section 8, which forbids inheriting a prior PASS on a changed behavior surface.

Two different class checks exist and only one decides validity.

  • The structural check is R-18.3 over the descriptor's own manifest: the declared class admits every declared surface, consensus_critical is set exactly when a consensus-critical surface is declared, and the ruleset identity conditions hold. Every validator runs it under the current rules, and specification section 18.2 makes it the whole of the class check inside SCHEDULE_RELEASE validity. It stays in the specification, and a descriptor it rejects cannot be scheduled.
  • The conformance-based check derives the class and the flag from the conformance run of the release process step 1.4 and compares them with the declaration. It is governance tooling and a qualification gate, never a validity rule, because a validator whose binary lacks the ruleset cannot run the conformance corpus that the derivation needs. Its two obligations, that the shipped code matches its manifest and that a release stays inside its class, are recorded here and in release process section 1.2.

11.7 Proof-path hash re-measurement

Tracked as SB-15 in implementation-second-batch.md (external site), in two parts.

The microbenchmark runs beside SB-16 and waits on nothing: it merkleizes QMDB current and keyless batches under Keccak256, SHA-256, and BLAKE3 and reports hash calls and time per tree. The sizes are the medium and high bands of section 4.1 of operating-envelope.md, 16.7 and 100 distinct PUSH per second at 8 and 16 mean commitments per PUSH, which remain synthetic planning bands rather than a forecast. Its Keccak256 is Makechain's own Hasher implementation against the pinned library trait, follow-up F13, so the measurement needs neither a library release nor a pin move; a main-branch pin would split the dependency graph from exoware 2026.9.0 and is excluded for that reason.

The whole-block measurement runs at SB-13, where a real MerkleizeBlock exists:

  1. re-run the storage, history, and command-root probes;
  2. measure merkleization throughput of the three databases and the command root at the target throughput under each candidate hash, reported per tree: hash calls per block and merkleization time for the validity state, the membership log, the block-history accumulator, and the command root separately.

Acceptance is per tree against the round budget with the stated margin. The recorded outcome selects one of the four options of SB-15's decision point (all Keccak256, BLAKE3 for the validity state only, SHA-256 across the proof path, or all BLAKE3), and that selection is an owner decision, F11, recorded in the decision register before the first non-disposable genesis. SHA-256 is a genuine option rather than a formality: it is in the pinned tag at BETA, the EVM has a precompile for it, and the library's Solidity MMR, keyless-MMR, and BMT verifiers ship SHA-256 variants.

The proof-path hash choice is final only when that measurement passes, so no conformance claim that depends on the proof-path hash is complete before it is recorded. The measurement is a calibration item in the specification's parameter chapter; no target value is stated here.

The affected rows are the proof-path members and the command root in the primitive map in section 10 of architecture.md.

11.8 Application conformance coverage

The application conformance program covers the following transitions. Per-variant read, write, and resource bounds live in state-machine.md, and each transition carries the relevant invariant identifiers.

Transition group Existing coverage
Capability and role intersection, maintainer escalation attempts, freeze and unfreeze permissions, scoped keys rejected for other projects, administrative commands, reclaim, and account-wide social messages Section 4 (INV-AUTH-08, INV-STATE-09), section 5 (APP-07)
Bulk revocation followed by a same-block key use, reclaim, or reauthorization; renewal at exact expiry and validity-window boundaries; reauthorization with a new generation; preservation of root replay state and allocation counters; repeated empty bulk revocations; old social receipts versus new submissions Section 4 (INV-AUTH-03, INV-AUTH-07, INV-AUTH-09), section 5 (APP-06)
Role invalidation across transfers where grant and control counters differ widely, including transfer back to the original controller and reclaim of a superseded grant Section 4 (INV-AUTH-04, INV-STATE-09), section 5 (APP-08)
Every deposit transition, including multiple refunds to the signer or another payer, price changes, replacement, same-command delete/recreate, and a late failure that rolls back the entire candidate; gross max_charge and new_records never net refunds or deletes Section 4 (INV-STATE-05, INV-STATE-07, INV-CONS-03), section 5 (APP-03, APP-04, APP-05), section 7 (P-EXEC-02, P-EXEC-03)
Slug collision on rename or transfer, description-only updates, and the one-project/one-claim invariant; username extension versus owner restoration, exact grace boundaries, cross-owner incarnation reuse attempts, release and claim cooldown bypass, and cleanup preserving a newer pointer Section 4 (INV-STATE-10, INV-AUTH-05, INV-AUTH-10), section 5 (APP-08, APP-09)
Reordered, missing, duplicated, and superseded push chunks; parent-counter conflicts; intent status across witness replacement; multiple same-block commands reading and updating one ledger, key, role, or ref through staged read expansion Section 4 (INV-MEMBER-07, INV-STATE-11), section 6 (API-03, API-05), section 7 (P-CLIENT-01)
Propose/verify/apply parity, including discarded candidates, speculative-branch cancellation, restart, state sync, canonical current roots, and one commit per member per block Section 4 (INV-CONS-01, INV-CONS-02, INV-MEMBER-06), section 5 (APP-11, APP-13)
Signed ref-name and display agreement and distinct name bytes; witness count and order with mixed CREATE, SET, and DELETE; publication receipts with substituted actors, indices, headers, counts, and envelopes; duplicate publications preserved; object-author claims never inferred from publishers Section 5 (APP-02, APP-12), section 6 (API-02, API-07, API-08, API-10, API-16)
Lost responses after finalization, finite status retention, witness replacement, and sequence overtaking; uncertain inclusion never triggering an automatic retry under a fresh sequence Section 6 (API-04, API-05, API-06, API-12), section 7 (P-CLIENT-01)

The coverage above is a mapping, not a new claim: every executable row it names keeps the status recorded in sections 3 through 7.

11.9 Key-family freeze gate

New to validation.md. Signer-generated vectors from real tools and authenticators, including negative origin, challenge, flag, and malformed-signature cases, are required before any key family is frozen.

The gate covers the families verified with external standard verifiers: SSHSIG, WebAuthn, and P256-direct. It is separate from, and stricter than, the requirement that native and wasm verification agree on every vector, which section 3 (Q4) already covers and which says nothing about real authenticators or negative cases. Section 7 already covers WebAuthn grammar fuzzing and malformed-signature cases as adversarial input; the addition here is that a family may not be frozen until the signer-generated corpus, including its negative cases, passes.

11.10 Genesis path qualification

New to validation.md. Genesis and header reproduction vectors, plus crash-cut vectors, must qualify the genesis seeding path.

The path has no block to re-execute against, so no propose/verify/apply parity run covers it. Calling ordinary block execution on genesis would incorrectly append extra log commits, which is why the path is seeded separately and why its own vectors are the only stated check that an implementation reproduces genesis correctly.

Partly covered at section 5 (APP-15, APP-11 for C10 and C11) and at section 4 of operations.md, whose cuts C10 and C11 exercise the durable genesis target. The vector requirement itself, covering genesis and header reproduction rather than restart behaviour, is new here.

11.11 Settlement profile completeness gate

New to validation.md. No network may claim a complete settlement profile, or run the positive funded qualification slice, until the deployment inputs are fixed and a compatible deployment exists.

The deployment inputs are compiler artifacts, runtime code hashes, deployment addresses and checkpoints, and fixture-qualified proof bounds. The settlement interface's provisional devnet bounds are not measured limits and are not a mainnet calibration.

Section 3 and section 10 already mark every settlement-positive row BLOCKED-SETTLEMENT, and section 7 of operations.md records QP-1 as the external prerequisite. What is new is the completeness predicate: BLOCKED-SETTLEMENT states that authentic evidence is missing, while this gate states when a profile may be called complete at all.

11.12 Separately qualified cost items

Five cost behaviours are named as their own qualification items because no scenario row covers them.

Item What is qualified Status
Index-bucket collision behaviour State keys are 32-byte digests, which spreads keys uniformly across index buckets. Collisions still occur at any finite prefix width and cost extra candidate reads, and the validator profile is qualified under collision-heavy workloads New to validation.md
Exporter publish lag The distance between the exporter's finalized height and the position acknowledged by both the store and the mirror, together with the local queue depth and disk footprint that lag implies, measured under the accepted block mix and under an induced store or mirror outage New to validation.md
Proof-service ingestion lag The distance between the published height and the size at which the store answers membership and ancestry proofs, expressed as a fraction of membership_window, with the alerting threshold and the exporter live-proof fallback below the window New to validation.md
Store rebuild from the mirror Time and cost to rebuild the exoware-sql store's block-projected history tables into a new schema prefix by replaying the mirror's per-block objects to the current height, including the checker running over the replayed range; the ingestion prefix is rebuilt separately by re-fetching objects and messages and is not part of this equality. The store software ships no replication, snapshot, or backup, so this replay and the operator's own disk snapshots of the RocksDB volume are the whole restore story New to validation.md
Replay qualification job Wall-clock cost and resource envelope of re-executing the stored blocks from genesis under every activated ruleset, which sets the cadence at which the job can run New to validation.md

The index-bucket item is measured on the reference validator profile under section 11.3's qualification layer; the four publication and history items are measured on the exporter and store profile under the same layer. The derived sizing figures they attach to are in section 8.5 of operations.md; no such figure is a measurement, and none is normative until a gate records a measured value.