{
 "number": 36539,
 "input_hash": "76a4325d95505f86",
 "model": "ledger",
 "prompt_hash": null,
 "created": "2026-10-28T01:22:49+00:00",
 "result": {
  "summary": "Switches PSBTs created by the GUI for unsigned sends and watch-only fee bumping back to PSBTv0. External signer flows explicitly retain PSBTv2, and the PartiallySignedTransaction constructor default version argument is removed to require explicit version specification at call sites.",
  "problem": "Bitcoin Core 32.0 started defaulting newly created PSBTs to PSBTv2. Many third-party wallet tools and signing hardware used with watch-only GUI wallets only support PSBTv0, causing clipboard-exported unsigned transactions to be rejected.",
  "card": "Switches PSBT generation in the GUI back to version 0 for watch-only sends and fee bumps, while keeping PSBTv2 for external signer flows and removing the default version parameter from the PartiallySignedTransaction constructor. This addresses issue #36518, where exporting PSBTv2 transactions from the GUI broke compatibility with external software and hardware signers that only parse PSBTv0. A release note is added documenting the minimum HWI version (2.1.0) needed for external signers.",
  "evidence": [
   "Fixes #36518 (reported in description: 'This fixes: https://github.com/bitcoin/bitcoin/issues/36518')",
   "Commit 23dcb03a2c notes: 'PSBTv2 is not very interesting for current GUI users, and defaulting to it causes issues for existing users.'"
  ],
  "scope_notes": "Small diff across GUI, wallet feebumper, and tests, accompanied by a release note documenting external signer PSBTv2 requirements (HWI >= 2.1.0).",
  "changed_since_previous": "External signer PSBT creation is explicitly set to version 2 rather than version 0, and a release note documenting the HWI 2.1.0 minimum version requirement was added.",
  "thread": {
   "last_event_at": "2026-10-27T19:59:51Z",
   "events": 14,
   "head_sha": "3fdc45d1fa2a6f32f251aa6f639a52bbfd5245b0",
   "schema_floor": 2,
   "schema": 2
  },
  "waiting_on": [
   {
    "at": null,
    "id": "",
    "on": "nothing",
    "url": null,
    "what": "no pending reviews or author action needed"
   }
  ],
  "risk": {
   "level": "medium",
   "touches": [
    "gui",
    "wallet"
   ],
   "why": "Mistakes in PSBT serialization version selection or construction could break transaction signing workflows for watch-only or external signer users."
  },
  "discussion": {
   "author_status": "last statement processed 2026-10-27",
   "open_concerns": [],
   "resolved_concerns": [
    "achow101: Adding GUI elements and new translation strings is inappropriate for a PR intended for backporting; GUI should just default to v0 without adding new UI controls. (fixed by davidgumberg 2026-10-18)",
    "Sjors: Add a release note mentioning that RPC can be used for v2 if the GUI is restricted to v0. (fixed by davidgumberg 2026-10-26)",
    "Sjors: Consistently use PSBT v2 for external signers from both GUI and RPC. (fixed by davidgumberg 2026-10-26)",
    "w0xlt: Add a psbt_version parameter to feebumper::SignTransaction/signBumpTransaction so the GUI fee bump can pass v0 while RPC retains v2. (fixed by davidgumberg 2026-10-26)"
   ]
  },
  "reviewability": {
   "state": "Ready",
   "label": "Ready",
   "reason": "Nothing known that would invalidate a review now."
  },
  "agreement": {
   "state": "Positive",
   "summary": "Positive: support without stated reasons, no open objection (Sjors, w0xlt)",
   "reason": "Sjors and w0xlt both ACKed the PR. hebasto restarted cancelled CI jobs.",
   "evidence": [
    "Sjors: ACK",
    "w0xlt: ACK"
   ],
   "objections": [
    {
     "reviewer": "achow101",
     "association": "MEMBER",
     "type": "objection",
     "kind": "scope",
     "harm": "Adding GUI elements and new translation strings is inappropriate for a PR intended for backporting; GUI should just default to v0 without adding new UI controls.",
     "request": "",
     "question": "",
     "text": "Adding GUI elements and new translation strings is inappropriate for a PR intended for backporting; GUI should just default to v0 without adding new UI controls.",
     "clears_with": "change",
     "blocking": true,
     "status": "fixed",
     "status_note": "author pushed to make GUI return v0 PSBTs without new UI controls",
     "cleared": true,
     "author_replied": true,
     "others_replied": false,
     "fix_pushed": true,
     "replies": [
      "c:6256342443"
     ],
     "evidence": "2026-10-16: 'I don't think we should be adding any GUI elements for a PR targeting a backport, particularly as it adds strings for translation. We can do v0 only in the GUI I guess.'",
     "url": "https://github.com/bitcoin/bitcoin/pull/36539#issuecomment-6205749329",
     "id": "c:6205749329",
     "at": "2026-10-16",
     "status_at": "2026-10-18",
     "status_by": "davidgumberg",
     "resolution_evidence": "2026-10-18: davidgumberg: 'I've pushed so that the GUI just returns v0 PSBT's.'",
     "pin": null,
     "from_schema": 2
    },
    {
     "reviewer": "Sjors",
     "association": "MEMBER",
     "type": "suggestion",
     "kind": "maintenance",
     "harm": "",
     "request": "Add a release note mentioning that RPC can be used for v2 if the GUI is restricted to v0.",
     "question": "",
     "text": "Add a release note mentioning that RPC can be used for v2 if the GUI is restricted to v0.",
     "clears_with": "answer",
     "blocking": false,
     "status": "fixed",
     "status_note": "author added a release note",
     "cleared": true,
     "author_replied": true,
     "others_replied": false,
     "fix_pushed": true,
     "replies": [
      "c:6421305322"
     ],
     "evidence": "2026-10-17: 'There could be a (release) note to use the RPC for v2 when needed.'",
     "url": "https://github.com/bitcoin/bitcoin/pull/36539#issuecomment-6231604993",
     "id": "c:6231604993",
     "at": "2026-10-17",
     "status_at": "2026-10-26",
     "status_by": "davidgumberg",
     "resolution_evidence": "2026-10-26: davidgumberg: 'so I've added a release note about that.'",
     "pin": null,
     "from_schema": 2
    },
    {
     "reviewer": "Sjors",
     "association": "MEMBER",
     "type": "suggestion",
     "kind": "approach",
     "harm": "",
     "request": "Consistently use PSBT v2 for external signers from both GUI and RPC.",
     "question": "",
     "text": "Consistently use PSBT v2 for external signers from both GUI and RPC.",
     "clears_with": "answer",
     "blocking": false,
     "status": "fixed",
     "status_note": "author modified external signer PSBTs to use v2",
     "cleared": true,
     "author_replied": true,
     "others_replied": false,
     "fix_pushed": true,
     "replies": [
      "c:6421305322"
     ],
     "evidence": "2026-10-20: 'I think it's better to consistently use v2 for external signers, both from the GUI and RPC.'",
     "url": "https://github.com/bitcoin/bitcoin/pull/36539#issuecomment-6282081305",
     "id": "c:6282081305",
     "at": "2026-10-20",
     "status_at": "2026-10-26",
     "status_by": "davidgumberg",
     "resolution_evidence": "2026-10-26: davidgumberg: 'I've modified this so that the external signer PSBT's are v2'",
     "pin": null,
     "from_schema": 2
    },
    {
     "reviewer": "w0xlt",
     "association": "CONTRIBUTOR",
     "type": "suggestion",
     "kind": "approach",
     "harm": "",
     "request": "Add a psbt_version parameter to feebumper::SignTransaction/signBumpTransaction so the GUI fee bump can pass v0 while RPC retains v2.",
     "question": "",
     "text": "Add a psbt_version parameter to feebumper::SignTransaction/signBumpTransaction so the GUI fee bump can pass v0 while RPC retains v2.",
     "clears_with": "answer",
     "blocking": false,
     "status": "fixed",
     "status_note": "author adopted the suggested change",
     "cleared": true,
     "author_replied": true,
     "others_replied": false,
     "fix_pushed": true,
     "replies": [
      "rc:4379746946"
     ],
     "evidence": "2026-10-20: 'Suggestion: a psbt_version param can be added to feebumper::SignTransaction/signBumpTransaction, with the GUI passing 0 and RPC keeping 2.'",
     "url": "https://github.com/bitcoin/bitcoin/pull/36539#issuecomment-6296730894",
     "id": "c:6296730894",
     "at": "2026-10-20",
     "status_at": "2026-10-26",
     "status_by": "davidgumberg",
     "resolution_evidence": "2026-10-26: davidgumberg: 'Taken, thanks'",
     "pin": null,
     "from_schema": 2
    }
   ],
   "support": [
    {
     "reviewer": "Sjors",
     "reason": "",
     "substantive": false,
     "verdict": "ACK",
     "id": "c:6441810241",
     "url": "https://github.com/bitcoin/bitcoin/pull/36539#issuecomment-6441810241",
     "at": "2026-10-27",
     "association": "MEMBER",
     "evidence": "none",
     "areas": []
    },
    {
     "reviewer": "w0xlt",
     "reason": "",
     "substantive": false,
     "verdict": "ACK",
     "id": "r:5673480077",
     "url": "https://github.com/bitcoin/bitcoin/pull/36539#pullrequestreview-5673480077",
     "at": "2026-10-27",
     "association": "CONTRIBUTOR",
     "evidence": "none",
     "areas": []
    }
   ],
   "participants": [
    {
     "login": "achow101",
     "stance": "objection",
     "note": "objected to adding GUI elements and translation strings in a PR intended for backporting",
     "association": "MEMBER",
     "comments": 1,
     "first": "2026-10-16",
     "last": "2026-10-16"
    },
    {
     "login": "fanquake",
     "stance": "neutral",
     "note": "pinged another reviewer and set the milestone to 32.1",
     "association": "MEMBER",
     "comments": 2,
     "first": "2026-10-16",
     "last": "2026-10-21"
    },
    {
     "login": "Sjors",
     "stance": "support",
     "note": "ACKed the PR",
     "association": "MEMBER",
     "comments": 4,
     "first": "2026-10-17",
     "last": "2026-10-27"
    },
    {
     "login": "w0xlt",
     "stance": "support",
     "note": "crACKed the PR",
     "association": "CONTRIBUTOR",
     "comments": 2,
     "first": "2026-10-20",
     "last": "2026-10-27"
    },
    {
     "login": "hebasto",
     "stance": "neutral",
     "note": "re-ran cancelled CI jobs",
     "association": "MEMBER",
     "comments": 1,
     "first": "2026-10-27",
     "last": "2026-10-27"
    }
   ],
   "derivation": "support without stated reasons, no open objection (Sjors, w0xlt)",
   "model_state": null,
   "corrections": [],
   "notes": "Sjors and w0xlt both ACKed the PR. hebasto restarted cancelled CI jobs."
  },
  "dependencies": {
   "depends_on": [],
   "enables": []
  },
  "categories": [
   {
    "name": "docs",
    "member": false,
    "evidence": "Touches doc/release-notes-hwi-minver.md solely to document the code changes in this PR.",
    "band": "Unranked",
    "reason_tag": "cleanup",
    "score": 0.0,
    "factors": {
     "bug_severity": 2,
     "leverage": 0,
     "performance": 0,
     "security_stability": 0,
     "user_value": 2
    },
    "rationale": "Documentation updates that merely follow from code changes do not constitute membership in docs."
   },
   {
    "name": "tests",
    "member": false,
    "evidence": "Touches src/test/psbt_tests.cpp and src/test/fuzz/psbt.cpp only to adapt existing tests to PSBT constructor signature changes.",
    "band": "Unranked",
    "reason_tag": "test coverage",
    "score": 0.0,
    "factors": {
     "bug_severity": 2,
     "leverage": 0,
     "performance": 0,
     "security_stability": 0,
     "user_value": 2
    },
    "rationale": "Edits update area-specific tests following a wallet interface change rather than altering test infrastructure machinery."
   },
   {
    "name": "wallet",
    "member": true,
    "evidence": "Modifies PSBT generation logic in src/wallet/feebumper.cpp, src/psbt.h, and GUI wallet controllers.",
    "band": "P2",
    "reason_tag": "bug fix",
    "score": 0.65,
    "factors": {
     "bug_severity": 2,
     "leverage": 0,
     "performance": 0,
     "security_stability": 0,
     "user_value": 2
    },
    "rationale": "Fixes an interoperability regression introduced in 32.0 where defaulting GUI unsigned transactions to PSBTv2 caused third-party wallet tools and hardware signers to reject them (#36518)."
   }
  ],
  "confidence": "high",
  "uncertainties": [],
  "needs": []
 },
 "cost_usd": 0.0,
 "source": {
  "record": "2026-10-28T01:22:49+00:00",
  "code": "2026-10-28T01:25:10+00:00",
  "judgments": 3
 }
}