042-ledger-lifetime-identity
Lifetime identity: one id names one decision for the life of the chain, and absence is proven rather than assumed
The chain can say what happened but not whether a given decision ever happened, because spec 013 D-5 tells a lost compare-and-swap from a duplicate id by asking whether the id is resident and spec 014 deletes the row when its segment is sealed. Past the hot window a retried append therefore writes a second record under the same id, and full verification passes because a duplicate id is not a broken link. This spec gives every decision a narrow resident identity row that survives sealing, makes that row's primary key the arbitration inside the append transaction rather than a read before it, stamps the row in the seal transaction, and answers presence, proven absence, unproven history and proven ambiguity as four different answers. A chain sealed before this spec has no rows for its archived ids, so a cell refuses to serve until `rahi ledger reindex` has rebuilt them: the upgrade costs a stop, and the alternative is a cell that serves while its audit proof is silently wrong. The refusal, the reindex's behavior on damaged or ambiguous history, the cutover from a binary that does not stamp, and the permanent resident cost are all stated here rather than discovered in production.
Read the full pinned specification ↗Relationships
Claimed units
- establishes
{ "kind": "file", "path": "crates/rahi-ledger/src/identity.rs" } - establishes
{ "kind": "file", "path": "crates/rahi-ledger/tests/identity.rs" } - extends
{ "nature": "additive", "spec": "013-ledger-decision-chain", "unit": { "kind": "file", "path": "crates/rahi-ledger/src/append.rs" } } - extends
{ "nature": "additive", "spec": "013-ledger-decision-chain", "unit": { "kind": "file", "path": "crates/rahi-ledger/src/chain.rs" } } - extends
{ "nature": "additive", "spec": "013-ledger-decision-chain", "unit": { "kind": "file", "path": "crates/rahi-ledger/src/record.rs" } } - extends
{ "nature": "additive", "spec": "013-ledger-decision-chain", "unit": { "kind": "file", "path": "crates/rahi-ledger/src/verify.rs" } } - extends
{ "nature": "additive", "spec": "013-ledger-decision-chain", "unit": { "kind": "file", "path": "crates/rahi-ledger/src/lib.rs" } } - extends
{ "nature": "additive", "spec": "013-ledger-decision-chain", "unit": { "kind": "file", "path": "crates/rahi-ledger/Cargo.toml" } } - extends
{ "nature": "additive", "spec": "013-ledger-decision-chain", "unit": { "kind": "file", "path": "crates/rahi-ledger/tests/append.rs" } } - extends
{ "nature": "additive", "spec": "013-ledger-decision-chain", "unit": { "kind": "file", "path": "crates/rahi-ledger/tests/common/" } } - extends
{ "nature": "additive", "spec": "013-ledger-decision-chain", "unit": { "kind": "file", "path": "crates/rahi-ledger/testdata/chains/" } } - extends
{ "nature": "additive", "spec": "014-ledger-sealing-and-archive", "unit": { "kind": "file", "path": "crates/rahi-ledger/src/seal.rs" } } - extends
{ "nature": "additive", "spec": "014-ledger-sealing-and-archive", "unit": { "kind": "file", "path": "crates/rahi-ledger/src/segment.rs" } } - extends
{ "nature": "additive", "spec": "014-ledger-sealing-and-archive", "unit": { "kind": "file", "path": "crates/rahi-ledger/tests/seal.rs" } } - extends
{ "nature": "additive", "spec": "030-operational-verbs", "unit": { "kind": "file", "path": "crates/rahi-cli/src/lib.rs" } } - extends
{ "nature": "additive", "spec": "030-operational-verbs", "unit": { "kind": "file", "path": "crates/rahi-cli/src/verbs.rs" } } - extends
{ "nature": "additive", "spec": "030-operational-verbs", "unit": { "kind": "file", "path": "crates/rahi-cli/tests/cli.rs" } } - extends
{ "nature": "additive", "spec": "030-operational-verbs", "unit": { "kind": "file", "path": "crates/rahi-ops/src/preflight.rs" } } - extends
{ "nature": "additive", "spec": "036-manifest-and-schema-evolution", "unit": { "kind": "file", "path": "crates/rahi-ledger/src/transition.rs" } } - extends
{ "nature": "additive", "spec": "039-release-and-out-of-tree-packaging", "unit": { "kind": "file", "path": "CHANGELOG.md" } } - constrains
{ "flavor": "invariant-freeze", "note": "one id names one decision for the life of the chain; absence is never inferred from unavailable history", "unit": { "kind": "file", "path": "crates/rahi-ledger/src/identity.rs" } }
Source headings
- 042: Lifetime identity
- 1. Purpose
- 2. Territory
- 3. Behavior
- 4. Functional requirements
- 5. Acceptance criteria
- 6. Out of scope
- 7. Resolved decisions
- 8. Owner decisions, answered
- What is reserved, and what it does not block
- Verification
Frozen anchors
No frozen anchors declared.