{
 "number": 36444,
 "input_hash": "c4a69cc024a2f7e8",
 "model": "ledger",
 "prompt_hash": null,
 "created": "2026-10-09T01:19:55+00:00",
 "result": {
  "summary": "Stores multipath relationship metadata in the wallet for both imported and automatically generated descriptors. Updates `WalletDescriptor` to store the sibling `ScriptPubKeyMan` IDs resulting from an expansion, allowing the wallet to reconstruct original multipath descriptors using `ReconstructMultipath`. Exposes the reconstructed string via an optional `multipath_descriptor` field in `listdescriptors` and includes it in `exportwatchonly` outputs.",
  "problem": "When multipath descriptors are imported into a wallet, they are expanded and stored as independent descriptors without preserving their relationship. Users coordinating with hardware signers that require policy registration cannot retrieve or re-verify the original multipath descriptor through RPC, and automatically generated wallet descriptors have no multipath association.",
  "card": "This pull request stores multipath descriptor relationships in the wallet database and exposes the reconstructed multipath descriptor in listdescriptors and watch-only exports. Currently, Bitcoin Core expands multipath descriptors on import and discards their relationship, preventing users from retrieving the registered multipath descriptor needed for hardware signer policy verification. By saving relative ScriptPubKeyMan IDs in WalletDescriptor, the wallet can reconstruct and report the original multipath strings. It depends on #36442 and #36443.",
  "evidence": [
   "Author notes: 'This is useful for working with hardware wallets that require policy registration, particularly those that require resending the descriptor that was registered.'",
   "Author notes: 'The wallet does not store any information about multipath descriptors. When a multipath descriptor is imported, it is first expanded, then the expansion descriptors are imported into the wallet.'"
  ],
  "scope_notes": "Includes commits from base PRs #36442 (refactoring `Parse` and BIP32 key paths to represent multipaths in a single `Descriptor` object) and #36443 (multipath reconstruction), making the diff substantially larger than just wallet storage changes.",
  "changed_since_previous": "",
  "thread": {
   "last_event_at": "2026-10-08T18:06:50Z",
   "events": 1,
   "head_sha": "a49e42b8bb704f1e7a3ea2f0b1a1d34ee7c182df",
   "schema_floor": 2,
   "schema": 2
  },
  "waiting_on": [
   {
    "at": null,
    "id": "",
    "on": "nothing",
    "url": null,
    "what": ""
   }
  ],
  "risk": {
   "level": "medium",
   "touches": [
    "wallet",
    "wallet_storage",
    "rpc_api"
   ],
   "why": "Modifies descriptor parsing and serialization/storage within WalletDescriptor and ScriptPubKeyMan, where bugs could corrupt wallet records or break descriptor exports."
  },
  "discussion": {
   "author_status": "last statement processed 2026-10-08",
   "open_concerns": [],
   "resolved_concerns": []
  },
  "reviewability": {
   "state": "Ready",
   "label": "Needs rebase",
   "reason": "Conflicts with master; review the logic now, the rebase is mechanical."
  },
  "agreement": {
   "state": "Positive",
   "summary": "Positive: support without stated reasons, no open objection (w0xlt)",
   "reason": "Initial record. w0xlt provided a bare Concept ACK. / Initial record. w0xlt posted a Concept ACK with no rationale or code discussion.",
   "evidence": [
    "w0xlt: Concept ACK"
   ],
   "objections": [],
   "support": [
    {
     "reviewer": "w0xlt",
     "reason": "",
     "substantive": false,
     "verdict": "Concept ACK",
     "id": "c:6066074390",
     "url": "https://github.com/bitcoin/bitcoin/pull/36444#issuecomment-6066074390",
     "at": "2026-10-08",
     "association": "CONTRIBUTOR",
     "evidence": "none",
     "areas": []
    }
   ],
   "participants": [
    {
     "login": "w0xlt",
     "stance": "support",
     "note": "Concept ACK",
     "association": "CONTRIBUTOR",
     "comments": 1,
     "first": "2026-10-08",
     "last": "2026-10-08"
    }
   ],
   "derivation": "support without stated reasons, no open objection (w0xlt)",
   "model_state": null,
   "corrections": [],
   "notes": "Initial record. w0xlt provided a bare Concept ACK. / Initial record. w0xlt posted a Concept ACK with no rationale or code discussion."
  },
  "dependencies": {
   "depends_on": [
    "#36442",
    "#36443"
   ],
   "enables": []
  },
  "categories": [
   {
    "name": "mining",
    "member": false,
    "evidence": "Changes in src/rpc/mining.cpp are minor callsite updates following descriptor/keypath API adjustments.",
    "band": "Unranked",
    "reason_tag": "cleanup",
    "score": 0.0,
    "factors": {
     "bug_severity": 0,
     "leverage": 1,
     "performance": 0,
     "security_stability": 0,
     "user_value": 2
    },
    "rationale": "Mechanical callsite updates do not make a PR part of mining."
   },
   {
    "name": "rpc",
    "member": false,
    "evidence": "Modifications touch wallet RPCs (listdescriptors, exportwatchonly) and general descriptor RPC helpers rather than the RPC framework itself.",
    "band": "Unranked",
    "reason_tag": "new feature",
    "score": 0.0,
    "factors": {
     "bug_severity": 0,
     "leverage": 1,
     "performance": 0,
     "security_stability": 0,
     "user_value": 2
    },
    "rationale": "Wallet RPC changes belong to wallet, and exposing descriptor behavior via RPC belongs to the underlying domain rather than RPC infrastructure."
   },
   {
    "name": "tests",
    "member": false,
    "evidence": "Test modifications are domain-specific tests (bip32_tests, descriptor_tests, wallet tests, and fuzzers) rather than test runner or harness infrastructure.",
    "band": "Unranked",
    "reason_tag": "test coverage",
    "score": 0.0,
    "factors": {
     "bug_severity": 0,
     "leverage": 1,
     "performance": 0,
     "security_stability": 0,
     "user_value": 2
    },
    "rationale": "Tests pinning wallet and descriptor behavior belong to those areas rather than general test infrastructure."
   },
   {
    "name": "utils",
    "member": false,
    "evidence": "Changes in src/util/bip32.* implement multipath keypath representations serving descriptor and wallet functionality.",
    "band": "Unranked",
    "reason_tag": "new feature",
    "score": 0.0,
    "factors": {
     "bug_severity": 0,
     "leverage": 1,
     "performance": 0,
     "security_stability": 0,
     "user_value": 2
    },
    "rationale": "BIP32 keypath handling changes here exist solely to support descriptor multipath tracking rather than generic shared utility infrastructure."
   },
   {
    "name": "wallet",
    "member": true,
    "evidence": "Carries the Wallet label, updates WalletDescriptor storage in ScriptPubKeyMan, and exposes reconstructed multipaths via listdescriptors and exportwatchonly.",
    "band": "P2",
    "reason_tag": "new feature",
    "score": 0.6,
    "factors": {
     "bug_severity": 0,
     "leverage": 1,
     "performance": 0,
     "security_stability": 0,
     "user_value": 2
    },
    "rationale": "Preserves multipath descriptor relationships upon import and creation to enable hardware wallet policy registration workflows. Author notes that 'This is useful for working with hardware wallets that require policy registration, particularly those that require resending the descriptor that was registered.'"
   }
  ],
  "confidence": "high",
  "uncertainties": [],
  "needs": []
 },
 "cost_usd": 0.0,
 "source": {
  "record": "2026-10-09T01:19:55+00:00",
  "code": "2026-10-07T01:16:10+00:00",
  "judgments": 5
 }
}