{
  "notes": "EPISODE 4 (2026-10-27). Budget 74/80 used, 6 unspent; episode 4 of 8. All 18 batches settled; every handed result read code at the pins (no sandbox failure), so no re-run. Decision: finish=true; write the report from ep.2-3 notes plus these verdicts. Pins as ep.2.\n\nEL VERDICTS:\n- R-1 Reth 8037 TX_MAX_TOTAL_GAS_LIMIT (2^32-1) not enforced: CONFIRMED, KNOWN unfixed (alloy-rs/evm2 #807 open, revm #3929 open; reth PRs 27589/27641 closed unmerged). reth crates/ethereum/evm/src/executor.rs#L275-302 checks capacity only; evm2 4a53ec08 crates/evm2/src/version/mod.rs#L87-93 tx_gas_caps returns u64::MAX under 8037, ethereum/mod.rs#L336-343. Spec transactions.py#L640-641. Condition: block gas limit >= 2^32 (genesis or ~4,400 max-increase blocks) and tx.gas > 2^32-1 within capacity; pool lacks the cap too (validate/eth.rs#L648-653). Hive at e0378eb6: 6 above_cap cases fail; reth executes the tx and rejects only via BAL slot mismatch. Invalid block accepted / consensus split, latent. High.\n- reth-1 Reth 8282 absent builder predeploy code does not invalidate the block: CONFIRMED, KNOWN (reth PR 26695 closed unmerged; alloy-evm PR 400 open). execution.rs#L390-416, #L421-451 (only failed status rejected); evm2 crates/evm2/src/evm/system.rs#L139-186 (call to absent code succeeds). Spec fork.py#L665-719, #L899-921. Geth state_processor.go#L457-472 rejects. Hive: 4 deploy_after_fork cases INVALID only via BAL hash mismatch. Conditional on a chain lacking the predeploys. High (static).\n- D1 negative net state gas: REFUTED. Every state-gas credit matches a charge in the same tx (storage.py#L114-158, gas.py#L459-647, vm/__init__.py#L188-244), so net >= 0; Geth reject vs EELS clamp (gas.py#L1216) unreachable. Spec-clarification note only.\n- Erigon-1 txpool reload drops near-minimal-gas self-transfers: CONFIRMED, cosmetic, not found. pool.go#L1046-1085, #L2794-2823 (fromDBLocked parses WithSender(false)). Txpool only.\n- rerun-evm-reth: no candidate for 7843/7954/8024.\n- rerun-hive-reth: 4,782 failing instances (full 1626 engine/3094 enginex/6 rlp; quick 23/23/6/4 at e0378eb6, down from 288). 1613/3075 of full engine/enginex failures are 'Undefined exception message' (error mapping, not consensus). Real families: 8037 above_cap (=R-1); 8282 deploy_after_fork (=reth-1); 7928 cross-index bal_withdrawals_and_dequeues_net_balance_at_last_index: VALID expected, INVALID got, all suites, no public report; wrong-error cases (known PR 26723). 7002/7251 entries: live code, withheld.\n\nCL VERDICTS:\n- L-1 Lighthouse PTC votes before on_block checks: REFUTED as consequential (load_parent block_verification.rs#L2009-2031 enforces the same predicate on every path); residual cosmetic.\n- P-1 Prysm bid seen-cache written after signature but before gas/head/builder checks: CONFIRMED, low (valid corrected bid IGNOREd). validate_execution_payload_bid.go#L69-74, #L120-168; spec p2p L971/L1082. Design intent in Prysm PR 16539 (known as policy).\n- P-4/P-5 Prysm API-submitted payload attestation recorded without block-slot check; queued message replayed next slot without current-slot check: CONFIRMED, fork-choice divergence, not found (PR 17555 fixed in-block path only). handlers_pool.go#L993-1046; receive_payload_attestation_message.go#L27-88; pending_payload_attestation.go#L110-122; forkchoice gloas.go#L537-549. Spec fork-choice.md L1150-1154, L1167-1169. Lighthouse fork_choice.rs#L1400-1441 has both guards. High for vote divergence, moderate for head change.\n- P-6 Prysm init-sync batch: CONFIRMED narrowly, medium-low, not found. onBlockBatch (process_block.go#L188-382) never applies in-block PTC votes; insertFirstPayloadIfNeeded (process_block_helpers.go#L457-469) marks parent FULL before signature verification; no rollback.\n- Duplicate PTC seats: CONFIRMED, high, fork-choice divergence, not found. Nimbus fork_choice.nim#L468-478 and Lodestar importBlock.ts#L261-280 + protoArray.ts#L697-728 write only set bits; spec fork-choice.md L256-267, L1044-1073 writes every seat; compute_ptc permits duplicates (beacon-chain.md L1189-1208). Prysm process_block.go#L625-659, Teku ForkChoice.java#L1268-1307 expand all seats. Lodestar PR 9369 did not cover import.\n- G-3 Grandine first-valid PTC gossip check commented out: CONFIRMED, high. store.rs#L4364-4376 (commented IGNORE), #L4378-4381, #L4802-4830 overwrite. Spec p2p L908-911, L947-948. Nimbus gossip_validation.nim#L2005-2024 isSeen. Grandine PR 705 closed unmerged; consensus-specs issue 5333 open.\n- G-4/G-5 Grandine: (a) delayed index-1 block attestations REFUTED (phase0 fork-choice.md L1013-1030 permits later processing; retry keeps Block origin). (b) block PTC votes applied after head publication CONFIRMED, not found: apply_block (store.rs#L4548-4685) recomputes head without the block's PTC votes; task spawned (mutator.rs#L3629-3630) and snapshot published (#L3669-3672, #L3707-3741) before votes land (#L1692-1725); queries.rs#L308-325 no barrier. Spec on_block L1084-1098. Example: boosted EMPTY child whose included aggregate crosses 257/512 flips head. Nimbus fork_choice.nim#L519-529 synchronous. High window, medium-high head change.\n- Grandine 7688/8282 limits: CONFIRMED. C2 envelope gossip lacks verify_execution_requests_limits (store.rs#L3662-3692, #L3817-3891; spec p2p L778-782); over-limit counts impossible from a valid 8282 payload; block processing rejects later. C3 Beacon API default gossip validation publishes a block with 5 payload attestations before full processing rejects (standard.rs#L4701-4735; block_processing.rs#L110-128 vs #L891-895). C4 Engine bridge narrows validator deposits to 8,192 (execution_engine/src/types.rs#L1021-1027, #L1257-1305; preset.rs#L386-391) while Gloas DepositRequests is progressive (65,536), no scheduled cap (EIP-8254 Draft): valid block rejected at ~193-200M gas. Not found. Nimbus comparator unread (correct path: beacon_chain/gossip_processing/gossip_validation.nim).\n- T-3 PTC gossip state source: CONFIRMED as spec-text inconsistency, attribution inverted. Spec gossip (p2p L930) uses head state; handler (fork-choice L1150) uses the attested block's state. Teku, Lighthouse, Prysm use block state (deliberate: Teku PR 11215, LH issue 9305). Nimbus stable uses head state in gossip (gossip_validation.nim#L2040-2052) AND handler (fork_choice_epbs.nim#L231-247): only real violation, fixed on unstable PR 9341. Condition: branches split before end of epoch E-2 (multi-epoch non-finality). Report as spec issue.\n- N-3/L-8 bid gossip builder checks on unadvanced head state: CONFIRMED narrowed, low (gossip verdict only). Nimbus gossip_validation.nim#L1881-1894, #L1916-1920; Lighthouse gossip_verified_bid.rs#L353-387, #L449-472. Spec p2p L1011, L1048-1049. Lighthouse KNOWN issue 9520; Nimbus not found.\n- is_head_weak: Grandine CONFIRMED high (store.rs#L1501-1526 zeroes slashed equivocators; spec L815-832 adds effective_balance; 1,000-validator example flips). Lodestar conditional medium (forkChoice.ts#L1717-1754 head-state fallback). Nimbus unproved. Lighthouse known (9593/9831). Teku matches.\n- spec-lag PR 5736: all six clients keep old routing; Teku PR 11582 and Lodestar PR 10428 open; no release contains 5736 (latest v1.7.0-beta.4); plan (ACDT 101): not for Hoodi, release plus short devnet after. Transient lag; divergence risk only if shipped unevenly. CORRECTION to ep.2: Hoodi Glamsterdam fork (2026-10-26) was POSTPONED, no new date (blog.ethereum.org 2026-10-22). Sepolia forked 2026-10-06 on old routing.\n\nREPORT PLAN: structure (1)-(6) from ep.3 notes with these verdicts. New not-found findings ranked: Grandine G-3; Nimbus/Lodestar duplicate seats; Grandine post-import PTC publication; Prysm P-4/P-5; Grandine is_head_weak; Grandine C4; Prysm P-6. Known unfixed: Reth R-1, reth-1. Gaps: nothing executed; hive has no CL suites; Nimbus comparator for Grandine limits unread; Lodestar is_head_weak lacks full trace; reth 7928 cross-index unexplained; 6 items unspent.",
  "spawn": [],
  "read": [],
  "cancel": [],
  "wake": { "batches": [], "afterMinutes": 60 },
  "finish": true
}
