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
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
depends on
depended on by
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
- 037: Identity recovery and the live proof
- 1. Purpose
- 2. Territory
- 3. Behavior
- 4. Functional requirements
- 5. Acceptance criteria
- 6. Out of scope
- 7. Resolved decisions
- Status
- Evidence and proposals (2026-09-12)
- Verification
Frozen anchors
No frozen anchors declared.