{
 "number": 36333,
 "input_hash": "0be4bdcb9d5ae20c",
 "model": "ledger",
 "prompt_hash": null,
 "created": "2026-10-22T01:15:37+00:00",
 "result": {
  "summary": "Removes the `removeprunedfunds` RPC and deletes all underlying wallet transaction-removal code (`CWallet::RemoveTxs` and `WalletBatch::EraseTx`). Because the deletion infrastructure is removed, legacy-to-descriptor wallet migration no longer erases watch-only transactions from the migrated non-watch-only wallet. Deprecation warnings, test cases for transaction deletion, and release notes are updated accordingly.",
  "problem": "The `removeprunedfunds` RPC was deprecated in v32 and retained dangerous transaction deletion logic that required complex synchronization between in-memory structures and wallet storage. Furthermore, during legacy wallet migration, deleting watch-only transactions from the main wallet added database overhead and complexity for no practical benefit.",
  "card": "Deletes the `removeprunedfunds` RPC (deprecated in v32) and completely removes all transaction deletion logic from the wallet memory structures and database layer. Legacy wallet migration will no longer delete watch-only transactions from the migrated main wallet, keeping non-owned transactions stored harmlessly without affecting balances. This permanently removes obsolete and potentially problematic transaction-erasure routines across the wallet subsystem.",
  "evidence": [
   "The RPC was deprecated in v32 (PR #35605).",
   "Author commit message (c7dfd82edb): \"There is never a good reason to delete tx data from a wallet, so delete these functions.\"",
   "Author PR description: \"AFAICT for both GUI and RPC having irrelevant transactions inside of wallet is harmless and does not affect the output of anything, since most stuff is gated behind IsMine() anyways.\""
  ],
  "scope_notes": "Deletes the RPC endpoint, wallet internal removal routines, and associated functional/unit tests.",
  "changed_since_previous": "Added release notes documenting the removal of `removeprunedfunds`.",
  "thread": {
   "last_event_at": "2026-10-21T20:12:39Z",
   "events": 8,
   "head_sha": "360625ff4e67205d4d1714e00aedbf8be45bb18d",
   "schema_floor": 2,
   "schema": 2
  },
  "waiting_on": [
   {
    "at": "2026-10-21",
    "id": "r:5605281495",
    "on": "author",
    "url": "https://github.com/bitcoin/bitcoin/pull/36333#pullrequestreview-5605281495",
    "what": "rebase and address review comments"
   }
  ],
  "risk": {
   "level": "medium",
   "touches": [
    "wallet",
    "wallet_storage",
    "rpc_api"
   ],
   "why": "Leaving unowned transactions in migrated wallets or modifying wallet database manipulation code could break wallet accounting or transaction reporting if any RPCs fail to filter by IsMine."
  },
  "discussion": {
   "author_status": "last statement processed 2026-10-21",
   "open_concerns": [
    "pablomartin4btc: Test the new migration behavior in wallet_migration.py and mention in the PR description or release note that kept watch-only txs count in txcount and are rebroadcast if unconfirmed",
    "pablomartin4btc: Keep coverage for importprunedfunds with no wallet outputs by importing into a fresh wallet with the key instead of dropping the test"
   ],
   "resolved_concerns": []
  },
  "reviewability": {
   "state": "Paused",
   "label": "Waiting on author",
   "reason": "Open objections from pablomartin4btc with no author reply for 11 days; review would repeat what has been asked."
  },
  "agreement": {
   "state": "Strong",
   "summary": "Strong: substantive support, no open objection (pablomartin4btc)",
   "reason": "pablomartin4btc cr ACKed while leaving non-blocking test suggestions and noting a rebase is needed.",
   "evidence": [
    "pablomartin4btc (suggestion, maintenance, must be answered, open): Test the new migration behavior in wallet_migration.py and mention in the PR description or release note that kept watch-only txs count in txcount and are rebroadcast if unconfirmed",
    "pablomartin4btc (suggestion, maintenance, must be answered, open): Keep coverage for importprunedfunds with no wallet outputs by importing into a fresh wallet with the key instead of dropping the test",
    "w0xlt: Concept ACK",
    "pablomartin4btc: ACK \u2014 Checked that nothing in the tree still refers to `removeprunedfunds`, `RemoveTxs` or `EraseTx`."
   ],
   "objections": [
    {
     "reviewer": "pablomartin4btc",
     "association": "MEMBER",
     "type": "suggestion",
     "kind": "maintenance",
     "harm": "",
     "request": "Test the new migration behavior in wallet_migration.py and mention in the PR description or release note that kept watch-only txs count in txcount and are rebroadcast if unconfirmed",
     "question": "",
     "text": "Test the new migration behavior in wallet_migration.py and mention in the PR description or release note that kept watch-only txs count in txcount and are rebroadcast if unconfirmed",
     "clears_with": "answer",
     "blocking": false,
     "status": "open",
     "status_note": "",
     "cleared": false,
     "author_replied": false,
     "others_replied": false,
     "fix_pushed": false,
     "replies": [],
     "evidence": "2026-10-21: 'maybe worth mentioning in the PR description/release note, and testing the new behavior in `wallet_migration.py` instead of only dropping the old assertions'",
     "url": "https://github.com/bitcoin/bitcoin/pull/36333#discussion_r4341195658",
     "id": "rc:4341195658",
     "at": "2026-10-21",
     "status_at": null,
     "status_by": null,
     "resolution_evidence": "",
     "pin": null,
     "from_schema": 2
    },
    {
     "reviewer": "pablomartin4btc",
     "association": "MEMBER",
     "type": "suggestion",
     "kind": "maintenance",
     "harm": "",
     "request": "Keep coverage for importprunedfunds with no wallet outputs by importing into a fresh wallet with the key instead of dropping the test",
     "question": "",
     "text": "Keep coverage for importprunedfunds with no wallet outputs by importing into a fresh wallet with the key instead of dropping the test",
     "clears_with": "answer",
     "blocking": false,
     "status": "open",
     "status_note": "",
     "cleared": false,
     "author_replied": false,
     "others_replied": false,
     "fix_pushed": false,
     "replies": [],
     "evidence": "2026-10-21: 'Could it be kept by importing into a fresh wallet that has the key, instead of dropping the coverage?'",
     "url": "https://github.com/bitcoin/bitcoin/pull/36333#discussion_r4341458605",
     "id": "rc:4341458605",
     "at": "2026-10-21",
     "status_at": null,
     "status_by": null,
     "resolution_evidence": "",
     "pin": null,
     "from_schema": 2
    }
   ],
   "support": [
    {
     "reviewer": "w0xlt",
     "reason": "",
     "substantive": false,
     "verdict": "Concept ACK",
     "id": "c:5902286440",
     "url": "https://github.com/bitcoin/bitcoin/pull/36333#issuecomment-5902286440",
     "at": "2026-09-30",
     "association": "CONTRIBUTOR",
     "evidence": "none",
     "areas": []
    },
    {
     "reviewer": "pablomartin4btc",
     "reason": "Checked that nothing in the tree still refers to `removeprunedfunds`, `RemoveTxs` or `EraseTx`.",
     "substantive": true,
     "verdict": "ACK",
     "id": "r:5605281495",
     "url": "https://github.com/bitcoin/bitcoin/pull/36333#pullrequestreview-5605281495",
     "at": "2026-10-21",
     "association": "MEMBER",
     "evidence": "read",
     "areas": []
    }
   ],
   "participants": [
    {
     "login": "crooksmadison69-cmd",
     "stance": "neutral",
     "note": "left a single-word inline comment",
     "association": "NONE",
     "comments": 1,
     "first": "2026-09-25",
     "last": "2026-09-25"
    },
    {
     "login": "w0xlt",
     "stance": "support",
     "note": "Concept ACK",
     "association": "CONTRIBUTOR",
     "comments": 1,
     "first": "2026-09-30",
     "last": "2026-09-30"
    },
    {
     "login": "pablomartin4btc",
     "stance": "support",
     "note": "cr ACK; checked for references to removed symbols and left suggestions on tests and notes, needs rebase",
     "association": "MEMBER",
     "comments": 5,
     "first": "2026-10-21",
     "last": "2026-10-21"
    }
   ],
   "derivation": "substantive support, no open objection (pablomartin4btc)",
   "model_state": null,
   "corrections": [],
   "notes": "pablomartin4btc cr ACKed while leaving non-blocking test suggestions and noting a rebase is needed."
  },
  "dependencies": {
   "depends_on": [],
   "enables": []
  },
  "categories": [
   {
    "name": "docs",
    "member": false,
    "evidence": "Touches only doc/release-notes-removeprunedfundsremoval.md as a follow-up to the code removal.",
    "band": "Unranked",
    "reason_tag": "cleanup",
    "score": 0.0,
    "factors": {
     "bug_severity": 0,
     "leverage": 1,
     "performance": 0,
     "security_stability": 1,
     "user_value": 0
    },
    "rationale": "Release notes updating a code change belong to the area of the code change, not the documentation category."
   },
   {
    "name": "rpc",
    "member": false,
    "evidence": "Touches wallet RPC implementation in src/wallet/rpc/backup.cpp without modifying underlying RPC machinery.",
    "band": "Unranked",
    "reason_tag": "cleanup",
    "score": 0.0,
    "factors": {
     "bug_severity": 0,
     "leverage": 1,
     "performance": 0,
     "security_stability": 1,
     "user_value": 0
    },
    "rationale": "Wallet RPC changes belong to wallet rather than RPC unless they touch the RPC dispatch or server machinery itself."
   },
   {
    "name": "wallet",
    "member": true,
    "evidence": "Carries the Wallet label and removes internal transaction deletion routines and deprecated RPCs from src/wallet/.",
    "band": "P3",
    "reason_tag": "cleanup",
    "score": 0.35,
    "factors": {
     "bug_severity": 0,
     "leverage": 1,
     "performance": 0,
     "security_stability": 1,
     "user_value": 0
    },
    "rationale": "Removing the deprecated `removeprunedfunds` RPC and associated transaction deletion logic simplifies wallet state synchronization and database handling. The change eliminates fragile deletion code that maintained synchronization between in-memory structures and storage, but addresses no active critical fund-safety defect."
   }
  ],
  "confidence": "high",
  "uncertainties": [],
  "needs": []
 },
 "cost_usd": 0.0,
 "source": {
  "record": "2026-10-22T01:15:37+00:00",
  "code": "2026-10-11T01:23:29+00:00",
  "judgments": 3
 }
}