(+)#10102 ryanofsky Multiprocess bitcoin- Isolate the node, wallet, and GUI into separate processes so crashes or exploits do not compromise the node
- Allow components to run on independent lifecycles for improved stability and security
| P2 · new feature- P1 because it delivers the executables needed to run the node, wallet, and GUI in separate processes
- It provides the core milestone for the multi-year process separation effort
- It unblocks downstream pull requests for isolated process execution
| Review #29409 first | 0 (+1) -1 | Strong- Strong long-standing concept consensus across multiple maintainers
- Concept approval emphasizing the value of process isolation (laanwj)
- Concept approval with testing (Sjors)
- Historical concept approval (dcousens, promag, jamesob, hebasto)
| 3,842 + 135 tests- 3,842 lines added or modified outside tests
- 135 lines added or modified in tests
- 539 lines removed in total
- 136 files, 23 commits
|
(+)#29409 ryanofsky multiprocess: Add capnp wrapper for Chain interface- Allow wallets and external clients to run as separate processes from the node
- Enable out-of-process clients to query chainstate and receive asynchronous chain notifications
| P2 · new feature- P2 because it is a major prerequisite to run the wallet in a separate process
- Directly unblocks multiple downstream multiprocess PRs and external integrations
| Ready- Ready for review with passing CI and no pending structural changes
| 0 (+2) | Mild- Strong support with testing against external client prototypes (darosior, sedited)
- Concept approval for enabling downstream client integration (willcl-ark, josibake)
- Questioned handling of invalid parameters from non-C++ clients (zaidmstrr, willcl-ark)
- Ongoing architectural discussion on raw versus specialized IPC interfaces (Sjors)
| 2,190- 2,190 lines added or modified outside tests
- 0 lines added or modified in tests
- 429 lines removed in total
- 71 files, 7 commits
|
(+)#32387 ryanofsky ipc: add windows support- Allow multiprocess node and GUI binaries to build and run on Windows
- Enables Windows users and developers to utilize and test process separation
| P2 · platform fix- P2 because establishing Windows support allows multiprocess architecture to become cross-platform
- fulfills a stated core milestone for IPC platform coverage
| Needs rebase- Needs rebase due to merge conflicts with master
- Carries temporary in-tree libmultiprocess changes while upstream PRs remain pending
| 0 | Positive- Broad support for bringing IPC support to Windows with no objections
- Concept approval without stated reasons (hebasto)
- Feedback focused on testing strategies via Guix and bitcoin-mine (Sjors)
| 2,098 + 176 tests- 2,098 lines added or modified outside tests
- 176 lines added or modified in tests
- 775 lines removed in total
- 90 files, 30 commits
|
(+)#35037 enirox001 ipc: support per-address max-connections options on -ipcbind- Add per-listener connection limits and file descriptor reservations for IPC sockets
- Prevent runaway IPC connections from exhausting node file descriptors or starving P2P and RPC sockets
| P2 · stability- P2 because uncontrolled IPC connections could exhaust node file descriptors or trigger startup crashes
- Protects node resource allocation and establishes a pattern for upcoming IPC listener options
| Ready- Ready to review: all previous feedback has been addressed with no open issues or blockers
| 1 (+3) | Strong- Strong consensus on attaching connection limits and file descriptor reservations to listeners
- Fixes a gap in descriptor accounting and adds helpful socket limits (ryanofsky)
- Verified connection limits locally using multiple client sockets (xyzconstant)
- Code approved without objections (Eunovo, ViniciusCestarii)
| 283 + 123 tests- 283 lines added or modified outside tests
- 123 lines added or modified in tests
- 17 lines removed in total
- 12 files, 4 commits
|
(+)#19461 ryanofsky multiprocess: Add bitcoin-gui -ipcconnect option- Connect a GUI directly to an already running node process over IPC
- Allow users to start and close the graphical interface without shutting down the node
| P2 · new feature- P2 because it completes a central milestone of the multiprocess architecture
- Enables the GUI to attach to and detach from an external node process independently
| Review #19460 first | 0 | Mild- Broad agreement on the feature and interface design
- Concept approval noting consistency with rpcconnect conventions (laanwj)
- Concept approval without stated reasons (meshcollider)
- Verified by testing remote GUI connections over an SSH socket (Sjors)
- Identified node crash on wallet flag mismatch, tracked as a follow-up (jimhashhq)
| 3,912 + 135 tests- 3,912 lines added or modified outside tests
- 135 lines added or modified in tests
- 567 lines removed in total
- 142 files, 27 commits
|
(+)#35932 ryanofsky ipc: make ipc::disconnectIncoming wait for in-progress calls to complete- Prevent assertion crashes during node shutdown when IPC requests are still in progress
- Ensure worker threads finish executing active IPC calls before node subsystems are reset
| P2 · bug fix- P2 because it fixes shutdown assertion crashes when IPC calls run concurrently with teardown
- Reliable disconnect handling during shutdown is critical for stable external IPC usage
| CI failing- CI is failing on the latest push
- Based on unmerged upstream libmultiprocess pull request 335
| 0- No review verdicts recorded
| Crickets- No reviews or comments yet
- Waiting for initial review feedback
| 339- 339 lines added or modified outside tests
- 0 lines added or modified in tests
- 21 lines removed in total
- 5 files, 5 commits
|
(+)#36097 xyzconstant mining: replace interrupt methods with cancellation arguments- Allow multi-process mining clients to cancel blocking calls cleanly within requests
- Eliminate ad-hoc interrupt calls and protocol race conditions in external mining interfaces
| P3 · interface- P2 because it adds native request cancellation across the IPC boundary
- Removes ad-hoc interrupt calls and simplifies multi-language client implementations
- Establishes a reusable pattern for future cancellable blocking IPC calls
| CI failing- CI is failing
- Temporarily vendors an unmerged upstream commit from libmultiprocess
| 0- No review verdicts recorded
| Strong- Strong support for native cancellation simplifying client and server interactions (ryanofsky)
- No objections raised
| 2,132 + 43 tests- 2,132 lines added or modified outside tests
- 43 lines added or modified in tests
- 615 lines removed in total
- 70 files, 2 commits
|
(+)#33117 D33r-Gee Interfaces: Expose UTXO Snapshot Loading and Add Progress Notifications- Allow GUI clients to trigger UTXO snapshot loading and display real-time progress feedback to users
| P3 · new feature- P3 because it exposes snapshot loading and progress notifications across process boundaries
- Directly unblocks GUI snapshot loading implementations in downstream pull requests
| Needs rebase- Needs rebase due to merge conflicts with master
| 0 (+1) | Strong- Strong consensus on concept and approach with all architectural concerns resolved
- Verified snapshot loading using downstream QML GUI (pinheadmz) and current GUI (Sjors)
- Approach approval (sedited)
| 127 + 2 tests- 127 lines added or modified outside tests
- 2 lines added or modified in tests
- 21 lines removed in total
- 10 files, 3 commits
|
(+)#35916 enirox001 fuzz: improve ipc fuzz coverage- Catch bugs in inter-process communication by fuzzing malformed payloads and bidirectional callbacks
- Ensures process separation safely rejects corrupted inputs without crashing
| P3 · test coverage- P3 because expanding IPC fuzz coverage supports the long-term reliability of process separation
- It enhances test coverage rather than addressing an active bug or altering production APIs
| Ready- Ready for review
- CI is passing and earlier review questions have been resolved
| 0 (+1) | Strong- Strong support noting it fulfills earlier requests for expanded fuzzing (jeanpablojp)
- Question on using raw bytes instead of structured data was resolved with code comments (Eunovo)
| 292- 292 lines added or modified outside tests
- 0 lines added or modified in tests
- 13 lines removed in total
- 3 files, 4 commits
|
(+)#36060 151henry151 build: require KJ exception support for IPC- Prevent obscure build and link failures when building with IPC enabled
- Catch missing library exception handling early during build configuration
| P3 · platform fix- P3 because it ensures the multiprocess build environment meets required exception handling needs
- Prevents dependency configuration errors when building multiprocess components
| Ready- Ready for review now with clean CI and complete commits
| 0- No review verdicts recorded
| Crickets- No reviews or comments yet
- Awaiting initial community feedback after being opened as draft
| 179- 179 lines added or modified outside tests
- 0 lines added or modified in tests
- 0 lines removed in total
- 12 files, 3 commits
|
(+)#19460 ryanofsky multiprocess: Add bitcoin-wallet -ipcconnect option- Allow the wallet tool to connect directly to a running node over IPC
- Lays the transport foundation for future online wallet subcommands without HTTP RPC
| P3 · new feature- P3 because it enables external wallet binaries to connect to a node process over IPC
- It serves primarily as transport infrastructure to unblock follow-up PR #19461
| Waiting on author- Review #29409 first
- Stacked on top of unmerged multiprocess prerequisite PRs #29409 and #10102
| 0- No review verdicts recorded
| Blocked- Unaddressed question whether adding IPC to an offline CLI tool creates user footguns (ajtowns)
- Cautioned against conflating offline wallet tooling with online daemon features (jonasschnelli)
- Author clarified that standard offline wallet usage remains intact and default
| 3,873 + 135 tests- 3,873 lines added or modified outside tests
- 135 lines added or modified in tests
- 549 lines removed in total
- 139 files, 25 commits
|
(+)#33922 Sjors mining: add getMemoryLoad() and track template non-mempool memory footprint- Track memory held by transactions retained only because open block templates reference them
- Expose template memory load over IPC so external mining clients like Stratum v2 providers can manage it
| P3 · new feature- P3 because it adds a new monitoring capability to the multiprocess mining interface
- Enables Stratum v2 template providers to inspect server-side memory held by active templates
| Review #35675 first | 0 (+2) | Strong- Consensus in favor of exposing template memory load over IPC
- Support for the design and utility of template memory tracking (ryanofsky, vasild, enirox001)
- Nonblocking objection: prefer node-side FIFO limits over delegating memory management to clients (ismaelsadeeq)
- Resolved objection: data race addressed by adding a mutex (ryanofsky)
- Resolved objection: brittle header workaround removed into another PR (maflcko)
| 630 + 457 tests- 630 lines added or modified outside tests
- 457 lines added or modified in tests
- 463 lines removed in total
- 34 files, 19 commits
|
(+)#30437 ryanofsky ipc: add bitcoin-mine test program- Adds test coverage for client-side multiprocess IPC communication that Python tests cannot exercise
- Gives external mining tool developers a reference implementation for calling node interfaces over IPC
| P3 · test coverage- P3 because it exercises multiprocess IPC on the client side, filling a gap left by Python tests
- Benefits Core developers maintaining IPC infrastructure without affecting standard node operation
| Ready- Ready to review; clean rebase, CI is passing, and author addressed all concrete feedback
| 0 (+3) | Mild- Support for adding test coverage for client-side multiprocess IPC (Sjors)
- Verified by testing connection, tip retrieval, and mining on macOS (BrandonOdiwuor)
- Questioned need for an in-tree client and suggested a dedicated CMake option (sedited)
- Noted that the binary should not be distributed in release packages (fanquake)
| 219 + 41 tests- 219 lines added or modified outside tests
- 41 lines added or modified in tests
- 7 lines removed in total
- 10 files, 5 commits
|
(+)#24230 ryanofsky indexes: Stop using node internal types and locking cs_main, improve sync logic- Prevent lock contention by stopping indexes from holding the main lock during sync and startup
- Decouple optional indexes from node internal types so they can eventually run in separate processes
| P3 · unblocks #10102- P3 because it builds interface abstractions needed for process separation of the index subsystem
- Lays required interface groundwork without yet implementing the multiprocess transport layer
| Needs rebase- Needs rebase due to merge conflicts with current master
| 0 | Strong- Broad concept and approach support across multiple maintainers with all code concerns resolved
- Approach support for separating internal types toward multiprocess architecture (sedited)
- Concept support verified through detailed testing across commits (mzumsande, josibake)
- Concept approval without stated reasons (fjahr, aureleoules)
- Resolved race conditions and crash on block invalidation during sync (mzumsande, furszy)
| 937 + 201 tests- 937 lines added or modified outside tests
- 201 lines added or modified in tests
- 577 lines removed in total
- 42 files, 18 commits
|
(+)#36105 ryanofsky bitcoin wrapper: Fix Windows exec so wrapper waits for child process- Make the Windows bitcoin wrapper wait for child processes to finish and propagate their exit codes
- Allow test frameworks and caller scripts on Windows to capture output and monitor child exit status
| P3 · platform fix- P3 because it fixes child process tracking required for multiprocess coordination on Windows
- Unblocks Windows multiprocess tooling and functional test execution
| Ready- Ready to review
- All CI checks are passing and recent review comments have been addressed
| 0 | Mild- Strong support for fixing Windows child process waiting without objections to the approach
- Concept approval and runtime error handling review (hodlinator)
- Concept approval with notes on future UCRT transitions (hebasto)
- Collaborated on child exit code resolution logic (Bortlesboat)
| 27 + 11 tests- 27 lines added or modified outside tests
- 11 lines added or modified in tests
- 20 lines removed in total
- 6 files, 4 commits
|
(+)#35581 ismaelsadeeq node: add block template manager and track waitNext fee inflow- Avoid assembling full block templates on every tick just to check for mempool fee changes
- Reduce lock contention and CPU load during block generation for mining pools and template consumers
- Consolidate block creation and template state management into a unified interface
| P3 · cleanup- Cleans up IPC usage by letting in-process callers bypass the IPC mining interface wrapper and avoiding unnecessary defensive block copying.
| Review #35675 first | 0 | Strong- Strong support for incremental fee inflow tracking and architectural cleanup
- Suggested splitting out the base manager into a dedicated preparatory PR (Sjors)
- Concept approval praising incremental snapshot tracking and bug discovery via fuzzing (pablomartin4btc)
- Concept approval without stated reasons (w0xlt)
| 1,171 + 1,493 tests- 1,171 lines added or modified outside tests
- 1,493 lines added or modified in tests
- 587 lines removed in total
- 51 files, 27 commits
|
(+)#36106 ryanofsky bitcoin wrapper: respect CMAKE_INSTALL_BINDIR/LIBEXECDIR- Allow distributions with custom install paths to run the bitcoin wrapper without execution errors
- Fixes broken binary discovery when launching components on systems like Arch Linux
| P3 · bug fix- P3 because the multiprocess wrapper can locate and dispatch to sub-processes in custom layouts
- Prevents execution failures when launching node processes under non-default directory trees
| Ready- Ready to review
- Code is clean, test suite issues are resolved, and CI is passing
| 0 | Strong- Strong support across reviewers with all prior feedback addressed
- Approach approved after testing with custom install prefixes (hebasto)
- Verified by testing on Arch Linux directory layouts (cyb3ralbert)
| 42 + 71 tests- 42 lines added or modified outside tests
- 71 lines added or modified in tests
- 6 lines removed in total
- 6 files, 2 commits
|
(+)#35300 w0xlt mining: add precious option to IPC block submission- Let external mining software atomically submit and prefer a locally mined same-work block over IPC
- Avoid race conditions from issuing a separate preciousblock RPC call
| P3 · new feature- P3 because mining clients no longer need a parallel RPC session just to handle precious blocks
- Incremental addition to the mining interface without broader architectural impact
| Needs rebase- Needs rebase against current master due to merge conflicts
- Author has been silent since July 2026
| 0 | Mild- Concept approval for handling precious blocks directly over IPC (Sjors, pablomartin4btc)
- Questions whether duplicate status should still be returned if precious is requested (Sjors)
- Recommends splitting and reorganizing the oversized unit test (Sjors)
- Considers the internal chain activation refactoring a clean prerequisite (pablomartin4btc)
| 125 + 431 tests- 125 lines added or modified outside tests
- 431 lines added or modified in tests
- 100 lines removed in total
- 20 files, 6 commits
|
(+)#35887 ViniciusCestarii ipc: use std::optional for checkSpawned(), add tests and rename arg -ipcfd to -ipcchild- Make internal IPC argument names platform-neutral and modernize process checking interfaces
- Add unit test coverage for IPC child process argument parsing edge cases
| P4 · cleanup- P4 after comparing with the other PRs here (assessed alone as P3): Demoted from P3: rename plus std::optional refactor with no consumer waiting on it, which this category places at P3 or below; it is the narrowest item on the list.
- P3 because it is minor cleanup and test coverage for multiprocess support
- Improves argument accuracy on non-UNIX platforms without fixing active bugs
| Ready- Ready for review, clean, and passing CI with all feedback addressed
| 2 | Strong- Strong support for completing the requested follow-ups from earlier IPC work
- Verified by testing with IPC enabled and checking argument handling (jeanpablojp)
- Approved commit structure and code changes (enirox001)
| 66 + 1 tests- 66 lines added or modified outside tests
- 1 lines added or modified in tests
- 24 lines removed in total
- 6 files, 3 commits
|
(+)#34978 enirox001 init: reserve file descriptors for IPC connections- Prevent unexpected crashes or socket errors from file descriptor exhaustion when IPC is enabled
| P4 · stability- P4 after comparing with the other PRs here (assessed alone as P3): Demoted from P3 and moved down: superseded by #35037, which the author himself preferred, so it now has no independent claim on review time.
- P3 because prevents unpredictable node failures from running out of file descriptors
- IPC remains an experimental feature and this only reserves descriptors without enforcing caps
| Needs rebase- Review is not worthwhile because the author marked it draft in favor of #35037
- Needs rebase and has merge conflicts
| 0 (+1) | Disputed- General agreement that IPC file descriptors need accounting (Sjors, kevkevinpal, w0xlt, sedited)
- Architectural objection preferring per-address limits over a global configuration option (ryanofsky)
- Author marked as draft to pursue the alternative approach (enirox001)
| 26 + 61 tests- 26 lines added or modified outside tests
- 61 lines added or modified in tests
- 4 lines removed in total
- 3 files, 3 commits
|