035-denials-survive-shutdown

Denials survive a graceful shutdown, and every lost denial is counted by its cause

Lifecycle approvedImplementation completeVerification unknownQualification unknown

Constitution X says the kernel ledgers every denial. Spec 015 answers a denial before its record is durable and drains the records through a bounded queue, and serve never drains that queue on shutdown, so a graceful stop silently loses the denials still queued (reproduced: 50 denials answered 403 with decision ids, 33 and 40 of them in the chain after SIGTERM, nothing counted). A second loss is structural: a decision id is the chain head at boot plus a counter, so replicas of spec 032's StatefulSet that boot on the same head mint the same ids, and the second append of an id is refused as a conflict (reproduced in process: two kernels on one chain both answered with the same id and one record landed). This spec drains the queue within a bound when serve stops, counts what the bound abandons, separates a dropped record from a failed append on /metrics, and names the replica in every decision id, so the only uncounted loss left is a process that is killed.

Read the full pinned specification ↗

Relationships

Claimed units

  • establishes
    {
      "kind": "file",
      "path": "crates/rahi-cli/tests/shutdown.rs"
    }
  • establishes
    {
      "kind": "file",
      "path": "crates/rahi-kernel/tests/replicas.rs"
    }
  • extends
    {
      "nature": "additive",
      "spec": "015-kernel-manifest-and-adjudication",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-kernel/src/lib.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "015-kernel-manifest-and-adjudication",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-kernel/src/observe.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "023-observability",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-edge/src/obs/metrics.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "023-observability",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-edge/src/obs/mod.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "030-operational-verbs",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-cli/src/serve.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "032-cluster-topology",
      "unit": {
        "kind": "file",
        "path": "deploy/README.md"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "015-kernel-manifest-and-adjudication",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-kernel/tests/adjudicate.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "020-edge-server",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-edge/tests/common/mod.rs"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "022-session-and-principal",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-idp/tests/oidc/"
      }
    }
  • extends
    {
      "nature": "amending",
      "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/Cargo.toml"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "013-ledger-decision-chain",
      "unit": {
        "kind": "file",
        "path": "crates/rahi-ledger/tests/append.rs"
      }
    }
  • extends
    {
      "nature": "amending",
      "spec": "001-agentic-harness",
      "unit": {
        "kind": "file",
        "path": ".claude/rules/"
      }
    }

Source headings

  1. 035: Denials survive a graceful shutdown
  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. Proposals for the owner (2026-09-12)
  10. Verification

Frozen anchors

No frozen anchors declared.