{
 "number": 36455,
 "input_hash": "53a6089c188be182",
 "model": "ledger",
 "prompt_hash": null,
 "created": "2026-10-23T01:17:17+00:00",
 "result": {
  "summary": "Adds explicit test cases to feature_taproot.py covering legacy script edge cases that alternative implementations have historically implemented incorrectly. These include OP_CHECKSEQUENCEVERIFY with negative values, 5-byte operands whose values fit in fewer bytes, OP_IFDUP on non-minimal or negative zeros, OP_ROLL on stacks with duplicate values, OP_16 within P2SH scriptSigs, and P2SH scriptSig stack item count boundaries.",
  "problem": "Bitcoin Core's test vectors do not explicitly exercise several legacy script interpreter edge cases. When generating test asset dumps for downstream and alternative implementations, coverage-guided minimizers omit these cases because existing tests hit the relevant code branches without isolating the specific edge conditions.",
  "card": "Adds explicit test spenders to feature_taproot.py for legacy script edge cases: OP_CHECKSEQUENCEVERIFY with negative numbers, 5-byte numeric inputs, OP_IFDUP on non-minimal or negative zeros, OP_ROLL with identical stack values, OP_16 in P2SH scriptSigs, and P2SH scriptSig 1,000-item stack size boundaries. These edge cases were identified from discrepancies in alternative Bitcoin implementations such as bitcoin-s and rbitcoin. Existing test assets lacked these vectors because automated minimizers dropped them when broader code paths were already touched. Merging this enables updated test dumps to be exported to bitcoin-core/qa-assets#297.",
  "evidence": [
   "\"These were discovered by finding gaps in alternate implementations (bitcoin-s and rbitcoin)\" (PR description)",
   "\"None of the current vectors catch an interpreter that gets these wrong. Merging their dumps into the script assets adds new coverage, and a regeneration of the script assets keeps them.\" (commit 660c159220)"
  ],
  "scope_notes": "",
  "changed_since_previous": "Added a boundary test case for P2SH scriptSig stack sizes checking the 1,000-item stack limit.",
  "thread": {
   "last_event_at": "2026-10-22T15:31:30Z",
   "events": 7,
   "head_sha": "660c1592205fb80b258e9926db80575d5e7957ae",
   "schema_floor": 2,
   "schema": 2
  },
  "waiting_on": [
   {
    "at": "2026-10-22",
    "id": "r:5616742117",
    "on": "author",
    "url": "https://github.com/bitcoin/bitcoin/pull/36455#pullrequestreview-5616742117",
    "what": "address comment removal suggestion from instagibbs and test organization feedback from darosior"
   }
  ],
  "risk": {
   "level": "low",
   "touches": [
    "tests"
   ],
   "why": "Touches only functional test cases in feature_taproot.py."
  },
  "discussion": {
   "author_status": "last statement processed 2026-10-22",
   "open_concerns": [
    "instagibbs: remove the unneeded comment",
    "darosior: export the test framework to non-Taproot tests or add legacy cases to script_tests.json rather than adding legacy-only cases to the Taproot test"
   ],
   "resolved_concerns": [
    "instagibbs: whether these test cases will still be dropped on regeneration (accepted by instagibbs 2026-10-21)",
    "sedited: consider whether these test cases should go into the functional tests at all if dropped on regeneration (answered by benthecarman 2026-10-21)"
   ]
  },
  "reviewability": {
   "state": "Paused",
   "label": "Waiting on author",
   "reason": "Open objections from darosior, instagibbs with no author reply for 10 days; review would repeat what has been asked."
  },
  "agreement": {
   "state": "Positive",
   "summary": "Positive: support without stated reasons, no open objection (instagibbs, instagibbs)",
   "reason": "Added darosior's non-blocking suggestion regarding testing legacy script cases outside the Taproot test suite.",
   "evidence": [
    "instagibbs (suggestion, style, must be answered, open): remove the unneeded comment",
    "darosior (suggestion, approach, must be answered, open): export the test framework to non-Taproot tests or add legacy cases to script_tests.json rather than adding legacy-only cases to the Taproot test",
    "instagibbs: ACK",
    "instagibbs: ACK"
   ],
   "objections": [
    {
     "reviewer": "instagibbs",
     "association": "MEMBER",
     "type": "question",
     "kind": "maintenance",
     "harm": "",
     "request": "",
     "question": "whether these test cases will still be dropped on regeneration",
     "text": "whether these test cases will still be dropped on regeneration",
     "clears_with": "answer",
     "blocking": false,
     "status": "accepted",
     "status_note": "author confirmed they survive regeneration and instagibbs reACKed",
     "cleared": true,
     "author_replied": true,
     "others_replied": false,
     "fix_pushed": false,
     "replies": [
      "c:6322232743"
     ],
     "evidence": "2026-10-19: 'Though IIUC these will still be dropped on regeneration?'",
     "url": "https://github.com/bitcoin/bitcoin/pull/36455#issuecomment-6268031810",
     "id": "c:6268031810",
     "at": "2026-10-19",
     "status_at": "2026-10-21",
     "status_by": "instagibbs",
     "resolution_evidence": "2026-10-21: instagibbs: 'reACK 660c1592205fb80b258e9926db80575d5e7957ae'",
     "pin": null,
     "from_schema": 2
    },
    {
     "reviewer": "sedited",
     "association": "MEMBER",
     "type": "suggestion",
     "kind": "approach",
     "harm": "",
     "request": "consider whether these test cases should go into the functional tests at all if dropped on regeneration",
     "question": "",
     "text": "consider whether these test cases should go into the functional tests at all if dropped on regeneration",
     "clears_with": "answer",
     "blocking": false,
     "status": "answered",
     "status_note": "author clarified that the tests survive regeneration and add coverage",
     "cleared": true,
     "author_replied": true,
     "others_replied": false,
     "fix_pushed": false,
     "replies": [
      "c:6322232743"
     ],
     "evidence": "2026-10-19: 'Should these even go into the functional tests then?'",
     "url": "https://github.com/bitcoin/bitcoin/pull/36455#issuecomment-6268373879",
     "id": "c:6268373879",
     "at": "2026-10-19",
     "status_at": "2026-10-21",
     "status_by": "benthecarman",
     "resolution_evidence": "2026-10-21: benthecarman: 'Since they survive regeneration and add coverage, I don't see why not.'",
     "pin": null,
     "from_schema": 2
    },
    {
     "reviewer": "instagibbs",
     "association": "MEMBER",
     "type": "suggestion",
     "kind": "style",
     "harm": "",
     "request": "remove the unneeded comment",
     "question": "",
     "text": "remove the unneeded comment",
     "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: 'dont think we need this comment'",
     "url": "https://github.com/bitcoin/bitcoin/pull/36455#discussion_r4339885084",
     "id": "rc:4339885084",
     "at": "2026-10-21",
     "status_at": null,
     "status_by": null,
     "resolution_evidence": "",
     "pin": null,
     "from_schema": 2
    },
    {
     "reviewer": "darosior",
     "association": "MEMBER",
     "type": "suggestion",
     "kind": "approach",
     "harm": "",
     "request": "export the test framework to non-Taproot tests or add legacy cases to script_tests.json rather than adding legacy-only cases to the Taproot test",
     "question": "",
     "text": "export the test framework to non-Taproot tests or add legacy cases to script_tests.json rather than adding legacy-only cases to the Taproot 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-22: 'i dislike that this adds legacy-only cases to a test supposed to test Taproot logic.'",
     "url": "https://github.com/bitcoin/bitcoin/pull/36455#pullrequestreview-5616742117",
     "id": "r:5616742117",
     "at": "2026-10-22",
     "status_at": null,
     "status_by": null,
     "resolution_evidence": "",
     "pin": null,
     "from_schema": 2
    }
   ],
   "support": [
    {
     "reviewer": "instagibbs",
     "reason": "",
     "substantive": false,
     "verdict": "ACK",
     "id": "c:6268031810",
     "url": "https://github.com/bitcoin/bitcoin/pull/36455#issuecomment-6268031810",
     "at": "2026-10-19",
     "association": "MEMBER",
     "evidence": "none",
     "areas": []
    },
    {
     "reviewer": "instagibbs",
     "reason": "",
     "substantive": false,
     "verdict": "ACK",
     "id": "r:5603645180",
     "url": "https://github.com/bitcoin/bitcoin/pull/36455#pullrequestreview-5603645180",
     "at": "2026-10-21",
     "association": "MEMBER",
     "evidence": "none",
     "areas": []
    }
   ],
   "participants": [
    {
     "login": "fanquake",
     "stance": "neutral",
     "note": "pinged reviewers",
     "association": "MEMBER",
     "comments": 1,
     "first": "2026-10-16",
     "last": "2026-10-16"
    },
    {
     "login": "instagibbs",
     "stance": "support",
     "note": "reACKed after author clarified regeneration behavior, suggested removing a comment",
     "association": "MEMBER",
     "comments": 3,
     "first": "2026-10-19",
     "last": "2026-10-21"
    },
    {
     "login": "sedited",
     "stance": "question",
     "note": "questioned whether these cases belong in the functional tests",
     "association": "MEMBER",
     "comments": 1,
     "first": "2026-10-19",
     "last": "2026-10-19"
    },
    {
     "login": "darosior",
     "stance": "neutral",
     "note": "suggested moving legacy script cases to non-Taproot tests or script_tests.json, though noted it is not a blocker",
     "association": "MEMBER",
     "comments": 1,
     "first": "2026-10-22",
     "last": "2026-10-22"
    }
   ],
   "derivation": "support without stated reasons, no open objection (instagibbs, instagibbs)",
   "model_state": null,
   "corrections": [],
   "notes": "Added darosior's non-blocking suggestion regarding testing legacy script cases outside the Taproot test suite."
  },
  "dependencies": {
   "depends_on": [],
   "enables": [
    "bitcoin-core/qa-assets#297"
   ]
  },
  "categories": [
   {
    "name": "tests",
    "member": true,
    "evidence": "Labeled Tests and modifies test/functional/feature_taproot.py to add explicit coverage for consensus script interpreter edge cases.",
    "band": "P3",
    "reason_tag": "test coverage",
    "score": 0.35,
    "factors": {
     "bug_severity": 0,
     "leverage": 1,
     "performance": 0,
     "security_stability": 1,
     "user_value": 0
    },
    "rationale": "Adds explicit test coverage for legacy script interpreter edge cases that alternative implementations have gotten wrong, ensuring coverage-guided minimizers retain them when generating QA test assets. The underlying Bitcoin Core code already executes these branches correctly, making these regression tests valuable but reasonably deferrable."
   }
  ],
  "confidence": "high",
  "uncertainties": [],
  "needs": []
 },
 "cost_usd": 0.0,
 "source": {
  "record": "2026-10-23T01:17:17+00:00",
  "code": "2026-10-23T01:20:25+00:00",
  "judgments": 1
 }
}