DC-NODE-23
DC derived enforcedShared 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