Invariants / DC-NODE-28

DC-NODE-28

DC derived enforced

No forge across unresolved re-selection (rung-2). Once a peer-origin candidate is classified NeedsForkChoice (DC-NODE-23) in a Participant venue, forging is DISABLED until the fork-choice outcome is either (a) durably applied and reconciled (DC-NODE-25/26) or (b) rejected with durable state unchanged. The forge base is NEVER selected from a stale pre-resolution ChainDb::tip while a decision is pending -- a producer tick that fires during a pending decision fails closed (typed ForgeRefused), never forges on the old local tip. This is a producer race fence DISTINCT from pump_block durable admit, rollback replay, or selector / durable reconciliation, so it carries its own evidence. Prevents stale local authority leaking into block production. Derived tier with a true-tier authority consequence.

Source

docs/planning/phase4-n-ai-live-fork-choice-invariants.md (I-12)

Introduced in
PHASE4-N-AI

Enforcement trace

Tests 5

  • pending_reselection_forge_refusal_gate
  • participant_rollback_beyond_k_fails_closed_clears_pending
  • singleproducer_rollback_refused_by_run_node_sync
  • forge_path_rollback_applies_durably
  • forge_path_rollback_beyond_k_fails_closed_clears_pending

Cross-references

Strengthened in