{
 "number": 36486,
 "input_hash": "1c7c94cb750d46d4",
 "model": "ledger",
 "prompt_hash": null,
 "created": "2026-10-14T01:24:44+00:00",
 "result": {
  "summary": "Preserves queued txid orphan resolution requests when a non-witness parent transaction is rejected as TX_RECONSIDERABLE. The download manager skips calling ForgetTxHash on the witness hash if a reconsiderable transaction lacks witness data. This ensures peers that announced an orphan child are still asked for the legacy parent by txid when that parent arrives first from a different peer.",
  "problem": "For non-witness transactions, the wtxid equals the txid. When a low-feerate legacy parent is rejected with TX_RECONSIDERABLE, forgetting its wtxid in the transaction request tracker also wipes txid requests queued to resolve orphan children. If that parent arrived from a peer that did not announce the orphan child, opportunistic 1P1C relay fails to pair them, the child's announcers are never queried for the parent, and the child remains stuck in the orphanage.",
  "card": "Preserves orphan resolution requests for non-witness transactions during opportunistic 1P1C package relay. For legacy transactions, wtxid equals txid, so calling ForgetTxHash when a parent is rejected as TX_RECONSIDERABLE inadvertently deletes queued txid requests intended to fetch the parent from peers that announced the child. If the low-feerate parent arrived from a peer other than the child's announcer, 1P1C cannot pair them, and the child remains orphaned until re-announced. This change skips ForgetTxHash for non-witness reconsiderable transactions, resolving a test timeout bug and bringing legacy 1P1C handling in line with segwit behavior.",
  "evidence": [
   "Author's functional test demonstration: in p2p_opportunistic_1p1c.py, the new test_parent_from_other_peer times out on master when using a legacy parent (wallet_nonsegwit) waiting for getdata from the child announcer, but passes with this change."
  ],
  "scope_notes": "",
  "changed_since_previous": "None; the previous description was recorded before the patch was available.",
  "thread": {
   "last_event_at": "2026-10-13T08:18:46Z",
   "events": 5,
   "head_sha": "8859ada450bcdf4d8e1b600076585515d83a584e",
   "schema_floor": 2,
   "schema": 2
  },
  "waiting_on": [
   {
    "at": "2026-10-13",
    "id": "c:6141355065",
    "on": "decision",
    "url": "https://github.com/bitcoin/bitcoin/pull/36486#issuecomment-6141355065",
    "what": "whether to fold this into #36437 or rebase once #36437 lands"
   }
  ],
  "risk": {
   "level": "medium",
   "touches": [
    "p2p"
   ],
   "why": "Mistakes in transaction download tracking can cause duplicate transaction downloads or lingering state in the request tracker."
  },
  "discussion": {
   "author_status": "last statement processed 2026-10-13",
   "open_concerns": [],
   "resolved_concerns": [
    "Yudis-bit: Insert ptx->GetHash() into RecentRejectsReconsiderableFilter if witness to address the mirror case where segwit reconsiderable parents are missed. (answered by FlashWayne 2026-10-12)",
    "instagibbs: Catalog all known cases, put them under test, and address them as a group rather than fixing piecemeal. (answered by instagibbs 2026-10-12)"
   ]
  },
  "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 (Yudis-bit)",
   "reason": "Added author's reply agreeing to coordinate with #36437 and offering to rebase or fold.",
   "evidence": [
    "Yudis-bit: Tested ACK \u2014 Tested on Windows x86_64, Clang 22"
   ],
   "objections": [
    {
     "reviewer": "Yudis-bit",
     "association": "NONE",
     "type": "suggestion",
     "kind": "correctness",
     "harm": "",
     "request": "Insert ptx->GetHash() into RecentRejectsReconsiderableFilter if witness to address the mirror case where segwit reconsiderable parents are missed.",
     "question": "",
     "text": "Insert ptx->GetHash() into RecentRejectsReconsiderableFilter if witness to address the mirror case where segwit reconsiderable parents are missed.",
     "clears_with": "answer",
     "blocking": false,
     "status": "answered",
     "status_note": "author explained caching txid would allow a mutated witness to cause an honest parent to be ignored",
     "cleared": true,
     "author_replied": true,
     "others_replied": false,
     "fix_pushed": false,
     "replies": [
      "c:6121499796"
     ],
     "evidence": "2026-10-09: 'Line 461 `RecentRejectsReconsiderableFilter` only caches `wtxid`, so line 382 `contains(parent_txid)` misses segwit reconsiderable parents. Inserting `ptx->GetHash()` if witness addresses the mirror c'",
     "url": "https://github.com/bitcoin/bitcoin/pull/36486#issuecomment-6081515374",
     "id": "c:6081515374",
     "at": "2026-10-09",
     "status_at": "2026-10-12",
     "status_by": "FlashWayne",
     "resolution_evidence": "2026-10-12: FlashWayne: 'I'd keep the txid of a segwit tx out of the reconsiderable filter: a low-feerate copy with a mutated witness also fails '",
     "pin": null,
     "from_schema": 2
    },
    {
     "reviewer": "instagibbs",
     "association": "MEMBER",
     "type": "suggestion",
     "kind": "approach",
     "harm": "",
     "request": "Catalog all known cases, put them under test, and address them as a group rather than fixing piecemeal.",
     "question": "",
     "text": "Catalog all known cases, put them under test, and address them as a group rather than fixing piecemeal.",
     "clears_with": "answer",
     "blocking": false,
     "status": "answered",
     "status_note": "author demonstrated fuzz test results on top of #36437 and instagibbs moved review to #36437",
     "cleared": true,
     "author_replied": true,
     "others_replied": false,
     "fix_pushed": false,
     "replies": [
      "c:6121499796",
      "c:6141355065"
     ],
     "evidence": "2026-10-11: 'I'd rather catalog all the cases we know and care about, put them under test, and then attack them as a group to ensure we're not doing whackamole forever.'",
     "url": "https://github.com/bitcoin/bitcoin/pull/36486#issuecomment-6112305457",
     "id": "c:6112305457",
     "at": "2026-10-11",
     "status_at": "2026-10-12",
     "status_by": "instagibbs",
     "resolution_evidence": "2026-10-12: instagibbs: 'tagged you on #36437 I think review should move there for now'",
     "pin": null,
     "from_schema": 2
    }
   ],
   "support": [
    {
     "reviewer": "Yudis-bit",
     "reason": "Tested on Windows x86_64, Clang 22",
     "substantive": false,
     "verdict": "Tested ACK",
     "id": "c:6081515374",
     "url": "https://github.com/bitcoin/bitcoin/pull/36486#issuecomment-6081515374",
     "at": "2026-10-09",
     "association": "NONE",
     "evidence": "tested",
     "areas": []
    }
   ],
   "participants": [
    {
     "login": "Yudis-bit",
     "stance": "support",
     "note": "Tested ACK; suggested caching txid in RecentRejectsReconsiderableFilter for segwit parents",
     "association": "NONE",
     "comments": 1,
     "first": "2026-10-09",
     "last": "2026-10-09"
    },
    {
     "login": "instagibbs",
     "stance": "neutral",
     "note": "suggested addressing cases as a group in #36437 and moved review there",
     "association": "MEMBER",
     "comments": 2,
     "first": "2026-10-11",
     "last": "2026-10-12"
    }
   ],
   "derivation": "support without stated reasons, no open objection (Yudis-bit)",
   "model_state": null,
   "corrections": [],
   "notes": "Added author's reply agreeing to coordinate with #36437 and offering to rebase or fold."
  },
  "dependencies": {
   "depends_on": [],
   "enables": []
  },
  "categories": [
   {
    "name": "p2p",
    "member": true,
    "evidence": "Matches the P2P label and modifies transaction download and orphan resolution logic in src/node/txdownloadman_impl.cpp.",
    "band": "P3",
    "reason_tag": "bug fix",
    "score": 0.45,
    "factors": {
     "bug_severity": 1,
     "leverage": 0,
     "performance": 0,
     "security_stability": 1,
     "user_value": 1
    },
    "rationale": "Fixes a relay liveness bug where non-witness transactions can remain stuck in the orphanage during opportunistic 1P1C relay. Because txid equals wtxid for non-segwit transactions, 'forgetting its wtxid in the transaction request tracker also wipes txid requests queued to resolve orphan children', causing orphan resolution to stall when the parent arrives from a different peer than the child announcer."
   }
  ],
  "confidence": "high",
  "uncertainties": [],
  "needs": []
 },
 "cost_usd": 0.0,
 "source": {
  "record": "2026-10-14T01:24:44+00:00",
  "code": "2026-10-11T01:23:37+00:00",
  "judgments": 1
 }
}