devlyn-cli 3.2.1 → 3.3.1

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 +8 -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 +660 -150
  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 +47 -38
  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,580 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- ROOT="$(cd "$(dirname "$0")/../../.." && pwd)"
5
- TMP="$(mktemp -d)"
6
- trap 'rm -rf "$TMP"' EXIT
7
-
8
- FIXTURES_DIR="$TMP/fixtures"
9
- mkdir -p "$FIXTURES_DIR/F99-riskless-high-risk"
10
- fixture="$FIXTURES_DIR/F99-riskless-high-risk"
11
- CHECKER="$ROOT/benchmark/auto-resolve/scripts/solo-headroom-hypothesis.py"
12
- CEILING_CHECKER="$ROOT/benchmark/auto-resolve/scripts/solo-ceiling-avoidance.py"
13
-
14
- cat > "$TMP/weak-hypothesis.md" <<'EOF'
15
- ## Solo-headroom hypothesis
16
-
17
- A capable solo_claude baseline is expected to miss duplicate idempotency ordering.
18
- EOF
19
- if python3 "$CHECKER" "$TMP/weak-hypothesis.md"; then
20
- echo "weak hypothesis without observable command must fail" >&2
21
- exit 1
22
- fi
23
- cat > "$TMP/unrelated-backtick-hypothesis.md" <<'EOF'
24
- ## Solo-headroom hypothesis
25
-
26
- A capable solo_claude baseline is expected to miss duplicate idempotency ordering; implementation token `idempotency-key`.
27
- EOF
28
- if python3 "$CHECKER" "$TMP/unrelated-backtick-hypothesis.md"; then
29
- echo "hypothesis with unrelated backtick must fail" >&2
30
- exit 1
31
- fi
32
- cat > "$TMP/actionable-hypothesis.md" <<'EOF'
33
- ## Solo-headroom hypothesis
34
-
35
- A capable solo_claude baseline is expected to miss duplicate idempotency ordering; `node -e "process.exit(0)"` exposes the miss.
36
- EOF
37
- python3 "$CHECKER" "$TMP/actionable-hypothesis.md"
38
- cat > "$TMP/docs-style-actionable-hypothesis.md" <<'EOF'
39
- ## Solo-headroom hypothesis
40
-
41
- Solo-headroom hypothesis: the spec must literally contain `solo_claude`, `miss`, and an observable command; `node -e "process.exit(0)"` exposes the miss.
42
- EOF
43
- python3 "$CHECKER" "$TMP/docs-style-actionable-hypothesis.md"
44
- cat > "$TMP/actionable-expected.json" <<'EOF'
45
- {
46
- "verification_commands": [
47
- {
48
- "cmd": "node -e \"process.exit(0)\"",
49
- "exit_code": 0
50
- }
51
- ]
52
- }
53
- EOF
54
- python3 "$CHECKER" --expected-json "$TMP/actionable-expected.json" "$TMP/actionable-hypothesis.md"
55
- python3 "$CHECKER" --expected-json "$TMP/actionable-expected.json" "$TMP/docs-style-actionable-hypothesis.md"
56
- cat > "$TMP/other-expected.json" <<'EOF'
57
- {
58
- "verification_commands": [
59
- {
60
- "cmd": "node -e \"process.exit(1)\"",
61
- "exit_code": 1
62
- }
63
- ]
64
- }
65
- EOF
66
- if python3 "$CHECKER" --expected-json "$TMP/other-expected.json" "$TMP/actionable-hypothesis.md"; then
67
- echo "hypothesis command must match expected.json verification command" >&2
68
- exit 1
69
- fi
70
- printf '\xff\n' > "$TMP/non-utf8-hypothesis.md"
71
- set +e
72
- python3 "$CHECKER" "$TMP/non-utf8-hypothesis.md" > "$TMP/non-utf8-hypothesis.out" 2>&1
73
- status=$?
74
- set -e
75
- [ "$status" -ne 0 ]
76
- grep -Fq 'expected UTF-8 text' "$TMP/non-utf8-hypothesis.out"
77
-
78
- cat > "$TMP/weak-solo-ceiling.md" <<'EOF'
79
- ## Solo ceiling avoidance
80
-
81
- This candidate mentions solo_claude but gives no control comparison.
82
- EOF
83
- if python3 "$CEILING_CHECKER" "$TMP/weak-solo-ceiling.md"; then
84
- echo "weak solo ceiling avoidance must fail" >&2
85
- exit 1
86
- fi
87
- cat > "$TMP/actionable-solo-ceiling.md" <<'EOF'
88
- ## Solo ceiling avoidance
89
-
90
- Unlike solo-saturated S2-S6 controls, this fixture should preserve
91
- solo_claude headroom because it targets a multi-run state dependency.
92
- EOF
93
- python3 "$CEILING_CHECKER" "$TMP/actionable-solo-ceiling.md"
94
- printf '\xff\n' > "$TMP/non-utf8-solo-ceiling.md"
95
- set +e
96
- python3 "$CEILING_CHECKER" "$TMP/non-utf8-solo-ceiling.md" > "$TMP/non-utf8-solo-ceiling.out" 2>&1
97
- status=$?
98
- set -e
99
- [ "$status" -ne 0 ]
100
- grep -Fq 'expected UTF-8 text' "$TMP/non-utf8-solo-ceiling.out"
101
-
102
- write_fixture() {
103
- local intent="$1"
104
- cat > "$fixture/metadata.json" <<EOF
105
- {
106
- "id": "F99-riskless-high-risk",
107
- "category": "high-risk",
108
- "difficulty": "high",
109
- "timeout_seconds": 900,
110
- "required_tools": ["node"],
111
- "browser": false,
112
- "deps_change_expected": false,
113
- "intent": "$intent"
114
- }
115
- EOF
116
- cat > "$fixture/spec.md" <<EOF
117
- ---
118
- id: F99-riskless-high-risk
119
- ---
120
-
121
- # Riskless Fixture
122
-
123
- ## Context
124
-
125
- $intent
126
-
127
- ## Requirements
128
-
129
- - Add the requested behavior.
130
- EOF
131
- printf '%s\n' "$intent" > "$fixture/task.txt"
132
- cat > "$fixture/expected.json" <<'EOF'
133
- {
134
- "verification_commands": [
135
- {
136
- "cmd": "node -e \"process.exit(0)\"",
137
- "exit_code": 0
138
- }
139
- ],
140
- "forbidden_patterns": [],
141
- "required_files": [],
142
- "forbidden_files": [],
143
- "tier_a_waivers": [],
144
- "spec_output_files": [],
145
- "max_deps_added": 0
146
- }
147
- EOF
148
- cat > "$fixture/setup.sh" <<'EOF'
149
- #!/usr/bin/env bash
150
- set -euo pipefail
151
- EOF
152
- chmod +x "$fixture/setup.sh"
153
- cat > "$fixture/NOTES.md" <<'EOF'
154
- # Notes
155
-
156
- Synthetic lint fixture for high-risk trigger validation.
157
- EOF
158
- }
159
-
160
- write_fixture "Add a generic CLI helper with clear output."
161
- set +e
162
- DEVLYN_FIXTURES_DIR="$FIXTURES_DIR" bash "$ROOT/scripts/lint-fixtures.sh" > "$TMP/fail.out" 2>&1
163
- status=$?
164
- set -e
165
- [ "$status" -ne 0 ]
166
- grep -Fq 'high-risk fixture must include a resolve risk-trigger term' "$TMP/fail.out"
167
-
168
- write_fixture "Add idempotency handling for duplicate requests."
169
- DEVLYN_FIXTURES_DIR="$FIXTURES_DIR" bash "$ROOT/scripts/lint-fixtures.sh" > "$TMP/pass.out" 2>&1
170
- grep -Fq '✓ lint-fixtures: 1 active fixture(s) passed schema + structural checks; 0 retired fixture(s) preserved' "$TMP/pass.out"
171
-
172
- cat >> "$fixture/NOTES.md" <<'EOF'
173
-
174
- ## Measurement status
175
-
176
- Pair evidence passed in `test-pair-run`: bare `33`, solo_claude `66`, pair `99`,
177
- margin `+33`, wall `1.50x`, arm `l2_risk_probes`, verdict `pair_evidence_passed`.
178
- EOF
179
- set +e
180
- DEVLYN_FIXTURES_DIR="$FIXTURES_DIR" bash "$ROOT/scripts/lint-fixtures.sh" > "$TMP/pair-evidence-hypothesis-fail.out" 2>&1
181
- status=$?
182
- set -e
183
- [ "$status" -ne 0 ]
184
- grep -Fq 'pair_evidence_passed fixture spec.md must document an actionable solo-headroom hypothesis with solo_claude miss and observable command from expected.json' \
185
- "$TMP/pair-evidence-hypothesis-fail.out"
186
-
187
- cat >> "$fixture/spec.md" <<'EOF'
188
-
189
- ## Solo-headroom hypothesis
190
-
191
- A capable solo_claude baseline is expected to miss duplicate idempotency ordering;
192
- observable command `node -e "process.exit(0)"` exposes the miss.
193
- EOF
194
- DEVLYN_FIXTURES_DIR="$FIXTURES_DIR" bash "$ROOT/scripts/lint-fixtures.sh" > "$TMP/pair-evidence-hypothesis-pass.out" 2>&1
195
- grep -Fq '✓ lint-fixtures: 1 active fixture(s) passed schema + structural checks; 0 retired fixture(s) preserved' \
196
- "$TMP/pair-evidence-hypothesis-pass.out"
197
- write_fixture "Add idempotency handling for duplicate requests."
198
-
199
- python3 - "$fixture/spec.md" <<'PY'
200
- import pathlib
201
- path = pathlib.Path(__import__("sys").argv[1])
202
- text = path.read_text(encoding="utf-8")
203
- path.write_text(text.replace("---\nid:", "---\ncomplexity: hihg\nid:", 1), encoding="utf-8")
204
- PY
205
- set +e
206
- DEVLYN_FIXTURES_DIR="$FIXTURES_DIR" bash "$ROOT/scripts/lint-fixtures.sh" > "$TMP/spec-verify-check-fail.out" 2>&1
207
- status=$?
208
- set -e
209
- [ "$status" -ne 0 ]
210
- grep -Fq 'spec-verify-check --check failed' "$TMP/spec-verify-check-fail.out"
211
- grep -Fq 'frontmatter complexity must be one of' "$TMP/spec-verify-check-fail.out"
212
- write_fixture "Add idempotency handling for duplicate requests."
213
-
214
- cat > "$TMP/malformed-rejected.sh" <<'EOF'
215
- #!/usr/bin/env bash
216
- not_the_registry_function() {
217
- return 1
218
- }
219
- EOF
220
- set +e
221
- DEVLYN_FIXTURES_DIR="$FIXTURES_DIR" \
222
- DEVLYN_REJECTED_FIXTURE_REGISTRY="$TMP/malformed-rejected.sh" \
223
- bash "$ROOT/scripts/lint-fixtures.sh" > "$TMP/malformed-rejected.out" 2>&1
224
- status=$?
225
- set -e
226
- [ "$status" -ne 0 ]
227
- grep -Fq 'rejected fixture registry must define rejected_pair_fixture_reason' \
228
- "$TMP/malformed-rejected.out"
229
-
230
- SHADOW_DIR="$TMP/shadow-fixtures"
231
- shadow_fixture="$SHADOW_DIR/S99-riskless-high-risk"
232
- mkdir -p "$shadow_fixture"
233
- cp -R "$fixture/." "$shadow_fixture/"
234
- python3 - "$shadow_fixture" <<'PY'
235
- from pathlib import Path
236
- import sys
237
- root = Path(sys.argv[1])
238
- for name in ("metadata.json", "spec.md"):
239
- path = root / name
240
- path.write_text(path.read_text().replace("F99-riskless-high-risk", "S99-riskless-high-risk"))
241
- PY
242
- DEVLYN_FIXTURES_DIR="$SHADOW_DIR" DEVLYN_FIXTURE_GLOB="S*" \
243
- bash "$ROOT/scripts/lint-fixtures.sh" > "$TMP/shadow-pass.out" 2>&1
244
- grep -Fq '✓ lint-fixtures: 1 active fixture(s) passed schema + structural checks; 0 retired fixture(s) preserved' "$TMP/shadow-pass.out"
245
-
246
- cat > "$TMP/empty-rejected.sh" <<'EOF'
247
- #!/usr/bin/env bash
248
- rejected_pair_fixture_reason() {
249
- return 1
250
- }
251
- EOF
252
- set +e
253
- DEVLYN_SHADOW_FIXTURES_DIR="$SHADOW_DIR" \
254
- DEVLYN_REJECTED_FIXTURE_REGISTRY="$TMP/empty-rejected.sh" \
255
- bash "$ROOT/scripts/lint-shadow-fixtures.sh" > "$TMP/shadow-missing-hypothesis.out" 2>&1
256
- status=$?
257
- set -e
258
- [ "$status" -ne 0 ]
259
- grep -Fq 'unmeasured high-risk shadow fixture spec.md must document a solo-headroom hypothesis with solo_claude miss and observable command from expected.json before provider spend' \
260
- "$TMP/shadow-missing-hypothesis.out"
261
-
262
- cat >> "$shadow_fixture/spec.md" <<'EOF'
263
-
264
- ## Solo-headroom hypothesis
265
-
266
- A capable solo_claude baseline is expected to miss duplicate idempotency ordering.
267
- EOF
268
- set +e
269
- DEVLYN_SHADOW_FIXTURES_DIR="$SHADOW_DIR" \
270
- DEVLYN_REJECTED_FIXTURE_REGISTRY="$TMP/empty-rejected.sh" \
271
- bash "$ROOT/scripts/lint-shadow-fixtures.sh" > "$TMP/shadow-weak-hypothesis.out" 2>&1
272
- status=$?
273
- set -e
274
- [ "$status" -ne 0 ]
275
- grep -Fq 'solo-headroom hypothesis must include' "$TMP/shadow-weak-hypothesis.out"
276
-
277
- cat >> "$shadow_fixture/spec.md" <<'EOF'
278
-
279
- Observable command: `node -e "process.exit(0)"` exposes the miss.
280
- EOF
281
- set +e
282
- DEVLYN_SHADOW_FIXTURES_DIR="$SHADOW_DIR" \
283
- DEVLYN_REJECTED_FIXTURE_REGISTRY="$TMP/empty-rejected.sh" \
284
- bash "$ROOT/scripts/lint-shadow-fixtures.sh" > "$TMP/shadow-missing-solo-ceiling-avoidance.out" 2>&1
285
- status=$?
286
- set -e
287
- [ "$status" -ne 0 ]
288
- grep -Fq 'unmeasured high-risk shadow fixture NOTES.md must include ## Solo ceiling avoidance' \
289
- "$TMP/shadow-missing-solo-ceiling-avoidance.out"
290
-
291
- cat >> "$shadow_fixture/NOTES.md" <<'EOF'
292
-
293
- ## Solo ceiling avoidance
294
-
295
- This candidate mentions solo_claude but gives no control comparison.
296
- EOF
297
- set +e
298
- DEVLYN_SHADOW_FIXTURES_DIR="$SHADOW_DIR" \
299
- DEVLYN_REJECTED_FIXTURE_REGISTRY="$TMP/empty-rejected.sh" \
300
- bash "$ROOT/scripts/lint-shadow-fixtures.sh" > "$TMP/shadow-weak-solo-ceiling-avoidance.out" 2>&1
301
- status=$?
302
- set -e
303
- [ "$status" -ne 0 ]
304
- grep -Fq 'unmeasured high-risk shadow fixture NOTES.md must include ## Solo ceiling avoidance' \
305
- "$TMP/shadow-weak-solo-ceiling-avoidance.out"
306
-
307
- cat >> "$shadow_fixture/NOTES.md" <<'EOF'
308
-
309
- This candidate is expected to preserve solo_claude headroom because it differs
310
- from solo-saturated S2-S6 controls by exercising a synthetic hidden invariant.
311
- EOF
312
- DEVLYN_SHADOW_FIXTURES_DIR="$SHADOW_DIR" \
313
- DEVLYN_REJECTED_FIXTURE_REGISTRY="$TMP/empty-rejected.sh" \
314
- bash "$ROOT/scripts/lint-shadow-fixtures.sh" > "$TMP/shadow-hypothesis-pass.out" 2>&1
315
- grep -Fq '✓ lint-fixtures: 1 active fixture(s) passed schema + structural checks; 0 retired fixture(s) preserved' \
316
- "$TMP/shadow-hypothesis-pass.out"
317
-
318
- cat >> "$shadow_fixture/NOTES.md" <<'EOF'
319
-
320
- ## Calibration status
321
-
322
- - `test-shadow-headroom`: bare `33`, solo_claude `99`, headroom gate FAIL.
323
- EOF
324
- set +e
325
- DEVLYN_SHADOW_FIXTURES_DIR="$SHADOW_DIR" \
326
- DEVLYN_REJECTED_FIXTURE_REGISTRY="$TMP/empty-rejected.sh" \
327
- bash "$ROOT/scripts/lint-shadow-fixtures.sh" > "$TMP/shadow-calibration-rejected-missing.out" 2>&1
328
- status=$?
329
- set -e
330
- [ "$status" -ne 0 ]
331
- grep -Fq 'NOTES.md records pair-candidate rejection but pair-rejected-fixtures.sh has no rejected reason' \
332
- "$TMP/shadow-calibration-rejected-missing.out"
333
-
334
- cat > "$TMP/rejected.sh" <<'EOF'
335
- #!/usr/bin/env bash
336
- rejected_pair_fixture_reason() {
337
- case "$1" in
338
- F99-*|F99) echo "bare 33 / solo_claude 98 in test-active-headroom" ;;
339
- S99-*|S99) echo "bare 33 / solo_claude 99 in test-shadow-headroom" ;;
340
- *) return 1 ;;
341
- esac
342
- }
343
- EOF
344
- DEVLYN_SHADOW_FIXTURES_DIR="$SHADOW_DIR" \
345
- DEVLYN_REJECTED_FIXTURE_REGISTRY="$TMP/rejected.sh" \
346
- bash "$ROOT/scripts/lint-shadow-fixtures.sh" > "$TMP/shadow-calibration-rejected-pass.out" 2>&1
347
- grep -Fq '✓ lint-fixtures: 1 active fixture(s) passed schema + structural checks; 0 retired fixture(s) preserved' \
348
- "$TMP/shadow-calibration-rejected-pass.out"
349
-
350
- cat >> "$fixture/NOTES.md" <<'EOF'
351
-
352
- ## Pair-candidate status
353
-
354
- Rejected as pair-lift evidence by `test-active-headroom`: bare scored 33, but
355
- solo_claude scored 98.
356
- EOF
357
- set +e
358
- DEVLYN_FIXTURES_DIR="$FIXTURES_DIR" \
359
- DEVLYN_REJECTED_FIXTURE_REGISTRY="$TMP/empty-rejected.sh" \
360
- bash "$ROOT/scripts/lint-fixtures.sh" > "$TMP/active-calibration-rejected-missing.out" 2>&1
361
- status=$?
362
- set -e
363
- [ "$status" -ne 0 ]
364
- grep -Fq 'NOTES.md records pair-candidate rejection but pair-rejected-fixtures.sh has no rejected reason' \
365
- "$TMP/active-calibration-rejected-missing.out"
366
-
367
- DEVLYN_FIXTURES_DIR="$FIXTURES_DIR" \
368
- DEVLYN_REJECTED_FIXTURE_REGISTRY="$TMP/rejected.sh" \
369
- bash "$ROOT/scripts/lint-fixtures.sh" > "$TMP/active-calibration-rejected-pass.out" 2>&1
370
- grep -Fq '✓ lint-fixtures: 1 active fixture(s) passed schema + structural checks; 0 retired fixture(s) preserved' \
371
- "$TMP/active-calibration-rejected-pass.out"
372
-
373
- cat > "$fixture/expected.json" <<'EOF'
374
- {
375
- "verification_commands": [],
376
- "forbidden_patterns": [],
377
- "required_files": [],
378
- "forbidden_files": [],
379
- "tier_a_waivers": [],
380
- "spec_output_files": [],
381
- "max_deps_added": 0
382
- }
383
- EOF
384
- set +e
385
- DEVLYN_FIXTURES_DIR="$FIXTURES_DIR" bash "$ROOT/scripts/lint-fixtures.sh" > "$TMP/spec-verify-check-expected-fail.out" 2>&1
386
- status=$?
387
- set -e
388
- [ "$status" -ne 0 ]
389
- grep -Fq 'spec-verify-check --check-expected failed' "$TMP/spec-verify-check-expected-fail.out"
390
- grep -Fq 'unless spec.expected.json declares "pure_design": true' "$TMP/spec-verify-check-expected-fail.out"
391
-
392
- write_fixture "Add idempotency handling for duplicate requests."
393
-
394
- mkdir -p "$fixture/verifiers"
395
- printf 'console.log(JSON.stringify({ ok: true }))\n' > "$fixture/verifiers/hidden-oracle.js"
396
-
397
- cat > "$fixture/expected.json" <<'EOF'
398
- {
399
- "verification_commands": [
400
- {
401
- "cmd": "node \"$BENCH_FIXTURE_DIR/verifiers/hidden-oracle.js\"",
402
- "exit_code": 0
403
- }
404
- ],
405
- "forbidden_patterns": [],
406
- "required_files": [],
407
- "forbidden_files": [],
408
- "tier_a_waivers": [],
409
- "spec_output_files": [],
410
- "max_deps_added": 0
411
- }
412
- EOF
413
- set +e
414
- DEVLYN_FIXTURES_DIR="$FIXTURES_DIR" bash "$ROOT/scripts/lint-fixtures.sh" > "$TMP/missing-contract-refs.out" 2>&1
415
- status=$?
416
- set -e
417
- [ "$status" -ne 0 ]
418
- grep -Fq 'hidden oracle missing contract_refs' "$TMP/missing-contract-refs.out"
419
-
420
- cat > "$fixture/expected.json" <<'EOF'
421
- {
422
- "verification_commands": [
423
- {
424
- "cmd": "node \"$BENCH_FIXTURE_DIR/verifiers/hidden-oracle.js\"",
425
- "exit_code": 0,
426
- "contract_refs": ["Add the requested behavior."]
427
- }
428
- ],
429
- "forbidden_patterns": [],
430
- "required_files": [],
431
- "forbidden_files": [],
432
- "tier_a_waivers": [],
433
- "spec_output_files": [],
434
- "max_deps_added": 0
435
- }
436
- EOF
437
- set +e
438
- DEVLYN_FIXTURES_DIR="$FIXTURES_DIR" bash "$ROOT/scripts/lint-fixtures.sh" > "$TMP/missing-hidden-oracle-sentinel.out" 2>&1
439
- status=$?
440
- set -e
441
- [ "$status" -ne 0 ]
442
- grep -Fq "hidden oracle must assert stdout_contains includes '\"ok\":true'" "$TMP/missing-hidden-oracle-sentinel.out"
443
-
444
- cat > "$fixture/expected.json" <<'EOF'
445
- {
446
- "verification_commands": [
447
- {
448
- "cmd": "node \"$BENCH_FIXTURE_DIR/verifiers/hidden-oracle.js\"",
449
- "exit_code": 0,
450
- "contract_refs": ["This visible contract is not in the spec."]
451
- }
452
- ],
453
- "forbidden_patterns": [],
454
- "required_files": [],
455
- "forbidden_files": [],
456
- "tier_a_waivers": [],
457
- "spec_output_files": [],
458
- "max_deps_added": 0
459
- }
460
- EOF
461
- set +e
462
- DEVLYN_FIXTURES_DIR="$FIXTURES_DIR" bash "$ROOT/scripts/lint-fixtures.sh" > "$TMP/bad-contract-ref.out" 2>&1
463
- status=$?
464
- set -e
465
- [ "$status" -ne 0 ]
466
- grep -Fq 'contract_ref not found in spec.md' "$TMP/bad-contract-ref.out"
467
-
468
- printf 'console.log("outside")\n' > "$FIXTURES_DIR/outside-hidden-oracle.js"
469
- cat > "$fixture/expected.json" <<'EOF'
470
- {
471
- "verification_commands": [
472
- {
473
- "cmd": "node \"$BENCH_FIXTURE_DIR/../outside-hidden-oracle.js\"",
474
- "exit_code": 0,
475
- "contract_refs": ["Add the requested behavior."]
476
- }
477
- ],
478
- "forbidden_patterns": [],
479
- "required_files": [],
480
- "forbidden_files": [],
481
- "tier_a_waivers": [],
482
- "spec_output_files": [],
483
- "max_deps_added": 0
484
- }
485
- EOF
486
- set +e
487
- DEVLYN_FIXTURES_DIR="$FIXTURES_DIR" bash "$ROOT/scripts/lint-fixtures.sh" > "$TMP/escaping-hidden-oracle-file.out" 2>&1
488
- status=$?
489
- set -e
490
- [ "$status" -ne 0 ]
491
- grep -Fq 'BENCH_FIXTURE_DIR file escapes fixture dir' "$TMP/escaping-hidden-oracle-file.out"
492
-
493
- cat > "$fixture/expected.json" <<'EOF'
494
- {
495
- "verification_commands": [
496
- {
497
- "cmd": "cd \"$BENCH_FIXTURE_DIR\" && node verifiers/hidden-oracle.js",
498
- "exit_code": 0,
499
- "contract_refs": ["Add the requested behavior."]
500
- }
501
- ],
502
- "forbidden_patterns": [],
503
- "required_files": [],
504
- "forbidden_files": [],
505
- "tier_a_waivers": [],
506
- "spec_output_files": [],
507
- "max_deps_added": 0
508
- }
509
- EOF
510
- set +e
511
- DEVLYN_FIXTURES_DIR="$FIXTURES_DIR" bash "$ROOT/scripts/lint-fixtures.sh" > "$TMP/implicit-hidden-oracle-file.out" 2>&1
512
- status=$?
513
- set -e
514
- [ "$status" -ne 0 ]
515
- grep -Fq 'hidden oracle must reference an explicit $BENCH_FIXTURE_DIR/... file' "$TMP/implicit-hidden-oracle-file.out"
516
-
517
- cat > "$fixture/expected.json" <<'EOF'
518
- {
519
- "verification_commands": [
520
- {
521
- "cmd": "node \"$BENCH_FIXTURE_DIR/verifiers/missing-hidden-oracle.js\"",
522
- "exit_code": 0,
523
- "contract_refs": ["Add the requested behavior."]
524
- }
525
- ],
526
- "forbidden_patterns": [],
527
- "required_files": [],
528
- "forbidden_files": [],
529
- "tier_a_waivers": [],
530
- "spec_output_files": [],
531
- "max_deps_added": 0
532
- }
533
- EOF
534
- set +e
535
- DEVLYN_FIXTURES_DIR="$FIXTURES_DIR" bash "$ROOT/scripts/lint-fixtures.sh" > "$TMP/missing-hidden-oracle-file.out" 2>&1
536
- status=$?
537
- set -e
538
- [ "$status" -ne 0 ]
539
- grep -Fq 'BENCH_FIXTURE_DIR file not found' "$TMP/missing-hidden-oracle-file.out"
540
-
541
- cat > "$fixture/expected.json" <<'EOF'
542
- {
543
- "verification_commands": "node -e \"process.exit(0)\"",
544
- "forbidden_patterns": [],
545
- "required_files": [],
546
- "forbidden_files": [],
547
- "tier_a_waivers": [],
548
- "spec_output_files": [],
549
- "max_deps_added": 0
550
- }
551
- EOF
552
- set +e
553
- DEVLYN_FIXTURES_DIR="$FIXTURES_DIR" DEVLYN_LINT_FIXTURES_NO_JSONSCHEMA=1 \
554
- bash "$ROOT/scripts/lint-fixtures.sh" > "$TMP/fallback-fail.out" 2>&1
555
- status=$?
556
- set -e
557
- [ "$status" -ne 0 ]
558
- grep -Fq 'verification_commands must be an array' "$TMP/fallback-fail.out"
559
- if grep -Fq 'Traceback' "$TMP/fallback-fail.out"; then
560
- echo "fallback schema failure must not continue into traceback-prone checks" >&2
561
- cat "$TMP/fallback-fail.out" >&2
562
- exit 1
563
- fi
564
-
565
- cat > "$fixture/expected.json" <<'EOF'
566
- []
567
- EOF
568
- set +e
569
- DEVLYN_FIXTURES_DIR="$FIXTURES_DIR" bash "$ROOT/scripts/lint-fixtures.sh" > "$TMP/non-object-fail.out" 2>&1
570
- status=$?
571
- set -e
572
- [ "$status" -ne 0 ]
573
- grep -Fq 'expected.json must be an object' "$TMP/non-object-fail.out"
574
- if grep -Fq 'Traceback' "$TMP/non-object-fail.out"; then
575
- echo "non-object expected.json failure must not emit Traceback" >&2
576
- cat "$TMP/non-object-fail.out" >&2
577
- exit 1
578
- fi
579
-
580
- echo "PASS test-lint-fixtures"