devlyn-cli 3.2.1 → 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 (423) hide show
  1. package/AGENTS.md +2 -2
  2. package/CLAUDE.md +2 -2
  3. package/README.md +12 -102
  4. package/bin/devlyn.js +13 -225
  5. package/bin/instruction-templates.json +6 -0
  6. package/config/skills/_shared/adapters/grok.md +1 -2
  7. package/config/skills/_shared/archive_run.py +15 -3
  8. package/config/skills/_shared/judge-role-evidence.py +21 -1
  9. package/config/skills/_shared/runtime-principles.md +1 -1
  10. package/config/skills/_shared/spec-verify-check.py +0 -653
  11. package/config/skills/_shared/state-phase-write.py +351 -25
  12. package/config/skills/_shared/task-complete.py +635 -143
  13. package/config/skills/_shared/terminal-claim-check.py +229 -4
  14. package/config/skills/_shared/verify-merge-findings.py +93 -2
  15. package/config/skills/devlyn:ideate/SKILL.md +3 -4
  16. package/config/skills/devlyn:ideate/references/elicitation.md +2 -35
  17. package/config/skills/devlyn:ideate/references/from-spec-mode.md +3 -18
  18. package/config/skills/devlyn:ideate/references/project-mode.md +1 -16
  19. package/config/skills/devlyn:ideate/references/spec-template.md +0 -2
  20. package/config/skills/devlyn:queue/SKILL.md +6 -4
  21. package/config/skills/devlyn:resolve/SKILL.md +16 -25
  22. package/config/skills/devlyn:resolve/references/free-form-mode.md +0 -14
  23. package/config/skills/devlyn:resolve/references/outer-loop.md +1 -1
  24. package/config/skills/devlyn:resolve/references/phases/build-gate.md +1 -1
  25. package/config/skills/devlyn:resolve/references/phases/cleanup.md +3 -3
  26. package/config/skills/devlyn:resolve/references/phases/implement.md +1 -1
  27. package/config/skills/devlyn:resolve/references/phases/probe-derive.md +1 -16
  28. package/config/skills/devlyn:resolve/references/phases/verify.md +4 -9
  29. package/config/skills/devlyn:resolve/references/state-schema.md +9 -7
  30. package/config/skills/devlyn:resolve/references/task-completion.md +46 -37
  31. package/{config/skills → optional-skills}/code-health-standards/SKILL.md +4 -13
  32. package/{config/skills → optional-skills}/code-review-standards/SKILL.md +4 -12
  33. package/{config/skills → optional-skills}/root-cause-analysis/SKILL.md +4 -12
  34. package/{config/skills → optional-skills}/ui-implementation-standards/SKILL.md +4 -14
  35. package/package.json +1 -57
  36. package/benchmark/auto-resolve/BENCHMARK-DESIGN.md +0 -289
  37. package/benchmark/auto-resolve/BENCHMARK-RESULTS.md +0 -341
  38. package/benchmark/auto-resolve/README.md +0 -696
  39. package/benchmark/auto-resolve/RUBRIC.md +0 -177
  40. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/NOTES.md +0 -34
  41. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/expected.json +0 -68
  42. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/metadata.json +0 -10
  43. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/setup.sh +0 -4
  44. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/spec.md +0 -44
  45. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/task.ko.txt +0 -8
  46. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/task.txt +0 -8
  47. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/NOTES.md +0 -68
  48. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/expected.json +0 -60
  49. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/metadata.json +0 -10
  50. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/setup.sh +0 -17
  51. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/spec.md +0 -51
  52. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/task.txt +0 -9
  53. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/verifiers/invalid.js +0 -29
  54. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/verifiers/parallel.js +0 -50
  55. package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/NOTES.md +0 -75
  56. package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/expected.json +0 -52
  57. package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/metadata.json +0 -10
  58. package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/setup.sh +0 -171
  59. package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/spec.md +0 -50
  60. package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/task.txt +0 -9
  61. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/NOTES.md +0 -89
  62. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/expected.json +0 -74
  63. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/metadata.json +0 -10
  64. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/setup.sh +0 -251
  65. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/spec.md +0 -57
  66. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/task.txt +0 -13
  67. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/verifiers/replay-malformed-body.js +0 -64
  68. package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/NOTES.md +0 -104
  69. package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/expected.json +0 -46
  70. package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/metadata.json +0 -10
  71. package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/setup.sh +0 -336
  72. package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/spec.md +0 -51
  73. package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/task.txt +0 -9
  74. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/NOTES.md +0 -38
  75. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/expected.json +0 -64
  76. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/metadata.json +0 -10
  77. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/setup.sh +0 -32
  78. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/spec.md +0 -63
  79. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/task.txt +0 -7
  80. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/verifiers/exact-success.js +0 -54
  81. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/verifiers/no-hardcoded-pricing.js +0 -47
  82. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/verifiers/stock-error.js +0 -45
  83. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/NOTES.md +0 -57
  84. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/expected-pair-plan-registry.json +0 -170
  85. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/expected.json +0 -84
  86. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/metadata.json +0 -21
  87. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/pair-plan.sample-fail.json +0 -214
  88. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/pair-plan.sample-pass.json +0 -223
  89. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/setup.sh +0 -5
  90. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/spec.md +0 -55
  91. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/task.txt +0 -14
  92. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/NOTES.md +0 -39
  93. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/expected.json +0 -62
  94. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/metadata.json +0 -10
  95. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/setup.sh +0 -2
  96. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/spec.md +0 -67
  97. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/task.txt +0 -7
  98. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/verifiers/error-order.js +0 -55
  99. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/verifiers/priority-blocked.js +0 -48
  100. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/NOTES.md +0 -35
  101. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/expected.json +0 -56
  102. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/metadata.json +0 -10
  103. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/setup.sh +0 -2
  104. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/spec.md +0 -64
  105. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/task.txt +0 -7
  106. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/verifiers/conflicting-duplicate.js +0 -34
  107. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/verifiers/idempotent-close.js +0 -41
  108. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/NOTES.md +0 -39
  109. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/expected.json +0 -56
  110. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/metadata.json +0 -10
  111. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/setup.sh +0 -2
  112. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/spec.md +0 -76
  113. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/task.txt +0 -7
  114. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/verifiers/priority-rollback.js +0 -64
  115. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/verifiers/single-warehouse-fefo.js +0 -66
  116. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/NOTES.md +0 -40
  117. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/expected.json +0 -66
  118. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/metadata.json +0 -10
  119. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/setup.sh +0 -36
  120. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/spec.md +0 -71
  121. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/task.txt +0 -7
  122. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/verifiers/catalog-source.js +0 -57
  123. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/verifiers/exact-success.js +0 -63
  124. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/verifiers/stock-error.js +0 -34
  125. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/NOTES.md +0 -31
  126. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/expected.json +0 -68
  127. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/metadata.json +0 -10
  128. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/setup.sh +0 -17
  129. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/spec.md +0 -68
  130. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/task.txt +0 -7
  131. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/verifiers/conflicting-duplicate.js +0 -29
  132. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/verifiers/exact-payout.js +0 -58
  133. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/verifiers/rules-source.js +0 -56
  134. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/NOTES.md +0 -35
  135. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/expected-pair-plan-registry.json +0 -162
  136. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/expected.json +0 -67
  137. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/metadata.json +0 -19
  138. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/setup.sh +0 -4
  139. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/spec.md +0 -55
  140. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/task.txt +0 -9
  141. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/NOTES.md +0 -34
  142. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/expected.json +0 -57
  143. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/metadata.json +0 -10
  144. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/setup.sh +0 -2
  145. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/spec.md +0 -67
  146. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/task.txt +0 -7
  147. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/verifiers/duplicate-event-error.js +0 -35
  148. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/verifiers/priority-transfer-rollback.js +0 -53
  149. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/NOTES.md +0 -38
  150. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/expected.json +0 -57
  151. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/metadata.json +0 -10
  152. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/setup.sh +0 -2
  153. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/spec.md +0 -70
  154. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/task.txt +0 -3
  155. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/verifiers/duplicate-renewal-error.js +0 -42
  156. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/verifiers/priority-credit-rollback.js +0 -70
  157. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/NOTES.md +0 -47
  158. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/expected.json +0 -57
  159. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/metadata.json +0 -10
  160. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/setup.sh +0 -6
  161. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/spec.md +0 -48
  162. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/task.txt +0 -9
  163. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/NOTES.md +0 -45
  164. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/expected.json +0 -65
  165. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/metadata.json +0 -10
  166. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/setup.sh +0 -55
  167. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/spec.md +0 -48
  168. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/task.txt +0 -7
  169. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/NOTES.md +0 -43
  170. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/expected.json +0 -77
  171. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/metadata.json +0 -10
  172. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/setup.sh +0 -4
  173. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/spec.md +0 -48
  174. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/task.txt +0 -10
  175. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/NOTES.md +0 -57
  176. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/expected.json +0 -76
  177. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/metadata.json +0 -10
  178. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/setup.sh +0 -36
  179. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/spec.md +0 -45
  180. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/task.txt +0 -7
  181. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/NOTES.md +0 -53
  182. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/expected.json +0 -63
  183. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/metadata.json +0 -10
  184. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/setup.sh +0 -4
  185. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/spec.md +0 -48
  186. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/task.txt +0 -1
  187. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/NOTES.md +0 -105
  188. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/expected.json +0 -74
  189. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/metadata.json +0 -10
  190. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/setup.sh +0 -28
  191. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/spec.md +0 -59
  192. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/task.txt +0 -5
  193. package/benchmark/auto-resolve/fixtures/SCHEMA.md +0 -188
  194. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/NOTES.md +0 -37
  195. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/RETIRED.md +0 -13
  196. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/expected.json +0 -56
  197. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/metadata.json +0 -10
  198. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/setup.sh +0 -18
  199. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/spec.md +0 -69
  200. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/task.txt +0 -7
  201. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/verifiers/exact-proration.js +0 -48
  202. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/verifiers/rules-source-and-conflict.js +0 -79
  203. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/NOTES.md +0 -54
  204. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/RETIRED.md +0 -7
  205. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/expected.json +0 -67
  206. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/metadata.json +0 -10
  207. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/setup.sh +0 -2
  208. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/spec.md +0 -67
  209. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/task.txt +0 -5
  210. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/verifiers/policy-precedence.js +0 -72
  211. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/verifiers/validation-and-immutability.js +0 -43
  212. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/verifiers/validation-boundary.js +0 -116
  213. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/NOTES.md +0 -35
  214. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/RETIRED.md +0 -12
  215. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/expected.json +0 -58
  216. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/metadata.json +0 -10
  217. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/setup.sh +0 -2
  218. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/spec.md +0 -73
  219. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/task.txt +0 -17
  220. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/verifiers/mixed-idempotent-settlement.js +0 -53
  221. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/verifiers/rejection-boundaries.js +0 -74
  222. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/NOTES.md +0 -28
  223. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/RETIRED.md +0 -15
  224. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/expected.json +0 -57
  225. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/metadata.json +0 -10
  226. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/setup.sh +0 -50
  227. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/spec.md +0 -59
  228. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/task.txt +0 -9
  229. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/verifiers/ordered-settlement.js +0 -88
  230. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/verifiers/reject-invalid.js +0 -45
  231. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/NOTES.md +0 -30
  232. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/RETIRED.md +0 -16
  233. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/expected.json +0 -64
  234. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/metadata.json +0 -10
  235. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/setup.sh +0 -21
  236. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/spec.md +0 -58
  237. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/task.txt +0 -9
  238. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/verifiers/dup-op.js +0 -54
  239. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/verifiers/priority-apply.js +0 -82
  240. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/verifiers/rollback.js +0 -77
  241. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/NOTES.md +0 -99
  242. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/RETIRED.md +0 -18
  243. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/expected.json +0 -64
  244. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/metadata.json +0 -10
  245. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/setup.sh +0 -4
  246. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/spec.md +0 -61
  247. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/task.txt +0 -9
  248. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/verifiers/correctness-small.js +0 -135
  249. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/verifiers/scale.js +0 -100
  250. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/verifiers/validation.js +0 -75
  251. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/NOTES.md +0 -93
  252. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/RETIRED.md +0 -16
  253. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/expected.json +0 -65
  254. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/metadata.json +0 -10
  255. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/setup.sh +0 -18
  256. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/spec.md +0 -66
  257. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/task.txt +0 -9
  258. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/verifiers/correctness-small.js +0 -84
  259. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/verifiers/scale.js +0 -184
  260. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/verifiers/validation.js +0 -74
  261. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/NOTES.md +0 -60
  262. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/RETIRED.md +0 -29
  263. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/expected.json +0 -73
  264. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/metadata.json +0 -10
  265. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/setup.sh +0 -28
  266. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/spec.md +0 -58
  267. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/task.txt +0 -5
  268. package/benchmark/auto-resolve/fixtures/test-repo/README.md +0 -12
  269. package/benchmark/auto-resolve/fixtures/test-repo/bin/cli.js +0 -63
  270. package/benchmark/auto-resolve/fixtures/test-repo/package-lock.json +0 -823
  271. package/benchmark/auto-resolve/fixtures/test-repo/package.json +0 -22
  272. package/benchmark/auto-resolve/fixtures/test-repo/playwright.config.js +0 -17
  273. package/benchmark/auto-resolve/fixtures/test-repo/server/index.js +0 -37
  274. package/benchmark/auto-resolve/fixtures/test-repo/tests/cli.test.js +0 -25
  275. package/benchmark/auto-resolve/fixtures/test-repo/tests/server.test.js +0 -58
  276. package/benchmark/auto-resolve/fixtures/test-repo/web/index.html +0 -37
  277. package/benchmark/auto-resolve/results/20260507-f10-f11-tier1-full-pipeline/headroom-gate.json +0 -25
  278. package/benchmark/auto-resolve/results/20260507-f10-f11-tier1-full-pipeline/headroom-gate.md +0 -10
  279. package/benchmark/auto-resolve/results/20260508-f22-exact-error-headroom/headroom-gate.json +0 -18
  280. package/benchmark/auto-resolve/results/20260508-f22-exact-error-headroom/headroom-gate.md +0 -9
  281. package/benchmark/auto-resolve/results/20260508-f26-headroom/headroom-gate.json +0 -18
  282. package/benchmark/auto-resolve/results/20260508-f26-headroom/headroom-gate.md +0 -9
  283. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/F16-cli-quote-tax-rules/l2_risk_probes/result.json +0 -28
  284. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/F23-cli-fulfillment-wave/l2_risk_probes/result.json +0 -28
  285. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/F25-cli-cart-promotion-rules/l2_risk_probes/result.json +0 -30
  286. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/full-pipeline-pair-gate.json +0 -82
  287. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/full-pipeline-pair-gate.md +0 -18
  288. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/headroom-gate.json +0 -46
  289. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/headroom-gate.md +0 -17
  290. package/benchmark/auto-resolve/results/20260511-f12-webhook-headroom/headroom-gate.json +0 -28
  291. package/benchmark/auto-resolve/results/20260511-f12-webhook-headroom/headroom-gate.md +0 -15
  292. package/benchmark/auto-resolve/results/20260511-f15-concurrency-headroom/headroom-gate.json +0 -28
  293. package/benchmark/auto-resolve/results/20260511-f15-concurrency-headroom/headroom-gate.md +0 -15
  294. package/benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/F21-cli-scheduler-priority/l2_risk_probes/result.json +0 -32
  295. package/benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/full-pipeline-pair-gate.json +0 -44
  296. package/benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/full-pipeline-pair-gate.md +0 -16
  297. package/benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/headroom-gate.json +0 -18
  298. package/benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/headroom-gate.md +0 -9
  299. package/benchmark/auto-resolve/results/20260511-f3-http-error-headroom/headroom-gate.json +0 -28
  300. package/benchmark/auto-resolve/results/20260511-f3-http-error-headroom/headroom-gate.md +0 -15
  301. package/benchmark/auto-resolve/results/20260512-f2-medium-headroom/headroom-gate.json +0 -28
  302. package/benchmark/auto-resolve/results/20260512-f2-medium-headroom/headroom-gate.md +0 -15
  303. package/benchmark/auto-resolve/results/20260512-f31-seat-rebalance-headroom/headroom-gate.json +0 -28
  304. package/benchmark/auto-resolve/results/20260512-f31-seat-rebalance-headroom/headroom-gate.md +0 -15
  305. package/benchmark/auto-resolve/results/20260512-f32-subscription-renewal-headroom/headroom-gate.json +0 -28
  306. package/benchmark/auto-resolve/results/20260512-f32-subscription-renewal-headroom/headroom-gate.md +0 -15
  307. package/benchmark/auto-resolve/results/20260512-f4-web-headroom/headroom-gate.json +0 -28
  308. package/benchmark/auto-resolve/results/20260512-f4-web-headroom/headroom-gate.md +0 -15
  309. package/benchmark/auto-resolve/results/20260512-f5-fixloop-headroom/headroom-gate.json +0 -28
  310. package/benchmark/auto-resolve/results/20260512-f5-fixloop-headroom/headroom-gate.md +0 -15
  311. package/benchmark/auto-resolve/results/20260512-f6-checksum-headroom/headroom-gate.json +0 -28
  312. package/benchmark/auto-resolve/results/20260512-f6-checksum-headroom/headroom-gate.md +0 -15
  313. package/benchmark/auto-resolve/results/20260512-f7-scope-headroom/headroom-gate.json +0 -28
  314. package/benchmark/auto-resolve/results/20260512-f7-scope-headroom/headroom-gate.md +0 -15
  315. package/benchmark/auto-resolve/results/20260512-f9-e2e-headroom/headroom-gate.json +0 -28
  316. package/benchmark/auto-resolve/results/20260512-f9-e2e-headroom/headroom-gate.md +0 -15
  317. package/benchmark/auto-resolve/run-real-benchmark.md +0 -303
  318. package/benchmark/auto-resolve/scripts/audit-headroom-rejections.py +0 -441
  319. package/benchmark/auto-resolve/scripts/audit-pair-evidence.py +0 -1256
  320. package/benchmark/auto-resolve/scripts/build-pair-eligible-manifest.py +0 -306
  321. package/benchmark/auto-resolve/scripts/check-f9-artifacts.py +0 -268
  322. package/benchmark/auto-resolve/scripts/collect-swebench-predictions.py +0 -108
  323. package/benchmark/auto-resolve/scripts/compile-report.py +0 -493
  324. package/benchmark/auto-resolve/scripts/fetch-swebench-instances.py +0 -129
  325. package/benchmark/auto-resolve/scripts/frozen-verify-gate.py +0 -434
  326. package/benchmark/auto-resolve/scripts/full-pipeline-pair-gate.py +0 -612
  327. package/benchmark/auto-resolve/scripts/headroom-gate.py +0 -378
  328. package/benchmark/auto-resolve/scripts/iter-0033c-compare.py +0 -683
  329. package/benchmark/auto-resolve/scripts/iter-0033c-l1-summary.py +0 -97
  330. package/benchmark/auto-resolve/scripts/judge-opus-pass.sh +0 -542
  331. package/benchmark/auto-resolve/scripts/judge.sh +0 -565
  332. package/benchmark/auto-resolve/scripts/oracle-scope-tier-a.py +0 -256
  333. package/benchmark/auto-resolve/scripts/oracle-scope-tier-b.py +0 -287
  334. package/benchmark/auto-resolve/scripts/oracle-test-fidelity.py +0 -328
  335. package/benchmark/auto-resolve/scripts/pair-candidate-frontier.py +0 -469
  336. package/benchmark/auto-resolve/scripts/pair-plan-idgen.py +0 -401
  337. package/benchmark/auto-resolve/scripts/pair-plan-lint.py +0 -475
  338. package/benchmark/auto-resolve/scripts/pair-rejected-fixtures.sh +0 -103
  339. package/benchmark/auto-resolve/scripts/pair_evidence_contract.py +0 -270
  340. package/benchmark/auto-resolve/scripts/prepare-swebench-frozen-case.py +0 -273
  341. package/benchmark/auto-resolve/scripts/prepare-swebench-frozen-corpus.py +0 -148
  342. package/benchmark/auto-resolve/scripts/prepare-swebench-solver-worktree.py +0 -210
  343. package/benchmark/auto-resolve/scripts/recent-benchmark-summary.py +0 -232
  344. package/benchmark/auto-resolve/scripts/run-fixture.sh +0 -1024
  345. package/benchmark/auto-resolve/scripts/run-frozen-verify-pair.sh +0 -683
  346. package/benchmark/auto-resolve/scripts/run-full-pipeline-pair-candidate.sh +0 -458
  347. package/benchmark/auto-resolve/scripts/run-headroom-candidate.sh +0 -336
  348. package/benchmark/auto-resolve/scripts/run-iter-0033c.sh +0 -208
  349. package/benchmark/auto-resolve/scripts/run-suite.sh +0 -251
  350. package/benchmark/auto-resolve/scripts/run-swebench-frozen-corpus.sh +0 -310
  351. package/benchmark/auto-resolve/scripts/run-swebench-solver-batch.sh +0 -257
  352. package/benchmark/auto-resolve/scripts/ship-gate.py +0 -391
  353. package/benchmark/auto-resolve/scripts/solo-ceiling-avoidance.py +0 -53
  354. package/benchmark/auto-resolve/scripts/solo-headroom-hypothesis.py +0 -77
  355. package/benchmark/auto-resolve/scripts/swebench-frozen-matrix.py +0 -478
  356. package/benchmark/auto-resolve/scripts/test-audit-headroom-rejections.sh +0 -288
  357. package/benchmark/auto-resolve/scripts/test-audit-pair-evidence.sh +0 -1672
  358. package/benchmark/auto-resolve/scripts/test-benchmark-arg-parsing.sh +0 -1015
  359. package/benchmark/auto-resolve/scripts/test-build-pair-eligible-manifest.sh +0 -491
  360. package/benchmark/auto-resolve/scripts/test-check-f9-artifacts.sh +0 -91
  361. package/benchmark/auto-resolve/scripts/test-frozen-verify-gate.sh +0 -517
  362. package/benchmark/auto-resolve/scripts/test-full-pipeline-pair-gate.sh +0 -610
  363. package/benchmark/auto-resolve/scripts/test-headroom-gate.sh +0 -401
  364. package/benchmark/auto-resolve/scripts/test-iter-0033c-compare.sh +0 -525
  365. package/benchmark/auto-resolve/scripts/test-iter-0033c-l1-summary.sh +0 -254
  366. package/benchmark/auto-resolve/scripts/test-lint-fixtures.sh +0 -580
  367. package/benchmark/auto-resolve/scripts/test-pair-candidate-frontier.sh +0 -591
  368. package/benchmark/auto-resolve/scripts/test-run-full-pipeline-pair-candidate.sh +0 -497
  369. package/benchmark/auto-resolve/scripts/test-run-headroom-candidate.sh +0 -401
  370. package/benchmark/auto-resolve/scripts/test-run-swebench-solver-batch.sh +0 -111
  371. package/benchmark/auto-resolve/scripts/test-ship-gate.sh +0 -1189
  372. package/benchmark/auto-resolve/scripts/test-swebench-frozen-case.sh +0 -1221
  373. package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/NOTES.md +0 -28
  374. package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/expected.json +0 -63
  375. package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/metadata.json +0 -10
  376. package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/setup.sh +0 -3
  377. package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/spec.md +0 -47
  378. package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/task.txt +0 -1
  379. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/NOTES.md +0 -34
  380. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/expected.json +0 -53
  381. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/metadata.json +0 -10
  382. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/setup.sh +0 -3
  383. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/spec.md +0 -50
  384. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/task.txt +0 -1
  385. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/verifiers/duplicate-order-error.js +0 -27
  386. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/verifiers/priority-stock-reservation.js +0 -44
  387. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/NOTES.md +0 -34
  388. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/expected.json +0 -55
  389. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/metadata.json +0 -10
  390. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/setup.sh +0 -3
  391. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/spec.md +0 -52
  392. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/task.txt +0 -1
  393. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/verifiers/duplicate-ticket-error.js +0 -29
  394. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/verifiers/priority-agent-assignment.js +0 -48
  395. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/NOTES.md +0 -34
  396. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/expected.json +0 -55
  397. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/metadata.json +0 -10
  398. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/setup.sh +0 -3
  399. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/spec.md +0 -55
  400. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/task.txt +0 -1
  401. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/verifiers/duplicate-return-error.js +0 -43
  402. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/verifiers/priority-return-routing.js +0 -70
  403. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/NOTES.md +0 -37
  404. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/expected.json +0 -54
  405. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/metadata.json +0 -10
  406. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/setup.sh +0 -3
  407. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/spec.md +0 -59
  408. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/task.txt +0 -1
  409. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/verifiers/credit-ledger-priority.js +0 -98
  410. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/verifiers/duplicate-charge-error.js +0 -38
  411. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/NOTES.md +0 -36
  412. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/expected.json +0 -56
  413. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/metadata.json +0 -10
  414. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/setup.sh +0 -3
  415. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/spec.md +0 -59
  416. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/task.txt +0 -1
  417. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/verifiers/duplicate-refund-error.js +0 -41
  418. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/verifiers/priority-refund-ledger.js +0 -65
  419. package/config/skills/_shared/pair-plan-schema.md +0 -298
  420. package/scripts/lint-fixtures.sh +0 -352
  421. package/scripts/lint-shadow-fixtures.sh +0 -58
  422. package/scripts/lint-skills.sh +0 -4265
  423. package/scripts/test-owner-phases.py +0 -238
@@ -1,223 +0,0 @@
1
- {
2
- "accepted_invariants": [
3
- {
4
- "authority": "expected.json/forbidden_patterns",
5
- "id": "forbidden_pattern__silent_catch_returning_a_fallback_value_violates_no_silent_c__bin_cli_js",
6
- "operational_check": "variant arm output MUST NOT contain regex pattern \"catch\\\\s*\\\\([^)]*\\\\)\\\\s*\\\\{[^}]*return\\\\s+(\\\\[\\\\]|null|undefined|\\\\{|false|'')\" in files ['bin/cli.js']; rationale: silent catch returning a fallback value — violates no-silent-catches policy",
7
- "paraphrase": "variant arm output MUST NOT contain regex pattern \"catch\\\\s*\\\\([^)]*\\\\)\\\\s*\\\\{[^}]*return\\\\s+(\\\\[\\\\]|null|undefined|\\\\{|",
8
- "source_refs": [
9
- "expected.json:forbidden_patterns[0]"
10
- ]
11
- },
12
- {
13
- "authority": "expected.json/forbidden_patterns",
14
- "id": "forbidden_pattern__ts_ignore_escape_hatch__bin_cli_js",
15
- "operational_check": "variant arm output MUST NOT contain regex pattern '@ts-ignore' in files ['bin/cli.js']; rationale: @ts-ignore escape hatch",
16
- "paraphrase": "variant arm output MUST NOT contain regex pattern '@ts-ignore' in files ['bin/cli.js']; rationale: @ts-ignore escape hat",
17
- "source_refs": [
18
- "expected.json:forbidden_patterns[1]"
19
- ]
20
- },
21
- {
22
- "authority": "expected.json/max_deps_added",
23
- "id": "max_deps_added__0",
24
- "operational_check": "variant arm MUST NOT add more than 0 new npm dependencies (count delta of package.json:dependencies + devDependencies)",
25
- "paraphrase": "variant arm MUST NOT add more than 0 new npm dependencies (count delta of package.json:dependencies + devDependencies)",
26
- "source_refs": [
27
- "expected.json:max_deps_added"
28
- ]
29
- },
30
- {
31
- "authority": "expected.json/required_files",
32
- "id": "required_file__bin_cli_js",
33
- "operational_check": "variant arm output MUST contain file 'bin/cli.js' (created or preserved)",
34
- "paraphrase": "variant arm output MUST contain file 'bin/cli.js' (created or preserved)",
35
- "source_refs": [
36
- "expected.json:required_files[bin/cli.js]"
37
- ]
38
- },
39
- {
40
- "authority": "metadata/oracle-allowlist",
41
- "id": "scope-tier-a:lockfile-deletion",
42
- "operational_check": "variant arm MUST NOT delete a scaffold-present lockfile",
43
- "paraphrase": "variant arm MUST NOT delete a scaffold-present lockfile",
44
- "source_refs": [
45
- "oracle-scope-tier-a.py"
46
- ]
47
- },
48
- {
49
- "authority": "metadata/oracle-allowlist",
50
- "id": "scope-tier-a:tier-a-violation",
51
- "operational_check": "variant arm MUST NOT add or modify paths matching: docs/roadmap/** | docs/VISION.md | docs/ROADMAP.md | .github/** | node_modules/** | **/node_modules/** | test-results/** | coverage/** | .nyc_output/** | basename suffix .log | basename prefix .env or secrets.",
52
- "paraphrase": "variant arm MUST NOT add or modify paths matching: docs/roadmap/** | docs/VISION.md | docs/ROADMAP.md | .github/** | nod",
53
- "source_refs": [
54
- "oracle-scope-tier-a.py"
55
- ]
56
- },
57
- {
58
- "authority": "metadata/oracle-allowlist",
59
- "id": "scope-tier-b:scope-unmatched",
60
- "operational_check": "every variant-touched file MUST be either inside spec_output_files (Tier C) OR reachable from a Tier C seed via static JS/TS imports OR matched by expected.json:tier_a_waivers",
61
- "paraphrase": "every variant-touched file MUST be either inside spec_output_files (Tier C) OR reachable from a Tier C seed via static J",
62
- "source_refs": [
63
- "oracle-scope-tier-b.py"
64
- ]
65
- },
66
- {
67
- "authority": "expected.json/spec_output_files",
68
- "id": "spec_output_file__bin_cli_js",
69
- "operational_check": "variant-touched files MUST be inside (or reachable via static imports from) the spec_output_files set; 'bin/cli.js' is one Tier C seed",
70
- "paraphrase": "variant-touched files MUST be inside (or reachable via static imports from) the spec_output_files set; 'bin/cli.js' is o",
71
- "source_refs": [
72
- "expected.json:spec_output_files[bin/cli.js]"
73
- ]
74
- },
75
- {
76
- "authority": "expected.json/spec_output_files",
77
- "id": "spec_output_file__tests_cli_test_js",
78
- "operational_check": "variant-touched files MUST be inside (or reachable via static imports from) the spec_output_files set; 'tests/cli.test.js' is one Tier C seed",
79
- "paraphrase": "variant-touched files MUST be inside (or reachable via static imports from) the spec_output_files set; 'tests/cli.test.j",
80
- "source_refs": [
81
- "expected.json:spec_output_files[tests/cli.test.js]"
82
- ]
83
- },
84
- {
85
- "authority": "metadata/oracle-allowlist",
86
- "id": "test-fidelity:assertion-regression",
87
- "operational_check": "effective assertion count MUST NOT drop and skipped-test count MUST NOT rise; vacuous expect.assertions(0) is treated as a real regression",
88
- "paraphrase": "effective assertion count MUST NOT drop and skipped-test count MUST NOT rise; vacuous expect.assertions(0) is treated as",
89
- "source_refs": [
90
- "oracle-test-fidelity.py"
91
- ]
92
- },
93
- {
94
- "authority": "metadata/oracle-allowlist",
95
- "id": "test-fidelity:mock-swap",
96
- "operational_check": "post-arm test file MUST NOT swap REAL_PATTERNS hits for MOCK_PATTERNS hits (jest/vi/sinon, nock/msw, app.handle/inject/callback, hand-rolled IncomingMessage/ServerResponse, etc.); a drop in real_calls combined with a rise in mock_calls is a mock-swap flag",
97
- "paraphrase": "post-arm test file MUST NOT swap REAL_PATTERNS hits for MOCK_PATTERNS hits (jest/vi/sinon, nock/msw, app.handle/inject/c",
98
- "source_refs": [
99
- "oracle-test-fidelity.py"
100
- ]
101
- },
102
- {
103
- "authority": "metadata/oracle-allowlist",
104
- "id": "test-fidelity:test-file-deleted",
105
- "operational_check": "no scaffold-present test file may be deleted by the variant arm; deletion of an existing tests/*.test.* / *.spec.* / *.e2e.* file is a flag-severity finding",
106
- "paraphrase": "no scaffold-present test file may be deleted by the variant arm; deletion of an existing tests/*.test.* / *.spec.* / *.e",
107
- "source_refs": [
108
- "oracle-test-fidelity.py"
109
- ]
110
- },
111
- {
112
- "authority": "metadata/oracle-allowlist",
113
- "id": "test-fidelity:test-file-renamed",
114
- "operational_check": "rename of a scaffold-present test file is warn-severity (content fidelity not verified across renames in step 1)",
115
- "paraphrase": "rename of a scaffold-present test file is warn-severity (content fidelity not verified across renames in step 1)",
116
- "source_refs": [
117
- "oracle-test-fidelity.py"
118
- ]
119
- },
120
- {
121
- "authority": "expected.json/verification_commands",
122
- "id": "verification__3f35982a",
123
- "operational_check": "running `node bin/cli.js doctor` in the post-arm work dir MUST exit with code 0; stdout MUST contain all of ['doctor:']; stdout MUST NOT contain any of ['undefined', 'Error:']",
124
- "paraphrase": "running `node bin/cli.js doctor` in the post-arm work dir MUST exit with code 0; stdout MUST contain all of ['doctor:'];",
125
- "source_refs": [
126
- "expected.json:verification_commands[0]"
127
- ]
128
- },
129
- {
130
- "authority": "expected.json/verification_commands",
131
- "id": "verification__460fce04",
132
- "operational_check": "running `HOME=/nonexistent node bin/cli.js doctor` in the post-arm work dir MUST exit with code 1; stdout MUST contain all of ['/nonexistent']; stdout MUST NOT contain any of []",
133
- "paraphrase": "running `HOME=/nonexistent node bin/cli.js doctor` in the post-arm work dir MUST exit with code 1; stdout MUST contain a",
134
- "source_refs": [
135
- "expected.json:verification_commands[1]"
136
- ]
137
- },
138
- {
139
- "authority": "expected.json/verification_commands",
140
- "id": "verification__973e287e",
141
- "operational_check": "running `python3 -c \"import subprocess; r = subprocess.run(['node', 'bin/cli.js', 'doctor'], capture_output=True); n = r.stdout.count(b'\\x1b['); print(n); exit(0 if n == 0 else 1)\"` in the post-arm work dir MUST exit with code 0; stdout MUST contain all of ['0']; stdout MUST NOT contain any of []",
142
- "paraphrase": "running `python3 -c \"import subprocess; r = subprocess.run(['node', 'bin/cli.js', 'doctor'], capture_output=True); n = r",
143
- "source_refs": [
144
- "expected.json:verification_commands[2]"
145
- ]
146
- },
147
- {
148
- "authority": "expected.json/verification_commands",
149
- "id": "verification__d6253a97",
150
- "operational_check": "running `node bin/cli.js doctor --help` in the post-arm work dir MUST exit with code 0; stdout MUST contain all of ['doctor']; stdout MUST NOT contain any of []",
151
- "paraphrase": "running `node bin/cli.js doctor --help` in the post-arm work dir MUST exit with code 0; stdout MUST contain all of ['doc",
152
- "source_refs": [
153
- "expected.json:verification_commands[3]"
154
- ]
155
- },
156
- {
157
- "authority": "expected.json/verification_commands",
158
- "id": "verification__e0f149e4",
159
- "operational_check": "running `node bin/cli.js --help` in the post-arm work dir MUST exit with code 0; stdout MUST contain all of ['doctor']; stdout MUST NOT contain any of []",
160
- "paraphrase": "running `node bin/cli.js --help` in the post-arm work dir MUST exit with code 0; stdout MUST contain all of ['doctor']; ",
161
- "source_refs": [
162
- "expected.json:verification_commands[4]"
163
- ]
164
- },
165
- {
166
- "authority": "expected.json/verification_commands",
167
- "id": "verification__fdbcd321",
168
- "operational_check": "running `node bin/cli.js doctor --verbose` in the post-arm work dir MUST exit with code 0; stdout MUST contain all of ['doctor:']; stdout MUST NOT contain any of ['Error:']",
169
- "paraphrase": "running `node bin/cli.js doctor --verbose` in the post-arm work dir MUST exit with code 0; stdout MUST contain all of ['",
170
- "source_refs": [
171
- "expected.json:verification_commands[5]"
172
- ]
173
- }
174
- ],
175
- "authority_order": [
176
- "spec.md",
177
- "expected.json/rubric",
178
- "phase prompt",
179
- "model preference"
180
- ],
181
- "escalated_to_user": [],
182
- "fixture_id": "F2-cli-medium-subcommand",
183
- "model_stamps": {
184
- "claude": {
185
- "blocked_ids": [],
186
- "model": "claude-opus-4-7",
187
- "signed_plan_sha256": "7329b8955a94ac680a7a58d09bfc53ce4de17609495b4bf4658cf2d3a43dacd5",
188
- "status": "sign",
189
- "timestamp": "2026-04-29T18:30:00Z"
190
- },
191
- "codex": {
192
- "blocked_ids": [],
193
- "model": "gpt-5.5",
194
- "signed_plan_sha256": "7329b8955a94ac680a7a58d09bfc53ce4de17609495b4bf4658cf2d3a43dacd5",
195
- "status": "sign",
196
- "timestamp": "2026-04-29T18:31:00Z"
197
- }
198
- },
199
- "plan_status": "final",
200
- "planning_mode": "pair",
201
- "rejected_alternatives": [],
202
- "rounds": [
203
- {
204
- "claude_draft_sha256": "0000000000000000000000000000000000000000000000000000000000000000",
205
- "codex_draft_sha256": "1111111111111111111111111111111111111111111111111111111111111111",
206
- "merged_sha256": "2222222222222222222222222222222222222222222222222222222222222222",
207
- "note": "sample-pass synthetic round (test fixture)",
208
- "round": 1
209
- }
210
- ],
211
- "schema_version": "1",
212
- "source": {
213
- "canonical_id_registry_path": "benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/expected-pair-plan-registry.json",
214
- "canonical_id_registry_sha256": "98ac16e4536ea3ef2e51d3c728982c014211c193a742cea74f1331e4fbba76be",
215
- "expected_path": "benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/expected.json",
216
- "expected_sha256": "ddef8feba49f20b6957e37840bc6a03e78e554776e380d81ad6390944c72fcab",
217
- "rubric_path": "benchmark/auto-resolve/RUBRIC.md",
218
- "rubric_sha256": "5b5b709a0b57f7e6f4fbc072af91e1edbc8d7910ae16b9b7be7170616aeaa9af",
219
- "spec_path": "benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/spec.md",
220
- "spec_sha256": "9b0949c2afd4a522de2bdbbf267d93907fd908bf0f1d0dc5e111ee30ba875bb7"
221
- },
222
- "unresolved": []
223
- }
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env bash
2
- # F2 setup — no base-repo modifications needed. The task starts from the
3
- # stock test-repo baseline (hello/version CLI) and adds a new subcommand.
4
- set -e
5
- exit 0
@@ -1,55 +0,0 @@
1
- ---
2
- id: "F2-cli-medium-subcommand"
3
- title: "Add `doctor` subcommand to bench-test-repo CLI"
4
- status: planned
5
- complexity: medium
6
- depends-on: []
7
- ---
8
-
9
- # F2 Add `doctor` subcommand
10
-
11
- ## Context
12
-
13
- `bench-test-repo` users need a one-command way to diagnose their local
14
- environment — node version, Claude Code install, plugins, skills — without
15
- digging through the filesystem. A `doctor` subcommand lands that capability
16
- inside the CLI itself.
17
-
18
- ## Requirements
19
-
20
- - [ ] `node bin/cli.js doctor` produces a status report and exits 0 on a clean machine.
21
- - [ ] Node version check — requires `process.version >= v18.0.0`, emits a status line, marks FAIL if below.
22
- - [ ] `$HOME/.claude/` check — exists as directory AND is writable. Missing → FAIL. Exists but not writable (EACCES) → FAIL with a distinct "permission" message.
23
- - [ ] Installed plugins scan — read subdirectories of `$HOME/.claude/plugins/cache/` and print a summary line with the count; `--verbose` lists names.
24
- - [ ] Installed skills scan — count files matching `$HOME/.claude/skills/**/SKILL.md`; print count; `--verbose` lists relative paths.
25
- - [ ] Colored output with `[OK]` (green), `[WARN]` (yellow), `[FAIL]` (red) via ANSI escape codes **only when `process.stdout.isTTY` is true** — piped output must contain no `\x1b[` sequences.
26
- - [ ] Summary line: `doctor: <N> ok, <M> warn, <K> fail`.
27
- - [ ] Exit code: `0` if zero fails, `1` otherwise.
28
- - [ ] `--verbose` flag expands details for plugins/skills scans.
29
- - [ ] `node bin/cli.js doctor --help` prints a short help block and exits 0.
30
- - [ ] `node bin/cli.js --help` lists `doctor` as an available subcommand.
31
- - [ ] `HOME=/nonexistent node bin/cli.js doctor` prints a FAIL line clearly referencing the missing `/nonexistent/.claude` and exits 1.
32
-
33
- ## Constraints
34
-
35
- - **Zero new npm dependencies.** Use only Node.js built-ins (`fs`, `path`, `os`, `process`).
36
- - **No silent error catches.** Do not wrap operations in `try { … } catch { return fallbackValue }`. All errors visible to the user with actionable messages.
37
- - **HOME guard.** If `process.env.HOME` is undefined or empty, emit a clear FAIL line ("HOME environment variable is not set") and exit 1.
38
- - **EACCES handling.** If `readdirSync` fails with EACCES, emit a permission-specific message quoting the offending path. Do not silently return an empty list.
39
-
40
-
41
- ## Out of Scope
42
-
43
- - Auto-repair (report only; do not offer to fix detected problems).
44
- - Checking remote/registry state (npm, GitHub).
45
- - Any feature requiring a new npm dependency.
46
-
47
- ## Verification
48
-
49
- - `node bin/cli.js doctor` exits 0 on a machine with `~/.claude` present.
50
- - `HOME=/nonexistent node bin/cli.js doctor` prints a FAIL line referencing `/nonexistent/.claude` and exits 1.
51
- - `node bin/cli.js doctor | cat` contains no `\x1b[` sequences.
52
- - `node bin/cli.js doctor --help` prints help, exits 0.
53
- - `node bin/cli.js --help` mentions `doctor`.
54
- - `git diff -- package.json` is empty.
55
- - `node bin/cli.js doctor --verbose` lists plugins and skills.
@@ -1,14 +0,0 @@
1
- Add a `doctor` subcommand to bench-test-repo's CLI (`bin/cli.js`) that diagnoses the local environment. When a user runs `node bin/cli.js doctor`, it should check:
2
-
3
- 1. Node version is >= v18.0.0
4
- 2. $HOME/.claude/ exists and is writable
5
- 3. How many plugins are installed under $HOME/.claude/plugins/cache/
6
- 4. How many skills are installed (SKILL.md files under $HOME/.claude/skills/)
7
-
8
- Each check produces a status line with a tag — `[OK]`, `[WARN]`, or `[FAIL]`. The tags should be colored (green/yellow/red) when output is a TTY, but plain text when piped. End with a summary line like `doctor: 3 ok, 1 warn, 0 fail` and exit 0 if no fails, 1 otherwise.
9
-
10
- Add a `--verbose` flag that lists the individual plugins and skill paths. Add `--help` for the subcommand. Make sure `node bin/cli.js --help` mentions `doctor`.
11
-
12
- Keep it to Node.js built-ins only (fs, path, os, process) — no new npm dependencies. Handle errors explicitly: if HOME is unset, fail cleanly with a helpful message; if a directory can't be read due to permissions (EACCES), say so with the path.
13
-
14
- Running `HOME=/nonexistent node bin/cli.js doctor` should exit 1 and mention the missing `/nonexistent/.claude`.
@@ -1,39 +0,0 @@
1
- # F21 CLI scheduler priority
2
-
3
- ## Failure mode
4
-
5
- This fixture detects implementations that pass simple scheduling tests while
6
- missing interaction rules: global priority ordering, earliest-fit placement,
7
- blocked-interval exclusion, half-open time boundaries, and deterministic output
8
- ordering.
9
-
10
- ## Pipeline phase target
11
-
12
- PLAN must preserve the ordering and interval invariants. IMPLEMENT must build a
13
- small scheduling engine without adding dependencies. VERIFY should catch
14
- counterexamples where local request order or naive overlap checks produce a
15
- plausible but wrong schedule.
16
-
17
- ## Why existing fixtures do not cover it
18
-
19
- F16 covers checkout arithmetic. F10/F11/F12/F15 cover server behavior. None
20
- exercise a CLI algorithm where the correct result depends on sorting,
21
- interval arithmetic, and output ordering at once.
22
-
23
- ## Measurement status
24
-
25
- Pair evidence passed in `20260511-f21-current-riskprobes-v1`: bare `33`,
26
- solo_claude `66`, pair `99`, margin `+33`, wall `1.47x`,
27
- arm `l2_risk_probes`, verdict `pair_evidence_passed`.
28
-
29
- ## Solo-headroom hypothesis
30
-
31
- A capable solo_claude baseline is expected to miss global priority ordering
32
- combined with blocked-interval earliest-fit placement; observable command
33
- `node "$BENCH_FIXTURE_DIR/verifiers/priority-blocked.js"` exposes the miss.
34
-
35
- ## Retirement
36
-
37
- Retire or replace when both bare and solo consistently exceed the headroom
38
- thresholds, or if future fixtures cover the same interval-scheduling failure
39
- mode with better discrimination.
@@ -1,62 +0,0 @@
1
- {
2
- "verification_commands": [
3
- {
4
- "cmd": "node --test tests/cli.test.js",
5
- "exit_code": 0,
6
- "stdout_contains": [],
7
- "stdout_not_contains": ["not ok "]
8
- },
9
- {
10
- "cmd": "node \"$BENCH_FIXTURE_DIR/verifiers/priority-blocked.js\"",
11
- "exit_code": 0,
12
- "stdout_contains": ["\"ok\":true"],
13
- "stdout_not_contains": [],
14
- "contract_refs": [
15
- "Process requests globally by `priority` descending, then `submitted_at` ascending, then `id` ascending.",
16
- "For each request, place it on the requested resource at the earliest start minute that is greater than or equal to the request's requested `start`, fits wholly inside one availability window, does not overlap any blocked interval, and does not overlap any already accepted request on that resource.",
17
- "A request may end exactly at a window end, but any one-minute overlap with a blocked interval is rejected or moved later."
18
- ]
19
- },
20
- {
21
- "cmd": "node \"$BENCH_FIXTURE_DIR/verifiers/error-order.js\"",
22
- "exit_code": 0,
23
- "stdout_contains": ["\"ok\":true"],
24
- "stdout_not_contains": [],
25
- "contract_refs": [
26
- "If the request references an unknown resource, reject with `{ \"id\": string, \"reason\": \"unknown_resource\" }`.",
27
- "`rejected` is ordered in the original request input order.",
28
- "Duplicate request ids are invalid input: exit `2`, one JSON error to stderr, no stdout."
29
- ]
30
- }
31
- ],
32
- "forbidden_patterns": [
33
- {
34
- "pattern": "catch\\s*\\([^)]*\\)\\s*\\{[^}]*return\\s+(null|undefined|''|\\{\\})",
35
- "description": "silent catch returning fallback in scheduler path",
36
- "files": ["bin/cli.js", "tests/cli.test.js"],
37
- "severity": "disqualifier"
38
- },
39
- {
40
- "pattern": "catch\\s*\\([^)]*\\)\\s*\\{\\s*\\}",
41
- "description": "empty catch block",
42
- "files": ["bin/cli.js", "tests/cli.test.js"],
43
- "severity": "disqualifier"
44
- },
45
- {
46
- "pattern": "catch\\s*(?:\\([^)]*\\))?\\s*\\{[^}]*ignore[^}]*\\}",
47
- "description": "silent catch-ignore cleanup",
48
- "files": ["bin/cli.js", "tests/cli.test.js"],
49
- "severity": "disqualifier"
50
- },
51
- {
52
- "pattern": "/\\*\\s*eslint-disable",
53
- "description": "eslint-disable without scoped justification",
54
- "files": ["bin/cli.js"],
55
- "severity": "disqualifier"
56
- }
57
- ],
58
- "required_files": ["bin/cli.js", "tests/cli.test.js"],
59
- "forbidden_files": [],
60
- "max_deps_added": 0,
61
- "spec_output_files": ["bin/cli.js", "tests/cli.test.js"]
62
- }
@@ -1,10 +0,0 @@
1
- {
2
- "id": "F21-cli-scheduler-priority",
3
- "category": "high-risk",
4
- "difficulty": "high",
5
- "timeout_seconds": 1500,
6
- "required_tools": ["node"],
7
- "browser": false,
8
- "deps_change_expected": false,
9
- "intent": "Add a bench-cli schedule command that assigns appointment requests to resource availability windows using priority, submitted order, blocked intervals, and earliest-fit placement while producing exact JSON accept/reject results."
10
- }
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -e
@@ -1,67 +0,0 @@
1
- ---
2
- id: "F21-cli-scheduler-priority"
3
- title: "Priority appointment scheduler"
4
- status: planned
5
- complexity: high
6
- depends-on: []
7
- ---
8
-
9
- # F21 Priority appointment scheduler
10
-
11
- ## Context
12
-
13
- Add a `bench-cli schedule --input <path>` command that assigns appointment
14
- requests to resource availability windows using priority, submitted order,
15
- blocked intervals, and earliest-fit placement while producing exact JSON
16
- accept/reject results.
17
-
18
- The scheduler is used by downstream automation, so output shape, ordering, and
19
- failure reasons must be deterministic.
20
-
21
- ## Requirements
22
-
23
- - [ ] `bench-cli schedule --input <path>` reads JSON shaped as `{ "resources": Array<Resource>, "requests": Array<Request> }`.
24
- - [ ] Each resource has `{ "id": string, "windows": [{ "start": "HH:MM", "end": "HH:MM" }], "blocked": [{ "start": "HH:MM", "end": "HH:MM" }] }`. `blocked` may be empty.
25
- - [ ] Each request has `{ "id": string, "resource": string, "start": "HH:MM", "duration_min": number, "priority": number, "submitted_at": string }`.
26
- - [ ] Times are same-day 24-hour clock minutes. A range is half-open: `[start, end)`. A request ending exactly at a window end is allowed; overlapping a blocked range by one minute is not allowed.
27
- - [ ] Process requests globally by `priority` descending, then `submitted_at` ascending, then `id` ascending.
28
- - [ ] For each request, place it on the requested resource at the earliest start minute that is greater than or equal to the request's requested `start`, fits wholly inside one availability window, does not overlap any blocked interval, and does not overlap any already accepted request on that resource.
29
- - [ ] Do not move a request to a different resource.
30
- - [ ] If no placement exists, reject with `{ "id": string, "reason": "no_slot" }`.
31
- - [ ] If the request references an unknown resource, reject with `{ "id": string, "reason": "unknown_resource" }`.
32
- - [ ] Invalid top-level shape, invalid time strings, non-positive or non-integer `duration_min`, or duplicate request ids exits `2`, writes exactly one JSON error object to stderr, and writes nothing to stdout.
33
- - [ ] On success, write exactly one JSON object to stdout and no stderr. Keys: `scheduled`, `rejected`.
34
- - [ ] `scheduled` is ordered by actual scheduled start time ascending, then resource id ascending, then request id ascending. Each row has keys `id`, `resource`, `start`, `end`.
35
- - [ ] `rejected` is ordered in the original request input order. Each row has keys `id`, `reason`.
36
- - [ ] `tests/cli.test.js` is updated. Existing tests still pass AND at least two scheduler tests cover one success case and one rejection case.
37
-
38
- ## Constraints
39
-
40
- - **No new npm dependencies.**
41
- - **No silent catches in implementation or tests.** Invalid input and file-read failures must surface as JSON errors with exit `2`; test cleanup should use explicit safe primitives such as `fs.rmSync(path, { force: true })`, not `catch { /* ignore */ }`.
42
- - **No mutation of the input file.**
43
- - **No extra stdout/stderr text** on the success path; downstream tooling parses stdout as JSON.
44
- - **Touch only `bin/cli.js` and `tests/cli.test.js`.**
45
-
46
- ## Out of Scope
47
-
48
- - Multiple-day scheduling.
49
- - Time zones.
50
- - Recurring appointments.
51
- - Persisting scheduled results.
52
- - Touching `server/`, `web/`, or `tests/server.test.js`.
53
-
54
- ## Verification
55
-
56
- - `node --test tests/cli.test.js` exits 0.
57
- - A higher-priority later-submitted request can take the first slot, forcing a lower-priority earlier-submitted request to the next non-overlapping slot.
58
- - A request may end exactly at a window end, but any one-minute overlap with a blocked interval is rejected or moved later.
59
- - Unknown resources are reported in `rejected` without aborting the whole run.
60
- - Duplicate request ids are invalid input: exit `2`, one JSON error to stderr, no stdout.
61
- - `git diff --stat` shows only `bin/cli.js` and `tests/cli.test.js` touched.
62
-
63
- ## Solo-headroom hypothesis
64
-
65
- A capable solo_claude baseline is expected to miss global priority ordering
66
- across resources while preserving blocked-interval earliest-fit placement;
67
- observable command `node "$BENCH_FIXTURE_DIR/verifiers/priority-blocked.js"` exposes the miss.
@@ -1,7 +0,0 @@
1
- Add a `schedule` command to `bench-cli` so users can run `bench-cli schedule --input <path>` with a JSON file containing resources and appointment requests. It should assign requests to resource availability windows using priority, submitted order, blocked intervals, and earliest-fit placement, then print one exact JSON result with `scheduled` and `rejected` arrays.
2
-
3
- The input has resources with `id`, `windows`, and `blocked`, and requests with `id`, `resource`, `start`, `duration_min`, `priority`, and `submitted_at`. Times are same-day `HH:MM` values. Process requests by priority descending, then submitted_at ascending, then id ascending. A placement must stay on the requested resource, start no earlier than the requested start, fit inside one window, avoid blocked intervals, and avoid already accepted requests.
4
-
5
- On success, stdout must be exactly parseable JSON and stderr must be empty. `scheduled` rows must be ordered by actual scheduled start time, then resource id, then request id. `rejected` rows must stay in original request input order. Invalid input, duplicate request ids, invalid times, bad durations, or file-read failures should exit `2`, print exactly one JSON error object to stderr, and print nothing to stdout.
6
-
7
- Update `tests/cli.test.js` so existing tests still pass and add at least two scheduler tests: one success case and one rejection case. Do not use silent catches in implementation or test cleanup; use explicit safe primitives such as `fs.rmSync(path, { force: true })` instead of `catch { /* ignore */ }`. No new npm dependencies. Only touch `bin/cli.js` and `tests/cli.test.js`.
@@ -1,55 +0,0 @@
1
- 'use strict';
2
- const assert = require('node:assert');
3
- const { execFileSync, spawnSync } = require('node:child_process');
4
- const fs = require('node:fs');
5
- const os = require('node:os');
6
- const path = require('node:path');
7
-
8
- const work = process.env.BENCH_WORKDIR || process.cwd();
9
- const cli = path.join(work, 'bin', 'cli.js');
10
- const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'f21-errors-'));
11
-
12
- const unknownInput = path.join(tmp, 'unknown.json');
13
- fs.writeFileSync(unknownInput, JSON.stringify({
14
- resources: [
15
- { id: 'r1', windows: [{ start: '10:00', end: '10:30' }], blocked: [] }
16
- ],
17
- requests: [
18
- { id: 'unknown-first', resource: 'missing', start: '10:00', duration_min: 5, priority: 9, submitted_at: '2026-01-01T10:00:00Z' },
19
- { id: 'too-long', resource: 'r1', start: '10:00', duration_min: 45, priority: 8, submitted_at: '2026-01-01T10:01:00Z' },
20
- { id: 'ok', resource: 'r1', start: '10:00', duration_min: 30, priority: 7, submitted_at: '2026-01-01T10:02:00Z' }
21
- ]
22
- }), 'utf8');
23
-
24
- const out = execFileSync('node', [cli, 'schedule', '--input', unknownInput], {
25
- cwd: work,
26
- encoding: 'utf8',
27
- stdio: ['ignore', 'pipe', 'pipe']
28
- });
29
- const parsed = JSON.parse(out);
30
- assert.deepStrictEqual(parsed.scheduled, [
31
- { id: 'ok', resource: 'r1', start: '10:00', end: '10:30' }
32
- ]);
33
- assert.deepStrictEqual(parsed.rejected, [
34
- { id: 'unknown-first', reason: 'unknown_resource' },
35
- { id: 'too-long', reason: 'no_slot' }
36
- ]);
37
-
38
- const dupInput = path.join(tmp, 'dup.json');
39
- fs.writeFileSync(dupInput, JSON.stringify({
40
- resources: [
41
- { id: 'r1', windows: [{ start: '10:00', end: '11:00' }], blocked: [] }
42
- ],
43
- requests: [
44
- { id: 'dup', resource: 'r1', start: '10:00', duration_min: 10, priority: 1, submitted_at: '2026-01-01T10:00:00Z' },
45
- { id: 'dup', resource: 'r1', start: '10:10', duration_min: 10, priority: 1, submitted_at: '2026-01-01T10:01:00Z' }
46
- ]
47
- }), 'utf8');
48
- const dup = spawnSync('node', [cli, 'schedule', '--input', dupInput], {
49
- cwd: work,
50
- encoding: 'utf8'
51
- });
52
- assert.strictEqual(dup.status, 2);
53
- assert.strictEqual(dup.stdout, '');
54
- assert.doesNotThrow(() => JSON.parse(dup.stderr));
55
- console.log(JSON.stringify({ ok: true }));
@@ -1,48 +0,0 @@
1
- 'use strict';
2
- const assert = require('node:assert');
3
- const { execFileSync } = require('node:child_process');
4
- const fs = require('node:fs');
5
- const os = require('node:os');
6
- const path = require('node:path');
7
-
8
- const work = process.env.BENCH_WORKDIR || process.cwd();
9
- const cli = path.join(work, 'bin', 'cli.js');
10
- const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'f21-schedule-'));
11
- const input = path.join(tmp, 'input.json');
12
-
13
- fs.writeFileSync(input, JSON.stringify({
14
- resources: [
15
- {
16
- id: 'room-a',
17
- windows: [{ start: '09:00', end: '10:00' }],
18
- blocked: [{ start: '09:30', end: '09:40' }]
19
- },
20
- {
21
- id: 'room-b',
22
- windows: [{ start: '09:00', end: '09:45' }],
23
- blocked: []
24
- }
25
- ],
26
- requests: [
27
- { id: 'low-first', resource: 'room-a', start: '09:00', duration_min: 30, priority: 1, submitted_at: '2026-01-01T09:00:00Z' },
28
- { id: 'high-second', resource: 'room-a', start: '09:00', duration_min: 30, priority: 10, submitted_at: '2026-01-01T09:05:00Z' },
29
- { id: 'edge-ok', resource: 'room-b', start: '09:15', duration_min: 30, priority: 5, submitted_at: '2026-01-01T09:01:00Z' },
30
- { id: 'blocked-one-minute', resource: 'room-a', start: '09:29', duration_min: 2, priority: 4, submitted_at: '2026-01-01T09:02:00Z' }
31
- ]
32
- }), 'utf8');
33
-
34
- const stdout = execFileSync('node', [cli, 'schedule', '--input', input], {
35
- cwd: work,
36
- encoding: 'utf8',
37
- stdio: ['ignore', 'pipe', 'pipe']
38
- });
39
- const parsed = JSON.parse(stdout);
40
- assert.deepStrictEqual(parsed.scheduled, [
41
- { id: 'high-second', resource: 'room-a', start: '09:00', end: '09:30' },
42
- { id: 'edge-ok', resource: 'room-b', start: '09:15', end: '09:45' },
43
- { id: 'blocked-one-minute', resource: 'room-a', start: '09:40', end: '09:42' }
44
- ]);
45
- assert.deepStrictEqual(parsed.rejected, [
46
- { id: 'low-first', reason: 'no_slot' }
47
- ]);
48
- console.log(JSON.stringify({ ok: true }));
@@ -1,35 +0,0 @@
1
- # F22 CLI ledger close
2
-
3
- ## Failure mode
4
-
5
- This fixture detects finance-style reconciliation mistakes: applying duplicate
6
- transactions twice, silently accepting conflicting duplicate ids, validating
7
- only while mutating balances, rejecting negative balances that are explicitly
8
- allowed, or producing nondeterministic account ordering.
9
-
10
- ## Pipeline phase target
11
-
12
- PLAN must separate validation, idempotency, chronological application, and
13
- output formatting. IMPLEMENT must keep cents as integers and avoid fallback
14
- error handling. VERIFY should catch duplicate-id counterexamples and negative
15
- balance behavior.
16
-
17
- ## Why existing fixtures do not cover it
18
-
19
- F16 covers order quote arithmetic, but not ledger idempotency or full-input
20
- validation before mutation. F21 covers interval scheduling. Server fixtures
21
- cover API behavior rather than CLI reconciliation.
22
-
23
- ## Measurement status
24
-
25
- Headroom runs reject F22 as full-pipeline pair-lift evidence. In
26
- `20260507-f21-f22-full-pipeline-pair`, F22 scored bare 91 / solo_claude 98 and
27
- failed the headroom gate. In `20260508-f22-exact-error-headroom`, F22 scored
28
- bare 94 / solo_claude 98 after the exact-error fixture revision. Keep it as a ledger
29
- reconciliation control, not as counted `solo < pair` evidence.
30
-
31
- ## Retirement
32
-
33
- Retire or replace if both bare and solo consistently score above the headroom
34
- thresholds, or if a future ledger fixture captures the same duplicate-id and
35
- validation-before-mutation risks with stronger discrimination.