{
 "number": 36352,
 "input_hash": "f459e0fe5377668d",
 "model": "ledger",
 "prompt_hash": null,
 "created": "2026-10-04T01:18:39+00:00",
 "result": {
  "summary": "Clears Taproot and MuSig2 signatures and nonces when joining PSBTs via PartiallySignedTransaction::AddInput. Previously, adding inputs to a joined v0 PSBT dropped legacy and Segwit v0 signatures but left Taproot key-path signatures, script-path signatures, and MuSig2 fields intact. Clearing these fields ensures stale signatures are stripped so subsequent signing steps can generate valid signatures for the new transaction.",
  "problem": "When combining PSBTs with joinpsbts, previous signatures are invalidated because the transaction inputs and outputs change. For Taproot inputs, stale key-path signatures were left in place; because SignTaproot skips signing when a key-path signature is already present, walletprocesspsbt and finalizepsbt fail to complete the joined transaction, requiring manual PSBT editing to recover.",
  "card": "Clears Taproot signatures and MuSig2 nonces and partial signatures when joining PSBTs in PartiallySignedTransaction::AddInput. Because joinpsbts constructs a new transaction, pre-existing signatures are invalidated, but stale Taproot signatures were previously retained, causing SignTaproot to skip signing and leaving joined P2TR PSBTs unable to be signed or finalized without manual edits. The PR adds missing field clears for v0 PSBTs and includes functional test coverage verifying that joined Taproot PSBTs can be completed.",
  "evidence": [
   "PR description: 'a bech32m (P2TR) input: taproot_key_path_sig is still there after the join, and walletprocesspsbt / finalizepsbt return complete: false... the only way out is editing the PSBT by hand.'",
   "rpc_psbt.py functional test reproduces the failure on master and verifies that joined Taproot inputs can be successfully signed and completed after the fix."
  ],
  "scope_notes": "",
  "changed_since_previous": "The code and test logic are unchanged across patch versions; the update is an administrative rebase.",
  "thread": {
   "last_event_at": "2026-10-03T11:01:06Z",
   "events": 3,
   "head_sha": "4efa6b7d70e36afac66d5eb6a2fa05f683becdba",
   "schema_floor": 2,
   "schema": 2
  },
  "waiting_on": [
   {
    "at": "2026-10-03",
    "id": "c:5968518553",
    "on": "nothing",
    "url": "https://github.com/bitcoin/bitcoin/pull/36352#issuecomment-5968518553",
    "what": "no pending items; reviewer accepted fix and reACKed"
   }
  ],
  "risk": {
   "level": "low",
   "touches": [
    "rpc_api",
    "wallet"
   ],
   "why": "A mistake could discard valid input fields or fail to properly clear stale signatures during joinpsbts, affecting users combining partially signed transactions."
  },
  "discussion": {
   "author_status": "last statement processed 2026-10-03",
   "open_concerns": [],
   "resolved_concerns": [
    "fametrano: Add script path signatures, MuSig2 pubnonces, and MuSig2 partial sigs to the test input before joining and assert all four are dropped, so deleting any clear line causes a test failure (accepted by fametrano 2026-10-03)"
   ]
  },
  "reviewability": {
   "state": "Ready",
   "label": "Ready",
   "reason": "Nothing known that would invalidate a review now."
  },
  "agreement": {
   "state": "Strong",
   "summary": "Strong: substantive support, no open objection (fametrano, fametrano)",
   "reason": "fametrano reACKed after confirming the updated test in 4efa6b7d70 passes and properly catches missing clear calls, marking the suggestion accepted.",
   "evidence": [
    "fametrano: Tested ACK \u2014 built and ran rpc_psbt.py (passes on branch, fails on master), and verified with joinpsbts directly that all four fields are dropped on the branch and kept on master",
    "fametrano: Tested ACK \u2014 rpc_psbt.py passes, and fails without the fix or when any of the four clear() lines is removed"
   ],
   "objections": [
    {
     "reviewer": "fametrano",
     "association": "CONTRIBUTOR",
     "type": "suggestion",
     "kind": "correctness",
     "harm": "",
     "request": "Add script path signatures, MuSig2 pubnonces, and MuSig2 partial sigs to the test input before joining and assert all four are dropped, so deleting any clear line causes a test failure",
     "question": "",
     "text": "Add script path signatures, MuSig2 pubnonces, and MuSig2 partial sigs to the test input before joining and assert all four are dropped, so deleting any clear line causes a test failure",
     "clears_with": "answer",
     "blocking": false,
     "status": "accepted",
     "status_note": "reviewer confirmed the test changes in 4efa6b7d70 pass and fail when any clear line is removed",
     "cleared": true,
     "author_replied": true,
     "others_replied": false,
     "fix_pushed": true,
     "replies": [
      "c:5955626229"
     ],
     "evidence": "2026-10-02: 'The test only checks taproot_key_path_sig, though: it still passes if any one of the other three new clear() lines is deleted. Adding the other three fields to tr_psbt1 before the join ... and checkin'",
     "url": "https://github.com/bitcoin/bitcoin/pull/36352#issuecomment-5951477740",
     "id": "c:5951477740",
     "at": "2026-10-02",
     "status_at": "2026-10-03",
     "status_by": "fametrano",
     "resolution_evidence": "2026-10-03: fametrano: 'Thanks for taking the test. `rpc_psbt.py` passes here.'",
     "pin": null,
     "from_schema": 2
    }
   ],
   "support": [
    {
     "reviewer": "fametrano",
     "reason": "built and ran rpc_psbt.py (passes on branch, fails on master), and verified with joinpsbts directly that all four fields are dropped on the branch and kept on master",
     "substantive": true,
     "verdict": "Tested ACK",
     "id": "c:5951477740",
     "url": "https://github.com/bitcoin/bitcoin/pull/36352#issuecomment-5951477740",
     "at": "2026-10-02",
     "association": "CONTRIBUTOR",
     "evidence": "tested",
     "areas": [
      "rpc_psbt.py"
     ]
    },
    {
     "reviewer": "fametrano",
     "reason": "rpc_psbt.py passes, and fails without the fix or when any of the four clear() lines is removed",
     "substantive": true,
     "verdict": "Tested ACK",
     "id": "c:5968518553",
     "url": "https://github.com/bitcoin/bitcoin/pull/36352#issuecomment-5968518553",
     "at": "2026-10-03",
     "association": "CONTRIBUTOR",
     "evidence": "tested",
     "areas": [
      "rpc_psbt.py"
     ]
    }
   ],
   "participants": [
    {
     "login": "fametrano",
     "stance": "support",
     "note": "tested ACK; confirmed test updates in 4efa6b7d70",
     "association": "CONTRIBUTOR",
     "comments": 2,
     "first": "2026-10-02",
     "last": "2026-10-03"
    }
   ],
   "derivation": "substantive support, no open objection (fametrano, fametrano)",
   "model_state": null,
   "corrections": [],
   "notes": "fametrano reACKed after confirming the updated test in 4efa6b7d70 passes and properly catches missing clear calls, marking the suggestion accepted."
  },
  "dependencies": {
   "depends_on": [],
   "enables": []
  },
  "categories": [
   {
    "name": "rpc",
    "member": false,
    "evidence": "Changes core PSBT data structure logic in src/psbt.cpp, not RPC server infrastructure or interface definitions.",
    "band": "Unranked",
    "reason_tag": "bug fix",
    "score": 0.0,
    "factors": {
     "bug_severity": 2,
     "leverage": 0,
     "performance": 0,
     "security_stability": 0,
     "user_value": 2
    },
    "rationale": "Does not belong to RPC; the behavior exposed by joinpsbts belongs to PSBT and wallet handling rather than the RPC interface machinery."
   },
   {
    "name": "wallet",
    "member": true,
    "evidence": "Modifies PSBT input handling in src/psbt.cpp to fix signing breakage in walletprocesspsbt and finalizepsbt.",
    "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 a bug where joining PSBTs with Taproot inputs leaves stale signatures, causing walletprocesspsbt and finalizepsbt to fail to complete the transaction without manual PSBT editing."
   }
  ],
  "confidence": "high",
  "uncertainties": [],
  "needs": []
 },
 "cost_usd": 0.0,
 "source": {
  "record": "2026-10-04T01:18:39+00:00",
  "code": "2026-10-04T01:20:31+00:00",
  "judgments": 2
 }
}