Conversation
The leg asserted that on a witness producer every witness comes from the pipelined SRC completion path. bor is removing that combination: the SRC witness is derived from a FlatDiff, and CommitSnapshot ends by draining the shared readerWithCache into it. That record carries no attribution, so the speculative block prefetcher's reads land in it alongside the block's own -- and how far the prefetcher got before the block finished is wall-clock dependent. Two nodes importing the same block therefore derive witnesses of different sizes, which WIT/2's cross-peer page-count check reads as a misbehaving peer. bor core.TestPipelinedSRCDiffCarriesBlockPrefetcherReads pins the leak; bor eth.witnessSafeAccelerators turns pipelined import SRC off on any witness-recording node because of it. So witness producers join stateless-sync nodes as a class that self-gates the pipeline off, and participant 6 -- the plain pipelined rpc node -- becomes the one node exercising pipelined SRC end to end. That is thinner coverage than before; adding a second non-witness pipelined rpc node would restore it, but changes the topology the stateless suite asserts on, so it is left for a follow-up. The two src checks on witness nodes are left commented rather than inverted. bor's workflow pins this repo at main, so asserting src == 0 before the bor guard reaches develop would fail every open bor PR. Root mismatch and witness production stay strict throughout; tighten the two marked lines once bor #2405 has merged. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YBppHd4UqVqBBkEf7uDT7h
pratikspatil024
left a comment
Member
There was a problem hiding this comment.
I guess this is not needed anymore? @lucca30
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
The pipeline leg asserts that on a witness producer every witness comes from the pipelined SRC completion path:
bor#2405 removes that combination, so this assertion is what makes that PR's
pipeline-e2e-testsleg red.Why bor is removing it
The SRC witness is derived from a
FlatDiff, andCommitSnapshotends by draining the sharedreaderWithCacheinto it. That record carries no attribution, so the speculative block prefetcher's reads land in it alongside the block's own — andProcessBlockbuilds the prefetcher's throwawayStateDBfrom the same reader triple as the processor, so how far the prefetcher got before the block finished is wall-clock dependent.Two nodes importing the same block therefore derive witnesses of different sizes. WIT/2's cross-peer page-count check reads that as a misbehaving peer and drops and jails it.
core.TestPipelinedSRCDiffCarriesBlockPrefetcherReadsin that PR pins the leak;eth.witnessSafeAcceleratorsturns pipelined import SRC off on any witness-recording node because of it.Change
Witness producers join stateless-sync nodes as a class that self-gates the pipeline off. Root mismatch and witness production stay strictly asserted on those nodes; only the
src > 0activity expectation goes.Merge order — why the checks are commented, not inverted
bor's
kurtosis-pipeline-e2e.ymlpins this repo atref: main. Assertingsrc == 0here before the bor guard reachesdevelopwould fail every open bor PR, not just #2405.So the two witness-node
srcchecks ship commented with aTIGHTEN AFTER bor #2405marker. Merge this first, then bor#2405, then a one-line follow-up here to turn them back on.Cost worth flagging
After this, participant 6 — the plain pipelined rpc node — is the only node exercising pipelined SRC end to end. That is thinner coverage than before. Restoring it means adding a second non-witness pipelined rpc node, which changes the topology the stateless suite asserts on, so it is left for a follow-up rather than bundled here.
🤖 Generated with Claude Code
https://claude.ai/code/session_01YBppHd4UqVqBBkEf7uDT7h