DC-NODE-12
DC derived enforcedOwn-forged durable admit chokepoint. A self-accepted forged block may become part of the durable chain ONLY by being submitted to the same durable admit chokepoint as received blocks (run_node_sync -> pump_block / forward_sync AdmitPlan::durable): StoreBlockBytes -> AppendWal -> AdvanceTip, durable-before-tip, behind the BLUE admit authority (decode -> validate_and_apply_header -> block_validity, extend-only). The forge has NO second tip-advance path and performs NO direct tip mutation -- it submits a self-accepted artifact as an admit INPUT. The bytes admitted durably (StoreBlockBytes + WAL) are byte-identical to the bytes self_accept validated -- no re-encode / reserialize / reconstruct between self_accept and durable admit; the served projection must expose those same bytes when serving the durable block (I-10). SUPERSEDES the DC-NODE-05 containment consequence "a forged block is a local self-accept artifact only" while PRESERVING DC-NODE-05's deeper invariant: the forge tick advances no durable tip DIRECTLY, and pump_block remains the sole durable tip-advance authority.
- Source
docs/planning/phase4-n-u-forged-block-durability-invariants.md
- Introduced in
- PHASE4-N-U
Enforcement trace
Code
Tests 3
- forge_tick_durable_admit_advances_tip
- forge_successor_builds_block_1_from_durable_tip
- forged_admit_bytes_byte_identical_to_self_accept
Cross-references
Strengthened in
Evidence notes
PHASE4-N-U S1 (2026-06-05). ENFORCED. ade_node::node_sync::admit_forged_block_durably feeds the self-accepted handoff's bytes (accepted().as_bytes(), no re-encode) into the existing forward_sync::pump_block chokepoint (StoreBlockBytes -> AppendWal -> AdvanceTip, durable-before-tip); the ForgeTick arm calls it before the G-R serve handoff. pump_block advances state.receive + the durable ChainDb together, so the next forge builds N+1 (forge_successor_builds_block_1_from_durable_tip). The forge advances no durable tip directly (DC-NODE-05 preserved; ci_check_node_run_loop_containment.sh allow-lists the 2nd fenced tip-advancer + forbids direct pump_block/put_block/AdvanceTip/rollback in the loop body). ci_check_forged_durable_admit_via_pump.sh fences the driver (routes through pump_block, no re-encode, no fork-choice, no manual tip advance). OQ-a resolved as supersede-via-cross-ref: DC-NODE-05 PRESERVED.