{
 "number": 36613,
 "input_hash": "d3a8b8903d8670c5",
 "model": "ledger",
 "prompt_hash": null,
 "created": "2026-11-02T01:11:47+00:00",
 "result": {
  "summary": "Adds functional test coverage for the `getblockfilter` RPC when querying a block hash whose header is known but whose full block was never connected. The test disconnects two nodes, mines a block on one node, submits only the header to the other node via `submitheader`, and verifies that `getblockfilter` raises RPC error -5 with \"Filter not found. Block was not connected to active chain.\"",
  "problem": "The branch in `getblockfilter` in `src/rpc/blockchain.cpp` that handles blocks that are known by header but were never connected was completely unexercised by existing functional tests.",
  "card": "Adds functional test coverage for the getblockfilter RPC error path when queried with a block hash for which only the header is known. It exercises the specific error branch returning error -5 indicating the block was not connected to the active chain by using submitheader across disconnected nodes. The author identified this gap via test coverage reports on BIP 157/158 code paths. No other PRs depend on this change.",
  "evidence": [
   "Author notes: \"This gap in test coverage was identified by a coverage report generated while exploring BIP 157/158. The branch in src/rpc/blockchain.cpp was never executed in the measured tests: https://github.com/bitcoin/bitcoin/blob/64cf455b481d36182957bdcfcae7c411a7879897/src/rpc/blockchain.cpp#L3054-L3056\""
  ],
  "scope_notes": "",
  "changed_since_previous": "No functional differences; the full diff is now provided confirming the exact test implementation in test/functional/rpc_getblockfilter.py.",
  "thread": {
   "last_event_at": "2026-11-01T09:22:38Z",
   "events": 1,
   "head_sha": "64cf455b481d36182957bdcfcae7c411a7879897",
   "schema_floor": 2,
   "schema": 2
  },
  "waiting_on": [
   {
    "at": null,
    "id": "",
    "on": "nothing",
    "url": null,
    "what": ""
   }
  ],
  "risk": {
   "level": "low",
   "touches": [
    "tests"
   ],
   "why": "Only touches a functional test script; a bug could cause test flakiness or false failures in CI."
  },
  "discussion": {
   "author_status": "last statement processed 2026-11-01",
   "open_concerns": [],
   "resolved_concerns": []
  },
  "reviewability": {
   "state": "Ready",
   "label": "Ready",
   "reason": "Nothing known that would invalidate a review now."
  },
  "agreement": {
   "state": "Strong",
   "summary": "Strong: substantive support, no open objection (Zippo76)",
   "reason": "Initial record. Zippo76 tested and confirmed coverage via mutation testing; no objections raised. / Initial record. Zippo76 provided a Tested ACK with mutation testing details.",
   "evidence": [
    "Zippo76: Tested ACK \u2014 Verified on macOS arm64 that rpc_getblockfilter.py passes and confirmed with a mutation test in src/rpc/blockchain.cpp that the new assertion properly exercises the intended -5 error path"
   ],
   "objections": [],
   "support": [
    {
     "reviewer": "Zippo76",
     "reason": "Verified on macOS arm64 that rpc_getblockfilter.py passes and confirmed with a mutation test in src/rpc/blockchain.cpp that the new assertion properly exercises the intended -5 error path",
     "substantive": true,
     "verdict": "Tested ACK",
     "id": "r:5727361525",
     "url": "https://github.com/bitcoin/bitcoin/pull/36613#pullrequestreview-5727361525",
     "at": "2026-11-01",
     "association": "NONE",
     "evidence": "both",
     "areas": [
      "rpc_getblockfilter.py",
      "src/rpc/blockchain.cpp"
     ]
    }
   ],
   "participants": [
    {
     "login": "Zippo76",
     "stance": "support",
     "note": "tested ACK with mutation testing demonstrating test coverage",
     "association": "NONE",
     "comments": 1,
     "first": "2026-11-01",
     "last": "2026-11-01"
    }
   ],
   "derivation": "substantive support, no open objection (Zippo76)",
   "model_state": null,
   "corrections": [],
   "notes": "Initial record. Zippo76 tested and confirmed coverage via mutation testing; no objections raised. / Initial record. Zippo76 provided a Tested ACK with mutation testing details."
  },
  "dependencies": {
   "depends_on": [],
   "enables": []
  },
  "categories": [
   {
    "name": "rpc",
    "member": true,
    "evidence": "Changes test/functional/rpc_getblockfilter.py to test the getblockfilter RPC interface.",
    "band": "P4",
    "reason_tag": "test coverage",
    "score": 0.2,
    "factors": {
     "bug_severity": 0,
     "leverage": 0,
     "performance": 0,
     "security_stability": 0,
     "user_value": 0
    },
    "rationale": "Adds test coverage for an unexercised error handling branch in getblockfilter. The author identified via coverage reports that querying a block known only by header was never tested, but this is a narrow coverage gap with no reported functional bug or regression."
   },
   {
    "name": "tests",
    "member": false,
    "evidence": "Tests a specific RPC endpoint rather than modifying functional test framework machinery or test runners.",
    "band": "Unranked",
    "reason_tag": "test coverage",
    "score": 0.0,
    "factors": {
     "bug_severity": 0,
     "leverage": 0,
     "performance": 0,
     "security_stability": 0,
     "user_value": 0
    },
    "rationale": "Exempt from test infrastructure because tests pinning the behavior of a specific area belong to that area rather than general testing machinery."
   }
  ],
  "confidence": "high",
  "uncertainties": [],
  "needs": []
 },
 "cost_usd": 0.0,
 "source": {
  "record": "2026-11-02T01:11:47+00:00",
  "code": "2026-10-24T01:21:55+00:00",
  "judgments": 2
 }
}