Skip to content

backport: Merge bitcoin#30017, 29910, 29849, 29865 - #7257

Merged
knst merged 4 commits into
dashpay:developfrom
vijaydasmp:Apr_2026_3
Oct 2, 2026
Merged

knst merged 4 commits into
dashpay:developfrom
vijaydasmp:Apr_2026_3

Conversation

@vijaydasmp

Copy link
Copy Markdown

bitcoin backport

@github-actions

github-actions Bot commented Mar 26, 2026 •

Copy link
Copy Markdown

⚠️ Potential Merge Conflicts Detected

This PR has potential conflicts with the following open PRs:

Please coordinate with the authors of these PRs to avoid merge conflicts.

@vijaydasmp
vijaydasmp force-pushed the Apr_2026_3 branch 8 times, most recently from a8df81b to 3673fe0 Compare April 3, 2026 14:10
@vijaydasmp vijaydasmp changed the title backport: Merge bitcoin#30170, 30026, 30017, 29961, 29904, 29910, 29849, 29820 backport: Merge bitcoin#30170, 30026, 30017, 29961, 29904, 29910, 29849 Apr 3, 2026
@vijaydasmp
vijaydasmp marked this pull request as ready for review April 9, 2026 14:36
@thepastaclaw

thepastaclaw commented Apr 9, 2026 •

Copy link
Copy Markdown
Collaborator

✅ Final review complete — no blockers (commit ab3501f) · triage: normal

@coderabbitai

coderabbitai Bot commented Apr 9, 2026 •

Copy link
Copy Markdown

Review Change StackReview Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

The subprocess header now uses a project-specific include guard and system error formatting. It removes deferred startup, shell, environment, working-directory, descriptor, session, and pre-execution options. POSIX execution calls execvp directly, while Windows execution inherits the parent environment. Internal header references use util/subprocess.h. Fuzz allocation shifts now use size_t operands.

Priority: ➖ Normal

Estimated code review effort: 4 (Complex) | ~45 minutes

Merge Risk: 🟠 High · up to c6e66

The simplified subprocess header still references a removed field, which breaks the build on Linux/macOS when external signer support is enabled. This needs to be fixed before merge.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 30.30% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 33 functions across 11 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title identifies the change as a Bitcoin backport that merges multiple upstream changes. This matches the pull request objectives and the summarized changeset.
Description check ✅ Passed The description states that this is a Bitcoin backport. This is brief but directly related to the changeset.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (2)
src/test/fuzz/poolresource.cpp (1)

68-68: Optional: Consider size_t{1} instead of 1U for consistency.

For complete consistency with the other changes in this line, you could replace - 1U with - size_t{1}. This is purely a style preference and doesn't affect correctness, as 1U will be promoted to size_t during the subtraction.

✨ Optional consistency fix
-        size_t size = m_provider.ConsumeIntegralInRange<size_t>(size_t{1} << size_bits, (size_t{1} << (size_bits + 1)) - 1U) << alignment_bits;
+        size_t size = m_provider.ConsumeIntegralInRange<size_t>(size_t{1} << size_bits, (size_t{1} << (size_bits + 1)) - size_t{1}) << alignment_bits;
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/test/fuzz/poolresource.cpp` at line 68, Replace the literal unsigned int
used in the upper bound with a size_t brace-init for consistency: in the call to
m_provider.ConsumeIntegralInRange<size_t> change the upper bound expression from
((size_t{1} << (size_bits + 1)) - 1U) to ((size_t{1} << (size_bits + 1)) -
size_t{1}) so both operands are size_t; this edit is in the expression passed to
m_provider.ConsumeIntegralInRange<size_t>.
src/test/validation_chainstate_tests.cpp (1)

112-119: Replace Assert(...) with BOOST_REQUIRE for test-scoped failure handling.

In test code, Assert(...) calls abort() and terminates the entire test process immediately. Using BOOST_REQUIRE/BOOST_REQUIRE_MESSAGE instead aborts only the current test case, allowing other test cases in the suite to continue—critical for test-run completeness. This also aligns with the project's requirement that unit tests in src/test/ use Boost::Test.

Suggested refactor
-    CChainState& background_cs{*Assert([&]() -> CChainState* {
+    CChainState* background_cs_ptr{[&]() -> CChainState* {
         for (CChainState* cs : chainman.GetAll()) {
             if (cs != &chainman.ActiveChainstate()) {
                 return cs;
             }
         }
         return nullptr;
-    }())};
+    }()};
+    BOOST_REQUIRE_MESSAGE(background_cs_ptr != nullptr, "Background chainstate not found");
+    CChainState& background_cs{*background_cs_ptr};
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/test/validation_chainstate_tests.cpp` around lines 112 - 119, The test
uses Assert(...) which aborts the whole process; replace it with Boost checks:
iterate over chainman.GetAll() to find the non-active CChainState* (same logic
as the lambda), store it in a CChainState* variable, then use
BOOST_REQUIRE_MESSAGE(found != nullptr, "background chainstate not found") to
fail only this test if null; finally bind CChainState& background_cs to *found
(preserving the original variable name background_cs and using
chainman.ActiveChainstate() to identify the active one).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@src/test/fuzz/poolresource.cpp`:
- Line 68: Replace the literal unsigned int used in the upper bound with a
size_t brace-init for consistency: in the call to
m_provider.ConsumeIntegralInRange<size_t> change the upper bound expression from
((size_t{1} << (size_bits + 1)) - 1U) to ((size_t{1} << (size_bits + 1)) -
size_t{1}) so both operands are size_t; this edit is in the expression passed to
m_provider.ConsumeIntegralInRange<size_t>.

In `@src/test/validation_chainstate_tests.cpp`:
- Around line 112-119: The test uses Assert(...) which aborts the whole process;
replace it with Boost checks: iterate over chainman.GetAll() to find the
non-active CChainState* (same logic as the lambda), store it in a CChainState*
variable, then use BOOST_REQUIRE_MESSAGE(found != nullptr, "background
chainstate not found") to fail only this test if null; finally bind CChainState&
background_cs to *found (preserving the original variable name background_cs and
using chainman.ActiveChainstate() to identify the active one).

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: bf1c9f39-4bdd-4412-b32b-ce4ffdc697a7

📥 Commits

Reviewing files that changed from the base of the PR and between 31c8464 and 9fb5593d467374770847be704149ad3cfbdac7f9.

📒 Files selected for processing (21)
  • configure.ac
  • src/Makefile.am
  • src/Makefile.test.include
  • src/bitcoin-cli.cpp
  • src/bitcoin-wallet.cpp
  • src/bitcoind.cpp
  • src/common/run_command.cpp
  • src/common/url.cpp
  • src/common/url.h
  • src/qt/main.cpp
  • src/test/common_url_tests.cpp
  • src/test/fuzz/poolresource.cpp
  • src/test/fuzz/string.cpp
  • src/test/system_tests.cpp
  • src/test/util/setup_common.cpp
  • src/test/validation_chainstate_tests.cpp
  • src/txorphanage.cpp
  • src/txorphanage.h
  • src/util/subprocess.h
  • src/wallet/rpc/util.cpp
  • test/lint/lint-spelling.py
💤 Files with no reviewable changes (6)
  • src/bitcoin-wallet.cpp
  • src/qt/main.cpp
  • src/test/util/setup_common.cpp
  • src/bitcoin-cli.cpp
  • src/bitcoind.cpp
  • configure.ac

@thepastaclaw thepastaclaw left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

I verified the exact patch scope for PR #7257 against the checked-out source at 9fb5593d467374770847be704149ad3cfbdac7f9. The successful agent section (codex-general) reported no findings, and direct inspection of the touched URL decoding, orphanage time-type cleanup, and subprocess header rename did not reveal a concrete correctness, Dash-specific interaction, or build-integration issue within this diff.

Reviewed commit: 9fb5593d

Comment thread src/Makefile.am Outdated
@@ -921,6 +921,7 @@ libbitcoin_common_a_SOURCES = \
coins.cpp \
common/bloom.cpp \
common/run_command.cpp \
common/url.cpp \

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

consider to do bitcoin#29967 to addition for bitcoin#29904

Comment thread src/util/subprocess.h
throw OSError("TerminateProcess", 0);
}
#else
if (session_leader_) killpg(child_pid_, sig_num);

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i'd suggest to do bitcoin#29865 before 29961

@knst knst left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good for me overall; but bitcoin#29865 should be included to this PR too

Comment thread src/util/subprocess.h Outdated
@@ -160,11 +160,11 @@ class OSError: public std::runtime_error

//Environment Variable types
#ifndef _MSC_VER
using env_string_t = std::string;
using env_char_t = char;
using env_string_t = std::string;

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

replace Adddressing linter errors for using tabs instead of spaces by backporting bitcoin#29865 which just removes most of this code ; to prevent conflicts in the future

@thepastaclaw thepastaclaw left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

Backport bundle (bitcoin#29849, bitcoin#29904, bitcoin#29910, bitcoin#29961, bitcoin#30017, bitcoin#30026, bitcoin#30170) is clean overall; merge resolutions are faithful and Dash-specific subsystems are untouched. One real gap: the bitcoin#29961 cherry-pick left behind the now-dead param_pack/has_type template metaprogram in src/util/subprocess.h that upstream deleted alongside check_output. Non-blocking, but worth fixing to keep the file aligned with upstream and remove the lingering check_ouput/ouput typos that bitcoin#29849 implicitly relied on being gone.

Reviewed commit: 9fb5593d

🟡 1 suggestion(s)

1 additional finding

🟡 suggestion: Incomplete backport of bitcoin#29961: dead `param_pack`/`has_type` metaprogram remains

src/util/subprocess.h (lines 947-975)

Upstream bitcoin#29961 removed four pieces of dead code from subprocess.hpp: (1) util::is_ready, (2) Buffer's #if 0 copy/move debug ctors, (3) Popen::kill and its docstring entries, and (4) the param_pack / has_type<> template metaprogram in namespace detail. The Dash backport (commit 4518a34698) applied (1)-(3) but left (4) untouched at src/util/subprocess.h:947-975.

These templates existed solely to support compile-time validation of check_output / ArgumentDeducer / OptionDeducer — all of which the same upstream PR removed. There are no remaining users in the file. The cherry-pick is therefore semantically incomplete.

Leaving the block in place also preserves the misspellings check_ouput / ouput (lines 952-953), which partially defeats the purpose of bitcoin#29849 dropping subprocess.h from the codespell exclude list — a future spelling-lint run can surface them. Removing this block aligns Dash with upstream after bitcoin#29961 and removes the typo footgun in one shot.

🤖 Prompt for all review comments with AI agents
These findings are from an automated code review. Verify each finding against the current code and only fix it if needed.

In `src/util/subprocess.h`:
- [SUGGESTION] lines 947-975: Incomplete backport of bitcoin#29961: dead `param_pack`/`has_type` metaprogram remains
  Upstream bitcoin#29961 removed four pieces of dead code from `subprocess.hpp`: (1) `util::is_ready`, (2) `Buffer`'s `#if 0` copy/move debug ctors, (3) `Popen::kill` and its docstring entries, and (4) the `param_pack` / `has_type<>` template metaprogram in `namespace detail`. The Dash backport (commit 4518a34698) applied (1)-(3) but left (4) untouched at `src/util/subprocess.h:947-975`.

These templates existed solely to support compile-time validation of `check_output` / `ArgumentDeducer` / `OptionDeducer` — all of which the same upstream PR removed. There are no remaining users in the file. The cherry-pick is therefore semantically incomplete.

Leaving the block in place also preserves the misspellings `check_ouput` / `ouput` (lines 952-953), which partially defeats the purpose of bitcoin#29849 dropping `subprocess.h` from the codespell exclude list — a future spelling-lint run can surface them. Removing this block aligns Dash with upstream after #29961 and removes the typo footgun in one shot.

@vijaydasmp
vijaydasmp requested review from knst and thepastaclaw June 21, 2026 13:45
@vijaydasmp
vijaydasmp marked this pull request as draft June 21, 2026 13:49
@vijaydasmp vijaydasmp changed the title backport: Merge bitcoin#30170, 30026, 30017, 29961, 29904, 29910, 29849 backport: Merge bitcoin#30170, 30026, 30017, 29961, 29904, 29910, 29849, 29865 Jun 21, 2026
@github-actions

Copy link
Copy Markdown

This pull request has conflicts, please rebase.

@thepastaclaw thepastaclaw removed the pastaclaw:commented thepastaclaw's latest review was comment-only label Sep 12, 2026

@thepastaclaw thepastaclaw left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Final validation — Phase 2 only (queue backlog)

Verified the Phase-2 findings against head 141c76d and the local upstream merge diffs. Two non-blocking backport-completeness issues remain: the title still advertises the absent bitcoin#29961 cleanup, and the bitcoin#29865 option removals leave three obsolete API documentation references. The previous orphanage prerequisite finding no longer applies, and the reported POSIX kill compilation issue is absent at this head; git diff --check passed, but no build or runtime tests were run.

🟡 1 suggestion(s) | 💬 1 nitpick(s)

1 finding(s) not shown inline (the lines are not part of this PR's diff)

🟡 Suggestion: Incomplete bitcoin#29961: unused templates and obsolete API comment remain
src/util/subprocess.h:728-759

The PR title still advertises bitcoin#29961, but its cleanup is absent from the final tree. Upstream merge 81174d8 removes util::is_ready, param_pack/has_type, disabled Buffer constructors, the commented-out Popen destructor, and Popen::kill, and updates the related API comments. These remain at HEAD, including the templates and check_ouput references here. Adding bitcoin#29865 addresses the requested ordering but does not implement bitcoin#29961. Apply the remaining cleanup, or remove bitcoin#29961 from the title and explicitly defer it. This is a scope/completeness issue, not a demonstrated build blocker.

source: gpt-6-astra (phase2-reviewer: backport-reviewer)

Review provenance

Source: reviewer 1: gpt-6-astra (agent: phase2-reviewer, role: general); reviewer 2: gpt-6-astra (agent: phase2-reviewer, role: backport-reviewer); reviewer 3: gpt-6-astra (agent: phase2-reviewer, role: dash-core-commit-history); final verifier: gpt-6-astra (agent: astra-verifier, role: final-verifier)

  • Triage: low by gpt-6-astra (effort low) — The diff is a contained removal of unused subprocess options plus header renaming, typo fixes, and an explicit 64-bit fuzz-test shift, without changes to critical surfaces.
  • Phase 1 reviewers: not run (skipped for throughput: 15 PRs queued, above the 10 limit)
  • Fresh verifier: gpt-6-astra — final-verifier; agent astra-verifier
  • Phase 2 reviewers: gpt-6-astra — general (completed, effort medium); agent phase2-reviewer, gpt-6-astra — backport-reviewer (completed, effort medium); agent phase2-reviewer, gpt-6-astra — dash-core-commit-history (completed, effort medium); agent phase2-reviewer
🤖 Prompt for all review comments with AI agents
These findings are from an automated code review. Verify each finding against the current code and only fix it if needed.

In `src/util/subprocess.h`:
- [SUGGESTION] src/util/subprocess.h:728-759: Incomplete bitcoin#29961: unused templates and obsolete API comment remain
  The PR title still advertises bitcoin#29961, but its cleanup is absent from the final tree. Upstream merge 81174d8a9b8060b35341d88d3b54c08d9f2bb079 removes util::is_ready, param_pack/has_type, disabled Buffer constructors, the commented-out Popen destructor, and Popen::kill, and updates the related API comments. These remain at HEAD, including the templates and check_ouput references here. Adding #29865 addresses the requested ordering but does not implement #29961. Apply the remaining cleanup, or remove #29961 from the title and explicitly defer it. This is a scope/completeness issue, not a demonstrated build blocker.
- [NITPICK] src/util/subprocess.h:969-970: Omitted bitcoin#29865 documentation removals advertise deleted options
  This PR removes cwd, defer_spawn, and start_process(), but the Popen documentation still advertises them: both constructor examples at lines 951 and 953 contain cwd{..}, and these lines describe start_process() with defer_spawn. Upstream #29865 removes all three references alongside the APIs. Apply those comment changes so the header no longer directs readers to options and methods that cannot compile.
Out-of-scope follow-up suggestions (1)

These are valid observations, but they are outside this PR's scope and should be handled in separate issues or author/maintainer-requested PRs rather than blocking this review.

Comment thread src/util/subprocess.h Outdated
Comment on lines 969 to 970
*13. start_process() - Start the child process. Only to be used when
* `defer_spawn` option was provided in Popen constructor.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💬 Nitpick: Omitted bitcoin#29865 documentation removals advertise deleted options

This PR removes cwd, defer_spawn, and start_process(), but the Popen documentation still advertises them: both constructor examples at lines 951 and 953 contain cwd{..}, and these lines describe start_process() with defer_spawn. Upstream bitcoin#29865 removes all three references alongside the APIs. Apply those comment changes so the header no longer directs readers to options and methods that cannot compile.

source: gpt-6-astra (phase2-reviewer: backport-reviewer)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Resolved (re-reviewed at ab3501f6): The subprocess documentation now lists only the retained API and no longer advertises the removed cwd, start_process, or defer_spawn options.

@thepastaclaw thepastaclaw added the pastaclaw:commented thepastaclaw's latest review was comment-only label Sep 12, 2026
@vijaydasmp vijaydasmp changed the title backport: Merge bitcoin#30026, 30017, 29961, 29910, 29849, 29865 backport: Merge bitcoin#30017, 29910, 29849, 29865 Sep 12, 2026
@vijaydasmp
vijaydasmp marked this pull request as draft September 12, 2026 17:53
@vijaydasmp
vijaydasmp marked this pull request as ready for review September 12, 2026 18:37
@thepastaclaw thepastaclaw removed the pastaclaw:commented thepastaclaw's latest review was comment-only label Sep 12, 2026
@github-actions

Copy link
Copy Markdown

This pull request has conflicts, please rebase.

13f5391 Fix typos in `subprocess.hpp` (Hennadii Stepanov)

Pull request description:

  Resolves one item in the bitcoin#28981 (review):
  >    - Remove linter exclusions and fix all issues.

  Based on upstream arun11299/cpp-subprocess#101.

ACKs for top commit:
  fanquake:
    ACK 13f5391

Tree-SHA512: 2ee27a5b7d1ba6f47a5148add155c918eadaaffb94a4b5dd3edea00e63440b87291c559361bf25a8db1567debff78cf7e9466dc34f14331ca1d426994837df93
…header name conventions

08f756b Replace locale-dependent `std::strerror` with `SysErrorString` (Hennadii Stepanov)
d8e4ba4 refactor: Rename `subprocess.hpp` to follow our header name conventions (Hennadii Stepanov)

Pull request description:

  This PR renames the header `*.hpp` --> `*.h` and adjusts the header guard name, which makes it available for processing by linters.

  Fixed the following linter warning:
  ```
  The locale dependent function strerror(...) appears to be used:
  src/util/subprocess.h:    std::runtime_error( err_msg + ": " + std::strerror(err_code) )

  Unnecessary locale dependence can cause bugs that are very tricky to isolate and fix. Please avoid using locale-dependent functions if possible.

  Advice not applicable in this specific case? Add an exception by updating the ignore list in /bitcoin/test/lint/lint-locale-dependence.py
  ^---- failure generated from lint-locale-dependence.py
  ```

ACKs for top commit:
  TheCharlatan:
    ACK 08f756b

Tree-SHA512: 57a2f01c20eb9552481e428a4969bd59e9ada9f784fe1a45cb62aa9c9152c8e950d336854f45af0e2e5dc7c7b2a1fb216c8f832e3d6ccfb457ad71b6e423231e
b50d127 refactor: Make 64-bit shift explicit (Hennadii Stepanov)

Pull request description:

  This PR fixes MSVC warning [C4334](https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-3-c4334) in the fuzzing code. Similar to bitcoin#26252.

  All `DisableSpecificWarnings` dropped from `fuzz.vcxproj` as all remained are inherited from `common.init.vcxproj`.

  Required to simplify warning suppression porting to the CMake-based build system.

ACKs for top commit:
  maflcko:
    utACK b50d127
  sipsorcery:
    utACK b50d127

Tree-SHA512: 18f6082b4234506ad2f9df54e577031b97cdf9f7ef64cad4162f275660716ab73587a97d3af0f778dfd48d2751d8676b5d3381d0aa837fcc60a09704473a9209
@chatgpt-codex-connector

Copy link
Copy Markdown

Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits.
Repo admins can enable using credits for code reviews in their settings.

13adbf7 remove unneeded environment option from cpp-subprocess (Sebastian Falbesoner)
2088777 remove unneeded cwd option from cpp-subprocess (Sebastian Falbesoner)
03ffb09 remove unneeded bufsize option from cpp-subprocess (Sebastian Falbesoner)
79c3036 remove unneeded close_fds option from cpp-subprocess (Sebastian Falbesoner)
62db8f8 remove unneeded session_leader option from cpp-subprocess (Sebastian Falbesoner)
80d008c remove unneeded defer_spawn option from cpp-subprocess (Sebastian Falbesoner)
cececad remove unneeded preexec function option from cpp-subprocess (Sebastian Falbesoner)
633e45b remove unneeded shell option from cpp-subprocess (Sebastian Falbesoner)

Pull request description:

  The newly introduced cpp-subprocess library provides a good number of options for the `Popen` class:
  https://github.com/bitcoin/bitcoin/blob/0de63b8b46eff5cda85b4950062703324ba65a80/src/util/subprocess.hpp#L1009-L1020
  Some of them are either not fully implemented (`shell`, missing an implementation on Windows), implemented in an ugly way (e.g. using "Impoverished, meager, needy, truly needy version of type erasure" for `preexec_func` according to the author's own words) or simply unlikely to be ever needed for our external signer use-case (`defer_spawn`). Instead of maintaining incomplete and/or unneeded code, I'd suggest to get rid of it and only keep support for options if there is a strong reason for it.

ACKs for top commit:
  achow101:
    ACK 13adbf7
  hebasto:
    re-ACK 13adbf7.

Tree-SHA512: 8270da27891cb659da2ef6062a23f4b86331859b15ac27b79ae7433b14f5bd7efaba621f2b3ba1953708d0f38377a8bd23ef1cc0f28b9c152ac8958dd9eec6b0
@chatgpt-codex-connector

Copy link
Copy Markdown

Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits.
Repo admins can enable using credits for code reviews in their settings.

@thepastaclaw thepastaclaw left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-review — Final validation — Phase 1 + Phase 2

The four advertised Bitcoin Core backports are consistently applied: the subprocess header rename and option removals update all affected references, the POSIX kill path remains valid, and the explicit fuzz shifts preserve the intended size_t arithmetic. The remaining unused templates and stale comments belong to bitcoin#29961, which is not part of this PR's stated scope; no actionable in-scope issues were found.

🔴 0 blocking | 🟡 0 suggestion(s) | 💬 0 nitpick(s)

Review provenance

Source: reviewer 1: muse-spark-1.3-contributor (agent: phase1-reviewer, role: general); reviewer 2: gpt-6.1-sol (agent: phase2-reviewer, role: general); reviewer 3: gpt-6.1-sol (agent: phase2-reviewer, role: backport-reviewer); reviewer 4: gpt-6.1-sol (agent: phase2-reviewer, role: dash-core-commit-history); reviewer 5: gpt-6.1-sol (agent: phase2-reviewer, role: general); reviewer 6: gpt-6.1-sol (agent: phase2-reviewer, role: backport-reviewer); reviewer 7: gpt-6.1-sol (agent: phase2-reviewer, role: dash-core-commit-history); final verifier: gpt-6.1-sol (agent: sol-verifier, role: final-verifier)

  • Triage: normal by gpt-6.1-sol (effort low) — This is a broad subprocess API and behavior backport removing hundreds of lines and changing process-launch semantics across platforms, but it does not directly modify consensus, funds, cryptography, networking deserialization, or storage migration code.
  • Phase 1 reviewers: muse-spark-1.3-contributor — general (completed, effort xhigh); agent phase1-reviewer
  • Phase 1 model: muse-spark-1.3-contributor — not quota-gated; passed over gemini-3.8-flash-high (antigravity below 15% reserve: weekly 84% left, 5h 6% left), glm-5.3-flash (not used above high effort; tier asks max)
  • Fresh final gate: an independent Phase-2 review ran after iterative findings were reconciled
  • Fresh verifier: gpt-6.1-sol — final-verifier; agent sol-verifier
  • Phase 2 reviewers: gpt-6.1-sol — general (completed, effort high); agent phase2-reviewer, gpt-6.1-sol — backport-reviewer (completed, effort high); agent phase2-reviewer, gpt-6.1-sol — dash-core-commit-history (completed, effort high); agent phase2-reviewer, gpt-6.1-sol — general (completed, effort high); agent phase2-reviewer, gpt-6.1-sol — backport-reviewer (completed, effort high); agent phase2-reviewer, gpt-6.1-sol — dash-core-commit-history (completed, effort high); agent phase2-reviewer
🤖 Prompt for all review comments with AI agents
These findings are from an automated code review. Verify the current code and confirm that no unresolved issues remain.

No unresolved findings remain from the prior review on this head.

@thepastaclaw thepastaclaw added the pastaclaw:approved thepastaclaw's latest review approved this PR label Oct 1, 2026
@vijaydasmp

Copy link
Copy Markdown
Author

Hello @knst @PastaPastaPasta please approve

@knst knst left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

utACK ab3501f

@knst
knst merged commit 5074bea into dashpay:develop Oct 2, 2026
50 checks passed
@thepastaclaw thepastaclaw removed the pastaclaw:approved thepastaclaw's latest review approved this PR label Oct 2, 2026
@UdjinM6 UdjinM6 added this to the 24.1 milestone Oct 6, 2026
PastaPastaPasta added a commit that referenced this pull request Oct 7, 2026
fbe6526 Merge #7807: feat(consensus): hold EvoNode shares and multiple payouts behind a new evo_shares deployment (pasta)
57fd2d9 Merge #7776: fix: keep a pending ProUpServTx across a registrar update that keeps the operator key (pasta)
ca69801 Merge #7803: fix: return non-zero amount of accounts after sethdseed (pasta)
57a8f07 Merge #7796: backport: bitcoin#26720 (remaining), partial bitcoin#29523: weight-check the knapsack exact-match selection (pasta)
4eb82f6 Merge #7786: fix(net): keep a dedicated onion listener when -bind is given and correct the bind release note (pasta)
70626a0 Merge #7793: backport: partial bitcoin#28868 (wallet: reload wallet if migration exited early, keep mixed watchonly txs) (pasta)
250a3cd Merge #7790: fix: guard cached governance object flags with the object lock (pasta)
700c195 Merge #7787: fix: only sign EHF signals inside the deployment's start/timeout window (pasta)
a3b0f3c Merge #7785: fix: restore the txindex requirement when governance validation is enabled (pasta)
2d1735d Merge #7794: fix(wallet): floor the denomination gap threshold so rebalancing cannot oscillate (pasta)
d9f6592 Merge #7783: fix: stop fish completion from re-running the typed dash-cli command (pasta)
89d44c8 Merge #7795: backport: bitcoin#34272, partial bitcoin#31650 (pass PSBT by const reference in PSBTInputSignedAndVerified) (pasta)
a1d7411 Merge #7779: fix!: report legacy evonode Platform addresses when listdiff changes its address (pasta)
73f6ea2 Merge #7789: fix(qt): report malformed lang/font settings instead of aborting at startup (pasta)
40de493 Merge #7781: fix(rpc): use a consistent tip height in quorum dkgstatus (pasta)
7d1a90d Merge #7791: fix(net): request object votes from nPeersPerHashMax peers (pasta)
51b145c Merge #7778: test: use single-member in functional tests: feature_mnehf, feature_notifications, p2p_instantsend (pasta)

Pull request description:

  ## Issue being fixed or feature implemented

  Backports for v24.0.0-rc.3. `v24.0.x` was cut at the v24.0.0-rc.2 tag (1e239d4), and develop has since moved to 24.1.0 (#7775), so rc.3 is built from this branch instead of being tagged on develop like rc.1 and rc.2.

  ## What was done?

  Cherry-picked (`git cherry-pick -m1 -x`) every develop merge since rc.2 that carries `backport-candidate-24.0.x`, plus #7778, which #7807's test needs. They are in develop merge order:

  - #7778 test: use single-member in functional tests: feature_mnehf, feature_notifications, p2p_instantsend (test-only. Needed because #7807's `feature_evo_shares_activation.py` depends on its `mine_quorum_single_member()` fix and fails without it.)
  - #7791 fix(net): request object votes from nPeersPerHashMax peers
  - #7781 fix(rpc): use a consistent tip height in quorum dkgstatus
  - #7789 fix(qt): report malformed lang/font settings instead of aborting at startup
  - #7779 fix!: report legacy evonode Platform addresses when listdiff changes its address
  - #7795 backport: bitcoin#34272, partial bitcoin#31650 (pass PSBT by const reference in PSBTInputSignedAndVerified)
  - #7783 fix: stop fish completion from re-running the typed dash-cli command
  - #7794 fix(wallet): floor the denomination gap threshold so rebalancing cannot oscillate
  - #7785 fix: restore the txindex requirement when governance validation is enabled
  - #7787 fix: only sign EHF signals inside the deployment's start/timeout window
  - #7790 fix: guard cached governance object flags with the object lock
  - #7793 backport: partial bitcoin#28868 (wallet: reload wallet if migration exited early, keep mixed watchonly txs)
  - #7786 fix(net): keep a dedicated onion listener when -bind is given and correct the bind release note. Includes partial bitcoin#36170 (5f40d56). Upstream's dedicated-onion-bind changes to `feature_torcontrol.py` and `p2p_private_broadcast.py` are not included, because those tests depend on upstream commits (5693833, e74d54e) that Dash does not have.
  - #7796 backport: bitcoin#26720 (remaining), partial bitcoin#29523: weight-check the knapsack exact-match selection
  - #7803 fix: return non-zero amount of accounts after sethdseed
  - #7776 fix: keep a pending ProUpServTx across a registrar update that keeps the operator key
  - #7807 feat(consensus): hold EvoNode shares and multiple payouts behind a new evo_shares deployment

  One pick needed conflict resolution, in a test only, described in its commit message: #7793, `test/functional/wallet_migration.py`. `test_conflict_txs()` comes from bitcoin#28542 (#7762), which is not on this branch, so it is left out. The C++ part of #7793 is identical to develop.

  Merged since rc.2 but intentionally not included: #7775 (24.1 version bump), #7260 and #7804 (new Qt feature and its CI fix), #7584 (refactor), routine upstream backports #7257, #7759, #7762, #7768, #7788, #7801, and test/CI-only changes #7777 and #7797.

  No version change is needed. `configure.ac` is already 24.0.0 with `CLIENT_VERSION_IS_RELEASE` false, so the build takes its version string from the `v24.0.0-rc.3` tag, as it did for rc.2.

  ## How Has This Been Tested?

  Built on macOS arm64 against depends with `--enable-debug --enable-werror` (dashd, dash-qt, tests).

  - `make check`: all unit test suites pass, including `test_dash-qt`.
  - Functional tests, all passing: `feature_evo_shares_activation.py`, `feature_masternode_shares.py`, `feature_mnehf.py`, `feature_governance.py --descriptors`, `feature_governance_objects.py`, `feature_governance_txindex_devnet.py`, `feature_proxy.py`, `feature_notifications.py`, `feature_llmq_connections.py`, `feature_llmq_chainlocks_automatic.py`, `feature_llmq_singlenode.py`, `p2p_instantsend.py`, `rpc_blockchain.py` (v1 and v2 transport), `rpc_netinfo.py`, `rpc_quorum.py`, `rpc_verifychainlock.py`, `wallet_hd.py` (legacy and descriptors), `wallet_migration.py`.
  - `feature_bind_extra.py` (from #7786) only runs on Linux and was skipped locally, so CI covers it.

  Every touched file was diffed against develop. The remaining differences come only from develop PRs that are not part of this backport.

  ## Breaking Changes

  Carried over from the picked PRs:

  - #7807: consensus change behind the new `evo_shares` deployment (bit 14). Mainnet and testnet are unaffected until it activates. Devnets with `v24` already active and an EvoNode carrying several owner payouts need to check or reset. New RPC `protx shared_register_prepare_evo`.
  - #7785: outside regtest, a node with `-txindex=0` and without `-disablegovernance` refuses to start again, as before v23.1.0.
  - #7786: carries a partial bitcoin#36170. A node started with `-bind` but no specific `-bind=<addr:port>=onion` now refuses to start while `-listenonion` is enabled. That is the default when listening, even without Tor configured. A wildcard onion bind is also refused. Such nodes need `-bind=127.0.0.1:<port>=onion` or `-listenonion=0`. Nodes without `-bind`, including those using only `-whitebind`, keep the default `127.0.0.1:9996` (`19996` testnet) onion target. See `doc/release-notes-7300.md`.
  - #7779: `protx listdiff` now includes `platform_p2p` and `platform_https` for a legacy-address evonode whose core P2P address changes.

  ## Checklist:
  - [x] I have performed a self-review of my own code
  - [ ] I have made corresponding changes to the documentation
  - [ ] I have assigned this pull request to a milestone

  🤖 Generated with [Claude Code](https://claude.com/claude-code)

Top commit has no ACKs.

Tree-SHA512: 8cb01bdb0234f31b5dd2c105b69673de148922991a7523627395c0e0ccfa22b94be5ffbecc842398d443bc90fd9baf2eee6a9cf6fcdbbd1626eb00b93726a55a
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants