{
 "number": 36455,
 "repo": "bitcoin/bitcoin",
 "url": "https://github.com/bitcoin/bitcoin/pull/36455",
 "title": "Test: Add legacy script edge cases to taproot test",
 "author": "benthecarman",
 "author_association": "CONTRIBUTOR",
 "created_at": "2026-10-07T19:18:54Z",
 "updated_at": "2026-10-22T15:31:30Z",
 "description_hash": "56b32125c2ea61fd",
 "age_days": 25,
 "draft": false,
 "labels": [
  "Tests"
 ],
 "milestone": null,
 "base": "master",
 "head_sha": "660c1592205fb80b258e9926db80575d5e7957ae",
 "head_ref": "taproot-legacy-edge-spenders",
 "head_repo": "benthecarman/bitcoin",
 "head_history": [
  {
   "t": "2026-10-21T17:21:10Z",
   "sha": "660c1592205fb80b258e9926db80575d5e7957ae"
  }
 ],
 "additions": 32,
 "deletions": 0,
 "changed_files": 1,
 "commit_count": 1,
 "size_bucket": "S",
 "mergeable_state": "clean",
 "bot": {
  "drahtbot": {
   "present": true,
   "reviews": {
    "ack": [
     {
      "login": "instagibbs",
      "url": "https://github.com/bitcoin/bitcoin/pull/36455#pullrequestreview-5603645180"
     }
    ]
   },
   "conflicts": []
  }
 },
 "acks_parsed": {
  "instagibbs": {
   "kind": "ack",
   "hash": "660c1592205fb80b258e9926db80575d5e7957ae",
   "t": "2026-10-21T17:29:58Z",
   "stale": false
  }
 },
 "acks_tally": {
  "ack": 1,
  "stale_ack": 0,
  "concept_ack": 0,
  "approach_ack": 0,
  "nack": 0,
  "concept_nack": 0,
  "approach_nack": 0
 },
 "reviews": {
  "approved": 1,
  "changes_requested": 0,
  "distinct_reviewers": [
   "darosior",
   "fanquake",
   "instagibbs",
   "sedited"
  ]
 },
 "signals": {
  "needs_rebase": false,
  "ci_failed": false,
  "mergeable_state": "clean",
  "last_author_activity": "2026-10-21T17:25:42Z",
  "last_reviewer_activity": "2026-10-22T15:31:30Z",
  "last_reviewer": "darosior",
  "author_silent_days": 11,
  "waiting_on_author_days": 10,
  "days_since_update": 10
 },
 "refs": {
  "mentioned": [
   36458,
   36465
  ],
  "depends_on": [],
  "fixes": [],
  "linked_issues": [],
  "references": [
   {
    "number": 36458,
    "type": "pull",
    "state": "open",
    "merged": false,
    "merged_at": null,
    "title": "Test: Add script vectors for interpreter edges"
   },
   {
    "number": 36465,
    "type": "pull",
    "state": "closed",
    "merged": true,
    "merged_at": "2026-10-21",
    "title": "Test: Add P2SH scriptSig stack-size boundary tests"
   }
  ],
  "conflicts": []
 },
 "stack": {
  "shares_commits_with": [],
  "based_on": [],
  "base_for": []
 },
 "review_paths": [
  "test/functional/feature_taproot.py"
 ],
 "body": "Add `feature_taproot` spenders for script edge cases that other implementations have gotten wrong: CSV with -2, a 5-byte operand whose value fits in 1 byte, IFDUP on negative or non-minimal zero, ROLL with duplicate values, OP_16 in a P2SH scriptSig, and a P2SH scriptSig that leaves 1,000 items for the scriptPubKey to run on.\n\nNone 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.\n\nThese were discovered by finding gaps in alternate implementations (bitcoin-s and rbitcoin)\n\nScript assets: bitcoin-core/qa-assets#297",
 "commits": [
  {
   "sha": "660c1592205fb80b258e9926db80575d5e7957ae",
   "date": "2026-10-21T17:21:05Z",
   "message": "Test: Add legacy script edge cases to taproot test\n\nAdd feature_taproot spenders for script edge cases that other\nimplementations have gotten wrong: CSV with -2, a 5-byte operand whose\nvalue fits in 1 byte, IFDUP on negative or non-minimal zero, ROLL with\nduplicate values, OP_16 in a P2SH scriptSig, and a P2SH scriptSig that\nleaves 1,000 items for the scriptPubKey to run on.\n\nNone of the current vectors catch an interpreter that gets these\nwrong. Merging their dumps into the script assets adds new coverage,\nand a regeneration of the script assets keeps them."
  }
 ],
 "timeline": [
  {
   "t": "2026-10-16T06:20:11Z",
   "kind": "comment",
   "who": "fanquake",
   "assoc": "MEMBER",
   "text": "cc @instagibbs\n\ncc @marcofleon can you look at https://github.com/bitcoin-core/qa-assets/pull/297.",
   "id": "c:6209422797",
   "url": "https://github.com/bitcoin/bitcoin/pull/36455#issuecomment-6209422797",
   "hash": "36c8c2bbcd8360de",
   "edited": null
  },
  {
   "t": "2026-10-19T13:11:35Z",
   "kind": "comment",
   "who": "instagibbs",
   "assoc": "MEMBER",
   "text": "ACK fcfd8aa09b482531b61c9481d169a54b66ea0cee\n\nThough IIUC these will still be dropped on regeneration?",
   "id": "c:6268031810",
   "url": "https://github.com/bitcoin/bitcoin/pull/36455#issuecomment-6268031810",
   "hash": "8ed344091c57fef8",
   "edited": null
  },
  {
   "t": "2026-10-19T13:28:17Z",
   "kind": "comment",
   "who": "sedited",
   "assoc": "MEMBER",
   "text": "[quoted text omitted]\n\nShould these even go into the functional tests then?",
   "id": "c:6268373879",
   "url": "https://github.com/bitcoin/bitcoin/pull/36455#issuecomment-6268373879",
   "hash": "6b60aa5709db36e8",
   "edited": null
  },
  {
   "t": "2026-10-21T17:21:10Z",
   "kind": "force_push",
   "who": "benthecarman",
   "commit": "660c1592205fb80b258e9926db80575d5e7957ae",
   "id": "push:660c1592205fb80b258e9926db80575d5e7957ae"
  },
  {
   "t": "2026-10-21T17:25:42Z",
   "kind": "comment",
   "who": "benthecarman",
   "assoc": "CONTRIBUTOR",
   "text": "[quoted text omitted]\n\nI tested this and they don't.\n\n[quoted text omitted]\nSince they survive regeneration and add coverage, I don't see why not. The dumps are how they get into the script assets.\n\nI also moved the P2SH stack-size spender here from #36465, as you suggested there. I'll update qa-assets#297 as well",
   "id": "c:6322232743",
   "url": "https://github.com/bitcoin/bitcoin/pull/36455#issuecomment-6322232743",
   "hash": "d0b53a2fae0c28b5",
   "edited": null
  },
  {
   "t": "2026-10-21T17:29:07Z",
   "kind": "review_comment",
   "who": "instagibbs",
   "assoc": "MEMBER",
   "path": "test/functional/feature_taproot.py",
   "commit": "660c1592205fb80b258e9926db80575d5e7957ae",
   "in_reply_to": null,
   "text": "dont think we need this comment",
   "id": "rc:4339885084",
   "url": "https://github.com/bitcoin/bitcoin/pull/36455#discussion_r4339885084",
   "hash": "1795975a1f51341c",
   "edited": "2026-10-21T17:29:58Z"
  },
  {
   "t": "2026-10-21T17:29:58Z",
   "kind": "review",
   "who": "instagibbs",
   "assoc": "MEMBER",
   "state": "APPROVED",
   "commit": "660c1592205fb80b258e9926db80575d5e7957ae",
   "text": "reACK 660c1592205fb80b258e9926db80575d5e7957ae",
   "id": "r:5603645180",
   "url": "https://github.com/bitcoin/bitcoin/pull/36455#pullrequestreview-5603645180",
   "hash": "d70922f99198ddda",
   "edited": null
  },
  {
   "t": "2026-10-22T15:31:30Z",
   "kind": "review",
   "who": "darosior",
   "assoc": "MEMBER",
   "state": "COMMENTED",
   "commit": "660c1592205fb80b258e9926db80575d5e7957ae",
   "text": "Test coverage for surprising consensus-critical logic should take precedence, so not a blocker, but i dislike that this adds legacy-only cases to a test supposed to test Taproot logic. If we find the framework of this test is useful, which clearly is the case, then i think it should be exported to other non-Taproot specific tests. But also non-Taproot script test cases need less structure, so if you can just add those to script_tests.json & co as part of #36458 that's also a refactor we can punt down to another time.",
   "id": "r:5616742117",
   "url": "https://github.com/bitcoin/bitcoin/pull/36455#pullrequestreview-5616742117",
   "hash": "cb1350c27b4d9cda",
   "edited": null
  }
 ],
 "labels_log": [
  {
   "t": "2026-10-07T19:18:58Z",
   "action": "labeled",
   "label": "Tests",
   "who": "DrahtBot"
  }
 ],
 "state_log": [],
 "text_chars": 2462,
 "text_tokens_estimate": 615,
 "changed_paths": [
  "test/functional/feature_taproot.py"
 ],
 "files": [
  {
   "path": "test/functional/feature_taproot.py",
   "add": 32,
   "del": 0
  }
 ],
 "test_lines": 32,
 "git": {
  "head": "660c1592205fb80b258e9926db80575d5e7957ae",
  "head_matches_backup": true,
  "base": "aef8a04966d7ab6c04edc5d19b733e78205405de",
  "patch_id": "eeac2268ae3b69fc",
  "commits": [
   {
    "sha": "660c159220",
    "subject": "Test: Add legacy script edge cases to taproot test",
    "files": 1,
    "add": 32,
    "del": 0
   }
  ],
  "patch_truncated": false
 },
 "patch_id": "eeac2268ae3b69fc",
 "input_hash": "7ba4b7190aaa5b76",
 "extracted_at": "2026-11-02T01:09:49+00:00"
}