{
 "number": 32387,
 "repo": "bitcoin/bitcoin",
 "url": "https://github.com/bitcoin/bitcoin/pull/32387",
 "title": "ipc: add windows support",
 "author": "ryanofsky",
 "author_association": "MEMBER",
 "created_at": "2025-04-30T12:43:38Z",
 "updated_at": "2026-09-16T13:39:20Z",
 "age_days": 505,
 "draft": true,
 "labels": [
  "Needs rebase",
  "IPC"
 ],
 "milestone": null,
 "base": "master",
 "head_sha": "62dd45984057326b410c0208a5a86fda8c0351a2",
 "head_ref": "pr/ipc-win",
 "head_repo": "ryanofsky/bitcoin",
 "head_history": [
  {
   "t": "2025-04-30T12:46:56Z",
   "sha": "87432b6a4325e09a13c912d77b386daa3832b34d"
  },
  {
   "t": "2025-04-30T21:04:37Z",
   "sha": "0a35e21103b7fed6e46c809e9029446277b6f6ee"
  },
  {
   "t": "2025-05-01T03:50:29Z",
   "sha": "27328195136754babe8d8f5d99f4f0b6a5ab2e55"
  },
  {
   "t": "2025-05-02T21:07:23Z",
   "sha": "f215e742045401ab386f0cd67d06b358558ecf89"
  },
  {
   "t": "2025-05-06T14:56:22Z",
   "sha": "5f272b7cc3b72fe4a59f590825b68dc2c342baca"
  },
  {
   "t": "2025-05-06T15:37:10Z",
   "sha": "13aef5ad7669e0302e27f96876615907dc98c3c3"
  },
  {
   "t": "2025-10-15T00:41:33Z",
   "sha": "cbd06846803e800f23f4498e27f930e09d260000"
  },
  {
   "t": "2025-10-22T08:50:03Z",
   "sha": "3d0737720ae6bbd2c3eb4382e41fa49dd3d727d9"
  },
  {
   "t": "2025-12-12T12:18:26Z",
   "sha": "24f5e883f20d0c65bc163dba0e3d8c2f031c63c7"
  },
  {
   "t": "2026-04-15T16:18:59Z",
   "sha": "ac0b14c567f40ed813f9bf2ebe316fcd8249ffbe"
  },
  {
   "t": "2026-04-16T23:31:38Z",
   "sha": "533b3460457c0f26727646677cccb303a4036c7e"
  },
  {
   "t": "2026-04-17T00:56:31Z",
   "sha": "ec10ff7c9d9a82b5caee50e2d0d6b90a55fa8ea4"
  },
  {
   "t": "2026-04-17T01:42:28Z",
   "sha": "23b1d507334c6e429ca87ad6af2b401313a5623b"
  },
  {
   "t": "2026-04-17T03:12:01Z",
   "sha": "0211390861baa245ec77766f9a6f1d17ad441649"
  },
  {
   "t": "2026-04-17T13:55:11Z",
   "sha": "cac16bb4859b6b2ec96063ea52d71d997643c87c"
  },
  {
   "t": "2026-04-17T16:23:58Z",
   "sha": "6baabfe441da0a6430993d0e11d407a6416ece6f"
  },
  {
   "t": "2026-04-17T19:05:56Z",
   "sha": "d53bc6c783e7e91bc06f23140f8415eb48c9ab0b"
  },
  {
   "t": "2026-04-17T21:19:55Z",
   "sha": "aa323482ccb40edf3b6bfed16d3e136257ca5d6e"
  },
  {
   "t": "2026-04-17T22:17:16Z",
   "sha": "68bc7eeff2ffd44d79e8669fc8dc8b335ae18e7d"
  },
  {
   "t": "2026-04-20T19:30:58Z",
   "sha": "855cfb764d21e1b6f05c26d5cfadd0a2d165580d"
  },
  {
   "t": "2026-04-20T23:21:02Z",
   "sha": "2573aff25d9f773249ecd790af3a232de6397f46"
  },
  {
   "t": "2026-04-21T20:54:11Z",
   "sha": "13de58e1b5ec29d0db22073faa3d5eee36a03616"
  },
  {
   "t": "2026-07-22T17:35:39Z",
   "sha": "e99cb6170e6761f1678a7e8822fc7cd9a5606b2b"
  },
  {
   "t": "2026-07-22T20:48:59Z",
   "sha": "aa2892e82a334b6d2998937ffab27c2a6fa889dc"
  },
  {
   "t": "2026-08-01T13:48:04Z",
   "sha": "3177fbd5f2d553325f5414232d0be90aedec2aae"
  },
  {
   "t": "2026-08-01T14:26:22Z",
   "sha": "3a845a8be9060c6abd8bdeb2f08cb37e9371c7a9"
  },
  {
   "t": "2026-08-04T23:12:28Z",
   "sha": "399c8820ce47ddd16cc7f136ba98af59c8bcba5a"
  },
  {
   "t": "2026-08-12T20:08:00Z",
   "sha": "01ac9a03b580fd8066bd18440984dfcb15958b17"
  },
  {
   "t": "2026-08-13T00:52:27Z",
   "sha": "d0863ee76db080b558df0d307d244318eb2c887c"
  },
  {
   "t": "2026-08-13T02:10:05Z",
   "sha": "8f384c9f2499a5df8588100f563d0328cf51fd17"
  },
  {
   "t": "2026-08-15T01:15:00Z",
   "sha": "62dd45984057326b410c0208a5a86fda8c0351a2"
  }
 ],
 "additions": 2274,
 "deletions": 775,
 "changed_files": 90,
 "commit_count": 30,
 "size_bucket": "XL",
 "mergeable_state": "dirty",
 "bot": {
  "drahtbot": {
   "present": true,
   "reviews": {
    "concept_ack": [
     {
      "login": "hebasto",
      "url": "https://github.com/bitcoin/bitcoin/pull/32387#pullrequestreview-2807134774"
     }
    ]
   },
   "conflicts": [
    {
     "number": 36190,
     "title": "test: Check bitcoin wrapper child exit status on windows",
     "author": "Bortlesboat"
    },
    {
     "number": 36167,
     "title": "[RFC] Enable `-Wunused`",
     "author": "fanquake"
    },
    {
     "number": 36106,
     "title": "bitcoin wrapper: respect CMAKE_INSTALL_BINDIR/LIBEXECDIR",
     "author": "ryanofsky"
    },
    {
     "number": 36105,
     "title": "bitcoin wrapper: Fix Windows exec so wrapper waits for child process",
     "author": "ryanofsky"
    },
    {
     "number": 36097,
     "title": "mining: replace interrupt methods with cancellation arguments",
     "author": "xyzconstant"
    },
    {
     "number": 36060,
     "title": "build: require KJ exception support for IPC",
     "author": "151henry151"
    },
    {
     "number": 35932,
     "title": "ipc: make ipc::disconnectIncoming wait for in-progress calls to complete",
     "author": "ryanofsky"
    },
    {
     "number": 35916,
     "title": "fuzz: improve ipc fuzz coverage",
     "author": "enirox001"
    },
    {
     "number": 35911,
     "title": "Warn on and add missing [[noreturn]]",
     "author": "fanquake"
    },
    {
     "number": 35511,
     "title": "RFC: consensus: Make `CAmount` a class",
     "author": "hodlinator"
    },
    {
     "number": 33593,
     "title": "guix: Use UCRT runtime for Windows release binaries",
     "author": "hebasto"
    },
    {
     "number": 31507,
     "title": "build: Use clang-cl to build on Windows natively",
     "author": "hebasto"
    },
    {
     "number": 29409,
     "title": "multiprocess: Add capnp wrapper for Chain interface",
     "author": "ryanofsky"
    },
    {
     "number": 19461,
     "title": "multiprocess: Add bitcoin-gui -ipcconnect option",
     "author": "ryanofsky"
    },
    {
     "number": 19460,
     "title": "multiprocess: Add bitcoin-wallet -ipcconnect option",
     "author": "ryanofsky"
    },
    {
     "number": 10102,
     "title": "Multiprocess bitcoin",
     "author": "ryanofsky"
    }
   ]
  }
 },
 "acks_parsed": {
  "hebasto": {
   "kind": "concept_ack",
   "hash": null,
   "t": "2025-04-30T13:47:17Z",
   "stale": false
  }
 },
 "acks_tally": {
  "ack": 0,
  "stale_ack": 0,
  "concept_ack": 1,
  "approach_ack": 0,
  "nack": 0,
  "concept_nack": 0,
  "approach_nack": 0
 },
 "reviews": {
  "approved": 0,
  "changes_requested": 0,
  "distinct_reviewers": [
   "Sjors",
   "hebasto"
  ]
 },
 "signals": {
  "needs_rebase": true,
  "ci_failed": false,
  "mergeable_state": "dirty",
  "last_author_activity": "2026-08-15T01:15:00Z",
  "last_reviewer_activity": "2025-04-30T19:12:53Z",
  "last_reviewer": "Sjors",
  "author_silent_days": 33,
  "waiting_on_author_days": 0,
  "days_since_update": 1
 },
 "refs": {
  "mentioned": [
   30437,
   31756,
   32297,
   32345,
   33229,
   33517,
   33960,
   35084,
   35661,
   35684,
   35852
  ],
  "depends_on": [],
  "fixes": [],
  "linked_issues": [],
  "references": [
   {
    "number": 33229,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2025-09-25",
    "title": "multiprocess: Don't require bitcoin -m argument when IPC options are used"
   },
   {
    "number": 30437,
    "type": "pull",
    "state": "open",
    "merged": false,
    "merged_at": null,
    "title": "ipc: add bitcoin-mine test program"
   },
   {
    "number": 31756,
    "type": "issue",
    "state": "closed",
    "merged": false,
    "merged_at": null,
    "title": "RFC: Adding bitcoin-{node,gui} binaries for IPC in 30.0 release"
   },
   {
    "number": 32297,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2026-03-30",
    "title": "bitcoin-cli: Add -ipcconnect option"
   },
   {
    "number": 32345,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2025-08-18",
    "title": "ipc: Handle unclean shutdowns better"
   },
   {
    "number": 33517,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2025-10-14",
    "title": "multiprocess: Fix high overhead from message logging"
   },
   {
    "number": 33960,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2025-12-02",
    "title": "log: Use more severe log level (warn/err) where appropriate"
   },
   {
    "number": 35084,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2026-07-29",
    "title": "ipc: Add nonunix platform support"
   },
   {
    "number": 35661,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2026-07-07",
    "title": "Update libmultiprocess subtree to add `ThreadMap.makePool` method"
   },
   {
    "number": 35684,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2026-07-10",
    "title": "Update libmultiprocess subtree to add `max_connections` option"
   },
   {
    "number": 35852,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2026-08-14",
    "title": "scripted-diff: Use inline const(expr) over static constexpr in headers"
   }
  ],
  "conflicts": [
   36190,
   36167,
   36106,
   36105,
   36097,
   36060,
   35932,
   35916,
   35911,
   35511,
   33593,
   31507,
   29409,
   19461,
   19460,
   10102
  ]
 },
 "stack": {
  "shares_commits_with": [],
  "based_on": [],
  "base_for": []
 },
 "review_paths": [],
 "body": "These changes make IPC features work on windows, resolving https://github.com/bitcoin-core/libmultiprocess/issues/53 and https://github.com/bitcoin-core/libmultiprocess/issues/114\n\nThis is a draft because it is based on https://github.com/bitcoin-core/libmultiprocess/pull/231,  https://github.com/bitcoin-core/libmultiprocess/pull/317,  https://github.com/bitcoin-core/libmultiprocess/pull/318.\n\n---\n\nThis PR is part of the [process separation project](https://github.com/bitcoin/bitcoin/issues/28722).",
 "commits": [
  {
   "sha": "e1936b8a1932a66b677cb53a5be4fd65b81e6357",
   "date": "2026-08-14T20:01:12Z",
   "message": "sync with libmultiprocess master\n\ncommit 390b5f901f1336307df3da99d1ddc54fa2dbf63d"
  },
  {
   "sha": "8c7741686a6848773d0a81601bddaadc5d414fce",
   "date": "2026-08-14T20:01:12Z",
   "message": "lint: Skip subtree check for src/ipc/libmultiprocess\n\nWARNING: DO NOT MERGE \u2014 this draft PR modifies the libmultiprocess\nsubtree directly (intentionally, for testing purposes) which causes\nthe subtree link check to fail. Disabling the check here to avoid\nmasking unrelated lint failures while the PR is open for testing.\n\nRestore the omitted entry before any merge attempt.\n\nNote: removing src/ipc/libmultiprocess from get_subtrees() also removes\nit from get_pathspecs_default_excludes(), so all other lint checks\n(trailing newline, whitespace, etc.) now run on files in that directory\nas well. This is why src/ipc/libmultiprocess/include/mp/type-unordered-set.h\nneeds a trailing newline added here even though it is not otherwise\nmodified by this PR: it has always been missing the newline, but was\npreviously hidden from the lint check by the subtree exclusion.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"
  },
  {
   "sha": "3fc753b010d54bbdb2e060be58e1701f71531540",
   "date": "2026-08-14T20:01:12Z",
   "message": "ipc: remove compatibility shim after libmultiprocess update"
  },
  {
   "sha": "c0db1533bcc18c4e16e1a8e46aa009d6ed3ae14d",
   "date": "2026-08-14T20:01:12Z",
   "message": "util: Improve SpawnProcess API and documentation\n\nRemove recently introduced SpawnConnectInfo and SpawnConnectInfoToArgsFn type\naliases since they are the same on all platforms and might obscure the fact\nthat connect info should be treated as an opaque string.\n\nCo-authored-by: Sjors Provoost <sjors@sprovoost.nl>"
  },
  {
   "sha": "9ce64ad735297a84e69b8e1d207310697eaf3f52",
   "date": "2026-08-14T20:01:12Z",
   "message": "util, test: Add CloseSocket, use SocketId\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"
  },
  {
   "sha": "892f5d9711120945dbd6c1e0517f8ca46e4730d5",
   "date": "2026-08-14T20:01:12Z",
   "message": "util, test: Replace UnixListener with SocketListener\n\nReplace the Unix-only UnixListener test helper with a cross-platform\nSocketListener backed by a std::variant<sockaddr_un> (TCP arm will be\nadded later for Wine compatibility).\n\n- test/socketlistener.h: New header with SocketListener class extracted from\n  the pattern of UnixListener but using SocketId/SocketError types,\n  std::filesystem for temp dir cleanup, and mp::CloseSocket for teardown.\n  Uses std::variant<sockaddr_un> so the TCP arm can be appended later without\n  restructuring the class.\n- test/unixlistener.h: Deleted.\n- test/listen_tests.cpp: Switch to socketlistener.h and socketlistener.\n- test/connect_tests.cpp: Switch to socketlistener.h and socketlistener.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"
  },
  {
   "sha": "6bfb137d43a3ec2976231697f7b0469b1d73f042",
   "date": "2026-08-14T20:01:12Z",
   "message": "util, test: guard Unix-only code for Windows build\n\nMove POSIX-only headers in util.cpp into a #ifndef WIN32 block so the file\ncompiles on Windows without modification. Guard the Unix-only helpers (MakeArgv,\nMaxFd, ChildFail, SpawnError*, ReadSpawnResult, WriteSpawnError, KillAndReapChild)\nwith a single #ifndef WIN32 block. Guard the extern \"C\" environ declaration\nlikewise. Guard Unix-only includes in spawn_tests.cpp and connect_tests.cpp and\nwrap the Unix-only spawn tests with #ifndef WIN32.\n\nNo Windows implementations are added here; those come in a later commit.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"
  },
  {
   "sha": "b9e4f3d0e6eb64cda9390b3591a96600fb11dec2",
   "date": "2026-08-14T20:01:12Z",
   "message": "util: Add Windows CommandLineFromArgv escaping function\n\nCo-authored-by: Sjors Provoost <sjors@sprovoost.nl>"
  },
  {
   "sha": "bc7abc586e1d115fb5749759351c298c65508b08",
   "date": "2026-08-14T20:01:12Z",
   "message": "util: Add Windows support\n\nAdd Windows-specific code to support building and running on Windows:\n\n- util.h: Guard ProcessId/SocketId/SocketError type aliases with WIN32\n  ifdefs so they use SOCKET/uintptr_t on Windows and int on Unix.\n  Add winsock2.h include on Windows.\n- util.cpp: Guard Unix-specific system headers with WIN32 ifdefs. Add\n  Windows-specific includes (windows.h, winsock2.h). Guard MaxFd() with\n  #ifndef WIN32. Add GetCurrentThreadId() branch in ThreadName(). Add\n  win32Socketpair() forward-declare. Add Windows branch in SocketPair()\n  using win32Socketpair(). Add CommandLineFromArgv() helper needed to\n  construct CreateProcess command lines. Add Windows branch in\n  SpawnProcess() using named pipes and WSADuplicateSocket to pass socket\n  to child. Add Windows branch in StartSpawned() reading socket from\n  named pipe. Add Windows branch in WaitProcess() using\n  WaitForSingleObject/GetExitCodeProcess.\n- proxy.cpp: Add SocketOutputStream class on Windows (analogous to\n  FdOutputStream but using SOCKET/send()). Add Windows branch in\n  EventLoop constructor to create m_post_writer using SocketOutputStream.\n\nCo-Authored-By: ViniciusCestarii <viniciuscestari01@gmail.com>"
  },
  {
   "sha": "df65470848be485a0dbf002b17711c01eb0c435a",
   "date": "2026-08-14T20:01:12Z",
   "message": "util: Fix Windows SpawnProcess hang when child exits before connecting to named pipe\n\nSpawnProcess on Windows creates a named pipe with PIPE_WAIT and then calls\nConnectNamedPipe synchronously. If the child exits or crashes before\nconnecting, ConnectNamedPipe blocks forever with no recovery path.\n\nFix by opening the pipe with FILE_FLAG_OVERLAPPED and using\nWaitForMultipleObjects on both the connect event and the child process\nhandle. If the process handle signals first, the child died without\nconnecting and SpawnProcess throws instead of hanging. Since the pipe is\nnow in overlapped mode, WriteFile also requires an OVERLAPPED structure;\nuse GetOverlappedResult with bWait=TRUE to handle both synchronous and\nasynchronous completion.\n\nAdd a Windows-only test that spawns a child which exits immediately\nwithout opening the named pipe and asserts SpawnProcess does not block.\n\n(https://github.com/bitcoin-core/libmultiprocess/pull/231#discussion_r3706021950)\n\nCo-Authored-By: ViniciusCestarii <viniciuscestari01@gmail.com>\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"
  },
  {
   "sha": "a382d824dda531ab9b3d1c525c539d194be29da9",
   "date": "2026-08-14T20:01:12Z",
   "message": "util: make pthreads optional on Windows to enable MSVC builds\n\nAllow code to compile without pthreads available, as required for MSVC\ncompatibility. Avoid unconditional POSIX calls (fork, posix_spawn,\npthread_getname_np) by moving them into #ifndef WIN32 or HAVE_PTHREAD_*\nguards. When pthreads is available on Windows (detected via cmake\nHAVE_PTHREAD_* checks), still use it for thread name reporting since it\nprovides useful information at low cost.\n\nAlso add Threads::Threads as an explicit dependency of the multiprocess\nlibrary. proxy.cpp directly uses thread_local, std::this_thread, and\nstd::thread, and the dependency was previously satisfied only through\ntransitive linkage from CapnProto::kj-async.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"
  },
  {
   "sha": "d75d06d1f552a9e6b7f0f81b890ca9d323b2b69a",
   "date": "2026-08-14T20:01:12Z",
   "message": "test: Add TCP SocketListener and Windows compat to socketlistener.h\n\nAdd TCP (sockaddr_in) support to SocketListener and platform-conditional\nheader guards so the class compiles and works on Windows:\n\n- Wrap POSIX headers (arpa/inet.h, netinet/in.h, sys/socket.h, sys/un.h)\n  in #else of #ifdef WIN32, with Windows equivalents (afunix.h,\n  ws2tcpip.h) in the #ifdef WIN32 branch.\n- Add a WsaInit static initializer on Windows that calls WSAStartup\n  before any socket operations. Tests create sockets directly (not via\n  StartSpawned), so Winsock must be initialized here.\n- Add Init(sockaddr_in&) and Connect(const sockaddr_in&) overloads for\n  TCP loopback connections.\n- Use TCP on Windows to work around Wine's lack of the AcceptEx extension\n  required by KJ's AF_UNIX listener; Unix platforms continue using\n  AF_UNIX.\n- Expand std::variant<sockaddr_un> to std::variant<sockaddr_in, sockaddr_un>.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"
  },
  {
   "sha": "d5a99458734c178548f748dd3515297ea81d353a",
   "date": "2026-08-14T20:01:12Z",
   "message": "ci: add Windows cross-compilation config using MinGW and Wine\n\n- shell.nix: add `windows` parameter that selects pkgs.pkgsCross.mingwW64\n  as the cross target; also change crossPkgs default from import<nixpkgs>{}\n  to null (cleaner API). When windows=true, add native pkgs.capnproto to\n  nativeBuildInputs so capnp/capnpc-c++ are in PATH for cmake code generation,\n  and add wine64Packages.staging so ctest can run mptest.exe via wine.\n  Change llvmBase to always use pkgs (native) instead of crossPkgs.\n\n- ci/configs/windows.bash: new config that cross-compiles with mingw,\n  sets CMAKE_SYSTEM_NAME=Windows, CMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER\n  (so cmake finds native capnp from PATH), CMAKE_CROSSCOMPILING_EMULATOR=wine\n  (so ctest runs mptest.exe via wine), and sets MPGEN_PRE_BUILD=1.\n\n- ci/scripts/ci.sh: add MPGEN_PRE_BUILD support: when set, build native mpgen\n  in $CI_DIR-native before the main cross build, then inject\n  -DMPGEN_EXECUTABLE into CMAKE_ARGS. This is needed because cmake's\n  add_custom_command does not use CMAKE_CROSSCOMPILING_EMULATOR, so the\n  cross-compiled mpgen.exe cannot be used as a code generator directly.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"
  },
  {
   "sha": "4e9cf615db1f296ace5ac1f884c9a16a29f14698",
   "date": "2026-08-14T20:01:12Z",
   "message": "workaround: MinGW thread_local use-after-free in ThreadContext\n\nMinGW has a bug where thread_local destructors can run on already-freed memory\nat thread exit, causing heap corruption. MSVC builds and non-Windows platforms\nare unaffected.\n\nThis caused intermittent STATUS_HEAP_CORRUPTION in MinGW CI builds when\n~ThreadContext walked freed memory at thread exit. See CurrentThread() in\nproxy-io.h for the full explanation and upstream bug references.\n\nWorkaround: change CurrentThread() accessor in MinGW builds to return a\nheap-allocated object held by a trivially-destructible pointer, skipping\ndestructor registration at thread exit. The object is deliberately\nleaked.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>"
  },
  {
   "sha": "4c515ac73f4903be89b197ecddb7988ba87d9dec",
   "date": "2026-08-14T20:01:12Z",
   "message": "ipc: Windows + ENABLE_IPC build fixes\n\nVarious small fixes for making ENABLE_IPC build work on windows."
  },
  {
   "sha": "8e47ce5c637da9bd05a9a28a3cf39f22a1c9551a",
   "date": "2026-08-14T20:01:12Z",
   "message": "ipc: Fix MSVC build error C3861 in ipc_tests.cpp\n\nMSVC does not provide mkstemp (a POSIX function available in MinGW but\nnot the MSVC runtime), causing:\n\n  error C3861: 'mkstemp': identifier not found\n  error C4996: 'close': The POSIX name for this item is deprecated\n\nFix by using _mktemp_s on WIN32, which fills in the XXXXXX suffix\nin-place without creating a file (so no fd to close or file to remove).\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"
  },
  {
   "sha": "13f8b779be7e16372656a9520f0d9ae726d14f7e",
   "date": "2026-08-14T20:01:12Z",
   "message": "ipc: Fix windows socket error formatting"
  },
  {
   "sha": "a276f29872e7e8491d1d7d38686656f8ba629cbf",
   "date": "2026-08-14T20:01:12Z",
   "message": "ipc: Fix Windows connect() error for missing Unix socket path\n\nOn Windows, connect() to a Unix domain socket path that doesn't exist\nmay return a WSA error code (e.g. WSAECONNREFUSED) that doesn't map to\nstd::errc::no_such_file_or_directory via std::system_category(), unlike\nPOSIX where ENOENT is returned. After a failed connect, explicitly check\nif the socket path exists and throw the expected error if not.\n\nAlso add an fs::exists(path, ec) overload to fs.h: the file's existing\nexists() wrappers shadow std::filesystem::exists(path, error_code&),\ncausing the new call in process.cpp to fail to compile under MinGW.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"
  },
  {
   "sha": "5c4fdfaef96026deb08d4cd834567c1509f36505",
   "date": "2026-08-14T20:01:12Z",
   "message": "ipc: Work around MinGW system_category() not mapping WSAECONNREFUSED\n\nWhen the IPC socket file exists but no node is listening, ProcessImpl::connect\nthrows std::system_error(WSAECONNREFUSED, std::system_category()). MinGW\nlibstdc++'s system_category() does not map Winsock error values to std::errc\nconditions, so the std::errc::connection_refused check in connectAddress fails\nto catch it, and bitcoin-cli -ipcconnect=auto throws CConnectionFailed instead\nof falling back to HTTP.\n\nThis is a workaround: the proper fix is for ProcessImpl::connect to throw\nstd::errc::connection_refused (using generic_category) rather than relying on\nsystem_category() to map Winsock codes. As a workaround, check for\nWSAECONNREFUSED explicitly in system_category on WIN32.\n\nMSVC's STL does map WSAECONNREFUSED to errc::connection_refused, so this\ncheck is redundant but harmless there.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>"
  },
  {
   "sha": "b66a6dceaa7ecdb5881f00628795074a04aa475b",
   "date": "2026-08-14T20:01:12Z",
   "message": "ipc: Skip MAX_DOUBLE static_assert on MSVC to fix C2131\n\nBug: MSVC C2131 \"expression did not evaluate to a constant\" on line:\n  static_assert(ipc::capnp::messages::MAX_DOUBLE == std::numeric_limits<double>::max())\n\nRoot cause: Capnp floating-point constants can't be constexpr on MSVC.\nIn capnp's generated-header-support.h, CAPNP_NON_INT_CONSTEXPR_DECL_INIT\nis defined as empty on MSVC (with the comment \"MSVC doesn't understand\nfloating-point constexpr yet\"), so MAX_DOUBLE is declared as\n`static const double MAX_DOUBLE;` without an initializer in the header.\nA `const double` (unlike `const int`) is not a constant expression in C++,\nso it can't be used in static_assert on MSVC.\n\nFix: Guard with `#if !defined(_MSC_VER) || defined(__clang__)` to match\nthe exact condition capnp itself uses for the same limitation. The other\nthree static_asserts in the same block use integer constants (MAX_MONEY,\nDEFAULT_BLOCK_RESERVED_WEIGHT, DEFAULT_COINBASE_OUTPUT_MAX_ADDITIONAL_SIGOPS)\nwhich don't have this MSVC limitation and continue to run.\n\nAlternatives considered:\n- Convert to a runtime BOOST_CHECK: would require moving into a test\n  function, more invasive change.\n- Use std::numeric_limits<double>::max() literal: wouldn't help since\n  MAX_DOUBLE is the non-constexpr side.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"
  },
  {
   "sha": "e76d83bd1eba30a11456b297b771febf6fc46c56",
   "date": "2026-08-14T20:01:12Z",
   "message": "util: Fix ExecVp on Windows to wait for child process and return exit code\n\nOn Windows, _wexecvp (like all _exec* variants in the MSVC CRT) works by\ncalling CreateProcess to start the child, then immediately calling\nExitProcess(0) on the parent. Unlike POSIX execvp, which replaces the\ncurrent process image so the parent's PID becomes the child, this means\nthe child is orphaned from the original caller's perspective: the shell\nor test framework waiting on bitcoin.exe sees it exit with code 0 while\nbitcoind.exe continues running in the background independently.\n\nThis breaks functional tests that invoke bitcoin.exe as a wrapper (e.g.\n`bitcoin node -regtest`) because the test process has no way to wait for\nthe node to stop or retrieve its exit code.\n\nFix by switching to _wspawnvp(_P_WAIT, ...), which spawns the child and\nblocks until it exits, then calling _exit() with the child's exit code.\nFrom the caller's perspective ExecVp still never returns on success (the\nparent process exits inside it), so call sites don't need to change. On\nerror the existing errno / -1 return convention is preserved.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"
  },
  {
   "sha": "1bb9ee964991656bf6c0ce05013e981de4ba73aa",
   "date": "2026-08-14T20:01:12Z",
   "message": "bitcoin: Fix IPC child process exec on Windows due to missing .exe extension\n\n_wspawnvp (the Windows implementation of ExecVp) requires the full filename\nincluding \".exe\" when given an explicit path. Unlike POSIX execvp, it does\nnot add the extension automatically.\n\nAlso, msvcrt's _wspawnvp returns EINVAL (not ENOENT) when a file is not\nfound \u2014 both when \".exe\" is absent and when the file simply doesn't exist.\nucrt returns ENOENT correctly. The allow_notfound check in try_exec only\ncaught ENOENT, so on msvcrt it never fell through to the next search path.\n\nWithout both fixes, all IPC functional tests failed immediately with:\n  \"execvp failed to execute '...\\libexec\\bitcoin-node': Invalid argument\"\n\nFix: append \".exe\" when the path has no extension, and catch both ENOENT\nand EINVAL as \"file not found\" on WIN32.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"
  },
  {
   "sha": "a09413f767069049853b36bc63c270e4058c0ad5",
   "date": "2026-08-14T20:01:12Z",
   "message": "test: Enable tool_bitcoin.py test on Windows\n\nNow that util::ExecVp on Windows uses _wspawnvp(_P_WAIT) instead of\n_wexecvp, the bitcoin wrapper process blocks until the child exits and\nPython can capture its stdout/stderr and exit code normally. Remove the\nWindows skip added in #33229.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"
  },
  {
   "sha": "3b0845851422d6d321799481cee263bc2a88119a",
   "date": "2026-08-14T20:01:12Z",
   "message": "test: Add Windows AF_UNIX asyncio support to ipc_util.py\n\nPython's asyncio doesn't support create_unix_connection() on Windows. Implement\nit by patching asyncio.ProactorEventLoop, using ctypes ws2_32.connect() and\na non-blocking select() loop. See ipc_util.py for details on why each of those\nchoices was necessary.\n\nAlso: run blocking do_fn() callables in run_in_executor() in wait_and_do();\nunlink stale AF_UNIX socket files before node restart on Windows (test_node.py);\nset UNIX_PATH_MAX = 108 for Windows (test_node.py); catch OSError in the\nconnection retry loop in interface_ipc_mining.py.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"
  },
  {
   "sha": "aec9866be43217ba2066a73acfeab013027efbde",
   "date": "2026-08-14T20:01:12Z",
   "message": "test: Fix interface_ipc_cli.py error assertions on Windows\n\nOn POSIX, connect() to a stopped node returns ECONNREFUSED and bitcoin-cli\nprints \"error: Connection refused\" followed by help text. On Windows the\nequivalent WSAECONNREFUSED produces a different OS error string without help\ntext. Fix the expected string and switch to a prefix match since the Windows\nmessage has no appended help text.\n\nAlso, on Windows, bitcoind removes the IPC socket file on clean shutdown\n(unlike Linux where the file persists and connect() returns ECONNREFUSED).\nA subsequent connect attempt sees ENOENT (\"No such file or directory\").\nUpdate test_cli() to accept a tuple of alternative prefixes and use a\ntwo-entry tuple for the Windows case covering both error strings.\n\nAlso add diagnostic logging retained for future debugging: ipc_socket_path\nin both backslash and forward-slash forms with encoded byte length (to\ndiagnose MinGW path format issues), socket file existence before each\nexplicit-path test, and per-call debug logging of returncode and stdout.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"
  },
  {
   "sha": "114efb2e00eb9bba60eb57d54d8bb9a0f50d1b4d",
   "date": "2026-08-14T20:01:12Z",
   "message": "cmake: Add add_windows_exe_resources() for Windows exe manifest/version\n\nAdd a helper function that generates a target-specific resource file from a\ntemplate and links it along with an application manifest, replacing the static\nper-binary *-res.rc files previously used by non-GUI executables and the\nbitcoin-qt-res.rc previously used by GUI executables.\n\nThe new add_windows_exe_resources(target description [ICON_DIR dir]) function\nin AddWindowsResources.cmake handles both GUI and non-GUI executables through a\nsingle cmake/windows-res.rc.in template. When ICON_DIR is provided, the\nfunction prepends icon declarations to the generated RC file and sets\nProductName to the project name, matching the previous GUI-specific behavior.\n\nAlso adds the missing add_windows_exe_resources() call for bitcoin-node, which\npreviously had no resource section and caused the Windows CI manifest\nvalidation check (mt.exe -validate_manifest) to fail.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"
  },
  {
   "sha": "145489c7f0a5fb87834117143fd60c04b1f0975d",
   "date": "2026-08-14T20:01:12Z",
   "message": "ipc: enable by default in windows builds"
  },
  {
   "sha": "0e53b3a120d8172a57ceef55768851f87fc5f643",
   "date": "2026-08-14T20:01:12Z",
   "message": "ci: Enable IPC in Windows cross-compiled CI jobs\n\nRemove -DENABLE_IPC=OFF from both win64 cross-build environment files\nand install pycapnp in the Windows cross-build test runner. The\ndepends/ system already builds capnp for the MinGW target (NO_IPC is\nnot set), so cmake will find it via the toolchain file. This lets\ninterface_ipc.py and related tests run in the \"Windows, test\ncross-built\" CI jobs.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"
  },
  {
   "sha": "95750767c299cb746c3c66cd549b41c8480a91df",
   "date": "2026-08-14T20:01:12Z",
   "message": "ci: Install capnproto via vcpkg and pycapnp for Windows IPC support\n\nAdd an \"ipc\" feature to vcpkg.json with capnproto as a dependency and\ninclude it in default-features, so the Windows native VS CI job installs\ncapnproto when ENABLE_IPC is ON (the default). The fuzz build already\nuses VCPKG_MANIFEST_NO_DEFAULT_FEATURES=ON, so it is unaffected.\n\nAlso install pycapnp in ci-windows.py alongside pyzmq so the IPC\nfunctional tests (interface_ipc.py) have their required Python library,\nmatching what every other CI platform already does.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"
  },
  {
   "sha": "62dd45984057326b410c0208a5a86fda8c0351a2",
   "date": "2026-08-14T20:01:12Z",
   "message": "ci: Add missing ipc and tests vcpkg features to Windows fuzz build\n\nThe fuzz build in ci-windows.py set -DVCPKG_MANIFEST_FEATURES=wallet but\nomitted ipc and tests, so vcpkg installed wallet dependencies but not\ncapnproto. The build then failed with:\n  \"Cap'n Proto is required but was not found\"\n\nFix: extend VCPKG_MANIFEST_FEATURES to ipc;tests;wallet.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"
  }
 ],
 "timeline": [
  {
   "t": "2025-04-30T12:46:56Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "87432b6a4325e09a13c912d77b386daa3832b34d"
  },
  {
   "t": "2025-04-30T12:47:30Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Updated 9df5a838aa9c020adf8d024393749d75bd932ec2 -> 87432b6a4325e09a13c912d77b386daa3832b34d ([`pr/ipc-win.1`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.1) -> [`pr/ipc-win.2`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.2), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.1..pr/ipc-win.2)) fixing accidentally disabled tests"
  },
  {
   "t": "2025-04-30T13:47:17Z",
   "kind": "review",
   "who": "hebasto",
   "assoc": "MEMBER",
   "state": "COMMENTED",
   "commit": "87432b6a4325e09a13c912d77b386daa3832b34d",
   "text": "Concept ACK."
  },
  {
   "t": "2025-04-30T19:12:53Z",
   "kind": "comment",
   "who": "Sjors",
   "assoc": "MEMBER",
   "text": "I guess the easiest way to test this would be to combine it with:\n1. #31756 so I can bake a Widnows guix build instead of learning to compile on Windows; and\n2. #30437 to have something to test against"
  },
  {
   "t": "2025-04-30T21:04:37Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "0a35e21103b7fed6e46c809e9029446277b6f6ee"
  },
  {
   "t": "2025-04-30T21:24:25Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Updated 87432b6a4325e09a13c912d77b386daa3832b34d -> 0a35e21103b7fed6e46c809e9029446277b6f6ee ([`pr/ipc-win.2`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.2) -> [`pr/ipc-win.3`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.3), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.2..pr/ipc-win.3)) to fix test CI failure https://cirrus-ci.com/task/5583224107171840 due to bad std::optional access\nUpdated 0a35e21103b7fed6e46c809e9029446277b6f6ee -> 27328195136754babe8d8f5d99f4f0b6a5ab2e55 ([`pr/ipc-win.3`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.3) -> [`pr/ipc-win.4`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.4), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.3..pr/ipc-win.4)) to fix CI test failure https://cirrus-ci.com/task/5668412652781568 in rpc_misc.py echoipc call due to CLOEXEC flag\n\n---\n\nre: https://github.com/bitcoin/bitcoin/pull/32387#issuecomment-2843024844\n\nAgree changes in #31756 should make this easier to test (though I might be able to make a minimal change here to turn on multiprocess windows build).\n\nHaving #30437 or #32297 merged first would also make test coverage more meaningful because they both add functional tests for -ipcbind and -ipcconect options.\n\nIn general there is more work to do here and I hope other PRs can be merged before this one."
  },
  {
   "t": "2025-05-01T03:50:29Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "27328195136754babe8d8f5d99f4f0b6a5ab2e55"
  },
  {
   "t": "2025-05-02T21:07:23Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "f215e742045401ab386f0cd67d06b358558ecf89"
  },
  {
   "t": "2025-05-02T21:12:48Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Updated 27328195136754babe8d8f5d99f4f0b6a5ab2e55 -> f215e742045401ab386f0cd67d06b358558ecf89 ([`pr/ipc-win.4`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.4) -> [`pr/ipc-win.5`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.5), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.4..pr/ipc-win.5)) fixing many windows bugs.\n\nWith this update, IPC code is mostly working on windows: `mpexample` and `mptest` programs work, `test_bitcoin` IPC calls over socketpairs work, `bitcoin-node` `echoipc` command is able to create a subprocess and successfully make calls to it, and `bitcoin-node` `-ipcbind` option creates a unix socket file. Some problems remain:\n\n- This is a hang on shutdown that prevents child processes from exiting. You can kill them manually and everything works fine, but this problem needs to be debugged.\n- `bitcoin-mine -ipcconnect` seems unable to find the unix socket, failing with \"Error: The system cannot find the file specified\" even though the socket exists. Two `test_bitcoin` unix socket tests also give similar errors.\n- The `test_bitcoin` parse address tests fails because some checks are looking for / not \\ separators."
  },
  {
   "t": "2025-05-06T14:56:22Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "5f272b7cc3b72fe4a59f590825b68dc2c342baca"
  },
  {
   "t": "2025-05-06T15:09:53Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Updated f215e742045401ab386f0cd67d06b358558ecf89 -> 5f272b7cc3b72fe4a59f590825b68dc2c342baca ([`pr/ipc-win.5`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.5) -> [`pr/ipc-win.6`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.6), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.5..pr/ipc-win.6)) with more fixes.\n\nUpdated 5f272b7cc3b72fe4a59f590825b68dc2c342baca -> 13aef5ad7669e0302e27f96876615907dc98c3c3 ([`pr/ipc-win.6`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.6) -> [`pr/ipc-win.7`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.7), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.6..pr/ipc-win.7)) improving comments.\n\nWith the new fixes, IPC is fully working on windows: both creating child processes and communicating over socket pairs, and listening and making connections over unix sockets. (Latter currently requires adding a SetupNetworking call to bitcoin-mine in #30437). The code changes are also mostly straightforward and clean, although I want to split commits to make them easier to review.\n\nWill leave this PR in a draft state for now since other multiprocess PRs should have higher priority (see tracking issue https://github.com/bitcoin/bitcoin/issues/28722)\n\n--\n\nRebased 13aef5ad7669e0302e27f96876615907dc98c3c3 -> cbd06846803e800f23f4498e27f930e09d260000 ([`pr/ipc-win.7`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.7) -> [`pr/ipc-win.8`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.8), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.7-rebase..pr/ipc-win.8)) due to conflicts with #32345\n\nRebased cbd06846803e800f23f4498e27f930e09d260000 -> 3d0737720ae6bbd2c3eb4382e41fa49dd3d727d9 ([`pr/ipc-win.8`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.8) -> [`pr/ipc-win.9`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.9), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.8-rebase..pr/ipc-win.9)) due to conflicts with #33517\n\nRebased 3d0737720ae6bbd2c3eb4382e41fa49dd3d727d9 -> 24f5e883f20d0c65bc163dba0e3d8c2f031c63c7 ([`pr/ipc-win.9`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.9) -> [`pr/ipc-win.10`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.10), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.9-rebase..pr/ipc-win.10)) due to conflict with #33960\n\nRebased 24f5e883f20d0c65bc163dba0e3d8c2f031c63c7 -> ac0b14c567f40ed813f9bf2ebe316fcd8249ffbe ([`pr/ipc-win.10`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.10) -> [`pr/ipc-win.11`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.11), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.10-rebase..pr/ipc-win.11)) on top of https://github.com/bitcoin-core/libmultiprocess/pull/231 pr/win.3 and #35084 pr/ipc-wins.1\n\nUpdated ac0b14c567f40ed813f9bf2ebe316fcd8249ffbe -> 533b3460457c0f26727646677cccb303a4036c7e ([`pr/ipc-win.11`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.11) -> [`pr/ipc-win.12`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.12), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.11..pr/ipc-win.12)) to fix ci errors https://github.com/bitcoin/bitcoin/actions/runs/24465570509 vcpkg capnproto dependency error, ipc_test cmake include directory errors, lint subtree error\n\nUpdated 533b3460457c0f26727646677cccb303a4036c7e -> ec10ff7c9d9a82b5caee50e2d0d6b90a55fa8ea4 ([`pr/ipc-win.12`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.12) -> [`pr/ipc-win.13`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.13), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.12..pr/ipc-win.13)) to fix ci errors https://github.com/bitcoin/bitcoin/actions/runs/24539458137 in base prs: lint ipc_test.cpp boost test name error, and HasReason boost test include errors\n\nUpdated ec10ff7c9d9a82b5caee50e2d0d6b90a55fa8ea4 -> 23b1d507334c6e429ca87ad6af2b401313a5623b ([`pr/ipc-win.13`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.13) -> [`pr/ipc-win.14`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.14), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.13..pr/ipc-win.14)) to fix bitcoin core macos exception type error https://github.com/bitcoin/bitcoin/actions/runs/24542080405/job/71749864777?pr=32387\n\nUpdated 23b1d507334c6e429ca87ad6af2b401313a5623b -> 0211390861baa245ec77766f9a6f1d17ad441649 ([`pr/ipc-win.14`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.14) -> [`pr/ipc-win.15`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.15), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.14..pr/ipc-win.15)) to fix pthreads include error https://github.com/bitcoin/bitcoin/actions/runs/24543367909/job/71753783189?pr=32387 in native windows build and enable ipc in windows cross builds\n\nUpdated 0211390861baa245ec77766f9a6f1d17ad441649 -> cac16bb4859b6b2ec96063ea52d71d997643c87c ([`pr/ipc-win.15`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.15) -> [`pr/ipc-win.16`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.16), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.15..pr/ipc-win.16)) to fix CI errors https://github.com/bitcoin/bitcoin/actions/runs/24545738655/job/71762261393?pr=32387 bitcoin-gui RC file error and commit message formatting lint error, also adding mp::MakeStream method to simplify changes\n\nUpdated cac16bb4859b6b2ec96063ea52d71d997643c87c -> 6baabfe441da0a6430993d0e11d407a6416ece6f ([`pr/ipc-win.16`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.16) -> [`pr/ipc-win.17`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.17), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.16..pr/ipc-win.17)) to fix more RC file errors caused by build path problem in previous attempted fix https://github.com/bitcoin/bitcoin/actions/runs/24568789956/job/71836011315?pr=32387, which caused cross compiled windows builds to now fail as well as the native build. Also move previous fix for pthreads include error to a new commit also implementing a fix for a unistd include error in the msvc build. Also rearrange commits and add a whitespace fix to fix a lint error.\n\nUpdated 6baabfe441da0a6430993d0e11d407a6416ece6f -> d53bc6c783e7e91bc06f23140f8415eb48c9ab0b ([`pr/ipc-win.17`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.17) -> [`pr/ipc-win.18`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.18), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.17..pr/ipc-win.18)) to fix another msvc (non-mingw) posix error with execvp, and a wsasocket error https://github.com/bitcoin/bitcoin/actions/runs/24575486745/job/71859566530?pr=32387, also more cross-compiled test manifest rc errors\n\nUpdated d53bc6c783e7e91bc06f23140f8415eb48c9ab0b -> aa323482ccb40edf3b6bfed16d3e136257ca5d6e ([`pr/ipc-win.18`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.18) -> [`pr/ipc-win.19`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.19), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.18..pr/ipc-win.19)) to fix more ci errors https://github.com/bitcoin/bitcoin/actions/runs/24582112980/job/71882361998?pr=32387: MSVC errors dealing with std::variant (known compiler bug) and workaround for lack of fork in mpgen(). Also ipc_tests.cpp fix for incorrect closesocket call in test. Also added /k option to msvc build to try to get more complete lists of compiler errors\n\nUpdated aa323482ccb40edf3b6bfed16d3e136257ca5d6e -> 68bc7eeff2ffd44d79e8669fc8dc8b335ae18e7d ([`pr/ipc-win.19`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.19) -> [`pr/ipc-win.20`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.20), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.19..pr/ipc-win.20)) to fix error from /k flag https://github.com/bitcoin/bitcoin/actions/runs/24587189710/job/71899642665?pr=32387, also cleaning up internal commits and replacing confusing SpawnProcess overload\n\nUpdated 68bc7eeff2ffd44d79e8669fc8dc8b335ae18e7d -> 855cfb764d21e1b6f05c26d5cfadd0a2d165580d ([`pr/ipc-win.20`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.20) -> [`pr/ipc-win.21`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.21), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.20..pr/ipc-win.21)) reorganizing windows support comits and fixing ci errors: https://github.com/bitcoin/bitcoin/actions/runs/24589091659/job/71905779254?pr=32387 -Werror unused function warning in cross-compiled win32 job, and attempting to fix mpgen runtime error in visual studio ci job\n\nUpdated 855cfb764d21e1b6f05c26d5cfadd0a2d165580d -> 2573aff25d9f773249ecd790af3a232de6397f46 ([`pr/ipc-win.21`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.21) -> [`pr/ipc-win.22`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.22), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.21..pr/ipc-win.22)) fixing bitcoin.exe wrapper exiting after spawning subprocesses to fix functional tests failures in windows cross-compiled binaries test https://github.com/bitcoin/bitcoin/actions/runs/24686166591/job/72198932709?pr=32387 and also adding better `mpgen` exception handling to determine why Windows native VS job still fails on windows, since it is still just exiting with code -1073740791 (STATUS_FAIL_FAST_EXCEPTION)\n\nUpdated 2573aff25d9f773249ecd790af3a232de6397f46 -> 13de58e1b5ec29d0db22073faa3d5eee36a03616 ([`pr/ipc-win.22`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.22) -> [`pr/ipc-win.23`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.23), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.22..pr/ipc-win.23)) changing the way mpgen tool locates capnproto binaries to fix mpgen errors in https://github.com/bitcoin/bitcoin/actions/runs/24695410947/job/72226931947?pr=32387 and fixing the way socket error codes are translated to try to get better functional tests errors than \"error: timeout on transient error: The operation completed successfully\" in https://github.com/bitcoin/bitcoin/pull/32387"
  },
  {
   "t": "2025-05-06T15:37:10Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "13aef5ad7669e0302e27f96876615907dc98c3c3"
  },
  {
   "t": "2025-10-15T00:41:33Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "cbd06846803e800f23f4498e27f930e09d260000"
  },
  {
   "t": "2025-10-22T08:50:03Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "3d0737720ae6bbd2c3eb4382e41fa49dd3d727d9"
  },
  {
   "t": "2025-12-12T12:18:26Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "24f5e883f20d0c65bc163dba0e3d8c2f031c63c7"
  },
  {
   "t": "2026-04-15T16:18:59Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "ac0b14c567f40ed813f9bf2ebe316fcd8249ffbe"
  },
  {
   "t": "2026-04-16T23:31:38Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "533b3460457c0f26727646677cccb303a4036c7e"
  },
  {
   "t": "2026-04-17T00:56:31Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "ec10ff7c9d9a82b5caee50e2d0d6b90a55fa8ea4"
  },
  {
   "t": "2026-04-17T01:42:28Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "23b1d507334c6e429ca87ad6af2b401313a5623b"
  },
  {
   "t": "2026-04-17T03:12:01Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "0211390861baa245ec77766f9a6f1d17ad441649"
  },
  {
   "t": "2026-04-17T13:55:11Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "cac16bb4859b6b2ec96063ea52d71d997643c87c"
  },
  {
   "t": "2026-04-17T16:23:58Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "6baabfe441da0a6430993d0e11d407a6416ece6f"
  },
  {
   "t": "2026-04-17T19:05:56Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "d53bc6c783e7e91bc06f23140f8415eb48c9ab0b"
  },
  {
   "t": "2026-04-17T21:19:55Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "aa323482ccb40edf3b6bfed16d3e136257ca5d6e"
  },
  {
   "t": "2026-04-17T22:17:16Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "68bc7eeff2ffd44d79e8669fc8dc8b335ae18e7d"
  },
  {
   "t": "2026-04-20T19:30:58Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "855cfb764d21e1b6f05c26d5cfadd0a2d165580d"
  },
  {
   "t": "2026-04-20T23:21:02Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "2573aff25d9f773249ecd790af3a232de6397f46"
  },
  {
   "t": "2026-04-21T20:54:11Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "13de58e1b5ec29d0db22073faa3d5eee36a03616"
  },
  {
   "t": "2026-07-22T17:35:39Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "e99cb6170e6761f1678a7e8822fc7cd9a5606b2b"
  },
  {
   "t": "2026-07-22T17:38:14Z",
   "kind": "comment",
   "who": "ryanofsky",
   "assoc": "MEMBER",
   "text": "Rebased 13de58e1b5ec29d0db22073faa3d5eee36a03616 -> e99cb6170e6761f1678a7e8822fc7cd9a5606b2b ([`pr/ipc-win.23`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.23) -> [`pr/ipc-win.24`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.24), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.23-rebase..pr/ipc-win.24)) with many new fixes on top of base PRs https://github.com/bitcoin-core/libmultiprocess/pull/231,  https://github.com/bitcoin-core/libmultiprocess/pull/317,  https://github.com/bitcoin-core/libmultiprocess/pull/318, and #35084, also resolving conflicts with #35661 and #35684\n\nUpdated e99cb6170e6761f1678a7e8822fc7cd9a5606b2b -> aa2892e82a334b6d2998937ffab27c2a6fa889dc ([`pr/ipc-win.24`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.24) -> [`pr/ipc-win.25`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.25), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.24..pr/ipc-win.25)) rebasing onto latest master and fixing lint errors (trailing newline in type-unordered-set.h, commit message format) https://github.com/bitcoin/bitcoin/actions/runs/29943010623/job/89001345876\n\nRebased aa2892e82a334b6d2998937ffab27c2a6fa889dc -> 3177fbd5f2d553325f5414232d0be90aedec2aae ([`pr/ipc-win.25`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.25) -> [`pr/ipc-win.26`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.26), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.25-rebase..pr/ipc-win.26)) after #35084 to fix lint: duplicate #include <cerrno> in protocol.cpp https://github.com/bitcoin/bitcoin/actions/runs/29956699510/job/89047462559, also including upstream libmultiprocess updates\n\nUpdated 3177fbd5f2d553325f5414232d0be90aedec2aae -> 3a845a8be9060c6abd8bdeb2f08cb37e9371c7a9 ([`pr/ipc-win.26`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.26) -> [`pr/ipc-win.27`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.27), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.26..pr/ipc-win.27)) to fix Windows build: remove compatibility shim that unconditionally included sys/socket.h https://github.com/bitcoin/bitcoin/actions/runs/30702460336/job/91375771635\n\nUpdated 3a845a8be9060c6abd8bdeb2f08cb37e9371c7a9 -> 399c8820ce4b6847a0dc8e2e2c2cfe0b5b7b6fda ([`pr/ipc-win.27`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.27) -> [`pr/ipc-win.28`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.28), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.27..pr/ipc-win.28)) updating libmultiprocess base, restructuring commits and fixing various conflicts\n\nUpdated 01ac9a03b580fd8066bd18440984dfcb15958b17 -> d0863ee76db080b558df0d307d244318eb2c887c ([`pr/ipc-win.28`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.28) -> [`pr/ipc-win.29`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.29), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.28..pr/ipc-win.29)) to fix CI: suppress C++23 lambda attribute warnings on clang-17/MSVC, and fix unused error_fds on Windows builds https://github.com/bitcoin/bitcoin/actions/runs/31636108883/job/94246747032\n\nUpdated d0863ee76db080b558df0d307d244318eb2c887c -> 8f384c9f2499a5df8588100f563d0328cf51fd17 ([`pr/ipc-win.29`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.29) -> [`pr/ipc-win.30`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.30), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.29..pr/ipc-win.30)) to fix mptest connect_tests race: accept either disconnect error message https://github.com/bitcoin/bitcoin/actions/runs/31655880824/job/94310097285\n\nRebased 8f384c9f2499a5df8588100f563d0328cf51fd17 -> 62dd45984057326b410c0208a5a86fda8c0351a2 ([`pr/ipc-win.30`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.30) -> [`pr/ipc-win.31`](https://github.com/ryanofsky/bitcoin/commits/pr/ipc-win.31), [compare](https://github.com/ryanofsky/bitcoin/compare/pr/ipc-win.30-rebase..pr/ipc-win.31)) due to conflicts with #35084 and #35852"
  },
  {
   "t": "2026-07-22T20:48:59Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "aa2892e82a334b6d2998937ffab27c2a6fa889dc"
  },
  {
   "t": "2026-08-01T13:48:04Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "3177fbd5f2d553325f5414232d0be90aedec2aae"
  },
  {
   "t": "2026-08-01T14:26:22Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "3a845a8be9060c6abd8bdeb2f08cb37e9371c7a9"
  },
  {
   "t": "2026-08-04T23:12:28Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "399c8820ce47ddd16cc7f136ba98af59c8bcba5a"
  },
  {
   "t": "2026-08-12T20:08:00Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "01ac9a03b580fd8066bd18440984dfcb15958b17"
  },
  {
   "t": "2026-08-13T00:52:27Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "d0863ee76db080b558df0d307d244318eb2c887c"
  },
  {
   "t": "2026-08-13T02:10:05Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "8f384c9f2499a5df8588100f563d0328cf51fd17"
  },
  {
   "t": "2026-08-15T01:15:00Z",
   "kind": "force_push",
   "who": "ryanofsky",
   "commit": "62dd45984057326b410c0208a5a86fda8c0351a2"
  }
 ],
 "labels_log": [
  {
   "t": "2025-04-30T15:00:06Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2025-05-01T04:54:37Z",
   "action": "unlabeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2025-05-20T16:24:01Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-10-22T10:06:53Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-12-02T15:00:39Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-12-12T13:16:20Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2025-12-12T16:17:56Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2026-05-22T04:19:50Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-07-22T18:13:08Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-07-29T09:17:22Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-01T15:17:46Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-01T16:01:46Z",
   "action": "unlabeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-01T16:01:49Z",
   "action": "labeled",
   "label": "IPC",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-04T21:17:06Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-05T01:15:42Z",
   "action": "unlabeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-07T09:41:24Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-12T20:47:19Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-12T21:35:48Z",
   "action": "labeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-13T06:26:40Z",
   "action": "unlabeled",
   "label": "CI failed",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-14T17:54:58Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-08-15T02:50:33Z",
   "action": "unlabeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  },
  {
   "t": "2026-09-16T13:39:19Z",
   "action": "labeled",
   "label": "Needs rebase",
   "who": "DrahtBot"
  }
 ],
 "state_log": [
  {
   "t": "2025-10-22T08:50:12Z",
   "kind": "renamed",
   "who": "ryanofsky",
   "from": "[DRAFT] ipc: add windows support",
   "to": "ipc: add windows support"
  }
 ],
 "text_chars": 37007,
 "text_tokens_estimate": 9251,
 "changed_paths": [
  ".github/ci-windows-cross.py",
  ".github/ci-windows.py",
  "CMakeLists.txt",
  "_keep",
  "ci/test/00_setup_env_win64.sh",
  "ci/test/00_setup_env_win64_msvcrt.sh",
  "cmake/module/AddWindowsResources.cmake",
  "src/bitcoind-res.rc => cmake/windows-res.rc.in",
  "depends/Makefile",
  "depends/packages/capnp.mk",
  "src/CMakeLists.txt",
  "src/bitcoin-cli-res.rc",
  "src/bitcoin-res.rc",
  "src/bitcoin-tx-res.rc",
  "src/bitcoin-util-res.rc",
  "src/bitcoin-wallet-res.rc",
  "src/bitcoin.cpp",
  "src/ipc/capnp/protocol.cpp",
  "src/ipc/interfaces.cpp",
  "src/ipc/libmultiprocess/.github/workflows/bitcoin-core-ci.yml",
  "src/ipc/libmultiprocess/.github/workflows/ci.yml",
  "src/ipc/libmultiprocess/CMakeLists.txt",
  "src/ipc/libmultiprocess/ci/README.md",
  "src/ipc/libmultiprocess/ci/configs/default.bash",
  "src/ipc/libmultiprocess/ci/configs/freebsd.bash",
  "src/ipc/libmultiprocess/ci/configs/llvm.bash",
  "src/ipc/libmultiprocess/ci/configs/macos.bash",
  "src/ipc/libmultiprocess/ci/configs/netbsd.bash",
  "src/ipc/libmultiprocess/ci/configs/olddeps.bash",
  "src/ipc/libmultiprocess/ci/configs/openbsd.bash",
  "src/ipc/libmultiprocess/ci/configs/sanitize.bash",
  "src/ipc/libmultiprocess/ci/configs/windows.bash",
  "src/ipc/libmultiprocess/ci/scripts/ci.sh",
  "src/ipc/libmultiprocess/cmake/TargetCapnpSources.cmake",
  "src/ipc/libmultiprocess/cmake/compat_config.cmake",
  "src/ipc/libmultiprocess/cmake/pthread_checks.cmake",
  "src/ipc/libmultiprocess/doc/design.md",
  "src/ipc/libmultiprocess/doc/usage.md",
  "src/ipc/libmultiprocess/doc/versions.md",
  "src/ipc/libmultiprocess/example/calculator.cpp",
  "src/ipc/libmultiprocess/example/example.cpp",
  "src/ipc/libmultiprocess/example/printer.cpp",
  "src/ipc/libmultiprocess/include/mp/config.h.in",
  "src/ipc/libmultiprocess/include/mp/proxy-io.h",
  "src/ipc/libmultiprocess/include/mp/proxy-types.h",
  "src/ipc/libmultiprocess/include/mp/proxy.h",
  "src/ipc/libmultiprocess/include/mp/type-char.h",
  "src/ipc/libmultiprocess/include/mp/type-chrono.h",
  "src/ipc/libmultiprocess/include/mp/type-context.h",
  "src/ipc/libmultiprocess/include/mp/type-data.h",
  "src/ipc/libmultiprocess/include/mp/type-function.h",
  "src/ipc/libmultiprocess/include/mp/type-interface.h",
  "src/ipc/libmultiprocess/include/mp/type-number.h",
  "src/ipc/libmultiprocess/include/mp/type-string.h",
  "src/ipc/libmultiprocess/include/mp/type-struct.h",
  "src/ipc/libmultiprocess/include/mp/type-threadmap.h",
  "src/ipc/libmultiprocess/include/mp/type-unordered-set.h",
  "src/ipc/libmultiprocess/include/mp/util.h",
  "src/ipc/libmultiprocess/include/mp/version.h",
  "src/ipc/libmultiprocess/shell.nix",
  "src/ipc/libmultiprocess/src/mp/gen.cpp",
  "src/ipc/libmultiprocess/src/mp/proxy.cpp",
  "src/ipc/libmultiprocess/src/mp/util.cpp",
  "src/ipc/libmultiprocess/test/CMakeLists.txt",
  "src/ipc/libmultiprocess/test/mp/test/common.h",
  "src/ipc/libmultiprocess/test/mp/test/connect_tests.cpp",
  "src/ipc/libmultiprocess/test/mp/test/foo-types.h",
  "src/ipc/libmultiprocess/test/mp/test/foo.capnp",
  "src/ipc/libmultiprocess/test/mp/test/foo.h",
  "src/ipc/libmultiprocess/test/mp/test/listen_tests.cpp",
  "src/ipc/libmultiprocess/test/mp/test/socketlistener.h",
  "src/ipc/libmultiprocess/test/mp/test/spawn_tests.cpp",
  "src/ipc/libmultiprocess/test/mp/test/test.cpp",
  "src/ipc/libmultiprocess/test/mp/test/util_tests.cpp",
  "src/ipc/process.cpp",
  "src/ipc/process.h",
  "src/ipc/test/fuzz/ipc.cpp",
  "src/ipc/test/ipc_tests.cpp",
  "src/ipc/util.h",
  "src/qt/CMakeLists.txt",
  "src/qt/res/bitcoin-qt-res.rc",
  "src/util/exec.cpp",
  "src/util/fs.h",
  "test/functional/interface_ipc_cli.py",
  "test/functional/interface_ipc_mining.py",
  "test/functional/test_framework/ipc_util.py",
  "test/functional/test_framework/test_node.py",
  "test/functional/tool_bitcoin.py",
  "test/lint/test_runner/src/util.rs",
  "vcpkg.json"
 ],
 "files": [
  {
   "path": ".github/ci-windows-cross.py",
   "add": 1,
   "del": 1
  },
  {
   "path": ".github/ci-windows.py",
   "add": 4,
   "del": 2
  },
  {
   "path": "CMakeLists.txt",
   "add": 15,
   "del": 1
  },
  {
   "path": "_keep",
   "add": 0,
   "del": 0
  },
  {
   "path": "ci/test/00_setup_env_win64.sh",
   "add": 0,
   "del": 1
  },
  {
   "path": "ci/test/00_setup_env_win64_msvcrt.sh",
   "add": 0,
   "del": 1
  },
  {
   "path": "cmake/module/AddWindowsResources.cmake",
   "add": 32,
   "del": 0
  },
  {
   "path": "src/bitcoind-res.rc => cmake/windows-res.rc.in",
   "add": 6,
   "del": 6
  },
  {
   "path": "depends/Makefile",
   "add": 1,
   "del": 2
  },
  {
   "path": "depends/packages/capnp.mk",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/CMakeLists.txt",
   "add": 11,
   "del": 25
  },
  {
   "path": "src/bitcoin-cli-res.rc",
   "add": 0,
   "del": 33
  },
  {
   "path": "src/bitcoin-res.rc",
   "add": 0,
   "del": 33
  },
  {
   "path": "src/bitcoin-tx-res.rc",
   "add": 0,
   "del": 33
  },
  {
   "path": "src/bitcoin-util-res.rc",
   "add": 0,
   "del": 33
  },
  {
   "path": "src/bitcoin-wallet-res.rc",
   "add": 0,
   "del": 33
  },
  {
   "path": "src/bitcoin.cpp",
   "add": 12,
   "del": 1
  },
  {
   "path": "src/ipc/capnp/protocol.cpp",
   "add": 10,
   "del": 3
  },
  {
   "path": "src/ipc/interfaces.cpp",
   "add": 21,
   "del": 1
  },
  {
   "path": "src/ipc/libmultiprocess/.github/workflows/bitcoin-core-ci.yml",
   "add": 3,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/.github/workflows/ci.yml",
   "add": 14,
   "del": 8
  },
  {
   "path": "src/ipc/libmultiprocess/CMakeLists.txt",
   "add": 14,
   "del": 5
  },
  {
   "path": "src/ipc/libmultiprocess/ci/README.md",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/ci/configs/default.bash",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/ipc/libmultiprocess/ci/configs/freebsd.bash",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/ipc/libmultiprocess/ci/configs/llvm.bash",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/ipc/libmultiprocess/ci/configs/macos.bash",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/ipc/libmultiprocess/ci/configs/netbsd.bash",
   "add": 1,
   "del": 7
  },
  {
   "path": "src/ipc/libmultiprocess/ci/configs/olddeps.bash",
   "add": 4,
   "del": 1
  },
  {
   "path": "src/ipc/libmultiprocess/ci/configs/openbsd.bash",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/ipc/libmultiprocess/ci/configs/sanitize.bash",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/ipc/libmultiprocess/ci/configs/windows.bash",
   "add": 21,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/ci/scripts/ci.sh",
   "add": 53,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/cmake/TargetCapnpSources.cmake",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/ipc/libmultiprocess/cmake/compat_config.cmake",
   "add": 0,
   "del": 42
  },
  {
   "path": "src/ipc/libmultiprocess/cmake/pthread_checks.cmake",
   "add": 8,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/doc/design.md",
   "add": 2,
   "del": 2
  },
  {
   "path": "src/ipc/libmultiprocess/doc/usage.md",
   "add": 6,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/doc/versions.md",
   "add": 8,
   "del": 2
  },
  {
   "path": "src/ipc/libmultiprocess/example/calculator.cpp",
   "add": 4,
   "del": 9
  },
  {
   "path": "src/ipc/libmultiprocess/example/example.cpp",
   "add": 8,
   "del": 5
  },
  {
   "path": "src/ipc/libmultiprocess/example/printer.cpp",
   "add": 4,
   "del": 9
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/config.h.in",
   "add": 1,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/proxy-io.h",
   "add": 119,
   "del": 32
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/proxy-types.h",
   "add": 9,
   "del": 9
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/proxy.h",
   "add": 8,
   "del": 6
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/type-char.h",
   "add": 9,
   "del": 3
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/type-chrono.h",
   "add": 25,
   "del": 2
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/type-context.h",
   "add": 3,
   "del": 3
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/type-data.h",
   "add": 2,
   "del": 3
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/type-function.h",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/type-interface.h",
   "add": 10,
   "del": 10
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/type-number.h",
   "add": 24,
   "del": 15
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/type-string.h",
   "add": 3,
   "del": 1
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/type-struct.h",
   "add": 12,
   "del": 12
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/type-threadmap.h",
   "add": 4,
   "del": 4
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/type-unordered-set.h",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/util.h",
   "add": 95,
   "del": 16
  },
  {
   "path": "src/ipc/libmultiprocess/include/mp/version.h",
   "add": 1,
   "del": 1
  },
  {
   "path": "src/ipc/libmultiprocess/shell.nix",
   "add": 86,
   "del": 11
  },
  {
   "path": "src/ipc/libmultiprocess/src/mp/gen.cpp",
   "add": 38,
   "del": 41
  },
  {
   "path": "src/ipc/libmultiprocess/src/mp/proxy.cpp",
   "add": 158,
   "del": 36
  },
  {
   "path": "src/ipc/libmultiprocess/src/mp/util.cpp",
   "add": 416,
   "del": 37
  },
  {
   "path": "src/ipc/libmultiprocess/test/CMakeLists.txt",
   "add": 2,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/test/mp/test/common.h",
   "add": 27,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/test/mp/test/connect_tests.cpp",
   "add": 214,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/test/mp/test/foo-types.h",
   "add": 2,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/test/mp/test/foo.capnp",
   "add": 5,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/test/mp/test/foo.h",
   "add": 6,
   "del": 1
  },
  {
   "path": "src/ipc/libmultiprocess/test/mp/test/listen_tests.cpp",
   "add": 49,
   "del": 80
  },
  {
   "path": "src/ipc/libmultiprocess/test/mp/test/socketlistener.h",
   "add": 157,
   "del": 0
  },
  {
   "path": "src/ipc/libmultiprocess/test/mp/test/spawn_tests.cpp",
   "add": 75,
   "del": 10
  },
  {
   "path": "src/ipc/libmultiprocess/test/mp/test/test.cpp",
   "add": 77,
   "del": 3
  },
  {
   "path": "src/ipc/libmultiprocess/test/mp/test/util_tests.cpp",
   "add": 112,
   "del": 0
  },
  {
   "path": "src/ipc/process.cpp",
   "add": 35,
   "del": 9
  },
  {
   "path": "src/ipc/process.h",
   "add": 0,
   "del": 3
  },
  {
   "path": "src/ipc/test/fuzz/ipc.cpp",
   "add": 0,
   "del": 1
  },
  {
   "path": "src/ipc/test/ipc_tests.cpp",
   "add": 17,
   "del": 1
  },
  {
   "path": "src/ipc/util.h",
   "add": 0,
   "del": 54
  },
  {
   "path": "src/qt/CMakeLists.txt",
   "add": 4,
   "del": 3
  },
  {
   "path": "src/qt/res/bitcoin-qt-res.rc",
   "add": 0,
   "del": 40
  },
  {
   "path": "src/util/exec.cpp",
   "add": 7,
   "del": 1
  },
  {
   "path": "src/util/fs.h",
   "add": 5,
   "del": 0
  },
  {
   "path": "test/functional/interface_ipc_cli.py",
   "add": 32,
   "del": 1
  },
  {
   "path": "test/functional/interface_ipc_mining.py",
   "add": 6,
   "del": 2
  },
  {
   "path": "test/functional/test_framework/ipc_util.py",
   "add": 126,
   "del": 1
  },
  {
   "path": "test/functional/test_framework/test_node.py",
   "add": 8,
   "del": 0
  },
  {
   "path": "test/functional/tool_bitcoin.py",
   "add": 1,
   "del": 14
  },
  {
   "path": "test/lint/test_runner/src/util.rs",
   "add": 3,
   "del": 1
  },
  {
   "path": "vcpkg.json",
   "add": 7,
   "del": 0
  }
 ],
 "test_lines": 197,
 "git": {
  "head": "62dd45984057326b410c0208a5a86fda8c0351a2",
  "head_matches_backup": true,
  "base": "683e05a265c86fee6075ccd81828b19e0d8e131a",
  "commits": [
   {
    "sha": "e1936b8a19",
    "subject": "sync with libmultiprocess master",
    "files": 53,
    "add": 1180,
    "del": 407
   },
   {
    "sha": "8c7741686a",
    "subject": "lint: Skip subtree check for src/ipc/libmultiprocess",
    "files": 3,
    "add": 5,
    "del": 3
   },
   {
    "sha": "3fc753b010",
    "subject": "ipc: remove compatibility shim after libmultiprocess update",
    "files": 2,
    "add": 0,
    "del": 55
   },
   {
    "sha": "c0db1533bc",
    "subject": "util: Improve SpawnProcess API and documentation",
    "files": 4,
    "add": 22,
    "del": 22
   },
   {
    "sha": "9ce64ad735",
    "subject": "util, test: Add CloseSocket, use SocketId",
    "files": 4,
    "add": 21,
    "del": 15
   },
   {
    "sha": "892f5d9711",
    "subject": "util, test: Replace UnixListener with SocketListener",
    "files": 4,
    "add": 110,
    "del": 88
   },
   {
    "sha": "6bfb137d43",
    "subject": "util, test: guard Unix-only code for Windows build",
    "files": 3,
    "add": 30,
    "del": 12
   },
   {
    "sha": "b9e4f3d0e6",
    "subject": "util: Add Windows CommandLineFromArgv escaping function",
    "files": 4,
    "add": 170,
    "del": 0
   },
   {
    "sha": "bc7abc586e",
    "subject": "util: Add Windows support",
    "files": 3,
    "add": 154,
    "del": 4
   },
   {
    "sha": "df65470848",
    "subject": "util: Fix Windows SpawnProcess hang when child exits before connecting to named pipe",
    "files": 2,
    "add": 77,
    "del": 6
   },
   {
    "sha": "a382d824dd",
    "subject": "util: make pthreads optional on Windows to enable MSVC builds",
    "files": 2,
    "add": 8,
    "del": 2
   },
   {
    "sha": "d75d06d1f5",
    "subject": "test: Add TCP SocketListener and Windows compat to socketlistener.h",
    "files": 1,
    "add": 54,
    "del": 3
   },
   {
    "sha": "d5a9945873",
    "subject": "ci: add Windows cross-compilation config using MinGW and Wine",
    "files": 5,
    "add": 155,
    "del": 7
   },
   {
    "sha": "4e9cf615db",
    "subject": "workaround: MinGW thread_local use-after-free in ThreadContext",
    "files": 2,
    "add": 83,
    "del": 10
   },
   {
    "sha": "4c515ac73f",
    "subject": "ipc: Windows + ENABLE_IPC build fixes",
    "files": 3,
    "add": 14,
    "del": 6
   },
   {
    "sha": "8e47ce5c63",
    "subject": "ipc: Fix MSVC build error C3861 in ipc_tests.cpp",
    "files": 1,
    "add": 13,
    "del": 1
   },
   {
    "sha": "13f8b779be",
    "subject": "ipc: Fix windows socket error formatting",
    "files": 2,
    "add": 18,
    "del": 9
   },
   {
    "sha": "a276f29872",
    "subject": "ipc: Fix Windows connect() error for missing Unix socket path",
    "files": 2,
    "add": 19,
    "del": 0
   },
   {
    "sha": "5c4fdfaef9",
    "subject": "ipc: Work around MinGW system_category() not mapping WSAECONNREFUSED",
    "files": 1,
    "add": 21,
    "del": 1
   },
   {
    "sha": "b66a6dceaa",
    "subject": "ipc: Skip MAX_DOUBLE static_assert on MSVC to fix C2131",
    "files": 1,
    "add": 4,
    "del": 0
   },
   {
    "sha": "e76d83bd1e",
    "subject": "util: Fix ExecVp on Windows to wait for child process and return exit code",
    "files": 2,
    "add": 8,
    "del": 2
   },
   {
    "sha": "1bb9ee9649",
    "subject": "bitcoin: Fix IPC child process exec on Windows due to missing .exe extension",
    "files": 1,
    "add": 11,
    "del": 0
   },
   {
    "sha": "a09413f767",
    "subject": "test: Enable tool_bitcoin.py test on Windows",
    "files": 1,
    "add": 1,
    "del": 14
   },
   {
    "sha": "3b08458514",
    "subject": "test: Add Windows AF_UNIX asyncio support to ipc_util.py",
    "files": 3,
    "add": 140,
    "del": 3
   },
   {
    "sha": "aec9866be4",
    "subject": "test: Fix interface_ipc_cli.py error assertions on Windows",
    "files": 1,
    "add": 32,
    "del": 1
   },
   {
    "sha": "114efb2e00",
    "subject": "cmake: Add add_windows_exe_resources() for Windows exe manifest/version",
    "files": 10,
    "add": 53,
    "del": 239
   },
   {
    "sha": "145489c7f0",
    "subject": "ipc: enable by default in windows builds",
    "files": 2,
    "add": 2,
    "del": 3
   },
   {
    "sha": "0e53b3a120",
    "subject": "ci: Enable IPC in Windows cross-compiled CI jobs",
    "files": 3,
    "add": 1,
    "del": 3
   },
   {
    "sha": "95750767c2",
    "subject": "ci: Install capnproto via vcpkg and pycapnp for Windows IPC support",
    "files": 2,
    "add": 8,
    "del": 1
   },
   {
    "sha": "62dd459840",
    "subject": "ci: Add missing ipc and tests vcpkg features to Windows fuzz build",
    "files": 1,
    "add": 3,
    "del": 1
   }
  ],
  "patch_truncated": true
 },
 "input_hash": "19006f4b1d5fe0d5",
 "extracted_at": "2026-09-17T16:15:31+00:00"
}