Fast finality that survives recovery.

The full paper behind Rohu-Paplet: every proof, equation, and figure, across three versions of the design.

The full paper · Nov 2026thesingularity.sothesingularity.sh
Rohu-Paplet: Fast Finality That Survives Recovery. The Full Paper.
By Naman Bajpai · November 2, 2026 · three papers, one page · about 95 min read
Contents
  1. Act I
  2. Two readers, one river
  3. Act II
  4. The dabbas get their own train
  5. Act III
  6. The monsoon, one parent at a time
  7. A timeout is not an eraser
  8. The water
  9. The route map
  10. Dabbas
  11. Promises in ink
  12. Rohu, in the river
  13. Monsoon
  14. Paplet, in the ocean
  15. Why nothing forks
  16. The fast-path bound, honestly
  17. In the workshop
  18. Trying to sink it
  19. Alibaug se aaya kya?
  20. Run it yourself

The rohu does not carry a barometer. It feels the current.

Every consensus paper starts with a confession of faith. We assume partial synchrony. We assume an asynchronous adversary. The author picks a weather at whitepaper time and prays for the rest of the protocol's life. Rohu-Paplet refuses to pick.

The rohu is a river fish. Here it is the fast path, which finalizes in two message delays when the network is kind. The paplet is a sea fish. Here it is the asynchronous reader, which orders by common coin when the network is not. Both read the same water. This post tells the line in three acts:

  • Act I, two readers, one river. One uncertified DAG, written the same way in every weather and read two ways. Rohu finalizes in 2δ when the river runs clear. Paplet orders by coin in a storm. The monsoon flip moves between them on evidence that sits in the DAG itself. Cross-read confluence (O1-C) says the two readings give one order. It is machine-checked for all N and reduced to one threshold-clock rule, and its 2δ leg is conditional on granular synchrony. On 11 nodes across four continents, the log kept committing through a storm in which River finalized nothing.
  • Act II, the dabbas get their own train. Transaction data gets its own plane: independent producer chains with DA certificates, under the same control DAG. For f ≥ 2, no rule over a control cone alone can carry a fast extension both completely and soundly, so the frontier has to travel as a signed artifact, the FrontierCert. The paper makes no claim at f = 1. T1 to T4 compose the two planes into one log and one checkpoint sequence. Then a stricter per-position state-root oracle caught a real ordering bug. Anchors agreed, total order did not, and the paper reports it.
  • Act III, the monsoon, one parent at a time. The global eras, the flip, and the Heal go away. Each certified parent gets one domain that can close forever. Votes cast before a timeout can still form a certificate after recovery starts, and every valid closure set must select that child (Section 9). This is the current design, and most of the post.
Act I · Aug 2026 two readers, one river Act II · Aug 2026 two planes Act III · Sep 2026 one parent at a time + one uncertified DAG, written the same in all weather + River reader and Ocean reader + monsoon flip, Heal re-entry + cross-read confluence (O1-C) = keeps both readers + producer chains, DA certificates + FrontierCert (T2) + T1 to T4 composition = keeps chains, River, Ocean − eras, flip, and Heal + one closable domain per parent + late-certificate preservation + continuous Ocean resolution the weather is read, not assumed the data gets its own train the trains never stop
Three papers, one line. Act I reads one DAG two ways and flips between them in a storm. Act II gives transaction data its own plane under that DAG. Act III keeps the producer chains, River, and Ocean, and replaces the global eras with one permanently closable domain per certified parent. An era-based revision in docs/v4/ sits between Acts II and III.

Claim status · read this first

The headings argue with swagger. This table is where each claim meets its proof. A claim not in the table is positioning, not a result.

ActClaimStatusScope and where
IAgreement safety of the 3δ slow path (any network) and of Ocean (arbitrary scheduling) against f ByzantineProvenRohu reads the river · Paplet reads the sea
IO1-C cross-read confluence safety, machine-checked for all N and reduced to one threshold-clock ruleProvenTwo readers, one order (O1-C)
IBoth mode boundaries are fork-free for all N: the flip by O1-A, the heal by collective re-entryProvenMonsoon: nobody votes on the rain
I2δ fast-path safety, under granular synchrony. Hydrangea Theorem 3 forbids it free for f ≥ 3ConditionalThe fast-path bound, honestly
IOcean commit rate of at least (f+2)/(5f+1), favorable case. Expected O(1) waves is elementary and not mechanizedConditionalPaplet reads the sea
IOn n = 11 across four continents: zero River finalizations in the storm while the log kept committing, and the flip at one identical round on 9 of 11 nodes, in 1 of 3 runsEvidenceOn real water: eleven nodes, four continents
I"First direct 3δ DAG commit", "first in-band two modes in one DAG", and "first 2δ on an uncertified DAG"WithdrawnOn real water: eleven nodes, four continents
IIWithholding, equivocation, or stalling on any data chain cannot stall the control clock (T1)ProvenT1 · machine-checked for all N
IIFor f ≥ 2, no cone-local predicate carries unproposed extensions soundly and completely, so the FrontierCert is necessaryProvenT2 · hand proof, witnessed concretely at f = 2, 3
IISame-round FrontierCert candidates form a compatible family (T2)ProvenT2 · machine-checked for all N
IIDeterministic Ocean extraction (T3) and one log and checkpoint sequence across both readers (T4)ProvenT3 and T4 · hand proofs over the control-safety package from Act I
II2δ fast-path safety alongside f-crash toleranceConditionalproof tier · holds under granular synchrony, an irreducible premise
IIOn four continents, the flip fires at the same round on every node that reaches it, and the log commits while River is deadEvidenceevaluation · n = 11, onset in 1 of 3 runs
IITotal-order clause of confluence, as the reference serializer realizes itWithdrawnevaluation · falsified on hardware, frozen pending fix and re-run
II"First direct 3δ DAG commit" and novelty for in-band switching without a view changeWithdrawnpositioning · Mysticeti-C and full Bullshark got there first
IIIOne certified child per parent, and one certified prefix across the FAST, FIN, and Ocean routesProvenHand proof over the stated signing, storage, and ordering contracts. No mechanized refinement of the native runtime. Section 9.
IIIEvery valid closure set selects any child that could still become FAST or FINProvenHand proof, the quorum counts in (2.2). Section 9.
III2f+1 receipts are necessary for a one-shot, status-only selectorProvenFor that one interface. Signed witnesses at f = 1 to 4. Section 9.
IIIAlmost-sure progress, at most n/Q expected eligible waves to a core hitConditionalIdeal-coin contract (Assumption 3) and the progress premises. Sections 8, 10.
IIIFAST at 2δ, FIN at 3δ, 2δ decision intervals after warmupConditionalReady prerequisites, one-way delay at most δ, signers that stay open. Sections 6, 10.
IIISigned parent-local kernel and Ocean adapterEvidence32 tests, including 28,591 finite quorum-intersection checks. Section 12.
IIIA native end-to-end parent-local runtimeNot claimedThe native Rust components implement the earlier era-based revision. Section 11.
IIIA DAG plus a fast route plus a recovery route is newNot claimedGeneral fast and fallback composition is prior art. Section 13.

A word on register before the swagger starts. The jokes live in the headings. The theorem statements, quorum counts, and caveats are exactly as strong as the paper makes them, and no stronger. When a quip and a theorem disagree, the theorem wins, and the claim-to-artifact ledger in Section 11 settles the rest.

Field guide

Rohu
The river fish. Here it is River, the fast path: one exact attempt per certified parent, FAST at 4f+1 PREPAREs, FIN at 2f+1 receipts.
Paplet
The sea fish, a pomfret. Here it is Ocean, the asynchronous ordering service. It runs coin-elected waves and orders recovery records. It never writes application successors itself.
The water
The control DAG. Every honest author writes it the same way in every weather.
Virar fast
FAST. It does not stop for anybody: 4f+1 PREPAREs, or it leaves without you.
Monsoon
A stalled parent. A local timer closes dp, closed statuses carry what could already finalize, and the first valid resolution in Ocean order certifies one child. Nobody votes on the rain.
Dabba principle
Evidence carries its own routing. Receipts, closed statuses, and STORE certificates are portable artifacts that anyone can check.
No Heal
The earlier design announced a restart after every storm. This one never stops the trains. Only the stalled domain closes, and its certified descendants keep running.
Skip-cert
3f+1 anchored ⊥ votes for round r. The round is then anchor-less and finality-dead forever (Act I, L4).
Scent
At least f+1 distinct-author ⊥ columns in each of kout consecutive rounds. A full skip-cert can hide from a cone, but its scent cannot (Lemma F).
Flip
The monsoon exit of Act I. Every node suppresses its own river finality on seeing the scent. It is unilateral and syntactic, with no message to anyone.
Heal
Calm seas in Act I: one ratified event-wave anchor that every node re-enters at, so nobody straddles the boundary. Act III removes it.
O1-C
Cross-read confluence: River and Ocean deliver one anchor sequence and one transaction order, and no prefix is revised. Machine-checked for all N.
BindCert
3f+1 pre-coin bindings for one block of an elected author. Two would need 4f+2 honest binders, so each elected author gets at most one.
Data plane
Act II. K independent producer chains under the control DAG, with DA certificates of 3f+1 votes. Nothing is fetched on a critical path.
Dabba rule
Data-parent edges are not control edges. Missing data lowers a vector report and never blocks a control vertex.
Visibility gap
Lemma 0. No cone-local predicate detects a storm both soundly and completely, so both readings always run and confluence forces them to agree.
FrontierCert
A hash-linked record of the data frontier an anchor reached. Necessary for f ≥ 2, because no cone-local rule can carry unproposed extensions safely.
T1 to T4
The four composition obligations: clock independent of data, frontier safety, deterministic Ocean extraction, one log and one checkpoint sequence across readers.
Artifact, not extraction
The principle that both impossibilities and the field bug point at. Order is a carried object, never a value each observer computes for itself.
Act I · Rohu-Paplet · August 2026

Two readers, one river

Every consensus paper opens with a confession of faith: we assume partial synchrony. Act I refused to pick a weather. It wrote one DAG and read it two ways.

Act I runs two consensus read functions over one uncertified DAG. River finalizes in 2δ or 3δ under partial synchrony. Ocean commits coin-elected anchors under asynchrony. An in-band flip moves between them, and a machine-checked theorem says the two readings give one order.

At n = 5f+1 with at most f Byzantine, the 3δ slow path and the asynchronous Ocean are unconditionally safe. The 2δ fast path is safe under granular synchrony, and the flip gates it for exactly the regime where that assumption fails. The paper sorts every claim into proven, conditional, residual, implementation evidence, or positioning, and each claim below keeps its status.

The water: one DAG in every weather

A block is (author, round, parents, older_refs, payload, flags, σcoin?, sig). Its parents are at least 3f+1 distinct-author blocks of the previous round, and the self-parent is mandatory. Nothing on the wire changes between modes. Consensus is interpretation.

FlagMeaning
strong(r)Vote plus promise "I will never ⊥(r)". Cast in the round-(r+1) block of its author, with the leader as a parent.
weak(r)Late vote, no promise
⊥(r)Dummy vote, anchored: castable only in the round-(r+1) block of its author
fin(r)Finalize-ack. Needs its author's own strong(r) and a notarization in its cone.
bind(a, w)Pre-coin commitment to the first round-3w block of author a in wave w (Ocean)

A certificate is a set of valid flags from distinct authors anywhere in the DAG. Flag validity is syntactic. A verifier checks a flag against the cone of the block that carries it, so an invalid flag is stripped at interpretation, whatever its author intended.

QuorumSizeUse
qclk3f+1Threshold clock
qnotar3f+1Notarization, fin-certs, skip-certs, Ocean commits
qfast4f+1Fast finality
qcoinf+1Coin reconstruction, not a consensus quorum
|Q1∩Q2|≥2(3f+1)−(5f+1)=f+1two 3f+1 quorums share at least one honest author |Qfast∩Q|≥(4f+1)+(3f+1)−(5f+1)=2f+1a fast quorum and a 3f+1 quorum share at least f+1 honest authors

The commit rules read three outcomes off the same substrate. No extra message distinguishes them.

C1:fast(r)⇒final4f+1 strong, at 2δ C2:fincert(r)⇒finalnotarization, then 3f+1 fin, at 3δ C3:skip(r)⇒round r anchor-less3f+1 ⊥, forever (L4)

Anchor validity (R3) makes every leader block a carrier. A leader block is valid only if its cone contains a notarization or a skip-cert for every earlier round.

The dabba principle

Flags are artifacts, not patterns in somebody's view. The never-⊥ promise is folded into the strong vote, so a promise violation (⊥ after your own strong, or fin without strong) is slashable from a two-block proof. A certificate is portable: a light client can check it without the full DAG. Cordial Miners already treats signed equivocation as an accountable fault. The delta here is light-client portability.

the water · one DAG ≥ 3f+1 parents per block interpret Rohu · River reader partial synchronyC1 2δ · C2 3δ · C3 skip Paplet · Ocean reader asynchronycoin-elected BindCert flip heal one canonical order O1-C · ∀N checkedno prefix revised
Two fish, one river. One uncertified DAG carries one wire format in every weather. River and Ocean interpret it under different synchrony assumptions. The flip and the heal move tenancy between them, and confluence (O1-C) collapses both readings into one order. The DAG is stylized: five authors per round, four parents each.

Rohu reads the river

River takes the three commit rules directly. The single-round lemmas follow from quorum intersection over n = 5f+1 and from the anchoring of ⊥. Each honest author has exactly one round-(r+1) block, so it casts at most one ⊥(r).

Lemma L1 · Uniqueness
At most one leader block is notarized per round.
Proof

Two notarizations are two 3f+1 support quorums. They share at least f+1 authors, and so at least one honest author. That author would have supported two distinct leaders in one round, which the syntactic flag rule forbids.

Lemma L2/L3 · Exclusion
fast(r) and skip(r) cannot coexist. fincert(r) and skip(r) cannot coexist.
Proof

A fast (4f+1 strong) and a skip (3f+1 ⊥) share at least 2f+1 authors, so at least f+1 honest ones. Each of them promised never to ⊥(r) and also cast ⊥(r), which is a slashable promise violation. A fin(r) needs its author's own strong(r), so a fincert and a skip share at least f+1 honest authors that hold both strong(r) and ⊥(r).

Lemma L4 · Finality-dead
skip(r) implies that round r can never finalize, forever.
Proof

A skip-cert has at least 2f+1 honest ⊥ authors. Of the 4f+1 honest validators, at most the rest can cast strong(r):

|honest strong(r)|≤(4f+1)−(2f+1)=2fhonest ⊥ authors are barred from strong(r) 2f+f=3f<4f+1so no fast quorum, even with every Byzantine vote 2f<3f+1so no fincert: each honest fin needs an honest strong(r)

The cap is permanent by anchoring. Each honest ⊥ author spent its single round-(r+1) block on ⊥, so nobody can top up the cap later.

Lemma L5 · No limbo
Every round eventually carries a notarization or a skip-cert.
Proof

Let s be the number of honest validators that strong-support round r. If s ≤ f, then at least (4f+1) − f = 3f+1 honest validators cast ⊥, and a skip-cert forms. If s > f, the leader block is a parent of an honest block. It then spreads through the DAG to every honest validator, which weak-supports it on arrival. Supports reach 4f+1 ≥ 3f+1, and a notarization forms.

Virar fast

C1 does not stop for anybody. You board at 4f+1 strong votes in 2δ, or you watch it go. C2 stops at every station and still reaches VT in 3δ.

Paplet reads the sea

Ocean runs waves of W = 3 rounds. Any f+1 coin shares reconstruct a threshold-BLS coin cw, which elects ℓw = cw mod n. The anchor is the round-3w block of ℓw. It commits if it is cascade-committable and carries a BindCert. The cascade supplies liveness, and the BindCert supplies safety. The coin is elected after the votes that fix certifiability are sealed, so the adversary cannot aim it.

Lemma · BindCert uniqueness
At most one block per elected author can carry a BindCert, even under equivocation.
Proof

A BindCert is at least 3f+1 distinct-author bindings, so at least 2f+1 are honest. An honest validator binds author a to one value per wave: the canonical lowest-hash block. Two BindCerts for distinct blocks of one author would need two disjoint honest-binder sets:

2(2f+1)=4f+2>4f+1=honest validators(I.1)
Lemma · Forced committable set (the cascade)
In every wave, at least f+2 of the 5f+1 candidates are committable, that is, strong-path-supported by at least 2f+1 honest validators, whatever the adversary's spread.
Proof

Each round-(r+1) block references at least 3f+1 distinct round-r authors. There are at least 4f+1 honest round-(r+1) authors. Write cov(c) for the number of honest validators that strong-path-support candidate c:

∑ccov(c)≥(4f+1)(3f+1),cov(c)≤4f+1(I.2)

Let k candidates be committable. The other 5f+1−k have cov at most 2f:

(4f+1)(3f+1)≤k(4f+1)+(5f+1−k)(2f)split the sum at the committable candidates k(2f+1)≥2f2+5f+1rearrange k≥f+2−12f+1⇒k≥f+2k is an integer

This cardinality fact lies outside the quantifier-free fragment of the safety prover. SMT discharges it at f = 1, 2, 3 (UNSAT below f+2), alongside the proof for all f. A negative control that weakens the parents rule to 3f reaches only 1, 2, and 3 committable candidates, so the 3f+1 quorum is load-bearing.

Theorem · Ocean termination
Under eventual delivery and a common coin, each wave commits with probability at least (f+2)/(5f+1) ≥ 1/5, conditioned on any prior history. So every honest transaction commits in at most 5 waves in expectation.
Pr[no commit in k waves]≤(1−15)k,E[waves]≤5(I.3)
Proof

The cascade fixes at least f+2 committable candidates before the coin. The committed value of each one is frozen pre-coin as the canonical lowest-hash binding. At t = f+1, the f Byzantine shares alone cannot reconstruct the coin, and honest shares appear only at round 3w+2, after the bindings are sealed. The elected anchor is therefore committable with probability at least (f+2)/(5f+1). A committable anchor's BindCert forms from honest bindings alone, so the f Byzantine cannot withhold it away. The bound holds per wave, conditioned on history, so no independence across waves is needed.

Two caveats from the paper's own ledger. The rate (f+2)/(5f+1) is filed as conditional, favorable case only. The probability step is elementary and not mechanized. The paper notes that, to its knowledge, no asynchronous randomized BFT result mechanizes one.

Monsoon: nobody votes on the rain

A trigger is kout consecutive skip-certs. By L4 the trigger rounds are finality-dead, so the trigger can never conflict with finality after the fact. Exit is scent suppression. A strong or fin flag is invalid if its cone contains a scent: at least f+1 distinct-author ⊥ columns in each of kout consecutive rounds, unless a certified Heal is present.

Lemma F · Forced scent
If skip(r) exists, every block at round r+2 or later has, in its cone, ⊥(r) flags from at least f+1 distinct authors, and at least one of them is honest.
Proof

A block at round r+2 or later has at least 3f+1 distinct-author round-(r+1) blocks in its cone, by the threshold clock. A skip-cert supplies at least 3f+1 distinct-author ⊥-flagged round-(r+1) blocks. Anchoring gives each honest author exactly one round-(r+1) block, so containing a block by that author means containing the ⊥-flagged one:

(3f+1)+(3f+1)−(5f+1)=f+1 forced ⊥ authors, at most f Byzantine(I.4)

A full skip-cert can hide from a cone. Its f+1 distinct-⊥ scent cannot. Anchoring fixes where the ⊥ flags live, and the clock forces their columns into every later cone, so the timing of certificate assembly stops mattering.

Theorem · Exit is necessarily unilateral
Storm exit cannot be a collective decision, yet a safe unilateral exit exists.
Proof

A collective exit needs honest nodes to agree that a storm is on. That is consensus, and a storm is the failure of consensus on the fast read. By Lemma F, once a skip-cert exists every cone that reaches its round carries the scent. A node suppresses its own river finality on seeing the scent, with no message to anyone. It never exits without a genuine storm.

Theorem · Re-entry is necessarily collective
Unilateral re-entry forks. Re-entry through a single ratified Heal does not.
Proof

If each node re-entered the river when its own cone looked calm, two honest nodes could re-enter at rounds r1 ≠ r2. At a slot between them they would read different canonical values. The Heal is one ratified event-wave anchor, unique per boundary, and every cone carries it within two rounds. Every node re-enters at the Heal's round, so nobody straddles the boundary.

The asymmetry, a design law

Panic is unilateral, recovery is collective. Revoking the fast read is locally detectable and locally safe. Restoring it is locally unsafe and needs one ratified object. Exit rests on circularity: you cannot vote your way out of a failure of voting. Re-entry rests on indistinguishability. Mumbai knows this already. Nobody holds a referendum on whether it is raining, but when the trains restart, the announcement is for everyone at once.

exit: unilateral re-entry: collective river C1 / C2 finalize trigger kout skip-certs ocean tenancy coin-elected commits river healed round x x+kout h h+2 finality-dead (L4) Flip: the scent suppresses river finality Heal: one ratified event-wave anchor
A monsoon, start to finish. Consecutive skip-certs on [x, x+kout) form a trigger, and those rounds are finality-dead by L4. From x+kout the forced scent suppresses river finality and Ocean is canonical. One ratified Heal at round h lifts the suppression by h+2. The dashed gap [h, h+2) can only produce fewer certificates, never extra ones.

Two readers, one order (O1-C)

The central safety obligation is that River and Ocean never disagree. Every height commits the same value whichever reader resolves it, and no observer revises a delivered prefix. The obstacle comes first, as a lower bound.

Lemma 0 · The visibility gap
In an uncertified DAG with qclk = 3f+1 over n = 5f+1, no predicate on an arbitrary block's cone is both complete (true in every honest cone two rounds after a fincert-class certificate exists) and sound (false in every honest cone whenever that certificate is impossible).
Proof

A cone is guaranteed only 3f+1 of the round-(r+1) author columns, so the adversary can make every honest cone miss one chosen column. World W1 has exactly 3f+1 strong(r) flags, so a fincert is possible. World W0 has exactly 3f and differs only in the missing author's flag. Every honest cone sees the same thing in both worlds, so any predicate gives the same answer in both. Completeness says true in W1 and soundness says false in W0, on the same cone.

Mode detection cannot be both sound and complete, so the design makes the question moot. Scent suppression empties the contested region, and chain anchors carry the certificates that matter.

Theorem O1-A · Empty contest
Let a trigger cover [x, x+kout), with a Heal anchor at round h (h = ∞ if none). For every s with x+kout ≤ s < h+2, neither fast(s) nor fincert(s) ever exists. River and Ocean never contend for the same height.
river-final⊆[0,x)∪[h+2,∞),ocean⊆[x+kout,h](I.5)
Proof

A strong(s) or fin(s) flag lives in a block at round s+1 or later, which is at least (x+i)+2 for every trigger round x+i. By Lemma F its cone carries the scent, so the flag is invalid. The Heal exception needs s ≥ h+2 and the certified Heal, which exists only from round h+2. So no valid strong(s) or fin(s) exists in the window, and the two sets in (I.5) are disjoint.

Lemma · Carriage
If fast(s) or fincert(s) exists, every R3-valid block at a later round, river leader or ocean anchor, has notar(s) for Ls in its cone, and so has Ls itself.
Proof

A certificate rules out skip(s) by L2/L3. R3 then can only be met at round s by notar(s), which is unique by L1. Each support carries Ls as an ancestor by flag validity.

Every observer uses one linearization function lin for every anchor. It orders the anchor's cone by ascending round, pivots at any leader block carrying notar(r) in that fixed cone, and recursively emits the pivot's batch. The pivot predicate is evaluated in the anchor's cone, so pivot batches never depend on the outer observer.

Theorem O1-C · Confluence
All honest observers deliver the same anchor sequence and the same transaction order, and no delivered prefix is ever revised.
Proof

Induct on the anchor position i. Genesis is agreed. Given an agreed prefix, R3 makes the next slot a deterministic function of it. Under river tenancy, L1 and L2/L3 force a unique river outcome. A live trigger would scent-suppress at least 2f+1 honest voters, leaving at most 3f < 3f+1 valid finality flags, so no Ocean anchor fits there. Under Ocean tenancy, O1-A rules out river certificates. The coin is recovered identically from any f+1 shares, and BindCert uniqueness leaves one committable block. The flip is a deterministic function of the DAG, and the Heal is one ratified object, so every observer places the boundaries identically. Within an agreed anchor, lin and carriage give identical batches. A delivered river anchor excludes any trigger over its slot, and a delivered Ocean anchor sits where no river certificate can exist, so nothing is revised.

Machine-checked, for all N

The same result is proven inductively over all N in Ivy/mypyvy and reduced to one rule of the threshold clock: a cone reaches round R only with a quorum of 3f+1 distinct-author round-R blocks in it. Forced scent and forced carrier derive from that rule plus quorum intersection. The fused model proves agreement, cross-mode exclusion, chain linkage, and delivery together, non-vacuous and load-bearing-gated. Lemma 0, forced exit, the forking of unilateral re-entry, and the safety of collective re-entry are also checked for all N.

What it owes, it names

The prover has no module system, so the composition across models is a vocabulary correspondence, with every dependency listed. One seam, the duality between immutable cones at commit and growing cones during dissemination, is shown irreducible by a deliberate counter-model. The lin properties are derived for all N from two primitives. The kernel's global pivot recursion is the one step not mechanized. Its order and determinism are cross-validated against the kernel at f = 1, 2, 3.

The fast-path bound, honestly

A 2δ fast commit at about 80% responsiveness, combined with 20% crash tolerance, is not free under bare partial synchrony. Hydrangea Theorem 3 caps the safe optimistic two-round threshold:

psafe≤⌊c+k2⌋=⌊f2⌋(I.6)

The paper reads this as forbidding Rohu-Paplet's popt = f under bare partial synchrony for f ≥ 3. So the 2δ path takes its safety from granular synchrony. Before GST, at most f honest parties' messages to any honest party are delayed beyond a bound Γ ≥ Δ. The protocol realizes this as a wait of Λ = 2Γ + 2Δ before casting ⊥. Granular synchrony is weaker than full synchrony and stronger than partial synchrony.

  • Where the premise enters. Exactly at the cross-round carriage between the 2f+1 fast-worth and the 3f+1 clock quorum (O15). Without it, the fast commit is provably strandable. The carriage is then derived from the premise for all N. The premise itself is irreducible, and the paper makes no claim that the DAG escapes the bound.
  • What the premise does not buy. The skip-side inference, that no fast commit coexists with a skip-cert, holds with the premise deleted (anchoring plus counting). Granular synchrony buys the carriage and nothing else.
  • The flip is the gate. When the evidence says the premise broke (sustained skips), the protocol drops to Ocean, which is unconditionally safe and live. The 3δ slow path's 20+20 tolerance stays unconditional.

There is a second door: pay validators instead of assumptions. At n = 6f+1, with qclk = 4f+1 and qfast = 5f+1, counting alone forces the carriage:

(2f+1)+(4f+1)−(6f+1)=1 honest carrier(I.7)

The cost is about 3% resilience: f/(6f+1) against f/(5f+1). The gate proves the same carried theorem as the 5f+1 model with that one axiom's status flipped. The default stays 5f+1 with granular synchrony. Assumption or validators, both mechanized.

Liveness is regime-complete, to the VABA/Ben-Or standard. River resolves every round under partial synchrony (checked for all N). Ocean commits under sustained asynchrony through the cascade, withholding resistance, and coin anti-aiming. Both boundaries are fork-free, so the transitions keep progress. The only step not mechanized is the per-wave probability from the standard coin.

On real water: eleven nodes, four continents

The reference implementation is a Rust sibling module to commonware_consensus::simplex. A six-node network reaches consensus, tolerates a crashed leader, and stays safe under an equivocating one. It runs Ocean on a real threshold-BLS coin (t = f+1) from a real over-the-wire DKG, with no trusted dealer. It flips on a storm, heals on sustained calm, and delivers one canonical log across all nodes, over simulated networks and real TCP. A killed validator recovers from its journal and rejoins.

PathBeforeAfterNote
ledger.ingest (healthy)9,318,645 ns2,158 nsabout 4300×
ocean_commit (per tick)about 1–5 msabout 2 μsflat in DAG size, about 2000×
Sustained storm, no finalitysuper-linearlineargated test

The geo-distributed run uses n = 11 (f = 2) VMs in five cloud regions on four continents: Virginia, Oregon, Belgium, Singapore, and São Paulo. Links are real (Virginia to Singapore is about 230 ms RTT), and the coin is real threshold-BLS. The storm halts the three validators that lead kout = 3 consecutive round slots, which leaves 8 ≥ qclk = 7 alive, so the DAG keeps advancing.

RegimeMeasurementValue
CalmCanonical log, deduplicated positionsabout 1.7 commits/s
CalmRiver finalizations on the 2δ fast path75–100%
StormRiver finalizations, scent-suppressed by O1-A, over the whole 360 s storm0
StormCanonical log, Ocean anchors, deduplicatedabout 0.53 commits/s
Flip⊥ columns on the three storm rounds (threshold 7)10, 9, 10
FlipNodes that flipped, and at which round9 of 11, all identical
FlipRuns in which onset occurred1 of 3
SafetyCross-node divergence, all seven storm scenariosnone, position-level

The chain kept committing through a regime in which the partial-synchrony path was provably and observably dead. That is the reason the dual read exists, measured instead of argued. The unanimity of the flip is the other point: the trigger is a pure function of the DAG, so independent observers place the boundary at the same round with no coordination. The two nodes that did not flip had fallen behind and had not reached that round yet.

A demonstration, not a rate

The flip fired in one of three leader-failure runs. In the other two, skip-certs formed in runs of two but never three, so there was correctly no flip. Uniform degradation does not flip either: during a 3 s-delay storm, 78–94% of commits still took the fast path, because slow synchrony is not asynchrony. The divergence check was position-level. The harness now also checks one digest per position, but the runs above predate that check.

Alibaug se aaya kya?

Three early "firsts" did not survive a literature crawl, and the paper withdraws them. A direct 3δ DAG commit is not new: Mysticeti-C has it. Two synchrony modes in-band in one DAG are not new: full Bullshark has them, on a certified DAG with per-wave mode votes. A 2δ commit on a 5f+1 uncertified DAG is not new: Odontoceti has it, with no asynchronous mode. The defensible claim is the conjunction: two synchrony-model readers over one uncertified DAG that provably collapse to one order, with an evidence-anchored flip, all machine-checked. On an uncertified DAG the visibility gap is real, and that is where the confluence theorem earns its keep. Shana mat ban.

Act II · Two planes · August 2026

The dabbas get their own train

Act I taught the river to read the weather. Act II gives the dabbawalas their own train, so a late tiffin never stops the clock.

Replicated state machines have two jobs with two different hard cases. Dissemination fails under data withholding. Ordering fails under adversarial timing. Act II gives each job its own plane and proves that the pair still collapses to one order.

The control plane is Act I: one uncertified DAG, two readers, an in-band flip, and machine-checked confluence. Act II puts independent producer chains underneath it and proves the seam. The paper states the motivation plainly: a system is exactly as live as its least adaptable layer.

Two jobs, two villains, two planes

Dissemination degrades when a producer hides a batch. Ordering degrades when the adversary controls message delay. Availability certificates and prefix rules defeat withholding. Synchrony assumptions and fallback paths address timing. Act II arms each plane against its own villain.

The data plane is K transaction-block chains, one per producer, in the Multimmit line. The paper takes K = n. A data block on chain i is

b=(i, h, parent, txroot, σi)(II.1)

with exactly one data parent at height h − 1 on the same chain. An honest validator casts at most one DA vote per pair (i, h). Before it votes, it must hold, and have DA-voted, the whole path from its greatest locally certified anchor through the block. A DA certificate is 3f+1 DA votes. Two counting facts over n = 5f+1 drive almost every proof:

2(3f+1)−(5f+1)=f+1,(4f+1)+(3f+1)−(5f+1)=2f+1(II.2)
Lemma · Data-chain safety and availability
On every chain, all DA-certified blocks are mutually compatible. A certified block and its required ancestor path have at least 2f+1 honest holders. Under eventual delivery, every honest validator can retrieve the data that a valid certificate names.
Proof

Take incompatible certified blocks with a lexicographically minimal height pair. Their two 3f+1 voter sets share f+1 validators, so they share an honest one. That validator either voted twice at one height or voted through a path that contains a conflicting block at the lower height. Both break the one-vote rule. For availability, take the least-height certified block that extends a given ancestor. Each of its 2f+1 honest voters held the path through that ancestor when it voted.

This lemma is the only fact that the composition imports from the data plane. Everything else in Act II is about the seam.

The dabba rule

Data-parent edges are not control edges. A control vertex can name no data, old data, uncertified tips, or DA certificates. Missing data only lowers the vector report of its author. It never blocks the control vertex, and the threshold clock never sees it.

control planedata plane ≥ 3f+1 distinct-author parents per vertex · the clock never waits on data v · round r−1 v · round r anchor A dataRefs · not clock edges chain 1chain 2chain K withheld FrontierCertfrontier as artifact records certified tips K producer chains · DA certificate = 3f+1 DA votes · ≥ 2f+1 honest holders per certified block green: DA-certified · dashed: not yet certified · red: withheld by its producer
Two planes, one seam. The control clock counts only control parents, so withholding on a data chain cannot stall it (T1). Producers disseminate in parallel under DA certificates of 3f+1 votes. A committed anchor and the certified tips it sees meet in one object, the FrontierCert, which records the frontier as a hash-linked artifact.

Nobody can see the storm coming

The architecture of both acts comes from one lower bound. A cone contains at least 3f+1 of the 5f+1 author columns of a round, never more by guarantee. So the adversary can schedule delivery so that every honest cone misses one chosen column.

Lemma 0 · Visibility gap
In an uncertified DAG with a 3f+1 threshold clock over n = 5f+1, no predicate on a cone is both complete and sound for a fin-class certificate. Complete means true in every honest cone two rounds after the certificate exists. Sound means false whenever the certificate is impossible.
Proof

Build two worlds that differ only in the flag of the one column that every honest cone misses:

W1: 3f+1 strong flagsa fin-class certificate is possible W0: 3f strong flagsthe certificate is impossible

Every honest cone sees the same bytes in both worlds. A deterministic predicate gives one answer on identical views. Completeness forces true in W1, and soundness forces false in W0, on the same cone.

So storm detection cannot be both sound and complete. The design does not build a better detector. It computes both readings all the time, and confluence forces them to agree. The shape of the transition then follows:

  • Exit is unilateral. Agreeing that "we are in a storm" would need the consensus that is failing. Instead, a node suppresses its own River finality when it sees the scent of a skip-certificate: f+1 distinct ⊥ flags, at least one honest.
  • Re-entry is collective. If each node re-entered when its own cone looked calm, two honest nodes could re-enter at different rounds and read different values. One ratified Heal puts everyone back at the same round.
Order must be an artifact, not an extraction

The paper states this principle once and then meets it at every layer. Lemma 0 forces the dual read. A second impossibility, in T2 below, forces the FrontierCert. The deployment then shows the last component that still extracted order failing in the field.

T1 · A late tiffin never stops the train

The first obligation is the one whose failure would be fatal and silent. If data-plane misbehavior could stall the control clock, the liveness of the whole weather machine would depend on producers. It does not.

Theorem T1 · Decoupled threshold-clock realization
The control DAG realizes the threshold clock and its two intersection consequences independently of every data-chain schedule. A 3f+1 skip, notar, or fin object leaves an honest artifact in every later cone. A 4f+1 fast-vote object leaves at least f+1 honest vector votes there. Withholding, equivocation, or stalling on a data chain cannot stop an honest validator with 3f+1 valid control parents from producing a valid control vertex.
Proof

By induction on rounds, every later cone has at least 3f+1 distinct authors at each earlier round. Intersect with the evidence object:

∣Auth(X)∩Y∣≥(3f+1)+(3f+1)−(5f+1)=f+1a 3f+1 object: one common author is honest (4f+1)+(3f+1)−(5f+1)=2f+1a fast certificate: at least f+1 honest exact votes

Control validity checks only control headers, the self-parent, commitments, and flag syntax. No rule requires fetching a named data block first. The data plane changes the values in a control payload, never eligibility for the clock.

T1 is machine-checked for all N in rohu_wdc_t1_control_clock.pyv. The decoupling is structural. The model has an adversarial withhold_data transition that the environment can fire at will, and no control transition mentions it in a guard. Removing either intersection axiom produces a counterexample to induction, so neither axiom is slack.

T2 · The frontier rides in a dabba, not in a guess

A committed anchor must record which data frontier it reached: a vector F = (F1, …, FK) with one block per chain. For a River proposal C and a pool P of 4f+1 vector-strong votes, let ki(P) be the (3f+1)-st largest reported position on chain i. Then

RiverExtract(C,P)i=Prop(C, i, ki(P))(II.3)

A fast pool safely pins positions that the proposal names. With fa ≤ f actual Byzantine validators, two honest voter sets on rival branches cannot both exist:

2(3f+1−fa)=6f+2−2fa  >  5f+1−fa=n−fastrict because f+1 > fa, so the sets share an honest double voter

Blocks above the proposed tip are a different matter. No proposal pins them, and an equivocating producer can put incompatible branches behind the same height.

Theorem · Cone-local extension carriage is impossible for f ≥ 2
For n = 5f+1 and f ≥ 2, no deterministic predicate of an uncertified control cone alone is both complete for every unproposed extension that has a 4f+1 River fast certificate outside the cone, and sound, so that it never carries a branch incompatible with that extension.
Proof

A Byzantine producer d signs incompatible extensions x and y at one height. The cone holds 3f+1 columns: f+1 votes for x and 2f for y, with d on the y side. The other 2f authors stay outside the cone.

Ex: (f+1)+2f+f=4f+1f Byzantine y-side authors, including d, also vote x outside the cone Ey: 2f+2f+1=4f+1d and one x-side author are Byzantine, which needs f ≥ 2

The cone is byte-identical in both executions. Returning x is unsound in Ey. Returning y is unsound in Ex. Returning neither is incomplete in both.

The paper makes no cone-local impossibility claim at f = 1. With one Byzantine validator, the faulty party must be the equivocating producer, so no second author can route the opposite outside vote. The construction is checked concretely at f = 2 and f = 3 in wdc_ext_calibrate.py. Multimmit separately proves an exact extension threshold for notarization-only carry rules. This theorem is about a different gap: a 4f+1 certificate can exist globally while an uncertified cone does not reveal its branch.

control cone · 3f+1 = 7 columns outside · 2f = 4 cone votesExEy xxx d·yyyy same bytesin both runs xxx xxxx x: 3 + 4 + 2= 9 = 4f+1 yy d·yy+x+x xx yyy yyyy y: 4 + 4 + 1= 9 = 4f+1 xd·y+y A cone-local predicate sees the same cone in both runs, so it gives one answer: return x: unsound in Ey · return y: unsound in Ex · return neither: incomplete red: Byzantine, f = 2 per run · d signs both x and y · +x, +y: extra votes cast outside the cone
Why the frontier must be carried, at f = 2. The seven-column cone is byte-identical in both runs. In Ex, the outside authors and two equivocators give x nine supporters. In Ey, the outside authors and one equivocator give y nine. No cone-local rule can pick the right branch in both.

The answer is not a better extractor. It is an artifact:

FC=(r, H(A), H(FC−), frontierRoot, evidenceRoot, signers)(II.4)

Here A is the control anchor and FC− is the parent FrontierCert. The evidence is either a River fast pool, from which the frontier is recomputed by (II.3), or a committed Ocean anchor with its BindCert and DA-certificate digests. Validity requires the parent frontier to be coordinatewise below the new one. Candidates from different local pools need not be byte-identical. The reference chain ratifies one, and later anchors must descend from it. Two same-round candidates are still compatible. Proposal positions lie on one pinned path. For a variant that allows a fast extension only with all 4f+1 votes, two such pools share honest voters:

2(4f+1)−(5f+1)=3f+1at least 2f+1 of them honest, and an honest voter backs one branch
Theorem T2 · River frontier safety and carriage into Ocean
A River-fast finalized position excludes any incompatible DA certificate, including at rank zero. Its signed evidence reaches every later cone at the f+1 carry threshold. Candidates for one round are compatible. Before ratification, Ocean can lag a River frontier but cannot contradict it. After ratification, every later anchor and Heal references that FrontierCert or a coordinatewise extension.

Candidate compatibility is machine-checked for all N in rohu_wdc_t2_fc_family.pyv. Both the pool-intersection count and the honest single-branch rule are load-bearing: removing either produces a counterexample.

T3 and T4 · One log, whichever fish is reading

T3 makes Ocean extraction deterministic. For a committed Ocean anchor A with parent FrontierCert frontier F−, collect the DA-certified blocks in its full cone that extend the parent coordinate:

Ei={ b:DACert(b)∈Certi(A) ∧ Fi−⪯ib },Gi=max⁡⪯iEi  if Ei≠∅,  else Fi−(II.5)

DA-certified blocks on one chain are totally ordered by ancestry, so the maximum is unique. Honest observers that fix the same anchor eventually hold the same finite cone and accept the same certificates. They therefore compute the same frontier G, the same Sweep order, and the same state root. Safety uses no synchrony bound. Eventual delivery is used only for retrieval and termination.

T4 lifts this to one log across both readers. A ratified checkpoint binds the anchor, its FrontierCert, the frontier, the state root, and which reader held the slot. The log grows only by sweeps between ratified frontiers:

Log(FCj)=Log(FCj−1) ∥ Sweep(Fj−1,Fj),Rj=Root(Statej)(II.6)
Theorem T4 · Cross-reader agreement
Ratified logs of any two honest observers are prefix-compatible at all times. Observers that ratify checkpoint j agree on its anchor, FrontierCert, frontier, complete log, and state root. A flip to Ocean, Ocean execution, and a Heal back to River preserve one append-only FrontierCert chain and one checkpoint state sequence.
Proof

Induct on the checkpoint index. In a River slot, the canonical reference selects one member of a compatible candidate family. In an Ocean slot, O1-A excludes a River commit, BindCert picks one anchor, and T3 gives one frontier and root. At a Heal, one ratified tuple fixes the anchor, FrontierCert, state root, and boundary, so River resumes from the exact state where Ocean stopped.

T3 and T4 are hand proofs over the control-safety package imported from Act I. The paper names what the composition still owes. The fused gate that lifts confluence to FrontierCert hashes and state roots is not yet mechanized. FrontierCert production liveness is unproved, and the paper does not claim it.

105 gates, exit 0

A fair reviewer asks whether "machine-checked for all N" means one theorem or twenty hand-glued lemmas. All gates rebuild from clean with ./setup.sh && ./check.sh on a pinned toolchain: 105 gates, exit 0. The tiers are explicit:

  • inductive invariants for all N in Ivy and mypyvy,
  • SMT calibration at f = 1, 2, 3 for counting facts outside the decidable fragment,
  • Rust differential harnesses that cross-check model against kernel.

One fused model proves agreement and no-cross-mode for all N in a single transition system, reduced to one threshold-clock axiom. The composition has exactly two seams. The first, between a committability snapshot and a growing dissemination view, is itself machine-checked as an expected counterexample gate. The second consumes a proved conclusion from above.

ResultGateStatus
Confluence O1-Crohu_o1c_fusedproved for all N
Visibility gap (Lemma 0)rohu_lemma0_visibility_gaplower bound witnessed for all N
T1 clock decouplingrohu_wdc_t1_control_clockproved for all N
T2 candidate compatibilityrohu_wdc_t2_fc_familyproved for all N
FrontierCert necessitywdc_ext_calibrateimpossibility witnessed at f = 2, 3
2δ fast pathrohu_o15_granular_bridgeconditional on granular synchrony

The artifact also says what it does not prove. mypyvy has no module import, so the seams rest on about six shared vocabulary identities. The single headline step without a mechanized proof is the global linearization pivot recursion. Its causal-total-order properties are derived for all N. The specific pivot-grouped order and its determinism are only cross-validated at f = 1, 2, 3. Remember that address.

Four continents, one storm, and a bug we report anyway

The deployment runs n = 11 validators (f = 2) in five cloud regions on four continents: Virginia, Oregon, Belgium, Singapore, and São Paulo. The links are real, with about 230 ms round trip from Virginia to Singapore, and the coin is real threshold BLS. In calm weather the log advances at about 9.9 commits per second, and 75 to 100 percent of River finalizations take the 2δ fast path.

The storm
Halt the three validators that lead three consecutive slots, leaving 8 alive against a clock quorum of 7. The survivors cast ⊥ columns of 10, 9, and 10 authors against a threshold of 7, forming three consecutive skip-certificates.
The flip
9 of 11 nodes flipped, every one at the same round. The other two had fallen behind and had not reached it. The trigger is a pure function of the DAG, so nobody coordinated.
The river, dead
River made zero finalizations for the whole 360 s storm. The canonical log kept committing at about 1.05 commits per second off Ocean anchors.
No false alarms
Uniform delay, even seconds with jitter, produced no skip-certificates. 78 to 94 percent of commits stayed on the fast path during a 3 s delay storm. Slow synchrony is not asynchrony, so no flip is correct.
Onset rate
A static leader-failure window must cover kout consecutive leaders and still leave a clock quorum. The flip fired in 1 of 3 such runs. The paper reports this as a demonstration and names the alignment condition, not a rate.

The FrontierCert layer behaved exactly as T3 and T4 predict. Every node that reached an anchor minted a byte-identical FrontierCert. Digests diverged only where the committed order underneath diverged. That faithfulness has a sharp corollary: any divergence must come from an imported input. One did.

The stricter oracle compares the block digest at every position and an order-sensitive running state root on every node:

Sj+1=H(Sj ∥ H(bj))(II.7)

Two nodes agree on S exactly when they committed the same blocks in the same order. Under this oracle, one lagging node diverged at one position and never reconciled. A second run reproduced the same class at a different node and position. Earlier runs missed it because the benchmark proposed identical payloads, and reordering identical payloads does not change the root.

Replay settled the diagnosis. A majority journal, replayed into a fresh ledger, matched its own committed order over all 168 positions, so the kernel linearization is deterministic. Every block of the lagging node was canonical, and its block set was a strict subset of the majority's. Its committed order contained three inversions.

position12345678 majority nodelagging nodeSj equal? b1b2b3b4b5b6b7b8 b1b2b5b6b7 == b4b3 ≠≠≠≠≠never reconciles anchor agreement held: every committed block is canonical, the set is a strict subset total order failed: an inversion, then frozen by append-only publication a head-position oracle sees nothing here · the per-position state root catches it
Anchors agree, order does not. Schematic, with one inversion shown. In the incident the lagging node committed only canonical blocks, but its order had three inversions. Append-only publication froze them, and the running state root never matched again.

So anchor agreement held, and the total-order half of confluence failed, only on a node whose cone was incomplete when the fast emit path ran. The emit path delivered a batch before its cone finished disseminating. That path implements the linearization pivot recursion: the one step the residual ledger had always listed as cross-validated but not mechanized. The paper named the address, and the bug turned up there.

Frozen claims

"No two nodes ever diverged" was true under a head-position oracle and is unverified under the per-position oracle. The paper restates it as "no two nodes ever committed conflicting anchors". The total-order clause of confluence, as this implementation realizes it, is frozen pending the fix and a re-run.

The immediate fix applies the rule that the fast path skipped: emit only the prefix through which every round is resolved in the fixed cone, and stall at an unresolved round. A node that already diverged detects the mismatch against ratified checkpoint roots and resynchronizes from the last agreed checkpoint. The structural escape is stronger: Sweep over a ratified FrontierCert chain is height arithmetic, with no fixpoint and no sensitivity to arrival order. It sits inside the fragment the prover handles.

Same law, two floors of the building

The impossibility theorem says that cone-local extraction of order cannot be sound and complete. The deployment showed extraction-based ordering failing in the field. Order must be an artifact, not an extraction. The paper would rather report that than a clean table.

Three process changes outlive the fix. Per-position digests and the order-sensitive root become permanent oracles. The captured trace becomes a regression in a new class of adversarial schedules, because random DAGs were not enough. And the benchmark moves to distinct payloads, so the state root does the checking.

Act III · Parent-local · September 2026

The monsoon, one parent at a time

Act III throws out the eras, the flip, and the Heal. The trains never stop now. Only the stalled parent closes, and its certified descendants keep every signing right.

A timeout does not erase votes. Votes cast before a timeout can still form a certificate after recovery has started. Rohu-Paplet makes fast finality and continuous asynchronous recovery agree on which child survives.

Independent producer chains supply retrievable transaction data. Accepted cuts of a continuously running control DAG define deterministic ordered deltas. Each certified parent opens exactly one successor domain.

River, the fast path, finalizes a child inside that domain. Ocean, the asynchronous ordering service, orders recovery records for domains that stall. Recovery closes the stalled domain permanently. It preserves any child that could still get a fast certificate, and it certifies exactly one successor. It never appends a recovery tail that could collide with descendants that already make progress.

Two counts summarize the cost. An eligible proposal with complete evidence is ratified in two message delays. A stalled parent needs one effective ordered resolution. That is a count of coordination stages, not a bound on elapsed time.

Act III at a glance

Fault model
n = 5f+1 identities. At most f fail in total over the whole execution, counting Byzantine behavior, disappearance, and lost safety state.
Safety
All valid finality proofs from one genesis describe prefix-compatible histories (Section 9). Safety needs no delay bound.
Fast path
FAST is 4f+1 PREPAREs, assembled at 2δ. FIN is 2f+1 receipts over a complete 3f+1-PREPARE certificate, assembled at 3δ.
Recovery
Close dp, collect 4f+1 closed statuses, and let the first valid resolution in Ocean order certify one child. One ordered stage per stalled parent.
Liveness
Almost sure, under an ideal common coin. The expected number of eligible waves to a core hit is at most n/Q = (5f+1)/(4f+1) < 5/4. This counts waves, not elapsed time.
Evidence
32 signed kernel and adapter tests at commit 2812f22. The native Rust components implement the earlier era-based revision, not this construction.
Act III · Section 1 · The problem

A timeout is not an eraser

Somewhere a Byzantine collector is sitting on a finished certificate and a smirk. Recovery has to plan for that collector, not for the polite ones.

Byzantine consensus must connect three statements: some data exists, validators agree on its position, and an application can consume the agreed result. A fast certificate counts only if later recovery preserves it.

Each statement needs its own contract. A certificate for a block digest proves that the data exists only under a custody contract. Agreement on selected DAG anchors fixes a position only with a deterministic interpretation of their complete ancestry. A fast certificate gives irreversible authority only if later recovery preserves it. That must hold even when no recovery participant has assembled the certificate yet.

The late-certificate problem

A proposal that looks unsuccessful can still finalize. Signed messages can be delayed, and a Byzantine collector can reveal them after recovery makes another choice. So recovery needs evidence about what could already finalize, not only a report of what its participants have learned. The evidence must also survive the loss of the first recipient of a certificate. A signed promise to hold a complete artifact must imply that the signer retains it and that others can eventually retrieve it.

time → A · naive recovery decides from what it has seen Byzantine collector honest validators recovery (Ocean) PREPARE(x) 4f+1 = 5 signed builds FAST(x) withholds it reveals FAST(x) later timeout closes dp sees no FAST certifies z x and z final fork PREPAREs held back statuses late B · Rohu-Paplet preserves what could already finalize Byzantine collector honest validators recovery (Ocean) PREPARE(x) 4f+1 = 5 signed builds FAST(x) withholds it reveals FAST(x) later closes dp status: PREPARE protect(Sp) = x ≥ 3 report x x certified + FAST proof PREPAREs held back Sp: 5 statuses same x
The late-certificate problem. Recovery must preserve what could already finalize, not only what its participants have seen. Here f = 1 and n = 6, and a Byzantine collector holds FAST(x) back past a timeout. In B, each closed status carries its author’s own PREPARE. At least 2f+1 = 3 honest statuses in Sp report x, so protect(Sp) = x and the first valid resolution certifies x. The revealed FAST is a second proof of the same child.

Certified descendants create a second difficulty. Suppose a late certificate proves p → x, and another observer has already certified x → y. Recovery of p must then authorize exactly x. It cannot preserve x and append a recovery transition after it, because that transition would be a competing successor of x. It also cannot treat two proofs for x as two different parents. Otherwise, honest validators could sign conflicting children in domains that they wrongly think are separate.

p x y dp closed dx open dy open FASTp(x) FASTx(y) ✗ second successor of x x′ recovery tail late resolution of p first valid for p certifies x again ✗ new parent x (Ocean bytes) own domain d′ y′ conflicts y
Exact parent domains. Closing dp changes only the entry for dp, so dx stays open and y stays certified. A late resolution of p is one more proof of the same x. It cannot append a recovery transition after x. Its proof bytes cannot open a second domain for x, because id(x) excludes proof representations.
The design move, bole toh

Exclusion happens at an exact semantic parent. The successor domain of that parent gets one fast attempt and can close permanently. A closed status carries the earlier choices of its signer and all complete protection that the signer retained. One ordered resolution then selects one immediate child and preserves any possible late finality. The certified child enables the next domain. The old parent never reopens, and the closure of an ancestor does not close any descendant domain.

Four distinctions used throughout

availability ≠ order
Data availability is not transaction order. A DA certificate says that 3f+1 validators hold a block and its ancestry. It says nothing about the position of the block.
vertex ≠ decision
An accepted DAG vertex is not an ordered recovery decision. Ocean accepts vertices continuously. Only an effective parent resolution changes application authority.
preservation ≠ agreement
A preservation status set is not agreement on a recovery choice. Different valid status sets can name different unfinished children. The first-valid-record rule of Ocean picks one.
child ≠ proof bytes
A semantic child is not its proof bytes. FAST, FIN, and an Ocean resolution can all prove the same child. None of them changes the identity of the child or the domain it opens.

The four distinctions explain why a working fast path, a DAG, and a persistence layer are not enough. The system still needs a composition argument.

Contributions and scope

The paper makes four contributions within the stated model:

  1. A complete interface from data to certificate: compatible producer paths, accepted cuts, exact semantic children, replaceable proof artifacts, and deterministic ordered deltas.
  2. A parent-local preservation construction. Quorum arguments show that closure and ordered resolution preserve possible late FAST and receipt finality. Induction then gives one certified prefix across both routes.
  3. A connection to native asynchronous DAG ordering. It states the broadcast, coin, complete-cone, and first-resolution obligations, the explicit progress premises, and a structural count of recovery stages.
  4. An implementation and falsification record. It separates the signed reference construction, its ordering adapter, the earlier native components, and the independent transport and extension experiments.

The paper establishes one algorithmic comparison, against the earlier era-based design. One parent resolution replaces the cycle of barrier, executed checkpoint intent, and Heal ownership in that design.

Act III · Section 2 · Model, assumptions, guarantees

The water

Everyone writes the same water in every weather. The fault budget is f, in total, for the whole execution, and it counts the people who fall in later.

Fix f ≥ 1 and a committee N of n = 5f+1 authenticated identities. Over the whole execution, at most f identities in total may deviate, disappear, or lose their safety state.

The budget is total, and it counts later failures too. It is not f Byzantine identities plus a separate crash allowance. Quorums count distinct configured identities, not messages. A restarted process keeps its identity and must restore its earlier restrictions before it signs again.

Roles

Producers
Keep signed chains of transaction blocks. A producer can also be a validator. The configured ordered producer list fixes extraction order.
Validators
Retain data, sign protocol evidence, and author control vertices.
Observers
Verify finality and consume the order. They do not vote.
Clients
Submit data to producers. Admission is not a consensus certificate.

Configuration binds

Committee
Ordered committee and producer lists, public keys, and f.
Versions
Protocol and encoding versions, application semantics, and resource limits.
Instance
Genesis and the Ocean instance. Every signed object and hash domain binds this configuration.
Scope
Fixed committee. A certificate under another configuration is unusable, even when both committees have the same size.

Communication

Delivery
Messages between honest parties eventually arrive and are processed. The network can reorder them and delay them arbitrarily.
Finiteness
Executions are locally finite. Every record is finite.
Timing
Safety needs no delay bound. Each statement that uses δ names its extra synchrony and readiness premises.
Crypto
Signatures are unforgeable and hashes are collision resistant. Exact encodings are part of the verifier.
Assumption 1 · Durable evidence and common validity
An honest signer records its signing choices, retained complete evidence, outbox, and closure tombstones before it releases the corresponding signature. Restart restores them without rollback. Honest evidence holders retain and serve the bodies and dependencies that they promised. Complete child validity is a common deterministic predicate. Missing required evidence yields Pending. It never yields a different locally valid child.

The durability condition is a publication barrier, not a mandate for a particular database. If a storage callback fails, no output that depends only on the unacknowledged transition can escape. A signer that loses its state must stay unavailable until it recovers safely. A new empty journal under the old key violates the model. The baseline retains history. It does not provide bounded-storage garbage collection or rollback detection.

Assumption 2 · Continuous ordered recovery service
Ocean supplies portable authenticated evidence of a prefix-compatible ordered control transcript. Readers process the same complete records in the same order. Eligible honest records that are continually advertised are eventually ordered, almost surely. Control progress does not depend on application execution, on the resolution of another parent, or on a successful fast proposal.

Section 8 discharges this assumption with the native DAG construction. It states the dependencies on broadcast, ancestry, fair inclusion, seals, and an ideal coin. The ordered transcript and its complete interpretation are separate from the application head that an observer has executed so far.

What consensus guarantees

Certified-prefix safety
All valid finality proofs that descend from the configured genesis describe prefix-compatible semantic histories and a deterministic transaction order.
Certified progress
Under the progress premises, every certified parent that an honest participant admits eventually has a final child that all honest observers know, almost surely.
Qualified data inclusion
DA-certified data that is continually advertised is eventually included, under the retention, fair-ancestry, and source-cut rules. No promise covers a transaction that no honest producer admits or certifies.
Application refinement
Consumers that start from the same state and apply the certified deltas with the same deterministic transition reach the same state at equal positions. Eventual execution also needs payload retrieval and application service.

Write hist(π) for the semantic history that a finality proof π describes, and ⪯ for the prefix relation. Certified-prefix safety then reads:

∀π,π′ valid from genesis:hist(π)⪯hist(π′)∨hist(π′)⪯hist(π)(2.1)

Notation

SymbolMeaning
N, HThe committee, and the identities in it that never deviate or disappear: |N ∖ H| ≤ f
p, xCertified semantic parent and a proposed immediate child
dpPermanent successor-signing domain derived from id(p)
Fp, LpCertified producer frontier and ordered-log commitment of the parent
cx, rx, DxAccepted source cut, cut round, and ordered block delta of the child
Up(x)Complete protection certificate of 3f+1 PREPAREs
SpExactly 4f+1 complete closed statuses for dp
Q, WOcean parent and seal quorum 4f+1, and wave length ⌈log2 Q⌉ + 2
δOne-way delay bound, used only in timed statements that name their premises

Quorum arithmetic

Every safety proof on this page uses one counting fact. For sets A, B ⊆ N of distinct identities:

|A∩B|≥|A|+|B|−n,|A∩B∩H|≥|A|+|B|−n−f(2.2)

With n = 5f+1, the four thresholds give the intersections below. A positive honest count means that the two sets share an honest identity. An honest identity never signs two conflicting values in one domain or slot.

Sizes |A|, |B|Where the page uses the pair|A ∩ B| ≥|A ∩ B ∩ H| ≥
3f+1, 3f+1Two DA certificates (Section 4), two U certificates (Sections 6, 9), two ECHO seed sets (Section 8)f+11
3f+1, 4f+1A U and a FAST (Section 6), an ECHO seed and a fast delivery proof (Section 8)2f+1f+1
4f+1, 4f+1FAST signers and the status set Sp (Section 9), two fast delivery proofs (Section 8)3f+12f+1
2f+1, 4f+1FIN receipt signers and the status set Sp (Section 9)f+11
Act III · Section 3 · Architecture and a worked execution

The route map

One transaction from the platform to the terminus, with six validators and no surprises. Then the same trip with one surprise.

Data certificates establish compatible, retrievable producer paths. Accepted control vertices expose finite source cones. A proposal uses a complete cone to build an exact child of a certified parent. River can finalize that child directly. Otherwise, closed statuses constrain an Ocean resolution.

Producer blocksDA certificates Accepted source cutOrdered delta Exact childCertified parent Continuous Oceanordering Closed statusesResolution RiverFAST or FIN Certified prefixApplication delivery proposal cuts orders
Figure 1, from the paper. Dependencies of finality. Ocean supplies accepted cuts and orders recovery records continuously. Only a valid finality route authorizes a child. Redrawn from the TikZ source in paper4/overview.tex.

Application delivery follows the certified parent chain, whichever route supplied the certificate. Ocean has two jobs here, and neither job is to decide the application head. It supplies accepted cuts to child construction, and it orders recovery records. Only a valid finality route authorizes a child: River or an effective resolution.

From a transaction to a certified child (f = 1, six validators)

  1. A producer puts transaction t in a signed block b. Four distinct DA votes certify the compatible path through b. At least three of those voters are honest holders of the complete data.
  2. An accepted control cone advertises this certificate. The designated leader derives a frontier that extends Fp and sweeps the newly included blocks. It proposes child x with t at a deterministic position. The source-cut round is strictly newer than the round of p, and the proposal verifier has all prerequisite evidence.
  3. Open validators persist a choice for x and multicast PREPARE. Five distinct PREPAREs form FAST, and an observer can then certify x. Alternatively, validators can retain a complete four-PREPARE certificate Up(x). Three distinct receipt signers then acknowledge it to produce FIN. A receipt proves possession of the complete U. It is not another name for an isolated PREPARE vote.
  4. After it verifies either proof, an observer enables the domain for children of x. The application can consume Dx when its payloads and predecessors are available. It does not wait for a recovery record for p.

The same execution with a late certificate

Suppose five PREPARE signatures for x exist, but the assembled FAST is withheld. A timeout closes dp at an honest signer. Closure spreads, and validators collect five complete statuses. The FAST signers and the status authors share at least three honest identities:

|FAST∩Sp|≥5+5−6=4intersection bound (2.2) |FAST∩Sp∩H|≥4−1=3=2f+1one faulty identity

Each of these three must include its earlier PREPARE for x in its status. So the selection rule preserves x, although no status collector has seen FAST. For a hidden FIN, every five-status set contains at least one honest holder of its complete U, and that status supplies the same preservation evidence.

A validator advertises a complete resolution record. The first valid resolution for p in Ocean order certifies x. Another observer may already have learned FAST and certified a descendant x → y. Then the resolution is one more proof for x. It has no authority to create a different successor of x.

When the statuses force no child, the record supplies a complete valid fallback child instead. Its delta can be empty only if its source cut and semantic height still advance under the normal validity rule.

Act III · Section 4 · Data availability and deterministic extraction

Dabbas

The dabba principle: the routing is painted on the box. A DA certificate names the 3f+1 validators that hold the data, and anyone along the way can check it.

A producer block has an authenticated header. The header identifies the configuration, the producer, an increasing sequence number, the exact predecessor, a payload commitment, and the committed transaction positions and identities. Each producer starts at a configured genesis.

An honest DA voter durably chooses one append-only branch per producer. It retains the complete payload path that justifies each of its votes. It may not vote for conflicting branches, at the same height or at different heights. The certificate for a block contains 3f+1 distinct DA votes with matching bindings. The DA certificate is therefore a full-holder availability contract.

Lemma · Certified data paths
DA-certified paths of one producer are compatible. Every certified block, and the ancestry that its votes promise, has at least 2f+1 honest complete-data holders. Under Assumption 1, each is eventually retrievable.
Proof

Take two certificates with voter sets V and V′.

|V∩V′|≥2(3f+1)−(5f+1)=f+1>fso V ∩ V′ contains an honest voter |V∩H|≥(3f+1)−f=2f+1honest holders of one certificate

The honest voter in V ∩ V′ cannot vote on conflicting branches, so the two paths are compatible. Each of the 2f+1 honest voters in one certificate retained the complete promised path. Their service and eventual delivery give retrieval. The proof uses the branch restriction across heights, not only a ban on two votes at one height.

A Byzantine producer can withhold a new block or strand an uncertified branch. Neither stops the control DAG, which advances without that advertisement. Honest data holders keep serving earlier certified blocks.

Frontiers, cuts, and their certificates

A frontier F gives one certified position for each configured producer. A coordinate can stay at the position of its parent or advance along a compatible DA-certified path. The lemma makes the valid positions on one producer chain comparable, so their greatest position is well defined.

A source cut c identifies an accepted Ocean vertex and its complete, finite strong-and-weak ancestry, with authenticated bodies and accepted-slot proofs. The physical round r(c) of the cut is the round of its root vertex. Source cuts are available before Ocean needs to select their vertices as ordering anchors. Acceptance proves the contents of the cut. It does not ratify a proposed application transition.

Start at Fp. Extract every valid compatible DA-certified coordinate that the complete cut advertises, and take the coordinatewise maximum. For each producer i:

Fx[i]=max({Fp[i]}∪Ai(cx))(4.1)

Here Ai(cx) is the set of valid compatible DA-certified positions of producer i that the complete cut advertises. The full contribution is mandatory.

Under the common parser, an invalid complete data advertisement contributes nothing. A missing required opening is Pending, and no verifier can mistake it for an empty contribution. The resulting portable evidence is a FrontierCert (FC). It stays a candidate until an exact child that carries its vector and source cut is ratified. Two valid candidates can be compatible coordinate by coordinate and still induce different transaction interleavings. The ratified parent chain selects the actual order.

producer AA1A2A3A4A5A6A7producer BB1B2B3B4B5B6B7producer CC1C2C3C4C5C6C7│ Fp parent frontier│ Fx child frontier (coordinatewise max over the cut)dashed: not yet DA-certified (3f+1 votes)green: blocks in Dx, the ordered deltaSweep order of DxA4 C2 A5 C3 A6 C4sorted by (producer sequence, producer index, digest). B contributes nothing: Fx(B) = Fp(B).Transactions keep their committed in-block order. The first occurrence of each identity wins. Same cut, same Dx at every validator.
Producer chains to one ordered delta. Each producer keeps an append-only chain. A frontier gives one certified position per producer. The child frontier is the coordinatewise maximum of the parent frontier and every compatible DA-certified coordinate advertised in the complete source cut. Sweep then orders the newly included blocks deterministically.

Optional complete vector evidence

The conservative v4 evidence interface also permits a complete, proposal-relative vector pool. The pool supplements the mandatory cut. It contains 4f+1 distinct signed records. Each record binds one configuration, source proposal, predecessor frontier, and vector schema, and supplies its body and authenticated compatible paths.

On a proposed path, a position that at least 3f+1 records support is eligible. Beyond a fully supported proposed tip, selection requires the support of 4f+1 records. Support from 2f+1 records for an extension is carry evidence for a later proposal. It gives no authority to execute that extension now. The child commits one exact result before validators sign PREPAREs. Different complete pools can justify different candidates. Agreement comes from the ratification of one child.

Sweep and duplicate handling

For each producer, enumerate the blocks strictly after its parent coordinate, through its new coordinate. Sort the union lexicographically by producer sequence (seq), then configured producer index (idx), then block digest:

Dx=sort(seq,idx,digest)(⋃i{b∈chaini:Fp[i]<pos(b)≤Fx[i]})(4.2)

Within a block, transactions keep their committed order. Keep the first occurrence of each canonical transaction identity in the delivered prefix. A receiver computes the whole delta before it appends it. It cannot sweep only the part of a cone that it can see now. Missing payloads can delay transaction decoding and execution. They cannot change the certified order of block identifiers.

The inclusion obligation

Every child names a cut with a strictly greater round than the cut of its parent: rx > rp. The child includes the entire contribution of that cut. Each honest Ocean author includes its own previous accepted vertex as a strong parent. Each author also serves an arrival-ordered FIFO queue of older accepted vertices that are absent from its own cone. While that queue is not empty, each new vertex carries a positive, bounded number of weak references from it. Arrival means complete accepted admission. Canonical sorting of the selected references must not let newer arrivals overtake an older queued vertex.

Lemma · Permanent advertisement inclusion
Under eventual broadcast and fair FIFO authoring, an accepted honest advertisement is in the complete cone of every sufficiently late valid Ocean vertex.
Proof

Broadcast eventually delivers the advertisement to every honest author. Local finiteness leaves only finitely many earlier admissions ahead of it in the queue. Continued positive FIFO service therefore puts it into the cone of each author, and the mandatory own-parent edge keeps it there. Choose a round by which this holds for all honest authors. Every later parent quorum of 4f+1 contains at least (4f+1) − f = 3f+1 vertices of honest authors. So the advertisement is in its complete ancestry. Induction extends the property to all later valid vertices.

The lemma needs an honest advertisement of the certified data. It says nothing about fairness for a client request that was never admitted, or for a producer that never gets its DA certificate. Its purpose is narrower. It stops infinitely many otherwise successful children from omitting already eligible data forever.

Act III · Section 5 · Semantic objects and durable state

Promises in ink

A child is its contents, not its paperwork. Signatures, routes, and proof bytes never enter its identity.

The configured semantic genesis has height zero, source-cut round zero, initial producer frontiers, and the initial ordered-log commitment. Its authority comes from the agreed configuration, not from a certificate collected at runtime.

A child of a certified parent p is the semantic tuple

x=(config,hp+1,id(p),Fp,Fx,cx,rx,Lp,Dx,Lx)(5.1)

Here F is the certified frontier, and cx commits to the complete accepted source cut. Its physical round is rx > rp. Dx is the canonical ordered block delta, and Lx is the extended log commitment. The identity of the child and the successor domain of the parent are

id(x)=H("semantic-child",x),dp=H(config,"child",id(p))(5.2)

Neither identity contains proposal signatures, signer subsets, delivery routes, or Ocean proof representations. Frontier and cut commitments identify their semantic contents, not the bytes of the DA or broadcast certificates around them. The domain has no era number and no retry counter.

Complete child validity

The verifier checks:

  • configuration and canonical encoding,
  • exact predecessor and height,
  • a complete finality proof for p,
  • a complete accepted cut at a strictly later round,
  • compatible certified frontier contributions,
  • mandatory inclusion of the entire cut,
  • recomputed delta and log commitments.

An empty delta is legal only when these same checks pass. Renaming an arbitrary empty value is not a recovery opportunity. A fast proposal also needs the signature of the designated leader. An Ocean-selected fallback needs no leader signature, because the ordered resolution authorizes it. Both routes check the same semantic child predicate.

Evidence types and quorums

ObjectDistinct authorsMeaning
DA certificate3f+1Complete compatible producer-path custody
Up(x)3f+1 PREPAREsUnique prepare protection for an exact child
FASTp(x)4f+1 PREPAREsImmediate-child finality
FINp(x)2f+1 receiptsFinality backed by complete retained Up(x)
Sp4f+1 closed statusesPermanent closure evidence for one parent
Closure triggerf+1 closed statusesAmplify closure at a local signer
STORE certificate4f+1Complete-object and dependency retention

Evidence counts are typed. A STORE quorum is not a finality quorum, and a receipt is not an isolated PREPARE. PREPARE and receipt signatures bind (config, dp, id(x), kind). A receipt acknowledges possession of a complete valid Up(x) and carries that protection. It does not require every receipt signer to retain the same U signer subset, which would split aggregation.

A closed status binds dp. It contains the own PREPARE of its author, if any.

The status also contains every complete U protection that the author retained before closure, including the protection behind a receipt. A signer may have prepared a different child from the one in its retained U. The status must disclose both.

State and the publication barrier

Each validator keeps a durable map indexed by dp. An entry holds:

  • the chosen PREPARE or reserved signing intent,
  • the retained complete protection,
  • the released receipt,
  • the immutable closed status, if any,
  • the matching outbox.

Learned finality is recorded separately, so learning a child does not erase the entry of its parent. A monotone floor for timer backoff also survives parent changes.

Ocean keeps its accepted DAG, seals and coin authority, emitted transcript, and first-effective-resolution map. All of these are separate from the application delivery cursor. Every signing transition follows four steps:

  1. Validate the input and its complete dependencies against the configured instance and semantic parent. If required evidence is missing, stop with Pending.
  2. Reserve the permitted choice or closure in durable state. After this step, recovery cannot choose a conflicting signature, even if no signature was sent.
  3. Produce and retain the authorized signed output and its outbox entry. Publish only after the persistence contract acknowledges the transition.
  4. After restart, check identity and state consistency, restore the restrictions, and retransmit the retained outbox as needed.

Valid, Invalid, Pending

Every verifier distinguishes three outcomes. A known wrong digest, an invalid signature, a conflicting binding, or forward Ocean authority is Invalid. An earlier opening that was promised but not yet fetched is Pending. A reader can skip a record only when it is completely and deterministically invalid.

Proof dependencies are finite and acyclic. Equivalent proofs establish one semantic identity. But one proof artifact can still be unusable at a particular Ocean position. An Ocean proof from a future position cannot replace a FAST proof to justify an earlier resolution.

Act III · Section 6 · River: fast finality

Rohu, in the river

The Virar fast does not stop for anybody. Board with 4f+1 PREPAREs, or watch it go.

The configuration fixes the leader for each child height. The exact certified parent enables one attempt. A timer, an alternative certificate encoding, or late evidence cannot change the leader or create another attempt for that parent.

leader(h)=(h−1)modn,h≥1(6.1)

Proposal, prepare, and possession receipt

The leader proposes an exact valid child with its complete parent, cut, frontier, and availability evidence. Each open validator verifies the signature of the designated leader and the complete child predicate. If it has not chosen another child in dp, it persists its choice and multicasts one PREPARE. A validator answers duplicate messages from its outbox. Duplicates cannot authorize a new choice.

A complete certificate Up(x) contains 3f+1 matching PREPAREs. A validator may retain it even if its own PREPARE named another child. If its domain is still open and its receipt restriction permits, it persists this complete protection and multicasts a possession receipt. A receipt certifies retention of that evidence. It does not assert that the receipt signer proposed or prepared the same value.

Fast-path transition rules

On PROPOSE(p, x)
Verify the leader and complete child validity. If dp is open and has no chosen PREPARE, durably choose x and multicast PREPARE(dp, id(x)). If the stored choice is already x, only retransmit. If it differs, do not sign.
On complete Up(x)
Verify distinct authors, signatures, child bindings, and validity. Retain the complete artifact. If dp is open and no receipt has been released, durably record the receipt and multicast it.
On FAST or FIN
Verify its typed quorum and dependencies. Record the exact certified child, gossip its proof, and enable dx immediately. The rule applies even if dp is closed.
After local closure
Create no PREPARE or receipt in dp. Keep serving its cached status, retained evidence, and learned finality.
dp open durable entry, one-shot slots choice ⊥ choice x valid PROPOSE(p,x) persist → PREPARE receipt ⊥ receipt x′ complete Up(x′) persist → receipt x′ may differ from x duplicate: resend from outbox local timeout or f+1 statuses persist closure, then publish dp closed immutable status: · own PREPARE · every kept U no new PREPARE no new receipt serves status and evidence never reopens allowed in either state learn FAST or FIN for x record x · enable dx
One validator’s durable entry for dp. The PREPARE choice and the receipt are one-shot slots. Each signature is persisted before it is released. Closure freezes both slots and publishes an immutable status with the author’s own PREPARE and every retained complete U. Learning FAST or FIN stays legal in either state and enables dx.

Two ways to learn the same finality

An observer finalizes x on either of two typed quorums:

FASTp(x):4f+1 matching PREPAREsassembled at s + 2δ FINp(x):2f+1 receipts, each over a complete Up(x)assembled at s + 3δ

Both prove an exact immediate child of p. The observer does not wait for Ocean to process a resolution for p before it proposes or votes for a child of x.

Two complete U quorums share an honest signer:

|U∩U′|≥2(3f+1)−(5f+1)=f+1>fintersection bound (2.2)

An honest signer prepares only one child, so distinct valid U certificates cannot protect conflicting children. FAST contains such protection, and FIN acknowledges it explicitly. The smaller receipt quorum does not weaken dependency checking. It is large enough that an honest holder of the complete artifact appears in every later closure set (Section 9).

f = 1, n = 5f+1 = 6 validators. At most one is faulty. v1v2v3v4v5v6 faulty FAST for child A · 4f+1 = 5 PREPAREs U for child B · 3f+1 = 4 PREPAREs overlap · 2f+1 = 3, of which ≥ f+1 = 2 honest An honest validator signs one PREPARE per domain dp, so A = B. Two U sets share f+1 identities. A FAST and a U share 2f+1.
Lemma (unique prepare protection). The signer sets of any U and any FAST for the same parent domain share at least one honest validator, and an honest validator never prepares two children in one domain. FIN inherits the same uniqueness through the complete U it retains.

Message-delay ledger

Time (eligible case)MessageNew knowledge at the observer
sPROPOSE with complete evidenceLeader fixes the exact child
s + δValidators multicast PREPAREValidity and durable choice are checked
s + 2δ4f+1 PREPAREs arriveFAST can be assembled at each included observer
s + 2δComplete U holders issue receiptsReceipt route has its causal prerequisite
s + 3δ2f+1 receipts arriveA freshly constructed FIN can be assembled

The ledger assumes ready prerequisites and open signers. Processing and persistence time are either inside the service envelope or charged separately. The smaller receipt quorum does not remove the extra causal leg.

Leader Open validators Deciding observer s s + δ s + 2δ s + 3δ PROPOSE + complete evidence multicast PREPAREs FAST (4f+1 PREPAREs) complete U retained after PREPARE exchange possession receipts FIN (2f+1 receipts over U)
Figure 3, from the paper. Fast-path message sequence. The validator lane stands for the honest quorum and its internal multicast exchange. Each included observer has the complete proposal evidence. Dissemination through a collector only has a different observer latency. Redrawn from paper4/river.tex.

When the fast path does not finish

The fast path has no internal view-change rule. If the parent stays unresolved, a finite local timer can close its domain and start recovery. A closure is a promise about future signing. It does not prove that the old child never finalized.

An early timeout can preempt an honest proposal. Safety survives because recovery preserves its possible finality. Fast-service claims must still require that signers stay open for the stated interval.

Act III · Section 7 · Parent-local closure and finality transfer

Monsoon

Panic is unilateral, recovery is collective. A local timer closes one domain without asking anyone. Ocean then orders one resolution that everyone reads the same way.

Recovery must preserve evidence that can become visible later. It uses three separate functions. Closure stops new honest signatures in the old domain. Complete statuses constrain which child is permissible. Ocean chooses one common resolution. A status set alone is not an agreement decision.

Timer expiresunresolved child of p Close dp locallypersist freeze, publish status f+1 closed statusesevery honest validator closes 4f+1 statusesown PREPARE + held U each Resolution R = (p, πp, Sp, z)statuses · parent proof · fallback child(R) = protect(S) or zU → 2f+1 PREPAREs → fallback First valid record in Ocean orderone child certified, later records inert any validator assembles the record and STORE-certifies it (4f+1 holders) closed forever dp never reopens. The certified child x opens dx. No Heal, no barrier, no checkpoint attestation. preserved any FAST or FIN that could still be assembled names the same x (preservation lemma).
Parent-local recovery. Closure, status collection, and ordered resolution are three separate functions. A status set alone is preservation evidence, not an agreement decision. The first-valid-record rule of Ocean supplies agreement.

Permanent closure

A finite local timeout for an unresolved child closes only dp. Receipt of f+1 valid closed statuses for dp also triggers closure and a status multicast. Closure atomically records both the ban on future old-domain signatures and the complete status, before the status is published.

After it advances, a signer keeps serving valid requests about the old parent. It returns its cached status and any finality evidence it has. Closing an ancestor never closes a child. A signer may learn a late valid finality proof after closure. It may not create a new old-domain signature.

Protection extracted from a status set

Take exactly 4f+1 distinct complete statuses Sp. Verify all signatures, parent bindings, and embedded evidence. Then apply the first matching rule:

protect(Sp)=xif Sp contains a complete Up(x) protect(Sp)=xelse, if at least 2f+1 statuses in Sp contain the own PREPARE of their author for x protect(Sp)=⊥otherwise: this set forces no child

Each rule selects at most one child. Two conflicting complete U certificates cannot exist under the fault contract (Section 6). Each status reports at most one own PREPARE, so two distinct children cannot both reach 2f+1 reports in one set:

(2f+1)+(2f+1)=4f+2>4f+1=|Sp|(7.1)

A verifier rejects inconsistent evidence. It does not choose arbitrarily among it. A status set is preservation evidence, not an agreement certificate. Different valid sets can return different unfinalized children.

The resolution record and its authority

Any validator may form R = (p, πp, Sp, z). Here πp proves the exact parent, and z is a complete valid fallback child derived from a strictly newer accepted source cut. The fallback does not need the signature of the designated fast leader. The common selection function is

child(R)=protect(Sp)ifprotect(Sp)≠⊥,elsez(7.2)

Use the normal form z = protect(Sp) when protection is present. The protected old child already has a valid cut strictly newer than p, so the resolution does not need an extra unused fallback. In the unprotected case, any complete valid fallback child is eligible.

All dependencies, including the selected old child, must be retrievable under the storage contract. An external object reference is eligible only with 4f+1 distinct STORE signatures. These signatures commit to the type, canonical length, content hash, chunk Merkle root, and exact acyclic dependency list of the object. A STORE signer first retains the complete body and validates the retention certificates of its dependencies. The resulting (4f+1) − f = 3f+1 honest holders supply eventual retrieval. An arbitrary unbacked hash is structurally invalid. It is not an instruction to wait forever.

Firstness is the authority · first valid record wins, not the loudest one

Ocean readers keep a first-resolution map for semantic parents. In the complete ordered transcript, the first valid resolution for p certifies exactly child(R):

first[dp]=min{i:Ri is a valid resolution for p},certified child=child(Rfirst[dp])(7.3)

Its certificate binds the position of that record and the verified earlier prefix that shows it is first. A portable proof that a later record appears in an anchor is not enough. Later resolutions for p cannot authorize another child.

Position precedence

Every Ocean authority that a resolution reaches through its parent-proof chain must come before the transcript position of the resolution itself:

∀a∈ocean(πp):pos(a)<pos(R)(7.4)

Here ocean(πp) is the set of Ocean authorities reachable through the parent-proof chain. A complete forward or cyclic Ocean dependency is invalid. Substituting a future Ocean proof for an otherwise equivalent FAST parent proof must not make an earlier record wait forever. The check applies recursively at the position of every embedded Ocean certificate, including through intervening FAST or FIN proof wrappers. A known false position or digest membership is Invalid. Only earlier evidence that is truly unavailable is Pending. An explicitly forward Ocean dependency is Invalid at once. Retrieval must not turn that structural contradiction into an indefinite wait.

Validity and firstness depend on complete evidence and transcript order. They never depend on the current application head of the reader or on when certificates arrive. An earlier record with an unavailable opening keeps the interpreter Pending. The interpreter cannot skip it in favor of a later record that is open. Structurally invalid complete records are deterministic no-ops. Every anchor advances the control transcript. Only effective parent resolutions advance application authority.

Installing certified children

The selected old x keeps its exact identity, even if Ocean supplies an extra proof for it. Install certified ancestors before descendants, and append each semantic transition at most once. A resolution for x can appear in Ocean before a resolution for its ancestor p when it carries a FAST proof of x. A later resolution of p must certify that same x. It neither rewinds execution nor appends an extra transition after x. An honest observer gossips every newly verified finality proof and serves its complete dependencies. It does this independently of application execution and parent closure.

There is no mode switch, no global signing stop, no checkpoint attestation, and no Heal. After a leaderless fallback z is certified, dz is the next opportunity. The old domain dp stays closed forever. Storage compaction must preserve an equivalent permanent exclusion.

Deterministic interpretation

The interpreter keeps a durable transcript cursor and a map first[dp], initially empty for each parent. It processes each ordered record in four steps:

  1. Verify the ordered position and the authenticated record opening. Retrieve certified dependencies. If an earlier required opening is unavailable, return Pending and do not move the cursor past it.
  2. Check the configuration, the parent proof, the recursively decreasing positions of Ocean authority, exactly 4f+1 distinct complete statuses, and the complete semantic validity of the selected child. Treat a structurally invalid reference or a complete contradiction as a deterministic no-op.
  3. If the parent of the valid record already has an effective first resolution, advance the cursor and leave its child unchanged. Otherwise, durably record this position and the selected child as the first resolution of that parent.
  4. Retain the verified preceding transcript and the record evidence that justifies firstness. Publish the resulting finality authority. Install any semantic ancestors that are now complete before the child. Advance the durable cursor.
record at cursor i openings available? no Pending: cursor stays retry after retrieval yes complete and valid? no Invalid: no-op such as a forward Ocean proof yes first[dp] set? yes inert, child unchanged no persist first[dp] = (i, child(R)) publish authority install ancestors first advance cursor cursor advances next record, i + 1
Interpreting one ordered record. Only missing earlier evidence stops the cursor. A complete contradiction is a deterministic no-op. A later valid record for an already resolved parent is inert. The first valid record for p fixes first[dp] and its child at every reader.

A later Pending record does not erase certificates produced from an earlier complete prefix. Conversely, a local fast head does not permit the interpreter to skip an old-parent record before it checks it. Application delivery can be idempotent while record interpretation stays complete and ordered.

Why preservation still needs agreement

For f = 1, one five-status set can contain three own PREPAREs for x, two for another child, and no complete four-PREPARE U. Another valid five-status set can show a different unfinished distribution. The protocol does not require these sets to select the same child unless an admissible fast final forces it. Every eligible set must preserve such a final. Ocean chooses among the remaining possibilities. The signed reference tests exercise split-support cases and competing records. They do not assume a common local selection.

Firstness also has an explicit proof cost. A membership proof for record i cannot show that no earlier valid record resolves the same parent.

Act III · Section 8 · Native Ocean ordering service

Paplet, in the ocean

The ocean keeps moving when the tracks are under water. Control rounds advance through empty bodies, unresolved coins, and a stuck fast path.

Ocean accepts authenticated control vertices, supplies complete source cuts to child construction, and orders recovery advertisements. Its output is a control transcript. Application authority comes only from the parent-resolution interpreter. This split prevents a generic anchor from writing application successors on its own.

Strong edges connect a vertex to the previous round. The wave arguments use them. Weak edges bring older accepted vertices into complete emitted cones. They do not replace the strong-parent quorum. A vertex is accepted only with its entire certified strong-and-weak parent closure. Complete cuts advance even when their transaction contributions are empty.

Uniform reliable broadcast

A slot is the triple (configuration, round, author). The sender signs its exact payload. An honest validator sends ECHO for at most one authenticated valid payload and READY for at most one digest. It persists both choices before it releases them. Every ECHO holder retains and serves the complete payload.

READY
Send after E = 3f+1 distinct ECHOs of one digest, or after f+1 distinct READYs of it. A READY relay does not need to wait for payload retrieval.
Fast route
Deliver on the exact valid sender payload and F = 4f+1 distinct ECHOs of its digest.
Slow route
Deliver on that payload and 2f+1 distinct READYs.
Proof
A portable delivery proof names its route. Its verification checks the signature kind, count, configuration, slot, and payload. Ocean also checks the complete accepted parent closure. A generic signature count or a bare payload hash is not a delivery.
One slot (configuration, round, author) at an honest validator SENDsigned payloadfrom the author ECHOone payload per slotpersist · keep body READYone digest per slotpersist, then send valid E = 3f+1 ECHOs of one digest or f+1 READYs deliver · fastfast delivery proof deliver · slowslow delivery proof + exact payload F = 4f+1 ECHOs + payload 2f+1 READYs
Two delivery routes, one payload. An honest validator persists one ECHO and one READY per slot before it sends them, and every ECHO holder keeps the body. READY fires on E = 3f+1 ECHOs of one digest or on f+1 READYs. READY relay does not wait for the payload. Fast delivery needs F = 4f+1 ECHOs. Slow delivery needs 2f+1 READYs. At most one payload per slot can have either proof.
Lemma · Uniform two-route broadcast
At most one payload has a valid delivery proof in a slot. An honest sender's valid payload eventually delivers to every honest participant. If either kind of delivery proof can form, all honest participants eventually deliver that same payload. This holds even if its first recipient fails immediately without forwarding its certificate.
Proof

Let H be the set of identities that never deviate or disappear. Then |N ∖ H| ≤ f, and this count includes every later failure. The proof uses five counts:

2E−n=2(3f+1)−(5f+1)=f+1two ECHO seed sets F+E−n=(4f+1)+(3f+1)−(5f+1)=2f+1a fast proof and an ECHO seed 2F−n=2(4f+1)−(5f+1)=3f+1two fast proofs F−f=3f+1=Emembers of H among the ECHOs of a fast proof E−f=2f+1honest payload holders in an ECHO seed

Agreement. Any two ECHO seed sets share at least f+1 identities, so they share a member of H. That member sends ECHO for one value only, so no two seeds carry different values.

Take the first READY of an H-member for a value. It comes from a seed, or from amplification by f+1 earlier READYs. Amplification needs an earlier READY from an H-member, so a finite causal descent reaches an ECHO seed. All READYs from H therefore agree with the one seed value.

A fast proof and an ECHO seed share at least 2f+1 > f identities. Two fast proofs share at least 3f+1 > f. A slow proof has at least f+1 members of H, so it implies the unique seeded READY value. These facts exclude a conflict between any pair of delivery routes.

Fast totality. The F ECHOs of a fast proof include at least F − f = E members of H. Their own multicast ECHOs eventually reach every member of H, and each member of H then seeds READY. These ECHO senders also retain the exact body. The fast recipient does not need to cooperate again, and neither does a faulty certificate signer.

Slow totality. At least f+1 members of H already sent READY. Their multicasts amplify READY at every member of H. The originating seed has at least E − f = 2f+1 honest holders that retain the payload.

In both cases, the 4f+1 or more members of H supply more than the 2f+1 READYs that delivery needs. Durable choices and retention keep each premise true across a restart.

Corollary · Two-delay accepted-cut clock
Assume that all honest authors send valid vertices at time s and multicast ECHO on receipt. Also assume that each SEND has its complete certified strong-and-weak parent closure at every honest receiver already, or brings it within one delay. Then every honest vertex of that round is accepted at every honest receiver by s + 2δ. Byzantine silence does not change this bound.
tSEND≤s+δ,taccept≤s+2δ(8.1)

SEND arrives by s + δ. At least 4f+1 honest ECHOs arrive by s + 2δ and form fast delivery proofs. Possession by the author alone does not give this bound. All honest authors then hold the 4f+1 previous-round parents that the next round needs.

DAG and coin boundary

The Ocean instance starts with one deterministic round-zero seed vertex per configured author. The agreed configuration binds these seeds. They need no broadcast, and Ocean never emits them as control records. An accepted vertex has:

  • Q = 4f+1 or more exact strong parents from the previous round, each from a distinct author,
  • optional weak parents from earlier rounds, and
  • complete parent closure.

The accepted slot is globally unique. Honest authors produce a vertex when enough parents arrive, with an empty control body if necessary. Unresolved coins do not block later control rounds. Transaction execution does not block them either.

k=⌈log⁡2Q⌉,W=k+2(f=1: Q=5, k=3, W=5)(8.2)

W is the wave length in rounds. The first round of a wave is its candidate round. Before an honest author produces a coin share, it durably seals Q accepted final-round endpoints and their complete ancestry.

The coin domain binds the configuration, the Ocean genesis instance, and the wave. Different shares can have different seals. The seal digest is not part of the common signed coin message. The seal is the local durable prerequisite for signing that message.

round 1 · candidatesround 2round 3round 4round 5 · finalauthor 1author 2author 3author 4author 5author 6seal: Q = 5 endpointsplus complete ancestry,fixed before the coin sharepre-coin common core:≥ Q candidates reached byevery sealed endpointcoin elects author 2 → core hitP(hit | history) ≥ Q/n = 5/6direct witness: Q final-round supporters
One Ocean wave at f = 1. Each vertex has Q = 4f+1 = 5 strong parents, k = ⌈log2 Q⌉ = 3, and the wave length is W = k+2 = 5 rounds. Faint edges are strong parent references. The dashed circle is the missing slot of a silent author. Pairing the five sealed endpoints k times gives one second-round common ancestor, and its Q first-round parents form the core. The coin is uniform over n authors, so an eligible wave hits the core with probability at least Q/n.
Lemma · Pre-coin common core
Every valid seal contains at least Q first-round candidate vertices that all its endpoints reach by strong edges.
Proof

Pair the endpoints. Every pair has a common exact parent, because two parent quorums intersect and slots are globally unique:

2Q=2(4f+1)=8f+2>5f+1=ntwo Q-sets of one round intersect ⌈Q/2k⌉=1  for k=⌈log⁡2Q⌉pairing halves the representatives, rounded up

Replace each pair by such a parent. Replace an unpaired endpoint by any of its parents. Each representative is an ancestor of the endpoints it represents.

Repeat for k predecessor layers. One second-round representative then remains, and every endpoint reaches it. Its Q first-round parents are the core. All these objects are in the immutable finite seal before the protocol-following coin contribution is released.

Assumption 3 · Coin and reveal history
For each wave, all honest participants eventually recover the same elected author. Every contribution from an uncorrupted signer follows the pre-coin seal rule. The ideal author of a wave is revealed at the first such contribution in execution order, after its durable seal is fixed. Conditioned on the pre-reveal history, the fresh ideal author is uniform over the n authors. That history includes the wave, its fixed seal, all earlier revealed coin values, and the adversarial choices between them.
Pr⁡ ⁣[ Cj=a  |  Hj ]=1nfor every author a(8.3)

Here Cj is the author elected at reveal j and 𝓗j is the pre-reveal history. The history includes the success or failure of earlier core hits. A uniform marginal for each wave alone does not give the geometric tail.

A computational realization must justify an adaptive, finite-horizon replacement for this joint ideal-coin contract. Threshold-BLS share validity, domain separation, and unique reconstruction do not prove it alone. With f adversarial shares, the first released honest share can already let the adversary reconstruct the coin. For this reason the seal must come before that release.

Backward commitment and closed-cone emission

A reader keeps the last closed wave and an ordered anchor sequence. To close a later wave that has direct support, the reader does five things:

  1. Recover every earlier unresolved coin through that wave.
  2. Set current to the elected candidate of that wave.
  3. Scan waves backward to the last closed wave. Select an earlier elected vertex if and only if it is in the complete strong cone of current. Each selected vertex becomes the new current.
  4. Emit the selected chain in forward order. For each anchor, emit its complete strong-and-weak cone minus the IDs already emitted, sorted by (round, author, digest).
  5. Persist the whole state update atomically.

Missing evidence is Pending. Absence becomes an exclusion only inside the specified complete strong cone.

Theorem · Ocean prefix agreement
Honest Ocean readers produce prefix-compatible anchor sequences and identical control deltas, also when direct witnesses are delayed.
Proof

Let La have a direct witness of Q final-round supporters. The Q parents of every next-round vertex intersect that witness in an exact accepted vertex, because 2Q > n and accepted slots are unique. So every such vertex reaches La. By induction, every later-wave candidate reaches La too.

A backward scan from any later direct root must select La. Until the scan reaches wave a, each current selected candidate is in a later wave and reaches La. After it meets La, the scan has the same current vertex, complete cone, and earlier coin values as a scan rooted at La. So it reproduces the earlier sequence. Direct roots are ordered by wave, and induction gives compatible prefixes for all directly and indirectly selected anchors.

A direct witness that arrives after its wave closed cannot contradict an exclusion. Propagation would have forced its candidate into that scan.

Theorem · Ocean progress
Under the communication and ideal-coin assumptions, Ocean commits infinitely many anchors almost surely. In reveal order, an eligible wave succeeds with conditional probability at least Q/n. The expected number of eligible reveals to a successful core hit is at most n/Q. These bounds count waves. They do not bound the elapsed time to output.
Pr⁡[no core hit in t eligible reveals]  ≤  (1−Qn)t=(fn)t(8.4)
E[eligible reveals to the first core hit]  ≤  ∑t≥0(fn)t=nn−f=nQ(8.5)
Proof

The 4f+1 honest participants are enough for every parent quorum, broadcast, and seal. So rounds advance by induction without faulty cooperation. At reveal j, choose a deterministic Q-member common core Kj from the fixed seal. Kj is measurable in the pre-reveal history. Then:

Pr⁡[ Cj∈Kj∣Hj ]≥Q/n(8.3) and the core lemma Pr⁡[no hit in t]≤(1−Q/n)t=(f/n)titerated conditioning, with n − Q = f E[reveals]≤∑t≥0(f/n)t=n/Qtail sum, with n − f = Q

Infinitely many core hits therefore occur almost surely. Each hit has a direct witness that eventually reaches every honest reader. Every finite set of earlier coins that its backward scan needs eventually completes. FIFO weak-reference inclusion also orders each honest control record eventually.

The bound (8.4) is tightest at f = 1. Because f/n = f/(5f+1) < 1/5 for every f, the right column bounds every committee size.

Eligible reveals tf = 1 (f/n = 1/6)every f ≥ 1 (f/n < 1/5)
11/6 ≈ 0.167< 0.2
21/36 ≈ 0.0278< 0.04
31/216 ≈ 0.00463< 0.008
41/1296 ≈ 0.000772< 0.0016
Expected reveals, n/Q6/5 = 1.2< 5/4 = 1.25

A shorter four-round wave under the total-f budget also has a counting argument. Any Q third-round vertices have at least Q2 strong edges into at most n second-round vertices. If each second-round vertex had at most f supporters, there would be at most n·f such edges. But

Q2−nf=(4f+1)2−(5f+1)f=11f2+7f+1>0(8.6)

So, by pigeonhole, some second-round vertex has more than f supporters. A fourth-round parent quorum misses at most n − Q = f third-round vertices, so every such quorum intersects that supporter set.

From ordered cones to recovery service

Inside an emitted vertex, the configured canonical body encoding fixes the order of its advertised records. Three things together define the record transcript that the first-resolution interpreter reads: the anchor order, deterministic cone emission, and body order. Readers retain the authenticated ordering evidence and the complete openings that interpretation needs. A firstness proof also verifies the interpretation of the earlier records. An accepted-slot proof is not enough, and inclusion under one anchor is not enough. These are the concrete dependencies of Assumption 2.

Act III · Section 9 · Safety and composition across parents

Why nothing forks

Two lemmas about one parent, one induction over all of them, zero forks.

The safety argument composes the data and evidence contracts with the two finality routes. It depends on four facts: the certified-data-paths lemma, complete child validity, durable per-parent signing, and the authenticated common Ocean transcript. Two lemmas cover one parent. Induction connects all parents.

Lemma · Unique prepare protection
For one dp, all valid complete U certificates name the same child. So FAST and FIN certificates for dp cannot conflict.
Proof

Two sets of 3f+1 PREPAREs intersect in more than f identities:

|U∩U′|  ≥  2(3f+1)−(5f+1)=f+1>f(9.1)

So the intersection contains an honest signer. An honest signer never chooses two children in dp. FAST contains a complete U, and FIN explicitly retains one. The argument concerns semantic parent domains. It does not depend on how their parent certificates are encoded.

Lemma · Preservation of possible late finality
If FASTp(x) or FINp(x) can be assembled from an admissible execution, every valid complete closure set for dp selects x.
Proof

Let H be the honest identities and S the 4f+1 status authors.

FAST case.

|FAST∩S|≥(4f+1)+(4f+1)−(5f+1)=3f+1intersection bound |FAST∩S∩H|≥(3f+1)−f=2f+1at most f faulty

Each of these honest signers sent its PREPARE before its closure, because closure forbids later signing. So its status contains its own PREPARE for x. These 2f+1 own reports force the second branch of protect, unless a complete U is present. By uniqueness, any such U also names x.

FIN case. Let R be the 2f+1 receipt signers.

|R∩H|≥(2f+1)−f=f+1honest complete-U holders |N∖S|=n−(4f+1)=fauthors outside the status set |R∩H∩S|≥(f+1)−f=1one honest holder reports in S

That receipt came before its signer closed. Its status exposes the retained complete Up(x), and the first branch forces x. Neither case assumes that anyone assembled or received the final certificate before closure or before the Ocean decision.

f = 1, n = 6. v6 is faulty. Each row is one set of signers. v1 v2 v3 v4 v5 v6 FASTp(x) can be assembled, maybe hidden statuses Sv1v2v3v4v64f+1 = 5 statuses FAST signersv2v3v4v5v64f+1 = 5 PREPARE(x) S ∩ FASTv2v3v4v6≥ 2(4f+1) − n = 4 honest in bothv2v3v4≥ (3f+1) − f = 3 Each reports its own PREPARE(x): branch 2 of protect(S) selects x. FINp(x) can be assembled, maybe hidden statuses Sv1v2v3v4v64f+1 = 5 statuses receipt signersv4v5v62f+1 = 3 receipts honest holdersv4v5≥ (2f+1) − f = 2 N ∖ Sv5n − (4f+1) = f = 1 holder in Sv4≥ (f+1) − f = 1 Its status carries the complete Up(x): branch 1 of protect(S) selects x.
Why a hidden final survives closure. Top: a FAST and a closure set S share at least 2(4f+1) − n = 3f+1 signers, so at least 2f+1 honest signers report their own PREPARE(x). Bottom: a FIN has at least f+1 honest receipt signers, and only f identities lie outside S. So at least one honest holder of the complete Up(x) reports inside S. Neither case needs anyone in S to have seen the final certificate.
Theorem · One certified child per parent
Under the stated signing, storage, and ordering contracts, all valid finality certificates for one semantic parent certify the same immediate child.
∀ π,π′ valid finality proofs for parent p:child(π)=child(π′)(9.2)
Proof

Unique prepare protection gives fast/fast uniqueness. By the preservation lemma, every effective Ocean resolution preserves any possible fast final. One common complete transcript and the first-resolution rule give Ocean/Ocean uniqueness. The proof does not assume that different status sets choose the same unfinalized value.

Theorem · Certified-prefix composition
Starting from one configured genesis, all certified semantic histories are prefix compatible across arbitrarily many fast and recovered children.
hist(π)⪯hist(π′)  ∨  hist(π′)⪯hist(π)for valid finality proofs π,π′ from genesis(9.3)
Proof

Induct on height. Each valid child has a complete finality proof of its exact parent. By the induction hypothesis, the parent at that height is unique.

The one-child theorem gives the same next semantic transition for every certificate route. Identities exclude certificate representations, so the next successor domain is also unique. Exact deterministic frontier and delta verification then give the same ordered block prefix. Complete payload retrieval and deterministic execution refine this prefix to application state.

Theorem · Ancestor-closure independence
Let a valid certificate establish p → x. A closure or an effective resolution for dp revokes no signing permission in dx or in a certified descendant domain. It does not change the semantic interpretation of any such descendant. A delayed resolution of p cannot create another successor of x.
Proof

Closure changes only the durable entry indexed by dp. By the one-child theorem, a resolution of p must certify exactly x, and its effects end there. Domain dx depends on the semantic identity of x. It does not depend on the open or closed flag of the old domain, or on the representation of its certificate.

Descendant validation uses the same exact parent chain in either processing order. Induction extends the argument along the certified chain. Application replay is idempotent.

The theorem gives independence of signing permissions and semantic outcomes. It does not claim that shared CPU, storage, or network queues cannot delay fast messages. At an unresolved current head, a strict successor still needs its certified parent.

Corollary · Deterministic application refinement
Take two honest consumers with the same configured genesis state and the same deterministic transition function. Each retrieves and consumes the same certified semantic prefix with the prescribed Sweep and duplicate rules. Then both obtain the same ordered transaction sequence and the same resulting state.

The corollary is a conditional refinement argument. It is not an execution attestation inside FAST or FIN. A client that wants evidence that a state root was executed needs the additional attestation contract of the application.

Proof dependencies and what they rule out

BoundaryRequired factFailure excluded
Data to frontierCompatible certified paths and a complete cutConflicting coordinates or extraction from a partial cache
Frontier to childCanonical identities and common validityProof aliases creating multiple signing domains
Fast to closureEarlier own votes and retained complete UA hidden FAST or FIN contradicting a recovery choice
Closure to OceanFirst valid record in a common complete prefixDifferent local status pools choosing different outcomes
Parent to descendantExact-child authority and persistent exclusionReopened old parents or a recovery tail after a certified child
Order to executionComplete payloads and deterministic replayEqual anchors with different emitted transaction order

Each row is necessary even when the adjacent component is correct in isolation.

A scoped necessity result for receipts

The honest-intersection inequality has a matching indistinguishability witness. Fix one certified predecessor p, prepare threshold 3f+1, and 4f+1 complete retired statuses. A one-shot status-only selector must choose a successor from those statuses, with no further old-side exchange.

Lower the FIN threshold from 2f+1 to 2f. Then two executions with incompatible hidden finals can produce identical complete recovery evidence. The witness partitions the committee into Byzantine B, honest A and C, honest D, and honest T:

|B|+|A|+|C|+|D|+|T|=f+(f+1)+(f+1)+(f−1)+f=5f+1=n(9.4)

A Byzantine leader signs two valid successors x and y. A prepares x, C prepares y, and D prepares neither. T prepares x in execution Ex and y in execution Ey. All cross-group messages are delayed past recovery.

|S|=|B∪A∪C∪D|=4f+1the status reporters, identical in both executions |Ux|=|B∪A∪T|=3f+1protection for x in Ex (Uy = B ∪ C ∪ T in Ey) |B∪T|=2freceipts in Ex, one short of 2f+1

The status bytes are identical in Ex and Ey, but the hidden weakened finals conflict. So no selector that sees only the status bytes can choose safely in both executions.

With 2f+1 receipts, at least f+1 honest holders exist. Only f identities lie outside the status set, so an honest holder inside it exposes the U. Actual-signature witnesses at f = 1 to 4 accompany the construction in spec/v4/test_transfer_bound.py. This result concerns one interface. It is not a lower bound on rounds, bytes, or storage.

S = B ∪ A ∪ C ∪ D · 4f+1 status reporters B · f Byzantine A · f+1 honest C · f+1 honest D · f−1 honest T · f honest committee n = 5f+1 ExPREPARE xPREPARE xPREPARE yneitherPREPARE xUx = B ∪ A ∪ T (3f+1) · 2f receipts from B ∪ T · FINx at threshold 2f EyPREPARE yPREPARE xPREPARE yneitherPREPARE yUy = B ∪ C ∪ T (3f+1) · 2f receipts from B ∪ T · FINy at threshold 2f delayed to S S sends the same signed status bytes in bothown choices only, no U, no receipts finals: x vs y
Why the receipt threshold is 2f+1 for this interface. The partition is not to scale. A Byzantine leader signs two valid successors x and y. A prepares x and C prepares y in both executions, and T switches between them. Cross-group PREPAREs, every complete U, every receipt, and every vote from T reach S only after the recovery decision. So the 4f+1 reporters in S sign identical statuses in Ex and Ey, while the weakened finals conflict. At 2f+1 receipts, at least one honest holder must lie inside S. Source: paper4/receipt_bound.tex.
Act III · Section 10 · Progress, latency, and resource costs

The fast-path bound, honestly

Two delays when the river runs clear. Six when the data is fresh off the boat. A few coin-elected waves when the weather turns. Here is the bill, itemized.

Theorem · Asynchronous progress
Assume three premises. (1) Finite honest timers eventually fire when a known certified parent has no learned final child. (2) Complete child construction, retention, and execution eventually finish. (3) Assumption 2 holds. Then, almost surely, every certified parent that an honest participant admits eventually has a final child known to all honest observers.
Proof

If an honest participant learns a fast final, dissemination supplies the certified child. Otherwise, an honest timeout supplies a closed status. Every honest participant eventually learns the parent, and then learns its child or times out. The honest participants supply 4f+1 statuses without faulty cooperation. They also answer old-parent requests after they advance.

Each honest proposer can construct a valid resolution. When a child is forced, the proposer retains the selected complete old child and uses it as the normal-form fallback. Otherwise, it obtains a later accepted cut and derives a valid fallback. Even an empty delta advances the certified height and cut.

The complete honest record is eventually ordered. If an earlier effective resolution exists, it already certified a child of the same parent. Prefix agreement and eventual retrieval disseminate the result. Applying the argument after each finite prefix gives unbounded certified progress, almost surely.

Every certified child strictly increases its source-cut round and includes the entire cut contribution. So unbounded certified progress eventually includes every continually advertised certified block. This holds even when some earlier fallbacks had empty deltas.

Good-case fast service

4f+1 multicast PREPAREs ratify a fully evidenced proposal from an honest leader within 2δ under three conditions:

  • its first leg delivers the complete prerequisites,
  • one-way delay is at most δ, and
  • honest signers stay open for that proposal.

Consecutive eligible honest leaders can overlap accepted-cut production. After warmup, this sustains 2δ decision intervals. The condition is that each turn has a fresh, strictly later cut and complete evidence ready within its first-leg service bound. Fresh data can still need six delays from dissemination:

2δ⏟DA+2δ⏟accepted cut+2δ⏟ratification=6δ(10.1)

The redesign removes the recovery ownership stages. It does not remove these fresh-data dependencies.

fresh data from dissemination DA certificate accepted cut ratification = 6δ eligible proposal complete evidence PROPOSE s PREPARE multicast FAST 4f+1 PREPAREs FIN 2f+1 receipts receipt leg after warmup consecutive leaders child h FAST child h+1 FAST child h+2 FAST 0 δ 2δ 3δ 4δ 5δ 6δ one-way delay ≤ δ
Where the delays go. Row 1: fresh data can need 2δ for its DA certificate, 2δ for an accepted advertised cut, and 2δ for ratification. Row 2: a proposal with complete evidence reaches FAST at s + 2δ. The receipt route needs one more leg, so a freshly built FIN forms at s + 3δ. Row 3: after warmup, consecutive eligible honest leaders can overlap accepted-cut production and decide every 2δ, if each turn has a fresh, strictly later cut and complete evidence ready. All rows assume ready prerequisites, one-way delay at most δ, and signers that stay open. Processing and persistence are inside the δ envelope or charged separately.
Monsoon warning · timeouts are a real interference condition

Background Ocean progress and quick recovery links do not show that an honest proposal cannot still arrive. An aggressive timeout can close a parent before its delayed honest proposal gets FAST. The paper claims no unconditional honest-leader noninterference result. Timers start only after the exact parent is admitted, and they are finite. They use a persisted monotone backoff floor that carries across parent changes:

Tj=min⁡(2j T0,  Tmax⁡)(10.2)

An empty fallback must not reset that floor.

One-resolution service bound

Measure time from the first honest admission of p. For a failed opportunity, define four service terms:

Tp
Parent-learning skew, the timer wait, and collection of a complete honest closure set.
Ep
Construction, data retrieval, and retention service.
Op
Service from advertisement to ordered resolution.
Ip
Certificate installation.

With supplied bounds on these services, the recovery time Rp satisfies

Rp  ≤  Tp+Ep+Op+Ip(10.3)

The bound has one new Ocean selection stage. The era baseline instead orders a barrier, a checkpoint intent, and a Heal. It also waits for executed checkpoint attestations and readmission. Those stages are absent from this algorithm. The bound omits them because they do not occur, not because their cost is assumed to be zero.

Suppose B distinct parent domains have stalled child opportunities that invoke recovery. Then recovery needs at most B effective first-resolution records and B immediate recovered children. These closures revoke no signing rights in other certified-parent domains. One faulty identity can cause unboundedly many failed opportunities, so f does not bound B.

For native Ocean, Q = 4f+1 and W = ⌈log2 Q⌉ + 2. Suppose an external service envelope gives four bounds:

  • A for catchup and advertisement,
  • d accepted rounds for ancestry inclusion,
  • ρ for each complete round, and
  • K for the required coins and interpretation.

A conservative budget for m fresh waves is then

Op(m)=A+[ d+1+(m+1) W ] ρ+K(10.4)
Pr⁡[no core hit in m fresh waves]  ≤  (f/n)m(10.5)

A union bound over B failed opportunities gives at most B·(f/n)m, plus service-envelope and computational-coin errors. Eventual delivery alone gives no wall-clock values for these parameters.

Message, verification, and retention costs

Here n is the committee size and σ is the size of one signature.

Proposal
With direct unicast fanout, one proposal costs O(n bx) bytes, where bx is the complete child proposal with its evidence.
PREPARE / receipt
One multicast PREPARE per validator gives O(n2) transmissions of bounded vote metadata. Receipts can add another such exchange. A receipt sent with its complete O(n)-signature U makes naive receipt dissemination cost O(n3σ) bytes.
Status set
O(n) authors, and each can repeat a complete O(n)-signature U. That is O(n2σ) naive signature material, plus child and ancestry evidence. Deduplication cannot drop the link between a receipt issuer and the protection it retained.
Broadcast
Each RBC slot uses all-to-all ECHO traffic and possibly READY traffic: O(n2) messages. With n authors per round, that is O(n3) control messages per round, before retransmissions, fetches, and competing records.
Persistent state
Producer payloads, accepted DAG ancestry, seals, outboxes, proofs, and a closure entry for each old parent. Verification and portable firstness replay can grow with retained history.

Six timestamps are distinct: client submission, DA certificate, accepted cut, learned FAST or FIN, Ocean resolution, and executed transaction. A count of empty certified children proves neither positive transaction goodput nor bounded client latency.

Act III · Section 11 · Implementation, restart, and blockchain integration

In the workshop

Restoring a signer means restoring its promises. Forgetting a published vote is how forks start.

The repository contains several protocol generations. The parent-local source baseline is commit 2812f22.

Signed parent-local kernel

Path
spec/experiments/parent_local.py
Verifies
Actual Ed25519 leader proposals, PREPAREs, receipts, and closed statuses
Models
Permanent per-parent restrictions, complete retained U, exact semantic identity, finality proofs, and deterministic resolution interpretation
Abstracts
Source cuts, frontiers, DA, and application semantics, through a child-validity callback
Journal
Atomic acknowledged memory replacement. Not fsync, and not rollback protection.

Ocean-model adapter

Path
spec/experiments/parent_local_ocean.py over spec/v4/ocean.py
Connects
Recovery advertisements to the accepted-DAG and closed-cone ordering
Exercises
Ordering-dependent selection, missing earlier records, and descendants resolved before ancestors

Native components (Rust)

Path
rohu-paplet/src/weather_v4/
Implements
The earlier era-based revision: typed evidence, River, RBC, Ocean, threshold-BLS coin primitives and signing gates, restore validation, and snapshot storage
Driver
NativeControl: durable RBC authoring, accepted-round construction, typed proof retrieval, and gated coin progress in one event stream
Limits
16,384 RBC slots · 256 MiB snapshot ceiling · 256-item body queue. Exhaustion is an explicit error.

Crash recovery as a protocol obligation

Restoring a signer means restoring its promises. Each component must retain its part:

Parent map
Chosen PREPAREs, complete U protection, receipts, immutable closed statuses, outboxes, and timer-backoff state.
Data layer
Certified payloads and its selected producer branches.
Ocean
Accepted exact vertices, complete ancestry, fixed seals, coin authority, the emitted transcript, and the cursor.
Interpreter
First-resolution authority, or enough authenticated history to recompute it.
Consumer
Its exact delivery position, and either application state or enough data for deterministic replay.

The native Unix SnapshotStore acknowledges success only after four steps. It stages an identity-bound, checksummed snapshot, syncs the temporary file, renames it atomically, and syncs the containing directory. It holds an advisory lock for its lifetime and halts on an ambiguous I/O failure. Restore validates the installed snapshot. It does not treat an unfinished temporary file as a checkpoint. A checksum and a generation number in the same replaceable directory do not detect malicious rollback.

Before durable acknowledgement, no output that depends only on the staged state may escape. After acknowledgement, a restart must recover that state or a later one, even if its output was never sent. Keeping an unused vote reservation is safe. Forgetting a published choice is not safe. A parent-local integration must apply this rule to one coherent validator state. It must not combine individually correct stores whose checkpoints can disagree.

The blockchain-facing contract

A blockchain adapter supplies a trusted configuration and genesis, deterministic validity rules, transaction-data admission, and application execution. Consensus returns exact certified children with ordered block deltas and their verifiable parent chain. This gives a linear interface, although the control structure is a DAG. A consumer never picks its own order from the latest visible DAG or from the local arrival order of proofs.

Interface eventRequired interpretation
Submit dataAdmission request. Not evidence of DA or finality.
Learn final childVerify the exact parent, child validity, and FAST/FIN or first-resolution authority. Record the certified semantic identity.
Deliver ordered deltaInstall predecessors first. Keep Sweep order. Record the delivery position durably. Make duplicate delivery idempotent.
ExecuteRetrieve the required payloads and apply the configured deterministic transition. Keep this completion distinct from learned finality.
Restore or synchronizeVerify the configuration and proof history. Recover signing promises and the application cursor before resuming effects.

No interface event implies that a later event is complete. A semantic child height counts transitions. An application delivery position can count blocks or transactions inside their deltas.

An empty child advances the height without creating application work. Under the baseline retention contract, a late observer can replay a complete certified history from genesis. An optimized state-sync checkpoint must bind the semantic identity, frontier, log commitment, application cursor, and retained proof obligations. It must also have an independently justified trust rule. Importing an executed state snapshot does not permit the signer to forget its closed old domains.

Claim-to-artifact ledger

ClaimArgument or evidence
Compatible available dataCertified-data-paths lemma · native DA component evidence
One child and one prefixUnique-U and preservation lemmas · one-child and prefix theorems · signed kernel tests
Local ancestor closureIndependence theorem · concurrent-descendant tests
Native Ocean orderPrefix-agreement theorem · Ocean reader and adapter tests
Almost-sure progressOcean-progress and asynchronous-progress theorems
Data inclusionInclusion lemma · increasing mandatory cuts
Durable signingPublication contract · interrupted memory-journal tests · native store
Transport tradeoffRecorded byte counts, modeled links, TCP/fsync experiments
Application state agreementRefinement corollary
Act III · Section 12 · Evaluation and falsification

Trying to sink it

We weakened the rules on purpose and watched the boat take on water. Then we put the rules back and checked that it floats.

The evaluation asks two questions. Do the implemented reference transitions respect the interfaces that the proofs use? What do the separate dissemination experiments show about transport cost?

Parent-local kernel and ordering adapter

The combined signed kernel and adapter suite has 32 tests: 21 kernel tests and 11 Ocean-adapter tests. The September 8 record reports 7.293 s. The September 10 validation reran the suite in 7.107 s with Python 3.12.3 and cryptography 41.0.7. The tests include:

  • 28,591 finite quorum-intersection checks at f = 1, 2,
  • actual signed late FAST and FIN assembly,
  • proof aliases and competing resolutions, and
  • permanent closure and interrupted journal updates.
ValidatorsScheduleChildrenFASTResolvedRestores
6Rotation, one silent identity181535
11Rotation, one silent identity2220210
6Fixed silent leader, synthetic120125
11Fixed silent leader, synthetic1201210

Falsifying schedules and regression oracles

Adversarial or weakened scheduleRule exercised
Reopen the same parent after closureAn unsafe reset admits a signed fork. Permanent exclusion prevents a second old attempt.
Encode two proofs for the same parentSemantic identity shares one lock. Certificate bytes cannot create separate domains.
Withhold FAST or FIN until after closureOwn-PREPARE reports and retained complete U preserve the hidden child.
Resolve an ancestor after a fast descendantRecovery certifies the original child and appends no conflicting tail.
Deliver a later resolution before an earlier openingMissing evidence stays Pending. Local arrival order cannot choose the winner.
Insert a forward Ocean proof or a known wrong membershipA complete contradiction is Invalid. This prevents permanent poisoning of the transcript.
Fail persistence before signing or releaseReserved choices survive. Unacknowledged new outputs cannot escape.
Close early during a delayed honest proposalLocality alone does not imply unconditional fast-path noninterference.

The ordered-log oracle must compare the exact semantic child identity and the ordered delta at each position. Comparing only the latest height or the selected anchor is not enough. A later matching suffix cannot repair a conflicting prefix that is already published append-only. This requirement comes from a recorded failure in the earlier full-system evaluation. Agreement on anchors held, but a lagging observer emitted them in a different order.

Separate transport evidence

The local transport experiment compares direct dissemination with a coded one-relay construction. The coded path uses Reed–Solomon coding, a signed Merkle commitment, authenticated fragments, and k = n − f. Both paths keep complete native DA custody. The setup has six validators, one producer, equal-weight identities, and a fixed relay assignment.

PayloadBlock bytesProducer, directProducer, codedAggregate, directAggregate, coded
1 KiB4,46922,85912,27924,87437,834
64 KiB234,2501,171,762472,4371,173,7701,418,305
1 MiB3,737,39418,687,4837,478,51818,689,52022,436,575

At 64 KiB, producer upload falls 59.7% and total traffic rises 20.8%:

1−472,4371,171,762≈0.597producer bytes, coded against direct 1,418,3051,173,770−1≈0.208aggregate bytes, coded against direct

At eleven validators and 64 KiB, producer bytes fall 77.5% and aggregate bytes rise 23.7%. In the sequential local TCP harness, the median whole-experiment time rises from 63.96 to 94.38 ms with memory-acknowledged snapshots. With atomic fsync snapshots, it rises from 106.38 to 135.30 ms. The deterministic link model favors coding when serialization dominates. Coding loses for small payloads on fast links because of the extra hop. The endpoint of these measurements is a DA certificate, not finality.

Separate signed extension model

The model explored 5,554 bounded worlds and ran 1,112,888 fast/recovery prefix checks. It found no guarded-prefix violation. Naive lane merging produced incompatible order in 388 worlds. Complete statuses still permitted competing unfinished recovery continuations in 2,430 worlds. These are counterexamples to deliberately weakened interfaces. They are not attacks on published protocols.

Act III · Section 14 · Artifacts and reproduction

Run it yourself

Do not trust the fish. Run the tests.

LocationContents and scope
paper4/main.texThe 18-page two-column manuscript, with sections assembled in order from introduction through artifact guide
docs/v4/PARENT_LOCAL_RESEARCH.mdThe parent-local construction, symbolic safety argument, cross-parent commutation, and progress bound
docs/v4/PARENT_LOCAL_RESULTS_2026-09-08.mdRecorded current-reference tests, exact schedule counts, assumptions, and commands
bench/results/parent-local-20260908-232242/Manifest, source hashes, test log, schedule outputs, and completion assertions
docs/v4/PROTOCOL.mdEra-based v4 normative rules that the native Rust components implement
docs/v4/EVIDENCE.mdNative component coverage and revision boundaries, with the claim-to-artifact mapping
docs/v4/NATIVE_CONTROL.md · docs/v4/RECOVERY.mdFinite durable control-driver contract. Snapshot publication, retention, and restore contract.
docs/v4/LATENCY_AUDIT.mdIndependent causal audit of the two-delay claims and the RBC repair
spec/v4/Executable Python reference models: RBC, Ocean, River, recovery policy, and transfer-bound witness
spec/experiments/Signed parent-local kernel, Ocean adapter, and extension-transfer model
rohu-paplet/src/weather_v4/Native Rust: rbc, ocean, coin, river, frontier, weather, objects, storage, wire, control, recovery_policy
bench/results/local-composition-20260908-224511/Transport frames, modeled service, TCP/fsync runs, and signed extension witnesses
spec/ivy/ · spec/*.tlaEarlier formal models (31 mypyvy, 5 Apalache), calibration, and proof lineage for the Rohu-Paplet generation

Reproduce the current reference checks

# signed kernel + Ocean adapter (32 tests)
python3 -m unittest spec.experiments.test_parent_local spec.experiments.test_parent_local_ocean -v

# the four signed CLI schedules
python3 -m spec.experiments.parent_local --f 1 --heights 18 --schedule round-robin
python3 -m spec.experiments.parent_local --f 2 --heights 22 --schedule round-robin
python3 -m spec.experiments.parent_local --f 1 --heights 12 --schedule all-silent
python3 -m spec.experiments.parent_local --f 2 --heights 12 --schedule all-silent

# executable v4 models (75 tests). Under Python 3.15 pass -t as well:
python3 -m unittest discover -s spec/v4 -t spec/v4 -q

# native component suites (pinned Commonware checkout required; see COMMONWARE_PIN.txt)
cargo test --locked --manifest-path rohu-paplet/Cargo.toml \
  --test native_rbc_v4 --test native_ocean_v4 --test native_weather_v4 --test native_river_v4 \
  --test native_frontier_v4 --test native_weather_cycles_v4 --test native_objects_v4 --test native_latency_v4

# transport + extension experiments
python3 bench/local_composition_lab.py --include-loopback --include-fsync --repeats 3
python3 -m unittest spec.experiments.test_extension_transfer -v

# manuscript
cd paper4 && latexmk -pdf -interaction=nonstopmode -halt-on-error main.tex

For each replication, retain the command, exit status, environment, source and binary fingerprints, raw outputs, workload, and unresolved requests. For a negative schedule, record the mutated rule and the resulting conflicting proofs.