Deliberate forks without rewrites; each branch stays linear and auditable.
What 4D.1 adds (in one line).
You can fork continuity on purpose by introducing a chain_id. Each chain is still single-link linear; history is never edited; receivers choose which chain to follow.
Field and defaults (normative).
# chain identifier
chain_id := <opaque id> # binary-safe; recommended 16 bytes rendered as fixed-length lowercase hex
default := "default" # if absent, treat as chain_id="default"
Validation rule (per chain).
# for an incoming item e on chain_id = C
accept if e.stamp.prev == HEAD[C] or e.stamp.prev == "NONE" (genesis for C)
on accept: HEAD[C] := e.stamp.sha256
else: reject as non-continuous for chain C (append stamped incident; do not edit history)
Fork procedure (creating a new branch).
# sender wants a deliberate fork
new_chain := mint_chain_id() # e.g., 16-byte hex
emit fork_note on new_chain with metadata:
parent_chain_id := <old_chain>
parent_HEAD := HEAD[old_chain] # digest at moment of divergence
reason_code := "<short reason>" # e.g., "policy-rotation", "key-rollover", "experiment-A"
# the new chain's first item uses prev = "NONE" (its own genesis)
Merges (no history rewrites).
# chains never merge by editing past items
# if a convergence decision is made:
emit bridge_note on the chosen chain:
references := { other_chain_id: HEAD[other_chain_id] }
# stamp.prev remains single-link; bridge_note is informational metadata
Selection policy (receiver-side).
# receivers MAY track multiple chains per scope
active_chain := policy_decide( allowed_chain_ids, preferred_chain, recency )
# examples:
# - prefer a configured chain_id
# - follow the freshest HEAD among an approved set
# - pin to "default" unless a signed policy update selects another
Publication (for audits).
# publishers SHOULD expose a HEAD map
HEADS := { chain_id_1: <HEX>, chain_id_2: <HEX>, ... } # aids catch-up and verification
Operational notes (non-normative).
- Use new chain_id for planned rotations (keys/manifests), experiments, or blue/green deployments.
- Keep reason codes short and standardized for clear forensic trails.
- Retire unused chains by policy; do not delete history.
Why this matters (human terms).
You get parallel, append-only timelines for the same scope—useful for safe experiments, rotations, or policy trials—while keeping every branch replayable and independently verifiable.
Navigation
Previous: SSM-NET — Canonical subset & Continuity (4C–4D)
Next: SSM-NET — Profiles (5A–5B)