Invariants / DC-NODE-05

DC-NODE-05

DC derived enforced

Forge-slot discipline on the --mode node relay run-loop. A forge is attempted at most once per SlotNo and never for a slot <= the last forged slot (no past or duplicate forge). The current slot is derived ONLY through the clock seam: RED observes wall-clock (SystemClock), GREEN converts via millis_to_slot over the SystemStart anchor + EraSchedule slot length -- only SlotNo crosses the seam (no SystemTime/Instant/float past the RED observation boundary). The forge tick advances NO durable tip and admits/serves/gossips nothing -- it is subordinate to the sync spine, whose run_node_sync -> pump_block path remains the sole durable tip-advance authority; a forged block is a local self-accept artifact only. For a fixed recovered state, ordered block feed, injected clock tick schedule, and shutdown schedule, the forge-attempt sequence and forged block bytes are byte-identical across runs (replay-equivalent). Leadership eligibility is NOT decided in the loop or the GREEN planner (whose forge input is a content-blind Due|NotDue) -- it stays in BLUE inside forge_one_from_recovered. Single-epoch this cluster: an unsupported slot fails closed / skips with a structured local outcome (cluster-scope containment, not permanent behavior).

Source

docs/planning/phase4-n-f-e-invariants.md

Introduced in
PHASE4-N-F-E

Enforcement trace

Tests 10

  • plan_loop_step_forge_precedence_table_is_total
  • forge_slot_guard_none_is_due
  • forge_slot_guard_at_most_once_per_slot
  • forge_slot_guard_rejects_past_slot
  • relay_loop_forge_slot_derived_via_clock_seam
  • relay_loop_forge_tick_attempts_forge_advances_no_tip
  • relay_loop_without_producer_material_matches_nfd_relay
  • relay_loop_forge_two_runs_byte_identical
  • forge_tick_rotated_kes_period_skips_no_retroactive_sign
  • forge_tick_off_epoch_slot_fails_closed_local

Cross-references

Strengthened in

Evidence notes

PHASE4-N-F-E invariant sketch (2026-05-31, /invariants gate). Declared at sketch; tests + ci_script populated at slice time. N-F-E is a hermetic, single-epoch, self-accept-only forge-tick wiring cluster on top of the enforced N-F-D relay spine -- it wires the already-enforced forge_one_from_recovered (DC-CINPUT-02b) into the relay loop's slot path. NO real operator key/config ingestion this cluster (hermetic/fenced producer-shell material only -- real --mode node KES/VRF/ cold/opcert/pool-id/pparams ingress is a separate RED key-ingress cluster). NO BA-02 / RO-LIVE-01 / peer-acceptance / serve / gossip / block-fetch claim. NO BLUE change expected (mirrors N-F-D).