Skip to content

Pin the missed mutants from overnight run 38686116770 - #1027

Merged
reardencode merged 9 commits into
masterfrom
mutants/overnight-38686116770
Oct 16, 2026
Merged

reardencode merged 9 commits into
masterfrom
mutants/overnight-38686116770

Conversation

@rearden-grok

@rearden-grok rearden-grok Bot commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Pins every missed mutant from overnight cargo-mutants run 38686116770 (tree base a692f6e14).
  • A peer message, an RPC result, or a reopened asmap or mempool file shows each operator that is still in the tree.
  • The getheaders a peer receives keeps the walk's eight hashes, then the confirmed tip.
  • Deletes paths no peer, client, or reopened file can observe: dead asmap helpers, the dial warm locator, the block-cache locator, the in-memory body slack, and the wtxid-count reject.

Test plan

  • cargo test --workspace (known end_of_ibd_sh_interrupt flake only)
  • cargo clippy --workspace --all-targets -- -D warnings
  • cargo fmt --all -- --check, ./scripts/ast-grep.sh, ./scripts/ci-os-smoke.sh
  • Required GitHub checks (qc, test, windows, macos, coverage)

Comment thread crates/rbitcoin-net/src/ibd/header_walk.rs Fixed
@rearden-grok
rearden-grok Bot force-pushed the mutants/overnight-38686116770 branch from 5189f0b to aab410e Compare October 16, 2026 06:10
Comment thread crates/rbitcoin-net/src/peer_header_sync_journey.rs Dismissed
Comment thread crates/rbitcoin-net/src/peer_header_sync_journey.rs Dismissed
Comment thread crates/rbitcoin-net/src/peer_header_sync_journey.rs Dismissed
Comment thread crates/rbitcoin-net/src/peer_header_sync_journey.rs Dismissed
Comment thread crates/rbitcoin-net/src/peer_header_sync_journey.rs Dismissed
Comment thread crates/rbitcoin-net/src/peer_tests.rs Dismissed
Header sync, asmap, the block cache, tip age, and the mempool slot file now fail a peer, RPC, or reopened-disk journey when those operators flip. Dead asmap helpers, the in-memory body slack, and a redundant jump bound are gone.

The interpret loop bound stays `while pos < endpos`. A file sanity accepts does not change the ASN on one extra empty step, and rewriting the bound to `!=` can spin after a jump past EOF.

Made-with: Cursor
At or past the last bit the opcode is invalid and the lookup returns 0, so `while pos < endpos` cannot be told from `<=`. A jump file that lands past EOF still reopens as no map and interprets as ASN 0.

Made-with: Cursor
Asmap files are loaded with from_path. The header locator is the getheaders message, not a direct walk call. The warm-locator thread-local is not a pin: publishing the store locator makes a None body match the wire.

Made-with: Cursor
Asmap files still load through from_path, and the mempool slot file is still checked after reopen. Header-sync, block-cache, tip-age, and chain-hub operators that only showed up in an in-crate helper are not pinned.

Made-with: Cursor
The warm locator is a thread-local, and the confirm-reject checks called in-crate helpers. Neither is a peer message or a reopened file.

Made-with: Cursor
Comment thread crates/rbitcoin-test/tests/asmap_journey.rs Dismissed
Comment thread crates/rbitcoin-test/tests/asmap_journey.rs Dismissed
Comment thread crates/rbitcoin-test/tests/asmap_journey.rs Dismissed
Comment thread crates/rbitcoin-test/tests/asmap_journey.rs Dismissed
Comment thread crates/rbitcoin-test/tests/asmap_journey.rs Dismissed
Header sync, challenger retarget, the header-tip cap, tip age, and getblocktemplate are checked through getheaders, peer disconnect, getchaintips, and getmininginfo. Dead locators and the wtxid-count reject are removed.

Made-with: Cursor
The walk stops after eight hashes again. The ask forwards that locator
up to the protocol maximum and still appends the confirmed tip, so a
longer comparison is visible on the getheaders a peer receives.

Made-with: Cursor
A loopback bytecode maps 127.0.0.1, .2, and .3 to distinct ASNs, and a lone return maps every peer to ASN 1. One regtest node reports those on getpeerinfo and names the file length and digest at startup. Refused files exit at tip entry and log the sanity or open failure. The bound P2P port is published at run/p2p.addr so the inbound sockets can find the listener.

Made-with: Cursor
The loopback and refuse journeys load the same files through run_p2p. The fake getpeerinfo peer, the direct load_asmap boots, and the bytecode units that only checked those files are gone. The two-prefix encoder lock, the fuzz seed, the public interpret-on-garbage result, and the netgroup key tests stay.

Made-with: Cursor
@rearden-grok
rearden-grok Bot force-pushed the mutants/overnight-38686116770 branch from 2db101d to 6940fb1 Compare October 16, 2026 20:10
@reardencode
reardencode merged commit b15c0bd into master Oct 16, 2026
23 of 24 checks passed
@rearden-grok
rearden-grok Bot deleted the mutants/overnight-38686116770 branch October 17, 2026 11:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants