Invariants / CN-ANCHOR-01

CN-ANCHOR-01

CN release enforced

Single BootstrapAnchor mint authority: exactly one pub fn in ade_runtime::bootstrap_anchor::mint produces a BootstrapAnchor with all 6 fields populated (network_magic, genesis_hash, seed_point: {slot, block_hash}, seed_artifact_hash, imported_utxo_fingerprint, initial_ledger_fingerprint). The struct has no default impl and no #[non_exhaustive]; any missing field is a compile error.

Source

docs/planning/phase4-n-m-ledger-seed-invariants.md §1 (I-A3)

Enforcement trace

Tests 5

  • crates/ade_runtime/src/bootstrap_anchor.rs::tests::mint_composes_inputs_byte_identically
  • crates/ade_runtime/src/bootstrap_anchor.rs::tests::mint_then_round_trip_via_canonical_cbor
  • crates/ade_runtime/src/bootstrap_anchor.rs::tests::mint_carries_seed_point_correctly
  • crates/ade_runtime/src/bootstrap_anchor.rs::tests::mint_propagates_utxo_fingerprint_into_anchor
  • crates/ade_ledger/src/bootstrap_anchor/anchor.rs::tests::bootstrap_anchor_match_is_exhaustive

Cross-references

Strengthened in

Evidence notes

PHASE4-N-M-A S2 (2026-05-26): mint is the SOLE pub fn producing a BootstrapAnchor; type-system enforces all 6 fields at construction (no Default impl, no #[non_exhaustive]). ci/ci_check_bootstrap_anchor_closure.sh enforces single-mint + single-codec authority + no-Default + no-non_exhaustive. PHASE4-N-F-A (2026-05-30): the anchor now binds a new recovered surface — the SeedEpochConsensusInputs sidecar is anchor-fp-keyed and warm-start verification rejects an anchor_fp mismatch (CN-CINPUT-02, DC-CINPUT-01).