Invariants / DC-NODE-23

DC-NODE-23

DC derived enforced

Shared receive-side fork-choice detector (rung-2). A peer-origin candidate that is NOT already known as part of Ade's admitted durable spine / own-served lineage -- including but not limited to a header that does not build on ChainDb::tip -- is classified ONCE, venue-blind, by a pure total predicate over (durable_tip, candidate_header_summary) -> ReceiveDisposition { AlreadyHave | LinearExtend | RefuseSingleProducer | NeedsForkChoice }. A duplicate / already-known peer echo is AlreadyHave, never a competing candidate merely because it is not a fresh extension. Observes no venue, no wall-clock, no network state; the single classification point that both the SingleProducer fail-closed arm (DC-NODE-20) and the Participant fork-choice arm (DC-NODE-24) consume. It never selects, reorders, or prefers chains (that is select_best_chain / DC-CONS-03).

Source

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

Introduced in
PHASE4-N-AI

Enforcement trace

Tests 6

  • classify_already_have_when_in_spine
  • classify_linear_extend_on_exact_parent_and_block_no
  • classify_competing_on_nonmatching_parent
  • classify_competing_on_wrong_block_no
  • classify_competing_on_genesis_prev_hash
  • resolve_passthrough_already_have_and_linear_extend

Cross-references