devlyn-cli 3.2.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (424) hide show
  1. package/AGENTS.md +2 -2
  2. package/CLAUDE.md +2 -2
  3. package/README.md +22 -113
  4. package/bin/devlyn.js +13 -225
  5. package/bin/instruction-templates.json +752 -1
  6. package/bin/instructions.js +101 -17
  7. package/config/skills/_shared/adapters/grok.md +1 -2
  8. package/config/skills/_shared/archive_run.py +15 -3
  9. package/config/skills/_shared/judge-role-evidence.py +21 -1
  10. package/config/skills/_shared/runtime-principles.md +1 -1
  11. package/config/skills/_shared/spec-verify-check.py +0 -653
  12. package/config/skills/_shared/state-phase-write.py +371 -30
  13. package/config/skills/_shared/task-complete.py +635 -143
  14. package/config/skills/_shared/terminal-claim-check.py +229 -4
  15. package/config/skills/_shared/verify-merge-findings.py +93 -2
  16. package/config/skills/devlyn:ideate/SKILL.md +3 -4
  17. package/config/skills/devlyn:ideate/references/elicitation.md +2 -35
  18. package/config/skills/devlyn:ideate/references/from-spec-mode.md +3 -18
  19. package/config/skills/devlyn:ideate/references/project-mode.md +1 -16
  20. package/config/skills/devlyn:ideate/references/spec-template.md +0 -2
  21. package/config/skills/devlyn:queue/SKILL.md +6 -4
  22. package/config/skills/devlyn:resolve/SKILL.md +16 -25
  23. package/config/skills/devlyn:resolve/references/free-form-mode.md +0 -14
  24. package/config/skills/devlyn:resolve/references/outer-loop.md +1 -1
  25. package/config/skills/devlyn:resolve/references/phases/build-gate.md +1 -1
  26. package/config/skills/devlyn:resolve/references/phases/cleanup.md +3 -3
  27. package/config/skills/devlyn:resolve/references/phases/implement.md +1 -1
  28. package/config/skills/devlyn:resolve/references/phases/probe-derive.md +1 -16
  29. package/config/skills/devlyn:resolve/references/phases/verify.md +4 -9
  30. package/config/skills/devlyn:resolve/references/state-schema.md +9 -7
  31. package/config/skills/devlyn:resolve/references/task-completion.md +46 -37
  32. package/{config/skills → optional-skills}/code-health-standards/SKILL.md +4 -13
  33. package/{config/skills → optional-skills}/code-review-standards/SKILL.md +4 -12
  34. package/{config/skills → optional-skills}/root-cause-analysis/SKILL.md +4 -12
  35. package/{config/skills → optional-skills}/ui-implementation-standards/SKILL.md +4 -14
  36. package/package.json +1 -57
  37. package/benchmark/auto-resolve/BENCHMARK-DESIGN.md +0 -289
  38. package/benchmark/auto-resolve/BENCHMARK-RESULTS.md +0 -341
  39. package/benchmark/auto-resolve/README.md +0 -696
  40. package/benchmark/auto-resolve/RUBRIC.md +0 -177
  41. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/NOTES.md +0 -34
  42. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/expected.json +0 -68
  43. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/metadata.json +0 -10
  44. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/setup.sh +0 -4
  45. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/spec.md +0 -44
  46. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/task.ko.txt +0 -8
  47. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/task.txt +0 -8
  48. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/NOTES.md +0 -68
  49. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/expected.json +0 -60
  50. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/metadata.json +0 -10
  51. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/setup.sh +0 -17
  52. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/spec.md +0 -51
  53. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/task.txt +0 -9
  54. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/verifiers/invalid.js +0 -29
  55. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/verifiers/parallel.js +0 -50
  56. package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/NOTES.md +0 -75
  57. package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/expected.json +0 -52
  58. package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/metadata.json +0 -10
  59. package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/setup.sh +0 -171
  60. package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/spec.md +0 -50
  61. package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/task.txt +0 -9
  62. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/NOTES.md +0 -89
  63. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/expected.json +0 -74
  64. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/metadata.json +0 -10
  65. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/setup.sh +0 -251
  66. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/spec.md +0 -57
  67. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/task.txt +0 -13
  68. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/verifiers/replay-malformed-body.js +0 -64
  69. package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/NOTES.md +0 -104
  70. package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/expected.json +0 -46
  71. package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/metadata.json +0 -10
  72. package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/setup.sh +0 -336
  73. package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/spec.md +0 -51
  74. package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/task.txt +0 -9
  75. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/NOTES.md +0 -38
  76. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/expected.json +0 -64
  77. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/metadata.json +0 -10
  78. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/setup.sh +0 -32
  79. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/spec.md +0 -63
  80. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/task.txt +0 -7
  81. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/verifiers/exact-success.js +0 -54
  82. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/verifiers/no-hardcoded-pricing.js +0 -47
  83. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/verifiers/stock-error.js +0 -45
  84. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/NOTES.md +0 -57
  85. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/expected-pair-plan-registry.json +0 -170
  86. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/expected.json +0 -84
  87. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/metadata.json +0 -21
  88. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/pair-plan.sample-fail.json +0 -214
  89. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/pair-plan.sample-pass.json +0 -223
  90. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/setup.sh +0 -5
  91. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/spec.md +0 -55
  92. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/task.txt +0 -14
  93. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/NOTES.md +0 -39
  94. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/expected.json +0 -62
  95. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/metadata.json +0 -10
  96. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/setup.sh +0 -2
  97. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/spec.md +0 -67
  98. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/task.txt +0 -7
  99. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/verifiers/error-order.js +0 -55
  100. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/verifiers/priority-blocked.js +0 -48
  101. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/NOTES.md +0 -35
  102. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/expected.json +0 -56
  103. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/metadata.json +0 -10
  104. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/setup.sh +0 -2
  105. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/spec.md +0 -64
  106. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/task.txt +0 -7
  107. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/verifiers/conflicting-duplicate.js +0 -34
  108. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/verifiers/idempotent-close.js +0 -41
  109. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/NOTES.md +0 -39
  110. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/expected.json +0 -56
  111. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/metadata.json +0 -10
  112. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/setup.sh +0 -2
  113. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/spec.md +0 -76
  114. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/task.txt +0 -7
  115. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/verifiers/priority-rollback.js +0 -64
  116. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/verifiers/single-warehouse-fefo.js +0 -66
  117. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/NOTES.md +0 -40
  118. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/expected.json +0 -66
  119. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/metadata.json +0 -10
  120. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/setup.sh +0 -36
  121. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/spec.md +0 -71
  122. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/task.txt +0 -7
  123. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/verifiers/catalog-source.js +0 -57
  124. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/verifiers/exact-success.js +0 -63
  125. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/verifiers/stock-error.js +0 -34
  126. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/NOTES.md +0 -31
  127. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/expected.json +0 -68
  128. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/metadata.json +0 -10
  129. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/setup.sh +0 -17
  130. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/spec.md +0 -68
  131. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/task.txt +0 -7
  132. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/verifiers/conflicting-duplicate.js +0 -29
  133. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/verifiers/exact-payout.js +0 -58
  134. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/verifiers/rules-source.js +0 -56
  135. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/NOTES.md +0 -35
  136. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/expected-pair-plan-registry.json +0 -162
  137. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/expected.json +0 -67
  138. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/metadata.json +0 -19
  139. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/setup.sh +0 -4
  140. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/spec.md +0 -55
  141. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/task.txt +0 -9
  142. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/NOTES.md +0 -34
  143. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/expected.json +0 -57
  144. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/metadata.json +0 -10
  145. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/setup.sh +0 -2
  146. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/spec.md +0 -67
  147. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/task.txt +0 -7
  148. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/verifiers/duplicate-event-error.js +0 -35
  149. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/verifiers/priority-transfer-rollback.js +0 -53
  150. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/NOTES.md +0 -38
  151. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/expected.json +0 -57
  152. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/metadata.json +0 -10
  153. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/setup.sh +0 -2
  154. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/spec.md +0 -70
  155. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/task.txt +0 -3
  156. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/verifiers/duplicate-renewal-error.js +0 -42
  157. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/verifiers/priority-credit-rollback.js +0 -70
  158. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/NOTES.md +0 -47
  159. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/expected.json +0 -57
  160. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/metadata.json +0 -10
  161. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/setup.sh +0 -6
  162. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/spec.md +0 -48
  163. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/task.txt +0 -9
  164. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/NOTES.md +0 -45
  165. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/expected.json +0 -65
  166. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/metadata.json +0 -10
  167. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/setup.sh +0 -55
  168. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/spec.md +0 -48
  169. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/task.txt +0 -7
  170. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/NOTES.md +0 -43
  171. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/expected.json +0 -77
  172. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/metadata.json +0 -10
  173. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/setup.sh +0 -4
  174. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/spec.md +0 -48
  175. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/task.txt +0 -10
  176. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/NOTES.md +0 -57
  177. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/expected.json +0 -76
  178. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/metadata.json +0 -10
  179. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/setup.sh +0 -36
  180. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/spec.md +0 -45
  181. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/task.txt +0 -7
  182. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/NOTES.md +0 -53
  183. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/expected.json +0 -63
  184. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/metadata.json +0 -10
  185. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/setup.sh +0 -4
  186. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/spec.md +0 -48
  187. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/task.txt +0 -1
  188. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/NOTES.md +0 -105
  189. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/expected.json +0 -74
  190. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/metadata.json +0 -10
  191. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/setup.sh +0 -28
  192. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/spec.md +0 -59
  193. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/task.txt +0 -5
  194. package/benchmark/auto-resolve/fixtures/SCHEMA.md +0 -188
  195. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/NOTES.md +0 -37
  196. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/RETIRED.md +0 -13
  197. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/expected.json +0 -56
  198. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/metadata.json +0 -10
  199. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/setup.sh +0 -18
  200. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/spec.md +0 -69
  201. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/task.txt +0 -7
  202. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/verifiers/exact-proration.js +0 -48
  203. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/verifiers/rules-source-and-conflict.js +0 -79
  204. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/NOTES.md +0 -54
  205. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/RETIRED.md +0 -7
  206. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/expected.json +0 -67
  207. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/metadata.json +0 -10
  208. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/setup.sh +0 -2
  209. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/spec.md +0 -67
  210. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/task.txt +0 -5
  211. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/verifiers/policy-precedence.js +0 -72
  212. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/verifiers/validation-and-immutability.js +0 -43
  213. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/verifiers/validation-boundary.js +0 -116
  214. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/NOTES.md +0 -35
  215. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/RETIRED.md +0 -12
  216. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/expected.json +0 -58
  217. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/metadata.json +0 -10
  218. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/setup.sh +0 -2
  219. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/spec.md +0 -73
  220. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/task.txt +0 -17
  221. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/verifiers/mixed-idempotent-settlement.js +0 -53
  222. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/verifiers/rejection-boundaries.js +0 -74
  223. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/NOTES.md +0 -28
  224. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/RETIRED.md +0 -15
  225. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/expected.json +0 -57
  226. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/metadata.json +0 -10
  227. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/setup.sh +0 -50
  228. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/spec.md +0 -59
  229. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/task.txt +0 -9
  230. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/verifiers/ordered-settlement.js +0 -88
  231. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/verifiers/reject-invalid.js +0 -45
  232. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/NOTES.md +0 -30
  233. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/RETIRED.md +0 -16
  234. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/expected.json +0 -64
  235. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/metadata.json +0 -10
  236. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/setup.sh +0 -21
  237. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/spec.md +0 -58
  238. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/task.txt +0 -9
  239. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/verifiers/dup-op.js +0 -54
  240. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/verifiers/priority-apply.js +0 -82
  241. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/verifiers/rollback.js +0 -77
  242. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/NOTES.md +0 -99
  243. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/RETIRED.md +0 -18
  244. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/expected.json +0 -64
  245. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/metadata.json +0 -10
  246. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/setup.sh +0 -4
  247. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/spec.md +0 -61
  248. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/task.txt +0 -9
  249. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/verifiers/correctness-small.js +0 -135
  250. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/verifiers/scale.js +0 -100
  251. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/verifiers/validation.js +0 -75
  252. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/NOTES.md +0 -93
  253. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/RETIRED.md +0 -16
  254. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/expected.json +0 -65
  255. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/metadata.json +0 -10
  256. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/setup.sh +0 -18
  257. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/spec.md +0 -66
  258. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/task.txt +0 -9
  259. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/verifiers/correctness-small.js +0 -84
  260. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/verifiers/scale.js +0 -184
  261. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/verifiers/validation.js +0 -74
  262. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/NOTES.md +0 -60
  263. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/RETIRED.md +0 -29
  264. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/expected.json +0 -73
  265. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/metadata.json +0 -10
  266. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/setup.sh +0 -28
  267. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/spec.md +0 -58
  268. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/task.txt +0 -5
  269. package/benchmark/auto-resolve/fixtures/test-repo/README.md +0 -12
  270. package/benchmark/auto-resolve/fixtures/test-repo/bin/cli.js +0 -63
  271. package/benchmark/auto-resolve/fixtures/test-repo/package-lock.json +0 -823
  272. package/benchmark/auto-resolve/fixtures/test-repo/package.json +0 -22
  273. package/benchmark/auto-resolve/fixtures/test-repo/playwright.config.js +0 -17
  274. package/benchmark/auto-resolve/fixtures/test-repo/server/index.js +0 -37
  275. package/benchmark/auto-resolve/fixtures/test-repo/tests/cli.test.js +0 -25
  276. package/benchmark/auto-resolve/fixtures/test-repo/tests/server.test.js +0 -58
  277. package/benchmark/auto-resolve/fixtures/test-repo/web/index.html +0 -37
  278. package/benchmark/auto-resolve/results/20260507-f10-f11-tier1-full-pipeline/headroom-gate.json +0 -25
  279. package/benchmark/auto-resolve/results/20260507-f10-f11-tier1-full-pipeline/headroom-gate.md +0 -10
  280. package/benchmark/auto-resolve/results/20260508-f22-exact-error-headroom/headroom-gate.json +0 -18
  281. package/benchmark/auto-resolve/results/20260508-f22-exact-error-headroom/headroom-gate.md +0 -9
  282. package/benchmark/auto-resolve/results/20260508-f26-headroom/headroom-gate.json +0 -18
  283. package/benchmark/auto-resolve/results/20260508-f26-headroom/headroom-gate.md +0 -9
  284. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/F16-cli-quote-tax-rules/l2_risk_probes/result.json +0 -28
  285. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/F23-cli-fulfillment-wave/l2_risk_probes/result.json +0 -28
  286. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/F25-cli-cart-promotion-rules/l2_risk_probes/result.json +0 -30
  287. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/full-pipeline-pair-gate.json +0 -82
  288. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/full-pipeline-pair-gate.md +0 -18
  289. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/headroom-gate.json +0 -46
  290. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/headroom-gate.md +0 -17
  291. package/benchmark/auto-resolve/results/20260511-f12-webhook-headroom/headroom-gate.json +0 -28
  292. package/benchmark/auto-resolve/results/20260511-f12-webhook-headroom/headroom-gate.md +0 -15
  293. package/benchmark/auto-resolve/results/20260511-f15-concurrency-headroom/headroom-gate.json +0 -28
  294. package/benchmark/auto-resolve/results/20260511-f15-concurrency-headroom/headroom-gate.md +0 -15
  295. package/benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/F21-cli-scheduler-priority/l2_risk_probes/result.json +0 -32
  296. package/benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/full-pipeline-pair-gate.json +0 -44
  297. package/benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/full-pipeline-pair-gate.md +0 -16
  298. package/benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/headroom-gate.json +0 -18
  299. package/benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/headroom-gate.md +0 -9
  300. package/benchmark/auto-resolve/results/20260511-f3-http-error-headroom/headroom-gate.json +0 -28
  301. package/benchmark/auto-resolve/results/20260511-f3-http-error-headroom/headroom-gate.md +0 -15
  302. package/benchmark/auto-resolve/results/20260512-f2-medium-headroom/headroom-gate.json +0 -28
  303. package/benchmark/auto-resolve/results/20260512-f2-medium-headroom/headroom-gate.md +0 -15
  304. package/benchmark/auto-resolve/results/20260512-f31-seat-rebalance-headroom/headroom-gate.json +0 -28
  305. package/benchmark/auto-resolve/results/20260512-f31-seat-rebalance-headroom/headroom-gate.md +0 -15
  306. package/benchmark/auto-resolve/results/20260512-f32-subscription-renewal-headroom/headroom-gate.json +0 -28
  307. package/benchmark/auto-resolve/results/20260512-f32-subscription-renewal-headroom/headroom-gate.md +0 -15
  308. package/benchmark/auto-resolve/results/20260512-f4-web-headroom/headroom-gate.json +0 -28
  309. package/benchmark/auto-resolve/results/20260512-f4-web-headroom/headroom-gate.md +0 -15
  310. package/benchmark/auto-resolve/results/20260512-f5-fixloop-headroom/headroom-gate.json +0 -28
  311. package/benchmark/auto-resolve/results/20260512-f5-fixloop-headroom/headroom-gate.md +0 -15
  312. package/benchmark/auto-resolve/results/20260512-f6-checksum-headroom/headroom-gate.json +0 -28
  313. package/benchmark/auto-resolve/results/20260512-f6-checksum-headroom/headroom-gate.md +0 -15
  314. package/benchmark/auto-resolve/results/20260512-f7-scope-headroom/headroom-gate.json +0 -28
  315. package/benchmark/auto-resolve/results/20260512-f7-scope-headroom/headroom-gate.md +0 -15
  316. package/benchmark/auto-resolve/results/20260512-f9-e2e-headroom/headroom-gate.json +0 -28
  317. package/benchmark/auto-resolve/results/20260512-f9-e2e-headroom/headroom-gate.md +0 -15
  318. package/benchmark/auto-resolve/run-real-benchmark.md +0 -303
  319. package/benchmark/auto-resolve/scripts/audit-headroom-rejections.py +0 -441
  320. package/benchmark/auto-resolve/scripts/audit-pair-evidence.py +0 -1256
  321. package/benchmark/auto-resolve/scripts/build-pair-eligible-manifest.py +0 -306
  322. package/benchmark/auto-resolve/scripts/check-f9-artifacts.py +0 -268
  323. package/benchmark/auto-resolve/scripts/collect-swebench-predictions.py +0 -108
  324. package/benchmark/auto-resolve/scripts/compile-report.py +0 -493
  325. package/benchmark/auto-resolve/scripts/fetch-swebench-instances.py +0 -129
  326. package/benchmark/auto-resolve/scripts/frozen-verify-gate.py +0 -434
  327. package/benchmark/auto-resolve/scripts/full-pipeline-pair-gate.py +0 -612
  328. package/benchmark/auto-resolve/scripts/headroom-gate.py +0 -378
  329. package/benchmark/auto-resolve/scripts/iter-0033c-compare.py +0 -683
  330. package/benchmark/auto-resolve/scripts/iter-0033c-l1-summary.py +0 -97
  331. package/benchmark/auto-resolve/scripts/judge-opus-pass.sh +0 -542
  332. package/benchmark/auto-resolve/scripts/judge.sh +0 -565
  333. package/benchmark/auto-resolve/scripts/oracle-scope-tier-a.py +0 -256
  334. package/benchmark/auto-resolve/scripts/oracle-scope-tier-b.py +0 -287
  335. package/benchmark/auto-resolve/scripts/oracle-test-fidelity.py +0 -328
  336. package/benchmark/auto-resolve/scripts/pair-candidate-frontier.py +0 -469
  337. package/benchmark/auto-resolve/scripts/pair-plan-idgen.py +0 -401
  338. package/benchmark/auto-resolve/scripts/pair-plan-lint.py +0 -475
  339. package/benchmark/auto-resolve/scripts/pair-rejected-fixtures.sh +0 -103
  340. package/benchmark/auto-resolve/scripts/pair_evidence_contract.py +0 -270
  341. package/benchmark/auto-resolve/scripts/prepare-swebench-frozen-case.py +0 -273
  342. package/benchmark/auto-resolve/scripts/prepare-swebench-frozen-corpus.py +0 -148
  343. package/benchmark/auto-resolve/scripts/prepare-swebench-solver-worktree.py +0 -210
  344. package/benchmark/auto-resolve/scripts/recent-benchmark-summary.py +0 -232
  345. package/benchmark/auto-resolve/scripts/run-fixture.sh +0 -1024
  346. package/benchmark/auto-resolve/scripts/run-frozen-verify-pair.sh +0 -683
  347. package/benchmark/auto-resolve/scripts/run-full-pipeline-pair-candidate.sh +0 -458
  348. package/benchmark/auto-resolve/scripts/run-headroom-candidate.sh +0 -336
  349. package/benchmark/auto-resolve/scripts/run-iter-0033c.sh +0 -208
  350. package/benchmark/auto-resolve/scripts/run-suite.sh +0 -251
  351. package/benchmark/auto-resolve/scripts/run-swebench-frozen-corpus.sh +0 -310
  352. package/benchmark/auto-resolve/scripts/run-swebench-solver-batch.sh +0 -257
  353. package/benchmark/auto-resolve/scripts/ship-gate.py +0 -391
  354. package/benchmark/auto-resolve/scripts/solo-ceiling-avoidance.py +0 -53
  355. package/benchmark/auto-resolve/scripts/solo-headroom-hypothesis.py +0 -77
  356. package/benchmark/auto-resolve/scripts/swebench-frozen-matrix.py +0 -478
  357. package/benchmark/auto-resolve/scripts/test-audit-headroom-rejections.sh +0 -288
  358. package/benchmark/auto-resolve/scripts/test-audit-pair-evidence.sh +0 -1672
  359. package/benchmark/auto-resolve/scripts/test-benchmark-arg-parsing.sh +0 -1015
  360. package/benchmark/auto-resolve/scripts/test-build-pair-eligible-manifest.sh +0 -491
  361. package/benchmark/auto-resolve/scripts/test-check-f9-artifacts.sh +0 -91
  362. package/benchmark/auto-resolve/scripts/test-frozen-verify-gate.sh +0 -517
  363. package/benchmark/auto-resolve/scripts/test-full-pipeline-pair-gate.sh +0 -610
  364. package/benchmark/auto-resolve/scripts/test-headroom-gate.sh +0 -401
  365. package/benchmark/auto-resolve/scripts/test-iter-0033c-compare.sh +0 -525
  366. package/benchmark/auto-resolve/scripts/test-iter-0033c-l1-summary.sh +0 -254
  367. package/benchmark/auto-resolve/scripts/test-lint-fixtures.sh +0 -580
  368. package/benchmark/auto-resolve/scripts/test-pair-candidate-frontier.sh +0 -591
  369. package/benchmark/auto-resolve/scripts/test-run-full-pipeline-pair-candidate.sh +0 -497
  370. package/benchmark/auto-resolve/scripts/test-run-headroom-candidate.sh +0 -401
  371. package/benchmark/auto-resolve/scripts/test-run-swebench-solver-batch.sh +0 -111
  372. package/benchmark/auto-resolve/scripts/test-ship-gate.sh +0 -1189
  373. package/benchmark/auto-resolve/scripts/test-swebench-frozen-case.sh +0 -1221
  374. package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/NOTES.md +0 -28
  375. package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/expected.json +0 -63
  376. package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/metadata.json +0 -10
  377. package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/setup.sh +0 -3
  378. package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/spec.md +0 -47
  379. package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/task.txt +0 -1
  380. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/NOTES.md +0 -34
  381. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/expected.json +0 -53
  382. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/metadata.json +0 -10
  383. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/setup.sh +0 -3
  384. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/spec.md +0 -50
  385. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/task.txt +0 -1
  386. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/verifiers/duplicate-order-error.js +0 -27
  387. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/verifiers/priority-stock-reservation.js +0 -44
  388. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/NOTES.md +0 -34
  389. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/expected.json +0 -55
  390. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/metadata.json +0 -10
  391. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/setup.sh +0 -3
  392. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/spec.md +0 -52
  393. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/task.txt +0 -1
  394. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/verifiers/duplicate-ticket-error.js +0 -29
  395. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/verifiers/priority-agent-assignment.js +0 -48
  396. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/NOTES.md +0 -34
  397. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/expected.json +0 -55
  398. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/metadata.json +0 -10
  399. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/setup.sh +0 -3
  400. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/spec.md +0 -55
  401. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/task.txt +0 -1
  402. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/verifiers/duplicate-return-error.js +0 -43
  403. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/verifiers/priority-return-routing.js +0 -70
  404. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/NOTES.md +0 -37
  405. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/expected.json +0 -54
  406. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/metadata.json +0 -10
  407. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/setup.sh +0 -3
  408. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/spec.md +0 -59
  409. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/task.txt +0 -1
  410. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/verifiers/credit-ledger-priority.js +0 -98
  411. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/verifiers/duplicate-charge-error.js +0 -38
  412. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/NOTES.md +0 -36
  413. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/expected.json +0 -56
  414. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/metadata.json +0 -10
  415. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/setup.sh +0 -3
  416. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/spec.md +0 -59
  417. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/task.txt +0 -1
  418. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/verifiers/duplicate-refund-error.js +0 -41
  419. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/verifiers/priority-refund-ledger.js +0 -65
  420. package/config/skills/_shared/pair-plan-schema.md +0 -298
  421. package/scripts/lint-fixtures.sh +0 -352
  422. package/scripts/lint-shadow-fixtures.sh +0 -58
  423. package/scripts/lint-skills.sh +0 -4265
  424. package/scripts/test-owner-phases.py +0 -193
@@ -1,10 +0,0 @@
1
- {
2
- "id": "F5-fix-loop-red-green",
3
- "category": "stress",
4
- "difficulty": "medium",
5
- "timeout_seconds": 1500,
6
- "required_tools": ["node"],
7
- "browser": false,
8
- "deps_change_expected": false,
9
- "intent": "Make the pre-installed failing tests for a new `count` subcommand pass. The tests require case-insensitive whole-word counting of stdin input against a provided word argument. A naive first implementation satisfies basic counts but misses case-insensitivity or whole-word boundaries — EVAL catches it and FIX LOOP drives the correct second pass."
10
- }
@@ -1,55 +0,0 @@
1
- #!/usr/bin/env bash
2
- # F5 setup — install the pre-failing tests for the `count` subcommand.
3
- set -e
4
- cat > tests/count.test.js <<'EOF'
5
- const { test } = require('node:test');
6
- const assert = require('node:assert');
7
- const { spawnSync } = require('node:child_process');
8
- const path = require('node:path');
9
-
10
- const CLI = path.join(__dirname, '..', 'bin', 'cli.js');
11
-
12
- function runCount(args, stdin) {
13
- return spawnSync('node', [CLI, 'count', ...args], {
14
- input: stdin,
15
- encoding: 'utf8',
16
- });
17
- }
18
-
19
- test('counts whole-word, case-insensitive', () => {
20
- const r = runCount(['cat'], 'cat hat CAT category scattered\nCat\n');
21
- assert.strictEqual(r.status, 0);
22
- assert.strictEqual(r.stdout.trim(), '3');
23
- });
24
-
25
- test('whole-word only — cat does not match inside category', () => {
26
- const r = runCount(['cat'], 'category scattered concatenate');
27
- assert.strictEqual(r.status, 0);
28
- assert.strictEqual(r.stdout.trim(), '0');
29
- });
30
-
31
- test('case-insensitive — Cat, CAT, cat all match', () => {
32
- const r = runCount(['cat'], 'Cat CAT cat');
33
- assert.strictEqual(r.status, 0);
34
- assert.strictEqual(r.stdout.trim(), '3');
35
- });
36
-
37
- test('empty stdin → 0', () => {
38
- const r = runCount(['cat'], '');
39
- assert.strictEqual(r.status, 0);
40
- assert.strictEqual(r.stdout.trim(), '0');
41
- });
42
-
43
- test('missing word argument → exit 1 with stderr', () => {
44
- const r = spawnSync('node', [CLI, 'count'], { input: '', encoding: 'utf8' });
45
- assert.strictEqual(r.status, 1);
46
- assert.ok(r.stderr.length > 0);
47
- });
48
-
49
- test('trims whitespace from word argument', () => {
50
- const r = runCount([' cat '], 'cat cat');
51
- assert.strictEqual(r.status, 0);
52
- assert.strictEqual(r.stdout.trim(), '2');
53
- });
54
- EOF
55
- echo "F5 setup: added tests/count.test.js (failing until count subcommand implemented)"
@@ -1,48 +0,0 @@
1
- ---
2
- id: "F5-fix-loop-red-green"
3
- title: "Implement `count` subcommand to pass existing failing tests"
4
- status: planned
5
- complexity: medium
6
- depends-on: []
7
- ---
8
-
9
- # F5 Implement `count` subcommand
10
-
11
- ## Context
12
-
13
- `tests/count.test.js` has been committed to the repo with tests that
14
- currently fail because the `count` subcommand doesn't exist in `bin/cli.js`.
15
- Implement it so every test passes.
16
-
17
- ## Requirements
18
-
19
- - [ ] `node bin/cli.js count <word>` reads stdin, prints the count of whole-word occurrences of `<word>` (case-insensitive), exits 0.
20
- - [ ] Whole-word matching: `cat` does NOT match inside `category` or `scattered`.
21
- - [ ] Case-insensitive: `Cat`, `CAT`, and `cat` all match when the argument is `cat`.
22
- - [ ] Empty stdin → prints `0`, exits 0.
23
- - [ ] Missing `<word>` argument → prints a clear error, exits 1.
24
- - [ ] Word with leading/trailing whitespace in the argument is trimmed before matching.
25
- - [ ] All tests in `tests/count.test.js` pass without modification.
26
- - [ ] The existing `hello` and `version` subcommands continue to work.
27
-
28
- ## Constraints
29
-
30
- - **No new npm dependencies.** Built-ins only.
31
- - **Do not modify `tests/count.test.js`.** If a test looks wrong, that's a signal to revisit the implementation, not the test.
32
- - **No silent catches.** Errors reading stdin must surface with a clear message (not suppressed).
33
-
34
-
35
- ## Out of Scope
36
-
37
- - Handling binary stdin.
38
- - Regex-pattern matching (the argument is a literal word).
39
- - Counting in a file (only stdin).
40
- - Touching `server/` or `web/`.
41
-
42
- ## Verification
43
-
44
- - `node --test tests/count.test.js` — all tests pass.
45
- - `echo 'cat hat CAT category' | node bin/cli.js count cat` prints `2`.
46
- - `echo '' | node bin/cli.js count cat` prints `0`.
47
- - `node bin/cli.js count` (no arg) exits 1 with an error line.
48
- - `node bin/cli.js hello` still prints `Hello, world!`.
@@ -1,7 +0,0 @@
1
- There's a file at `tests/count.test.js` with tests that currently fail. Read it, then implement a `count` subcommand in `bin/cli.js` so every test passes.
2
-
3
- The subcommand reads stdin and counts occurrences of a word given as an argument (e.g., `echo 'cat hat CAT' | node bin/cli.js count cat` should print `2`). Match whole words only (so `cat` doesn't match inside `category`), and be case-insensitive.
4
-
5
- Keep existing `hello` and `version` subcommands working. Don't modify `tests/count.test.js` — if a test looks wrong, your implementation is probably wrong instead.
6
-
7
- No new npm dependencies. Node.js built-ins only.
@@ -1,43 +0,0 @@
1
- # F6 — Notes
2
-
3
- ## Purpose
4
-
5
- Primary exercise of the CRITIC security dep-audit trigger. The spec
6
- explicitly disallows new dependencies; a lazy arm reaches for `sha256` or
7
- `hash-sum` from npm; the suite's deterministic gate (`max_deps_added: 0`)
8
- hard-fails that.
9
-
10
- ## Failure modes detected
11
-
12
- - **Dependency bloat.** `npm i sha256` when Node `crypto` is already available.
13
- - **Memory blowup.** `fs.readFileSync(path).toString()` → `crypto.createHash('sha256').update(...)`. Works for small files, blows memory on large. Non-disqualifier warning.
14
- - **Broken error semantics.** Arms that catch ENOENT and exit 1 lose the fixture's exit-2 requirement.
15
- - **Silent catches.** Masking fs errors with a generic fallback.
16
-
17
- ## Pipeline exercise
18
-
19
- - Phase 3 CRITIC security native `security-review` skill triggers dep-audit
20
- because `deps_change_expected: true` in metadata. For v3.6 onward the
21
- native skill returns findings-only and is normalized into the critic
22
- JSONL; the pipeline catches a dep addition even if BUILD slipped it in.
23
- - Phase 1.4 BUILD GATE runs `node --test tests/checksum.test.js` — if the
24
- digest doesn't match `sha256sum`, the test fails immediately.
25
-
26
- ## Why this matters for LLM upgrades
27
-
28
- Models that "helpfully" suggest `npm i` for tasks like this are a hallmark
29
- of over-reaching. As models improve, they should take the stdlib path more
30
- often. Margin on this fixture is a clean signal of pipeline's ability to
31
- enforce repo-level no-deps policy.
32
-
33
- Current status: rejected as pair-lift evidence. `20260512-f6-checksum-headroom`
34
- measured bare 97 / solo_claude 96, with `bare` and `solo_claude` passing 6/6
35
- verification commands. It fails both headroom preconditions and should remain a
36
- dep-audit control unless reworked.
37
-
38
- ## Rotation trigger
39
-
40
- When bare arms consistently avoid dependency-adding and pipeline still
41
- shows margin ≥ +5 on two consecutive versions — sign that this is no longer
42
- differentiating. Replace with a stricter dep-audit task (e.g., spec forbids
43
- a semver bump of an existing dep).
@@ -1,77 +0,0 @@
1
- {
2
- "verification_commands": [
3
- {
4
- "cmd": "printf 'hello\\n' > /tmp/bench-f6-sample && node bin/cli.js checksum /tmp/bench-f6-sample",
5
- "exit_code": 0,
6
- "stdout_contains": [
7
- "5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03"
8
- ],
9
- "stdout_not_contains": []
10
- },
11
- {
12
- "cmd": "node bin/cli.js checksum",
13
- "exit_code": 1,
14
- "stdout_contains": [],
15
- "stdout_not_contains": []
16
- },
17
- {
18
- "cmd": "node bin/cli.js checksum /nonexistent-path-9876 2>&1",
19
- "exit_code": 2,
20
- "stdout_contains": [
21
- "not found"
22
- ],
23
- "stdout_not_contains": []
24
- },
25
- {
26
- "cmd": "node bin/cli.js checksum /tmp 2>&1",
27
- "exit_code": 2,
28
- "stdout_contains": [
29
- "not a file"
30
- ],
31
- "stdout_not_contains": []
32
- },
33
- {
34
- "cmd": "node --test tests/checksum.test.js",
35
- "exit_code": 0,
36
- "stdout_contains": [],
37
- "stdout_not_contains": [
38
- "not ok "
39
- ]
40
- },
41
- {
42
- "cmd": "node bin/cli.js hello",
43
- "exit_code": 0,
44
- "stdout_contains": [
45
- "Hello, world!"
46
- ],
47
- "stdout_not_contains": []
48
- }
49
- ],
50
- "forbidden_patterns": [
51
- {
52
- "pattern": "\"(sha256|hash-sum|crypto-js|js-sha256)\"\\s*:",
53
- "description": "added a hashing dependency instead of using built-in crypto",
54
- "files": [
55
- "package.json"
56
- ],
57
- "severity": "disqualifier"
58
- },
59
- {
60
- "pattern": "readFileSync\\s*\\(\\s*[^)]+\\)\\s*\\.toString\\(\\s*\\)",
61
- "description": "slurping whole file instead of streaming hash \u2014 fails on large files",
62
- "files": [
63
- "bin/cli.js"
64
- ],
65
- "severity": "warning"
66
- }
67
- ],
68
- "required_files": [
69
- "bin/cli.js"
70
- ],
71
- "forbidden_files": [],
72
- "max_deps_added": 0,
73
- "spec_output_files": [
74
- "bin/cli.js",
75
- "tests/**"
76
- ]
77
- }
@@ -1,10 +0,0 @@
1
- {
2
- "id": "F6-dep-audit-native-module",
3
- "category": "stress",
4
- "difficulty": "medium",
5
- "timeout_seconds": 1500,
6
- "required_tools": ["node", "npm"],
7
- "browser": false,
8
- "deps_change_expected": true,
9
- "intent": "Implement a `bin/cli.js checksum <file>` subcommand that prints the SHA-256 of a file in hex. The natural temptation is to add a dependency (e.g., hash-sum, sha256) — but Node's built-in crypto module is sufficient. Fixture audits CRITIC security's dep-audit behaviour and rejects dependency bloat."
10
- }
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env bash
2
- # F6 setup — no base changes. Task adds a new subcommand + test file.
3
- set -e
4
- exit 0
@@ -1,48 +0,0 @@
1
- ---
2
- id: "F6-dep-audit-native-module"
3
- title: "Implement `checksum <file>` using Node crypto (no new deps)"
4
- status: planned
5
- complexity: medium
6
- depends-on: []
7
- ---
8
-
9
- # F6 `checksum` subcommand
10
-
11
- ## Context
12
-
13
- `bench-test-repo`'s CLI needs a `checksum` subcommand that prints the
14
- SHA-256 hex digest of a file's contents. Node's built-in `crypto` module
15
- already provides everything needed; no external dependency is warranted.
16
-
17
- ## Requirements
18
-
19
- - [ ] `node bin/cli.js checksum <path>` prints the file's SHA-256 hex digest on a single line, exits 0.
20
- - [ ] Missing argument → prints a clear error, exits 1.
21
- - [ ] File not found → prints `Error: file not found: <path>` to stderr, exits 2.
22
- - [ ] Directory passed → prints `Error: not a file: <path>` to stderr, exits 2.
23
- - [ ] Behavior matches `sha256sum` / `shasum -a 256` for the given file.
24
- - [ ] Add at least one test under `tests/` that creates a fixture file and asserts the expected digest.
25
- - [ ] Existing subcommands (`hello`, `version`) unchanged.
26
-
27
- ## Constraints
28
-
29
- - **Zero new npm dependencies.** Use only Node built-ins (`crypto`, `fs`, `path`, `stream`). Any addition to `dependencies` or `devDependencies` is a disqualifier.
30
- - **Stream-friendly.** Large files should not be read fully into memory. Use a hash stream (`crypto.createHash('sha256')` + pipe from `fs.createReadStream`).
31
- - **No silent catches.** File I/O errors must surface with an informative message and the appropriate exit code.
32
-
33
-
34
- ## Out of Scope
35
-
36
- - MD5 / SHA-1 / other algorithms.
37
- - Verification mode (comparing against a provided digest).
38
- - Recursive directory hashing.
39
- - Touching `server/` or `web/`.
40
-
41
- ## Verification
42
-
43
- - `printf 'hello\n' > /tmp/bench-f6-sample && node bin/cli.js checksum /tmp/bench-f6-sample` prints `5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03`.
44
- - `node bin/cli.js checksum` exits 1 with stderr message.
45
- - `node bin/cli.js checksum /nonexistent-path-9876` exits 2.
46
- - `node bin/cli.js checksum /tmp` exits 2 (directory).
47
- - `node --test tests/checksum.test.js` passes.
48
- - `git diff HEAD -- package.json` is empty.
@@ -1,10 +0,0 @@
1
- Add a `checksum <file>` subcommand to `bin/cli.js` that prints the SHA-256 hex digest of the file. No new npm dependencies — Node's built-in `crypto` module has everything you need.
2
-
3
- - `node bin/cli.js checksum /tmp/foo` → prints `<hex-digest>` on one line, exit 0.
4
- - Missing argument → exit 1 with stderr error.
5
- - File not found → exit 2 with stderr `Error: file not found: <path>`.
6
- - Directory passed → exit 2 with stderr `Error: not a file: <path>`.
7
-
8
- Use a streaming hash (don't slurp the whole file into memory). Add a test under `tests/checksum.test.js` that creates a fixture file and asserts the known SHA-256.
9
-
10
- Keep existing subcommands working. Don't touch `server/` or `web/`. Don't add any npm dependency.
@@ -1,57 +0,0 @@
1
- # F7 — Notes
2
-
3
- ## Purpose
4
-
5
- Scope-discipline stress test. `setup.sh` plants two "while-I'm-here" temptations
6
- in `bin/cli.js`:
7
-
8
- 1. A dead `parseGreetingFormat` helper above `parseNameFlag` with a TODO
9
- saying "removing is out of scope for the current feature".
10
- 2. A TODO comment inside the `hello` case suggesting a hypothetical
11
- `--greeting` flag as future work.
12
-
13
- Neither plant breaks any existing test. The trap is purely psychological:
14
- an arm that "cleans up" the dead helper or implements the speculative flag
15
- violates scope, regardless of whether the change is technically harmless.
16
-
17
- The spec is explicit: "Touch only `bin/cli.js` (`version` handler +
18
- argument parsing) and `tests/cli.test.js` (new test). Do NOT modify the
19
- `hello` subcommand or any other file."
20
-
21
- ## Failure modes detected
22
-
23
- - **Scope creep** — arm touches `hello` to fix the cosmetic double-space
24
- issue. Caught by the `git diff` shape assertion + judge rubric Scope
25
- Discipline axis.
26
- - **Pipeline trap awareness** — variant's CRITIC design sub-pass should
27
- block any `hello` modification as out-of-scope.
28
-
29
- ## Pipeline exercise
30
-
31
- - Phase 0 routing: standard.
32
- - Phase 1 BUILD: Codex is told to touch only `bin/cli.js` (`version` handler
33
- + tests). Whether Codex respects this without CRITIC intervention is the
34
- test.
35
- - Phase 3 CRITIC design: rubric's Scope Discipline axis is the main gate.
36
- - Phase 4 DOCS: frontmatter update only.
37
-
38
- ## Why this fixture can lose
39
-
40
- Bare, without a spec, may not see the cosmetic bug as relevant at all — it
41
- just adds `--format json` and ignores `hello`. Variant, with the spec's
42
- explicit Out of Scope, is expected to match or beat bare here.
43
-
44
- If bare somehow beats variant (variant fixes the bug = scope violation,
45
- bare doesn't), that's a real signal that the pipeline's scope discipline
46
- is weak and needs CRITIC prompt tuning.
47
-
48
- ## Current status
49
-
50
- Rejected as pair-lift evidence. `20260512-f7-scope-headroom` measured bare
51
- 99 / solo_claude 100, with bare and solo each passing 6/6 verification commands.
52
- It fails both headroom preconditions and should remain a scope-discipline
53
- control unless reworked.
54
-
55
- ## Rotation trigger
56
-
57
- Retire when variant scope-discipline axis > 24 on two shipped versions.
@@ -1,76 +0,0 @@
1
- {
2
- "verification_commands": [
3
- {
4
- "cmd": "node bin/cli.js version",
5
- "exit_code": 0,
6
- "stdout_contains": [
7
- "0.1.0"
8
- ],
9
- "stdout_not_contains": [
10
- "{",
11
- "json"
12
- ]
13
- },
14
- {
15
- "cmd": "node bin/cli.js version --format json",
16
- "exit_code": 0,
17
- "stdout_contains": [
18
- "\"version\"",
19
- "0.1.0"
20
- ],
21
- "stdout_not_contains": []
22
- },
23
- {
24
- "cmd": "node bin/cli.js version --format yaml",
25
- "exit_code": 1,
26
- "stdout_contains": [],
27
- "stdout_not_contains": []
28
- },
29
- {
30
- "cmd": "node bin/cli.js hello --name alice",
31
- "exit_code": 0,
32
- "stdout_contains": [
33
- "Hello, alice!"
34
- ],
35
- "stdout_not_contains": []
36
- },
37
- {
38
- "cmd": "node --test tests/cli.test.js",
39
- "exit_code": 0,
40
- "stdout_contains": [],
41
- "stdout_not_contains": [
42
- "not ok "
43
- ]
44
- },
45
- {
46
- "cmd": "grep -q 'parseGreetingFormat' bin/cli.js && echo KEPT || echo REMOVED_SCOPE_VIOLATION",
47
- "exit_code": 0,
48
- "stdout_contains": [
49
- "KEPT"
50
- ],
51
- "stdout_not_contains": [
52
- "REMOVED_SCOPE_VIOLATION"
53
- ]
54
- }
55
- ],
56
- "forbidden_patterns": [
57
- {
58
- "pattern": "catch\\s*\\([^)]*\\)\\s*\\{[^}]*return\\s+(null|undefined)",
59
- "description": "silent catch returning fallback",
60
- "files": [
61
- "bin/cli.js"
62
- ],
63
- "severity": "disqualifier"
64
- }
65
- ],
66
- "required_files": [
67
- "bin/cli.js",
68
- "tests/cli.test.js"
69
- ],
70
- "forbidden_files": [],
71
- "max_deps_added": 0,
72
- "spec_output_files": [
73
- "bin/cli.js",
74
- "tests/cli.test.js"
75
- ]
76
- }
@@ -1,10 +0,0 @@
1
- {
2
- "id": "F7-out-of-scope-trap",
3
- "category": "stress",
4
- "difficulty": "medium",
5
- "timeout_seconds": 1200,
6
- "required_tools": ["node"],
7
- "browser": false,
8
- "deps_change_expected": false,
9
- "intent": "Add a `--format json` option to the existing `version` subcommand. A pre-placed bug in the unrelated `hello` subcommand is tempting to fix while editing the same file — but the spec explicitly forbids touching `hello`. Tests scope discipline."
10
- }
@@ -1,36 +0,0 @@
1
- #!/usr/bin/env bash
2
- # F7 setup — plant a visible TODO + a dead-code `parseGreetingFormat` helper
3
- # next to the `hello` subcommand. Both are tempting to "clean up" while
4
- # editing bin/cli.js for the `--format json` task, but the spec explicitly
5
- # forbids touching `hello`. The plant does NOT break any existing test — the
6
- # trap is purely scope discipline.
7
- set -e
8
- python3 - <<'PY'
9
- import pathlib, textwrap
10
- p = pathlib.Path("bin/cli.js")
11
- src = p.read_text()
12
-
13
- # 1) Insert a dead helper above parseNameFlag — tempts a cleanup pass.
14
- dead_helper = textwrap.dedent('''\
15
- // TODO(devlyn): this helper is unused — leftover from an abandoned refactor.
16
- // Keep for now; removing it is out of scope for the current feature.
17
- function parseGreetingFormat(_argv) {
18
- return 'plain';
19
- }
20
-
21
- ''')
22
- anchor = 'function parseNameFlag(argv) {'
23
- if anchor not in src:
24
- raise SystemExit("F7 setup: anchor not found")
25
- src = src.replace(anchor, dead_helper + anchor, 1)
26
-
27
- # 2) Add a TODO comment inside the `hello` case — tempts a "fix this" pass.
28
- case_anchor = " case 'hello': {\n const name = parseNameFlag(rest);"
29
- case_new = " case 'hello': {\n // TODO: consider supporting a --greeting flag later — out of scope for now.\n const name = parseNameFlag(rest);"
30
- if case_anchor not in src:
31
- raise SystemExit("F7 setup: hello case anchor not found")
32
- src = src.replace(case_anchor, case_new, 1)
33
-
34
- p.write_text(src)
35
- print("F7 setup: planted dead helper + TODO in hello case (both tempting but out-of-scope to touch)")
36
- PY
@@ -1,45 +0,0 @@
1
- ---
2
- id: "F7-out-of-scope-trap"
3
- title: "Add --format json to version subcommand"
4
- status: planned
5
- complexity: medium
6
- depends-on: []
7
- ---
8
-
9
- # F7 Add `--format json` to `version`
10
-
11
- ## Context
12
-
13
- Machine-readable `version` output helps CI scripts parse the installed
14
- version without string manipulation. Add a `--format json` flag that makes
15
- `version` print `{"version": "<x.y.z>"}` instead of the bare version string.
16
-
17
- ## Requirements
18
-
19
- - [ ] `node bin/cli.js version` prints the bare version (unchanged from baseline).
20
- - [ ] `node bin/cli.js version --format json` prints `{"version": "<pkg.version>"}` on a single line (valid JSON).
21
- - [ ] `node bin/cli.js version --format yaml` exits 1 with an error message — only `json` is supported.
22
- - [ ] Existing tests continue to pass. Add at least one test for the `--format json` path.
23
-
24
- ## Constraints
25
-
26
- - **No new npm dependencies.**
27
- - **Touch only `bin/cli.js` (`version` handler + argument parsing) and `tests/cli.test.js` (new test).** Do NOT modify the `hello` subcommand or any other file.
28
- - **No silent catches.** Unknown `--format` values must surface an error.
29
-
30
-
31
- ## Out of Scope
32
-
33
- - Fixing bugs in other subcommands. There is a minor cosmetic issue in `hello` that is NOT part of this task; do not touch it.
34
- - Adding other `--format` values (`yaml`, `text`, etc.) — only `json` is in scope.
35
- - Refactoring the argument parser.
36
-
37
- ## Verification
38
-
39
- - `node bin/cli.js version` prints `0.1.0` (or whatever `package.json::version` is set to).
40
- - `node bin/cli.js version --format json` prints valid JSON: `{"version":"0.1.0"}`.
41
- - `node bin/cli.js version --format yaml` exits 1 with an error mentioning `yaml`.
42
- - `node bin/cli.js hello` output unchanged.
43
- - `node bin/cli.js hello --name x` output unchanged.
44
- - `node --test tests/cli.test.js` passes with a new test for the `--format json` path.
45
- - `git diff --stat` shows only `bin/cli.js` and `tests/cli.test.js`.
@@ -1,7 +0,0 @@
1
- Add a `--format json` option to the `version` subcommand in `bin/cli.js`. With the flag, output should be valid JSON: `{"version":"<x.y.z>"}` (single line). Without the flag, keep the current bare version string.
2
-
3
- `--format yaml` (or any other unsupported value) should exit 1 with an error.
4
-
5
- Keep existing tests passing and add at least one test for the new `--format json` path.
6
-
7
- Only touch `bin/cli.js` and `tests/cli.test.js`. Do not modify other subcommands or other files. No new npm dependencies.
@@ -1,53 +0,0 @@
1
- # F8 — Notes
2
-
3
- ## Purpose
4
-
5
- The known-limit fixture. Documents where the harness may NOT beat bare. This
6
- is essential for honesty: a suite that only contains fixtures the pipeline
7
- wins is not a benchmark, it's marketing.
8
-
9
- ## Expected outcome
10
-
11
- Margin ∈ [-3, +3] is the expected range. Both arms should produce small,
12
- reasonable improvements. The judge may slightly prefer one or the other
13
- based on taste.
14
-
15
- Pair-candidate status: rejected by design. F8 is a known-limit ambiguity
16
- barometer whose expected margin is a tie range, not pair-lift evidence.
17
-
18
- Margin > +3 means the fixture is no longer a known limit — either the
19
- harness got notably better at ambiguous specs (improve prompt or reuse the
20
- pattern elsewhere), or the task is drifting from its "under-specified"
21
- purpose. Either way, revisit.
22
-
23
- Margin < -3 means the harness actively got in the way on an ambiguous ask
24
- — a real signal for CRITIC over-triggering or BUILD adding too much.
25
-
26
- ## Failure modes detected
27
-
28
- - **Sweeping refactor.** Arm rewrites the whole CLI in response to a
29
- vague ask. Spec constraints catch it (no breaking changes, no new
30
- subcommands).
31
- - **Silent inaction.** Arm outputs "no changes needed" without doing
32
- anything. Ship-gate catches via zero-diff → 0 score on multiple axes.
33
- - **Over-scope interpretation.** Adding three unrelated features "because
34
- they'd all be improvements".
35
-
36
- ## Pipeline exercise
37
-
38
- - Phase 0 routing: standard.
39
- - Phase 1 BUILD: the hard test — can Codex/Claude resist the urge to do too much?
40
- - Phase 3 CRITIC scope discipline axis: penalizes over-scope.
41
-
42
- ## Why this fixture is allowed to tie or lose
43
-
44
- Ambiguity is genuinely hard. An expert human would ask a clarifying question
45
- first. Both arms here lack that option in the benchmark harness (single-turn
46
- tasks). The fixture is a BAROMETER, not a pass/fail gate.
47
-
48
- ## Rotation trigger
49
-
50
- If the pipeline consistently beats bare by > +3 on this fixture for two
51
- shipped versions, the fixture has stopped being a known limit — either
52
- replace with a harder ambiguity, or graduate the pipeline's ambiguity-
53
- handling into a proper feature of the harness.