Build and CI: ranking notes

Category notes

The category's top of list is dominated by one coherent cluster: Guix/release-binary integrity (#36267, #36272, #25573, #35855, #36082, #36193, #36270, #36233) plus supported-platform build breakage (#36285, #31507, #36106). I deliberately kept the long tail of compiler-warning enablement, CI log noise and cosmetic CMake changes in P3/P4 rather than compressing bands, since the category explicitly ranks cosmetic build cleanups low. Several PRs are stacked on each other; the chains listed above matter more for scheduling than the raw order does.

Review order and overlapping PRs

  • #35855 and #36233 both fix the same problem (Guix build failure on riscv64, issue #36232) by moving the time-machine pin. Review #35855 first — it subsumes the pin update and additionally bumps compilers that other PRs depend on; #36233 is the narrower fallback if the broad bump stalls.
  • #31507 (clang-cl, removes MSVC) makes both #24773 (MSVC SHA-NI intrinsics) and #32409 (MSVC debug assertion box) largely moot. The MSVC-support decision in #31507 should be taken before spending review time on either.
  • Chain: #36272 (split Guix Linux toolchain) is the base for both #25573 (-static-pie bitcoind) and #36193 (--disable-wchar_t libstdc++). #36272 must be resolved first; #36269 is in turn stacked on #36082.
  • Chain: #36275 (-Wunused-const-variable) is an explicit stepping stone to #36167 (-Wunused); #35911 and #36268 are the same warning-enablement family and all four are blocked on the same upstream subtree updates (leveldb/minisketch/libmultiprocess). Batch the decision rather than reviewing them one at a time.
  • Chain: #36042 (g++ 13) and #36036 (clang 19) are prerequisites for #36033 (C++23 RFC). The RFC restates parts of both; settle the minimum-compiler policy once.
  • #36235 and #36252 both modify the IWYU step in ci/test/03_test_script.sh and will conflict; review #36235 first (it restores a broken failure signal) then #36252 (noise reduction).
  • #35356 cannot go green until the wallet_signer.py path-with-spaces bug is fixed elsewhere; it is effectively a bug report plus CI coverage, and the underlying fix is not in this category.
  • #32387 (IPC on Windows) and #35454 (tolerate missing libmultiprocess example targets) both wait on libmultiprocess subtree updates; sequencing the subtree bump unblocks several build PRs at once.

Band and position changes

  • #36267: P2 alone, P1 after comparison. Raised to P1: rc2 backport bundle gating the 32.0 release candidate, including offline Guix codesign verification for Windows binaries — release-integrity blocker
  • #36285: P2 alone, P1 after comparison. Raised to P1: an actual build break on a supported platform (macOS/ld64), milestoned 32.0 and tagged for backport
  • #36272: Moved up to sit directly with the stack it unblocks (#25573, #36193); reviewing it first is what makes the others mergeable
  • #36270: Moved well up: it adds an automated release-binary assertion (symbol-check) against host path leakage, which is release-integrity work, the top concern in this category
  • #36233: Moved up: reproducible hashes confirmed by several reviewers and it fixes the same riscv64 Guix breakage as #35855; kept P3 because RISC-V native builds are not a release requirement
  • #35756: Moved up: enabling fatal linker warnings in macOS Guix builds is release hardening rather than plain de-duplication
  • #36193: Moved up: verified reproducible Guix output and part of the release-binary toolchain stack under #36272
  • #36235: Moved up: a linter job that silently swallows compiler errors is a misleading CI signal, which this category ranks above hygiene cleanups
  • #35454: Moved up: it is the piece that lets Core build against updated/external libmultiprocess, so it gates subtree-update work
  • #31349: Moved down: privacy/hermeticity value is real but it is preventive CI tightening, below the release-integrity and broken-signal items above
  • #36147: Moved up slightly: pre-merge coverage for secondary platforms currently caught only by external nightlies
  • #35356: Moved down: useful coverage, but it depends on an unrelated path-handling bug fix before CI can be green
  • #33145: Moved down: maintainer-toil automation with no release or platform consequence, and dormant
  • #34721: Moved down: packaging convenience only; ranks below CI-signal and depends correctness items
  • #36042: Moved down: the toolchain bump is a deadline-free transition targeted at a later release cycle
  • #36033: Placed after the two compiler-minimum bumps it depends on; it is an RFC whose direction should follow them
  • #35762: Moved down: developer ergonomics with an open complexity objection and no coverage gain
  • #35072: Moved down: rebuild-time convenience only, and its approach is contested; comparable to other developer-iteration tweaks
  • #36060: Moved down: configure-time diagnostics for experimental multiprocess builds, narrower than the depends/CI fixes above
  • #35417: Moved down: benefit is limited to developers running several local CI containers at once
  • #36275: Placed ahead of #36167, which it is a stepping stone for
  • #36167: Moved down: broad warning enablement blocked on three upstream subtree changes and an unresolved scope question
  • #24773: P3 alone, P4 after comparison. Lowered to P4: maintainers intend to drop MSVC in favour of clang-cl (#31507), so this optimises a toolchain on its way out — same reasoning already applied to #32409
  • #32409: Moved to last: MSVC-debug-only, unused anywhere in tree, NACKed, and further undercut by the clang-cl migration

About

This pass by claude-opus-5 on 2026-09-17 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.