S07 — Fork Protocol
Any node can branch off from the network and operate independently.
Fork triggers
| Trigger | Type |
|---|---|
| Rule version conflict | Automatic |
| Invariant violation detected | Automatic |
| Constitutional violation | Automatic |
| Governance rejection | Voluntary |
| Voluntary exit | Voluntary |
Fork identity
fork_id = SHA-256(parent_fork_id ‖ divergence_event_id ‖ rule_version_hash ‖ reason)
Isolation modes
| Mode | Parent visibility | Write to parent |
|---|---|---|
| ISOLATED | None | No |
| READ_ONLY_PARENT | Read parent state | No |
| BRIDGED | Selective via bridge rules | Selective |
Fork-scoped state
Each fork has independent: tokens, reputation, shield invariants, BFT quorum, event log, rule set.
Shared across forks: identity keys (Ed25519), constitutional axioms.
Checkpoints
Created every 1000 events or 100 epochs. Signed by top-10 arbiters (threshold 7/10). Contains: state root, event count, reputation snapshot, rule version.
Merge
Two forks merge when both quorums agree:
- Find common ancestor (divergence point)
- Compute event diff
- Resolve conflicts: timestamp ordering (default) or user choice
- New
fork_id = SHA-256(fork_A ‖ fork_B ‖ merge_timestamp) - Rule conflicts cannot auto-merge — require governance vote
Fork transition
A node moving between forks provides: source fork proof (Merkle path from checkpoint), divergence point proof, and receives destination reputation at 50% of source value (configurable).
Implementation Status
Verified against source: 2026-04-06
| Claim | Status | Notes |
|---|---|---|
| Fork triggers (rule conflict, invariant violation, etc.) | Spec-only | No automatic fork triggers exist. Thread forking is user-initiated only. |
| Fork identity (SHA-256 of parent + event + rule + reason) | Spec-only | Thread forks use simple generated IDs (branch_<timestamp>_<random>), not cryptographic hashes. |
| Isolation modes (ISOLATED / READ_ONLY_PARENT / BRIDGED) | Spec-only | Thread branches share the same DB and have no isolation modes. |
| Fork-scoped state (independent tokens, reputation, quorum) | Spec-only | Branches share all state; only messages are branch-scoped. |
| Checkpoints (every 1000 events, signed by arbiters) | Spec-only | Colibri has a checkpoint system (data/checkpoints/) but it is git-based project snapshots, not the signed multi-arbiter checkpoints described in spec. |
| Merge protocol (common ancestor, event diff, conflict resolution) | Partial | src/claude/threads/merge.js and branch.js implement thread merging with strategies (append/prepend/interleave), but no common-ancestor detection, no event-diff computation, and no governance vote for rule conflicts. |
| Fork transition (Merkle proof, reputation at 50%) | Spec-only | No Merkle-path proofs for fork transition. Colibri uses Merkle trees for audit chains (merkle_finalize), but not for fork state transfer. |
| Shared identity keys across forks | Spec-only | No Ed25519 identity keys or cross-fork identity sharing. |
Thread forking/branching in src/claude/threads/ provides a structural analogue (branch from message, merge branches), but operates at the conversation level within a single node rather than as a network-level fork protocol.