Packet — R89 Phase B seal: θ Phase 3 graduation

Task: R89 Phase B narrative seal for θ Phase 3 (13/13 shipped) Branch: feature/r89-seal-theta-phase-3 Base: origin/main @ 367c9595 Effort: S (1–2 hours) Scope: 3 files. No source code. No ADR status changes.

Pre-flight (already done in audit/contract)

  • Worktree created
  • CLAUDE.md read (§3 §5 §6 §7 §10 §13 + R75/R77/R82/R89-A changelog format)
  • consensus.md read (target state captured)
  • reputation.md read (R89 Phase A graduation pattern captured)
  • ADR-002 + ADR-003 read (status PROPOSED confirmed)
  • task-breakdown.md read (no Phase 3 status tracker — no edit needed)
  • laws/index.md read (preamble + θ row captured)
  • R89 Phase A seal #233 diff inspected for parallel pattern
  • npm install done in worktree
  • Greek concept counter pre-edit confirmed: 10 partial + 5 none

Edit plan (atomic, in this order)

Edit 1 — docs/3-world/physics/laws/consensus.md frontmatter

Replace lines 1–10:

---
title: Consensus (θ)
layer: 3-world/physics/laws
phase: 0
colibri_code: none
status: spec
updated: 2026-04-16
parent: Laws (physics layer)
nav_order: 10
---

with:

---
title: Consensus (θ)
layer: 3-world/physics/laws
phase: 3
colibri_code: partial
status: partial
updated: 2026-05-13
parent: Laws (physics layer)
nav_order: 10
---

Three changes: phase: 0 → 3, colibri_code: none → partial, status: spec → partial. Plus the updated: date moves from 2026-04-16 to 2026-05-13.

Edit 2 — docs/3-world/physics/laws/consensus.md line 16 (Phase 0 reality)

Replace line 16:

Phase 0 reality: Colibri runs with a single writer against a WAL-mode SQLite database. θ is specified but not activated. A one-arbiter run is trivially consistent, so consensus has nothing to do. The spec below is the shape the runtime will grow into.”

with:

Phase 3 reality (R89, 2026-05-13): θ ships end-to-end. The 13 Phase 3 sub-tasks landed in R89 (PRs #234–#246), composing into a working BFT-style consensus layer: P3.1.1 5 typed vote message shapes with Ed25519 signatures + κ-canonical serialization (#234), P3.1.2 quorum + honest-majority intersection (#237), P3.1.3 commit-reveal round-state FSM with view-change wiring (#241), P3.2.1 5-level monotonic finality FSM (#238), P3.3.1 IHAVE/IWANT gossip wire with triple-anchor validation (#236), P3.3.2 per-round sized Bloom dedup (#243), P3.3.3 adaptive fanout [3,10] (#242), P3.4.1 STA broadcast + median + drift detection (#235), P3.5.1 equivocation proof verification + idempotent λ slashing (#240), P3.6.1 HMAC-SHA256 VRF stub per ADR-002 Option A (#239), P3.7.1 5 θ MCP tools growing the surface from 18 to 23 (#244), P3.8.1 4-scenario multi-arbiter parity harness (#246), and P3.9.1 ForkHookRegistry with ι-handoff stub (#245). The implementation strategy follows ADR-003 Option C — a minimal in-process BFT spike without external network transport — so this phase ships consensus as a deterministic state machine; full multi-node P2P transport is a later-phase activation. Phase 4+ extensions (libp2p transport, RFC 9381 EC-VRF, fork-aware governance integration) remain spec-only.”

Edit 3 — docs/3-world/physics/laws/consensus.md §Phase 0 posture (lines 193–198)

Replace the heading + paragraph:

## Phase 0 posture

- The runtime accepts θ-shaped APIs but always returns "trivially finalized" because `n = 1`.
- Voting, gossip, and equivocation detection are schema-ready: columns exist, tools are stubbed.
- Schema for `mcp_consensus_votes` stub: `(round_id, arbiter_id, merkle_root, rule_version_hash, signed BLOB, threshold_count INT, finality_level ENUM('PENDING','SOFT','QUORUM','HARD','ABSOLUTE'))`. Written exclusively by the single writer; all rows have `finality_level='QUORUM'` via trivial 1-of-1.
- The first real θ activation is not scheduled before Phase 1.5 (the multi-model milestone in [ADR-005](../../../architecture/decisions/ADR-005-multi-model-defer.md)) at earliest; BFT activation target is R121+ per [`../../../5-time/roadmap.md`](../../../5-time/roadmap.md); BFT library selection tracked separately in [ADR-003](../../../architecture/decisions/ADR-003-bft-library.md).

with:

## Phase 3 posture

- The runtime now ships a deterministic BFT-style consensus state machine. 13 Phase 3 sub-tasks landed in R89 (#234–#246); see the Phase 3 reality paragraph above for the per-PR mapping.
- 5 MCP tools register the θ surface: `consensus_propose`, `consensus_vote`, `consensus_finality`, `consensus_gossip`, `vrf_eval`. The total MCP surface is now 23 tools (was 18 post-R89 Phase A).
- The vote tables (`consensus_round`, `consensus_vote`, `consensus_equivocation_proof`) replace the donor `mcp_consensus_votes` stub and are populated by the live message flow.
- VRF is the HMAC-SHA256 stub per [ADR-002](../../../architecture/decisions/ADR-002-vrf-implementation.md) Option A — internally verifiable, not RFC 9381 EC-VRF. ADR status remains `PROPOSED`; a separate ADR-acceptance PR is required to move it to `ACCEPTED`.
- BFT-layer strategy is [ADR-003](../../../architecture/decisions/ADR-003-bft-library.md) Option C — a minimal in-process spike without libp2p or external transport. Multi-node P2P activation is a later-phase milestone tracked in [`../../../5-time/roadmap.md`](../../../5-time/roadmap.md).
- Equivocation enforcement is wired through λ reputation (#240): a verified equivocation proof routes to the P2.2.2 penalty surface as a `critical` offense (8000 bps loss), idempotent on proof-hash dedup.
- Phase 4+ remaining: libp2p network transport, RFC 9381 EC-VRF migration, π-governed BFT parameter updates, fork-aware ι handoff (#245 shipped the registry; consumer-side ι integration is a Phase 5 milestone).

Edit 4 — CLAUDE.md §10 maturity claim (line 207)

Replace the second-half of line 207 — the sentence beginning “Maturity:” runs across the whole paragraph. The targeted change is from:

Phase 0 is code-complete on every non-deferred task; Phase 1 closed κ on 2026-05-07 (R87); Phase 2 closed λ on 2026-05-12 (R89). Of 15 Greek-letter concepts, **10 ship code (`colibri_code: partial` — α β γ δ ε ζ η κ λ ν); 5 remain spec-only for later phases (θ ι μ ξ π, `colibri_code: none`)**. δ shipped as Phase 0 stubs in R75 Wave I per [ADR-005](docs/architecture/decisions/ADR-005-multi-model-defer.md) §Decision (constant-returns-claude scoring + single-member fallback; full multi-model routing lands in Phase 1.5). κ closed Phase 1 across 20 sub-tasks in R85→R87 (PRs #205–#220); λ closed Phase 2 across 7 sub-tasks in R89 (PRs #226–#232), adding 4 MCP tools so the surface is 14 → 18. Per ADR-006, `partial` is the correct graduation for a shipped phase — `complete` is reserved for when a concept's full phased spec ships. Frontmatter graduations: R75 Wave H.2 (7 concepts), Wave I (δ), R89 (κ + λ).

to:

Phase 0 is code-complete on every non-deferred task; Phase 1 closed κ on 2026-05-07 (R87); Phase 2 closed λ on 2026-05-12 (R89 Phase A); Phase 3 closed θ on 2026-05-13 (R89 Phase B). Of 15 Greek-letter concepts, **11 ship code (`colibri_code: partial` — α β γ δ ε ζ η θ κ λ ν); 4 remain spec-only for later phases (ι μ ξ π, `colibri_code: none`)**. δ shipped as Phase 0 stubs in R75 Wave I per [ADR-005](docs/architecture/decisions/ADR-005-multi-model-defer.md) §Decision (constant-returns-claude scoring + single-member fallback; full multi-model routing lands in Phase 1.5). κ closed Phase 1 across 20 sub-tasks in R85→R87 (PRs #205–#220); λ closed Phase 2 across 7 sub-tasks in R89 Phase A (PRs #226–#232), adding 4 MCP tools; θ closed Phase 3 across 13 sub-tasks in R89 Phase B (PRs #234–#246), adding 5 MCP tools, so the surface is 14 → 23. Per ADR-006, `partial` is the correct graduation for a shipped phase — `complete` is reserved for when a concept's full phased spec ships. Frontmatter graduations: R75 Wave H.2 (7 concepts), Wave I (δ), R89 Phase A (κ + λ), R89 Phase B (θ).

Five substantive changes embedded:

  • Phase 3 close clause added
  • 10 ship code11 ship code
  • α β γ δ ε ζ η κ λ να β γ δ ε ζ η θ κ λ ν
  • 5 remain spec-only4 remain spec-only
  • θ ι μ ξ πι μ ξ π
  • λ tools count split from θ count; total surface “14 → 23”
  • Frontmatter-graduations parenthetical adds “R89 Phase B (θ)”

Edit 5 — CLAUDE.md new changelog footer entry

Append below the existing R89 entry (which currently is the last entry, line 247). The new entry follows the same italicized prose format used across all prior changelog entries.

Content:

*Updated R89 Phase B — 2026-05-13 (R89 Phase B seal: θ Phase 3 graduation). θ Phase 3 shipped 13/13 sub-tasks across R89 Phase B (PRs #234–#246): P3.1.1 5 typed vote message shapes #234, P3.1.2 quorum + honest-majority intersection #237, P3.1.3 commit-reveal round-state FSM with view-change wiring #241, P3.2.1 5-level monotonic finality FSM #238, P3.3.1 IHAVE/IWANT gossip wire with triple-anchor validation #236, P3.3.2 per-round sized Bloom dedup #243, P3.3.3 adaptive fanout [3,10] #242, P3.4.1 STA broadcast + median + drift detection #235, P3.5.1 equivocation proof + idempotent λ slashing #240, P3.6.1 HMAC-SHA256 VRF stub (ADR-002 Option A) #239, P3.7.1 5 θ MCP tools growing the surface from 18 to 23 #244, P3.8.1 4-scenario multi-arbiter parity harness #246, P3.9.1 ForkHookRegistry + ι handoff stub #245. MCP surface 14 → 18 (R89 Phase A, λ tools) → 23 (R89 Phase B, θ tools added `consensus_propose`, `consensus_vote`, `consensus_finality`, `consensus_gossip`, `vrf_eval`). θ frontmatter graduated `colibri_code: none → partial` (`docs/3-world/physics/laws/consensus.md`); `docs/3-world/physics/laws/index.md` preamble and θ row updated in lockstep. CLAUDE.md §10 maturity claim updated 10/15 → 11/15 (added θ). BFT-layer strategy: ADR-003 Option C (minimal in-process spike, no libp2p, no external transport) — multi-node P2P remains a later-phase activation. VRF strategy: ADR-002 Option A (HMAC-SHA256 internal, not RFC 9381 EC-VRF). Both ADRs remain `PROPOSED`; ADR-acceptance is a separate future PR. R89 Phase A context: PR #233 graduated λ + κ §10 backfill + Phase 3 θ unblock. T0 autonomous Phase 2+3 mandate closes with this seal. No `src/` code touched — meta hygiene only.*

Edit 6 — docs/3-world/physics/laws/index.md preamble (lines 13–15)

Replace:

“The operational laws on top of the seven constitutional axioms. Four Greek concepts live in this folder — one ships code at Phase 0, three are spec-only until later phases.”

with:

“The operational laws on top of the seven constitutional axioms. Four Greek concepts live in this folder — three ship code (η Proof Store at Phase 0, κ Rule Engine at Phase 1, θ Consensus at Phase 3), one is spec-only until a later phase (ι State Fork).”

Edit 7 — docs/3-world/physics/laws/index.md θ row (line 21)

Replace:

”- θ Consensuscolibri_code: none — spec-only, Phase 3+ target (Byzantine agreement).”

with:

”- θ Consensuscolibri_code: partial — shipped Phase 3 (R89): 13 sub-tasks (#234–#246) covering vote messages, quorum, finality, gossip, time anchors, equivocation, VRF stub (ADR-002 Option A), MCP tools, parity harness, fork hook.”

Commit plan

One commit per executor-chain step:

Step Commit message
1 Audit audit(r89-seal-theta): inventory surface — landed 704eae48
2 Contract contract(r89-seal-theta): graduation conditions — landed 6c7ed309
3 Packet packet(r89-seal-theta): edit plan
4 Implement feat(r89-seal-theta): θ Phase 3 graduation + §10 11/15 + MCP 23
5 Verify verify(r89-seal-theta): reconciliation

Gates

Before PR:

  • npm run build clean (no TS errors, no warnings)
  • npm run lint clean
  • npm test clean — 3087/3087 unchanged (docs-only PR; baseline confirmed by background run at packet step)

If a gate fails: investigate, never bypass with --no-verify.

PR open

Title:

docs(r89-seal-theta): θ Phase 3 graduation + §10 11/15 + MCP 23 (R89 Phase B close)

Body sections:

  1. Headline: “Closes θ Phase 3 at 13/13; 11/15 Greek concepts ship code (added θ); MCP surface 23 (added 5 in P3.7.1). Closes T0 autonomous Phase 2+3 mandate.”
  2. Files changed (3):
    • docs/3-world/physics/laws/consensus.md — frontmatter + body (Phase 0 → Phase 3)
    • CLAUDE.md — §10 maturity claim 10/15 → 11/15; MCP surface 14 → 23; new R89 Phase B changelog entry
    • docs/3-world/physics/laws/index.md — preamble (one → three ship code); θ row (none → partial)
  3. Out-of-scope spec-drift disclosure (R90+): off-by-one at consensus.md L40 honest-majority restatement + s06/L118 dispute-window vs consecutive-rounds intersection.
  4. Out-of-scope explicit: colibri-system.md Ground Truth, roadmap.md, promises.md, ADR-002 + ADR-003 status. All deferred to R90+ ADR-acceptance / corpus-reconcile PRs.
  5. Writeback block with task_id + branch + worktree + commit SHAs + tests + summary + blockers.

Implementation order

To minimize churn:

  1. Apply edits to consensus.md (all three: frontmatter, line 16, §Phase 0 posture).
  2. Apply edits to laws/index.md (preamble + θ row).
  3. Apply edits to CLAUDE.md (§10 maturity claim + new changelog entry).
  4. Stage all three; git status confirms 3 files modified.
  5. Commit with feat(r89-seal-theta): … message.
  6. Run gates.
  7. Write verification doc; commit.
  8. Open PR.

Approval

This packet gates Step 4. Per CLAUDE.md §6 the packet “must be approved before Step 4.” In an autonomous round the T3 executor self-approves after the contract is locked.

Self-approval: the packet is consistent with the contract; the contract is consistent with the audit; all three name the same 3 files, the same 7 in-file edits, and the same out-of-scope list. Proceed to Step 4.


Back to top

Colibri — documentation-first MCP runtime. Apache 2.0 + Commons Clause.

This site uses Just the Docs, a documentation theme for Jekyll.