037-identity-recovery-and-live-proof

Identity recovery and the live proof: a backup a real rauthy answers, a restore that brings the users back, and CI that runs against the pinned release

Lifecycle approvedImplementation completeVerification unknownQualification unknown

Recovery of a cell is two state systems, and only one of them recovers today. Against a real rauthy the backup verb fails outright, because rauthy's backup routes accept only an admin session and the verb presents the admin API key (030 D-3, observed against 0.36.2). The app half races hiqlite's background backup and can report no file for a backup that lands a moment later (observed on two of four runs). A restore places rauthy's snapshot and nothing hands it to rauthy, so a restored cell comes up with no users, and every sub in its rows is unreachable. CI never runs a real rauthy. This spec resolves D-3 by the mechanism a human chooses, waits for the app backup to exist, applies rauthy's snapshot exactly once on the next start, and adds a CI job that runs every rauthy-gated test, and an end-to-end test through recovery with identity, against the pinned rauthy release.

Read the full pinned specification ↗

Relationships

Claimed units

  • establishes
    {
      "kind": "file",
      "path": ".github/workflows/live.yml"
    }
  • establishes
    {
      "kind": "file",
      "path": "crates/rahi-ops/tests/rauthy_restore.rs"
    }
  • establishes
    {
      "kind": "file",
      "path": "crates/rahi-ops/src/rauthy_session.rs"
    }
  • establishes
    {
      "kind": "file",
      "path": "crates/rahi-store/tests/backup_freshness.rs"
    }
  • establishes
    {
      "kind": "file",
      "path": "crates/rahi-store/tests/backup_deadline.rs"
    }
  • establishes
    {
      "kind": "file",
      "path": "crates/rahi-ops/tests/rauthy_backup_admin.rs"
    }
  • extends
    {
      "nature": "additive",
      "spec": "011-store-hiqlite",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-store/src/backup.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "011-store-hiqlite",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-store/Cargo.toml"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "030-operational-verbs",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-ops/src/rauthy_api.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "030-operational-verbs",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-ops/src/restore.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "030-operational-verbs",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-ops/src/lib.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/tests/cli.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "030-operational-verbs",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-ops/tests/common/mod.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "030-operational-verbs",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-ops/tests/backup.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "031-single-container-packaging",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-ops/tests/first_boot.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "031-single-container-packaging",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-ops/src/supervise.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "031-single-container-packaging",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-ops/src/first_boot.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "033-dev-substrate-and-harness",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-harness/src/boot.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "033-dev-substrate-and-harness",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-harness/tests/boot.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "025-api-tokens-and-resource-server",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-idp/tests/bearer.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "025-api-tokens-and-resource-server",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-idp/testdata/tokens/"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "034-hello-cell",
      "unit": {
        "kind": "file",
        "path": "apps/hello-cell/tests/e2e.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "021-idp-proxy-and-discovery",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-idp/tests/discovery.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "032-cluster-topology",
      "unit": {
        "kind": "file",
        "path": "deploy/README.md"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "032-cluster-topology",
      "unit": {
        "kind": "file",
        "path": "deploy/k8s/secret.example.yaml"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "034-hello-cell",
      "unit": {
        "kind": "file",
        "path": "apps/hello-cell/README.md"
      }
    }

Source headings

  1. 037: Identity recovery and the live proof
  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. Status
  10. Evidence and proposals (2026-09-12)
  11. Verification

Frozen anchors

No frozen anchors declared.