Test infrastructure: ranking notes

Category notes

Band distribution after the pass: 2 P1 (framework-wide flake fix and the end-to-end orphanage fuzz harness that found a real bug), 6 P2, 30 P3, 20 P4. Two P3s were raised to P2 only where another P2 on the list does the same kind of work (#36587 alongside #36408 for real test failures, #36082 alongside #35774 for untested release binaries); one P3 was lowered to P4 where reviewers disputed that the coverage it adds is meaningful (#35342). Ordering within P3 follows the category's own priority order: misleading-signal fixes, then high-risk-path coverage (p2p, consensus), then framework capability, then test speed, then benchmarks and downstream vectors, then CI hygiene.

Review order and overlapping PRs

  • Benchmark block fixture overlap: #36254 adds undo data for the existing block413567 fixture while #32554 deletes that fixture entirely in favour of a runtime generator that also produces undo data (and supersedes #32457). Decide the direction first; #36254 is the smaller fix for the misleading verbosity-3 benchmark, #32554 is the broader replacement. #34360 separately extracts fake-block helpers into a shared bench header and should be rebased on whichever lands.
  • Immutable-primitives chain (#36692): #35994 (clang-tidy automated rewrite) and #36694 (manual declarative rewrite of mempool tests/benches) pursue the same goal; the #35994 author favours the manual route, so #36694 should be reviewed and #35994 treated as superseded.
  • Unit-test assertion/runner chain: #35713 replaces Boost.Test with an in-tree runner, #35139 adds new thread-safe ASSERT macros, #36091 adds operator<< formatters explicitly to prepare for #35713, and #36074/#36087 touch assertion includes across the same files. Agree on the target framework (#35713) before merging the three macro/formatter PRs, or they will be rewritten twice.
  • #36437's harness is a stated prerequisite for the follow-up orphanage hole fixes in #36506; reviewing it late stalls that chain.
  • #35442 bundles and depends on #35433 (RPC deprecation, outside this category); it cannot be merged standalone.
  • #36455 (dynamic spenders in feature_taproot.py) and #36458 (static script_tests.json / tx_invalid.json vectors) cover the same interpreter edge cases found via bitcoin-s; review #36455 first since the generated asset dump feeds qa-assets, and #36699 also regenerates that dump — these three touch the same asset-generation path and should be ordered.
  • #36618 strips manual index-sync helpers across 18 functional test files; other test-touching PRs here will conflict textually, so it is worth landing early rather than last.

Band and position changes

  • #36437: P2 alone, P1 after comparison. Raised to P1: the harness found a real relay liveness bug from an empty corpus and unblocks follow-up hole fixes in #36506 — end-to-end p2p+validation fuzzing is the highest-value coverage gap here.
  • #36587: P3 alone, P2 after comparison. Raised to P2 for consistency with #36408: both fix recurring real test failures, and this one also adds CI enforcement so the FD-budget regression is caught per-PR.
  • #36082: P3 alone, P2 after comparison. Raised to P2 to match #35774: both close the gap of release-like binaries never being exercised by CI, and this one covers all three platforms plus codesign environments.
  • #36699: Moved up: this is a misleading-test fix (asset tests passed for an implementation that runs CHECKMULTISIG in tapscript), which the category ranks above plain added coverage.
  • #35139: Placed below the fuzz-throughput and signal fixes; it is framework capability whose payoff mostly lands with the Boost-runner migration.
  • #36091: Moved up: failure diagnostics plus preparation for the #35713 runner migration give it more leverage than standalone coverage additions.
  • #36631: Moved up: a reusable custom-mutator hook is framework capability, not just one more target.
  • #32554: Moved down to sit just after #36254, which fixes the same misleading verbosity-3 benchmark with far less machinery; the generator is the broader but more deferrable option.
  • #33959: Moved down: de-duplication plus more realistic reorg paths is valuable but ranks below coverage of high-risk code and framework capability.
  • #35827: Moved down into the benchmark cluster; no test currently fails and the benefit is profiling convenience.
  • #34360: Moved down into the benchmark cluster; it serves one optimization PR (#27865) rather than general test signal.
  • #35342: P3 alone, P4 after comparison. Lowered to P4: reviewers argue fuzzing wallet RPCs without chain state or UTXOs has very low efficacy, so the claimed coverage gain is weakly supported.
  • #36690: Moved up within P4: it tests a real boundary (the 1023-char silent-payments limit) and corrects misleading header comments.
  • #36074: Grouped with the other assertion-hygiene scripted diffs.
  • #35442: Placed after the assertion cleanups; it is blocked on #35433 and only partially advances BIP125 deprecation.
  • #36694: Moved up ahead of #35994: it is the manual approach the #35994 author now prefers for the same #36692 goal.
  • #35997: Moved down: it tunes one isolated benchmark's synthetic inputs, below framework-wide readability/typing cleanups.
  • #32409: Moved to the bottom: the variable is set by nothing in-tree and has been NACKed as unused, so there is no problem being solved today.
  • #35994: Moved to the bottom: the author prefers abandoning it in favour of the manual rewrite (#36694), and the clang-tidy check introduced a witness-dropping bug.

About

This pass by claude-opus-5 on 2026-11-01 saw every PR in the category at once and checked the bands given to each PR alone against each other, ordered the PRs, and noted chains and overlaps. Back to the category.