SSM-NET — Branching & Chain IDs (4D.1)

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)