042-ledger-lifetime-identity

Lifetime identity: one id names one decision for the life of the chain, and absence is proven rather than assumed

Lifecycle approvedImplementation completeVerification unknownQualification unknown

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

  1. 042: Lifetime identity
  2. 1. Purpose
  3. 2. Territory
  4. 3. Behavior
  5. 4. Functional requirements
  6. 5. Acceptance criteria
  7. 6. Out of scope
  8. 7. Resolved decisions
  9. 8. Owner decisions, answered
  10. What is reserved, and what it does not block
  11. Verification

Frozen anchors

No frozen anchors declared.