041-deployment-epochs
Deployment epochs: the chain records each deployment it serves under, appended at the deploy step, linked to external build and deployment records it never rewrites
The chain commits to the first manifest (genesis) and, with spec 036, to every manifest adopted since. It records nothing about which build a replica runs or which deployment put it there, so a consumer cannot join a decision to an artifact, an authority snapshot, or a rollout, and an upgrade, a rollback, and a restore look the same in the chain. This spec appends one epoch record at each deploy step that changes what is deployed: the manifest current after the step, the artifact (the binary measured by the deploy step, the image digest the deployer declares), and typed opaque references to the external build provenance, the deployment record, and the authority snapshot. The genesis and every existing record stay byte for byte; no history is rehashed; nothing is embedded in a built artifact; every reference points from the later record to the earlier one, so no hash cycle is possible. Replicas bind to the current epoch at boot and report a mismatch without refusing, every decision names its epoch and instance, and the chain becomes readable from a running cell.
Read the full pinned specification ↗Relationships
Claimed units
- establishes
{ "kind": "file", "path": "crates/rahi-ledger/src/epoch.rs" } - establishes
{ "kind": "file", "path": "crates/rahi-ledger/tests/epoch.rs" } - establishes
{ "kind": "file", "path": "crates/rahi-cli/tests/epochs.rs" } - establishes
{ "kind": "file", "path": "crates/rahi-cli/testdata/binding/" } - extends
{ "nature": "additive", "spec": "013-ledger-decision-chain", "unit": { "kind": "file", "path": "crates/rahi-ledger/src/lib.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/src/seal.rs" } } - extends
{ "nature": "additive", "spec": "015-kernel-manifest-and-adjudication", "unit": { "kind": "file", "path": "crates/rahi-kernel/src/lib.rs" } } - extends
{ "nature": "additive", "spec": "023-observability", "unit": { "kind": "file", "path": "crates/rahi-edge/src/obs/metrics.rs" } } - extends
{ "nature": "additive", "spec": "030-operational-verbs", "unit": { "kind": "file", "path": "crates/rahi-ops/src/migrate.rs" } } - extends
{ "nature": "additive", "spec": "030-operational-verbs", "unit": { "kind": "file", "path": "crates/rahi-ops/src/archive.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/serve.rs" } } - extends
{ "nature": "additive", "spec": "032-cluster-topology", "unit": { "kind": "file", "path": "deploy/k8s/migrate-job.yaml" } } - extends
{ "nature": "additive", "spec": "032-cluster-topology", "unit": { "kind": "file", "path": "deploy/README.md" } } - extends
{ "nature": "additive", "spec": "040-runtime-identity-and-binding-surface", "unit": { "kind": "file", "path": "crates/rahi-ops/src/binding.rs" } }
Source headings
- 041: Deployment epochs
- 1. Purpose
- 2. Territory
- 3. Behavior
- The record
- When an epoch is appended
- What a replica does with it
- Backup, restore, and export
- 4. Functional requirements
- 5. Acceptance criteria
- The worked consumer example
- 6. Out of scope
- 7. Resolved decisions
- The reference contract, proposed to Statecraft (2026-09-12)
- Verification
Frozen anchors
No frozen anchors declared.