soft3/foculus/specs/book-finality.md

book finality

property 31 of launch: domain finality per book — a book settles locally, cross-book conditions wait on evidence. this is oikos foundation 2 in foculus's own terms: no new mechanism, the existing local/certified split of finality and the portable FinalityEvidence object, read at the book granularity.

a book is a domain

each personal chain (oikos) is its own Domain — its own ε-support over its own graph, its own tip (height, root). finalizes() (protocol.md step 6) runs entirely inside one book: the adaptive threshold and the certification gate are both local reads over that book's φ*, never the planetary graph. a book settling locally is exactly a particle reaching Finality::Final in its own domain.

cross-book conditions wait on evidence

a condition that spans two books (oikos "the two settlement protocols") cannot re-run the source book's consensus — it waits for FinalityEvidence:

book A: finalizes(signal, domain_A, ...) → Final
        FinalityEvidence::issue_certified(signal, tip_A, nullifiers)
book B: holds a pending condition on signal @ book A
        condition resolves iff evidence.verify(tip_A)

verify rebinds signal_id, height, root and nullifier hash and checks grade4(); it fails on a stale, wrong or absent tip, so a condition genuinely waits — it cannot resolve against B's own state, only A's actual one. issue_from_domain refuses to emit certified evidence at all while finalizes() is Pending, so there is nothing for B to accept until A actually settles: this is the "wait" half of the property, not a courtesy check.

the partition rule oikos foundation 2 asks for ("a partition retains pending obligations and expires conditions according to their rules") is a caller-side policy over this primitive — a condition with no evidence stays pending indefinitely unless the caller attaches its own expiry, which is not part of this contract.

what this does not bind yet

bind() commits domain-tag, book_id, signal_id, height, root, nullifier hash and grade4 (src/finality_evidence.rs). binding the book identifier closes the root-collision exposure: two books whose height and 32-byte root coincide — two fresh books at genesis are the obvious case — still issue evidence that is never interchangeable.

exercised on two books

tests/book_finality.rs: book A settles a particle locally, independent of book B's own unrelated tip; book B's cross-book condition on that particle stays unresolved while A has not certified it, and resolves the moment A's certified evidence verifies against A's actual tip — and not against a stale one.

see finality for the domain-local test · FinalityEvidence for the portable certificate · oikos for the four foundations this is one of.

Graph