devlyn-cli 3.2.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (424) hide show
  1. package/AGENTS.md +2 -2
  2. package/CLAUDE.md +2 -2
  3. package/README.md +22 -113
  4. package/bin/devlyn.js +13 -225
  5. package/bin/instruction-templates.json +752 -1
  6. package/bin/instructions.js +101 -17
  7. package/config/skills/_shared/adapters/grok.md +1 -2
  8. package/config/skills/_shared/archive_run.py +15 -3
  9. package/config/skills/_shared/judge-role-evidence.py +21 -1
  10. package/config/skills/_shared/runtime-principles.md +1 -1
  11. package/config/skills/_shared/spec-verify-check.py +0 -653
  12. package/config/skills/_shared/state-phase-write.py +371 -30
  13. package/config/skills/_shared/task-complete.py +635 -143
  14. package/config/skills/_shared/terminal-claim-check.py +229 -4
  15. package/config/skills/_shared/verify-merge-findings.py +93 -2
  16. package/config/skills/devlyn:ideate/SKILL.md +3 -4
  17. package/config/skills/devlyn:ideate/references/elicitation.md +2 -35
  18. package/config/skills/devlyn:ideate/references/from-spec-mode.md +3 -18
  19. package/config/skills/devlyn:ideate/references/project-mode.md +1 -16
  20. package/config/skills/devlyn:ideate/references/spec-template.md +0 -2
  21. package/config/skills/devlyn:queue/SKILL.md +6 -4
  22. package/config/skills/devlyn:resolve/SKILL.md +16 -25
  23. package/config/skills/devlyn:resolve/references/free-form-mode.md +0 -14
  24. package/config/skills/devlyn:resolve/references/outer-loop.md +1 -1
  25. package/config/skills/devlyn:resolve/references/phases/build-gate.md +1 -1
  26. package/config/skills/devlyn:resolve/references/phases/cleanup.md +3 -3
  27. package/config/skills/devlyn:resolve/references/phases/implement.md +1 -1
  28. package/config/skills/devlyn:resolve/references/phases/probe-derive.md +1 -16
  29. package/config/skills/devlyn:resolve/references/phases/verify.md +4 -9
  30. package/config/skills/devlyn:resolve/references/state-schema.md +9 -7
  31. package/config/skills/devlyn:resolve/references/task-completion.md +46 -37
  32. package/{config/skills → optional-skills}/code-health-standards/SKILL.md +4 -13
  33. package/{config/skills → optional-skills}/code-review-standards/SKILL.md +4 -12
  34. package/{config/skills → optional-skills}/root-cause-analysis/SKILL.md +4 -12
  35. package/{config/skills → optional-skills}/ui-implementation-standards/SKILL.md +4 -14
  36. package/package.json +1 -57
  37. package/benchmark/auto-resolve/BENCHMARK-DESIGN.md +0 -289
  38. package/benchmark/auto-resolve/BENCHMARK-RESULTS.md +0 -341
  39. package/benchmark/auto-resolve/README.md +0 -696
  40. package/benchmark/auto-resolve/RUBRIC.md +0 -177
  41. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/NOTES.md +0 -34
  42. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/expected.json +0 -68
  43. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/metadata.json +0 -10
  44. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/setup.sh +0 -4
  45. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/spec.md +0 -44
  46. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/task.ko.txt +0 -8
  47. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/task.txt +0 -8
  48. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/NOTES.md +0 -68
  49. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/expected.json +0 -60
  50. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/metadata.json +0 -10
  51. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/setup.sh +0 -17
  52. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/spec.md +0 -51
  53. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/task.txt +0 -9
  54. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/verifiers/invalid.js +0 -29
  55. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/verifiers/parallel.js +0 -50
  56. package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/NOTES.md +0 -75
  57. package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/expected.json +0 -52
  58. package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/metadata.json +0 -10
  59. package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/setup.sh +0 -171
  60. package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/spec.md +0 -50
  61. package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/task.txt +0 -9
  62. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/NOTES.md +0 -89
  63. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/expected.json +0 -74
  64. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/metadata.json +0 -10
  65. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/setup.sh +0 -251
  66. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/spec.md +0 -57
  67. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/task.txt +0 -13
  68. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/verifiers/replay-malformed-body.js +0 -64
  69. package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/NOTES.md +0 -104
  70. package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/expected.json +0 -46
  71. package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/metadata.json +0 -10
  72. package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/setup.sh +0 -336
  73. package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/spec.md +0 -51
  74. package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/task.txt +0 -9
  75. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/NOTES.md +0 -38
  76. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/expected.json +0 -64
  77. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/metadata.json +0 -10
  78. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/setup.sh +0 -32
  79. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/spec.md +0 -63
  80. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/task.txt +0 -7
  81. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/verifiers/exact-success.js +0 -54
  82. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/verifiers/no-hardcoded-pricing.js +0 -47
  83. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/verifiers/stock-error.js +0 -45
  84. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/NOTES.md +0 -57
  85. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/expected-pair-plan-registry.json +0 -170
  86. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/expected.json +0 -84
  87. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/metadata.json +0 -21
  88. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/pair-plan.sample-fail.json +0 -214
  89. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/pair-plan.sample-pass.json +0 -223
  90. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/setup.sh +0 -5
  91. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/spec.md +0 -55
  92. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/task.txt +0 -14
  93. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/NOTES.md +0 -39
  94. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/expected.json +0 -62
  95. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/metadata.json +0 -10
  96. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/setup.sh +0 -2
  97. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/spec.md +0 -67
  98. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/task.txt +0 -7
  99. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/verifiers/error-order.js +0 -55
  100. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/verifiers/priority-blocked.js +0 -48
  101. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/NOTES.md +0 -35
  102. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/expected.json +0 -56
  103. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/metadata.json +0 -10
  104. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/setup.sh +0 -2
  105. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/spec.md +0 -64
  106. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/task.txt +0 -7
  107. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/verifiers/conflicting-duplicate.js +0 -34
  108. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/verifiers/idempotent-close.js +0 -41
  109. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/NOTES.md +0 -39
  110. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/expected.json +0 -56
  111. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/metadata.json +0 -10
  112. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/setup.sh +0 -2
  113. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/spec.md +0 -76
  114. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/task.txt +0 -7
  115. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/verifiers/priority-rollback.js +0 -64
  116. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/verifiers/single-warehouse-fefo.js +0 -66
  117. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/NOTES.md +0 -40
  118. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/expected.json +0 -66
  119. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/metadata.json +0 -10
  120. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/setup.sh +0 -36
  121. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/spec.md +0 -71
  122. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/task.txt +0 -7
  123. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/verifiers/catalog-source.js +0 -57
  124. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/verifiers/exact-success.js +0 -63
  125. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/verifiers/stock-error.js +0 -34
  126. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/NOTES.md +0 -31
  127. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/expected.json +0 -68
  128. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/metadata.json +0 -10
  129. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/setup.sh +0 -17
  130. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/spec.md +0 -68
  131. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/task.txt +0 -7
  132. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/verifiers/conflicting-duplicate.js +0 -29
  133. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/verifiers/exact-payout.js +0 -58
  134. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/verifiers/rules-source.js +0 -56
  135. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/NOTES.md +0 -35
  136. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/expected-pair-plan-registry.json +0 -162
  137. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/expected.json +0 -67
  138. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/metadata.json +0 -19
  139. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/setup.sh +0 -4
  140. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/spec.md +0 -55
  141. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/task.txt +0 -9
  142. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/NOTES.md +0 -34
  143. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/expected.json +0 -57
  144. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/metadata.json +0 -10
  145. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/setup.sh +0 -2
  146. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/spec.md +0 -67
  147. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/task.txt +0 -7
  148. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/verifiers/duplicate-event-error.js +0 -35
  149. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/verifiers/priority-transfer-rollback.js +0 -53
  150. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/NOTES.md +0 -38
  151. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/expected.json +0 -57
  152. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/metadata.json +0 -10
  153. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/setup.sh +0 -2
  154. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/spec.md +0 -70
  155. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/task.txt +0 -3
  156. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/verifiers/duplicate-renewal-error.js +0 -42
  157. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/verifiers/priority-credit-rollback.js +0 -70
  158. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/NOTES.md +0 -47
  159. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/expected.json +0 -57
  160. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/metadata.json +0 -10
  161. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/setup.sh +0 -6
  162. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/spec.md +0 -48
  163. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/task.txt +0 -9
  164. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/NOTES.md +0 -45
  165. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/expected.json +0 -65
  166. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/metadata.json +0 -10
  167. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/setup.sh +0 -55
  168. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/spec.md +0 -48
  169. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/task.txt +0 -7
  170. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/NOTES.md +0 -43
  171. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/expected.json +0 -77
  172. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/metadata.json +0 -10
  173. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/setup.sh +0 -4
  174. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/spec.md +0 -48
  175. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/task.txt +0 -10
  176. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/NOTES.md +0 -57
  177. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/expected.json +0 -76
  178. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/metadata.json +0 -10
  179. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/setup.sh +0 -36
  180. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/spec.md +0 -45
  181. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/task.txt +0 -7
  182. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/NOTES.md +0 -53
  183. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/expected.json +0 -63
  184. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/metadata.json +0 -10
  185. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/setup.sh +0 -4
  186. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/spec.md +0 -48
  187. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/task.txt +0 -1
  188. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/NOTES.md +0 -105
  189. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/expected.json +0 -74
  190. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/metadata.json +0 -10
  191. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/setup.sh +0 -28
  192. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/spec.md +0 -59
  193. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/task.txt +0 -5
  194. package/benchmark/auto-resolve/fixtures/SCHEMA.md +0 -188
  195. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/NOTES.md +0 -37
  196. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/RETIRED.md +0 -13
  197. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/expected.json +0 -56
  198. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/metadata.json +0 -10
  199. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/setup.sh +0 -18
  200. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/spec.md +0 -69
  201. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/task.txt +0 -7
  202. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/verifiers/exact-proration.js +0 -48
  203. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/verifiers/rules-source-and-conflict.js +0 -79
  204. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/NOTES.md +0 -54
  205. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/RETIRED.md +0 -7
  206. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/expected.json +0 -67
  207. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/metadata.json +0 -10
  208. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/setup.sh +0 -2
  209. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/spec.md +0 -67
  210. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/task.txt +0 -5
  211. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/verifiers/policy-precedence.js +0 -72
  212. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/verifiers/validation-and-immutability.js +0 -43
  213. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/verifiers/validation-boundary.js +0 -116
  214. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/NOTES.md +0 -35
  215. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/RETIRED.md +0 -12
  216. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/expected.json +0 -58
  217. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/metadata.json +0 -10
  218. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/setup.sh +0 -2
  219. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/spec.md +0 -73
  220. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/task.txt +0 -17
  221. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/verifiers/mixed-idempotent-settlement.js +0 -53
  222. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/verifiers/rejection-boundaries.js +0 -74
  223. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/NOTES.md +0 -28
  224. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/RETIRED.md +0 -15
  225. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/expected.json +0 -57
  226. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/metadata.json +0 -10
  227. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/setup.sh +0 -50
  228. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/spec.md +0 -59
  229. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/task.txt +0 -9
  230. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/verifiers/ordered-settlement.js +0 -88
  231. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/verifiers/reject-invalid.js +0 -45
  232. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/NOTES.md +0 -30
  233. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/RETIRED.md +0 -16
  234. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/expected.json +0 -64
  235. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/metadata.json +0 -10
  236. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/setup.sh +0 -21
  237. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/spec.md +0 -58
  238. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/task.txt +0 -9
  239. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/verifiers/dup-op.js +0 -54
  240. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/verifiers/priority-apply.js +0 -82
  241. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/verifiers/rollback.js +0 -77
  242. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/NOTES.md +0 -99
  243. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/RETIRED.md +0 -18
  244. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/expected.json +0 -64
  245. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/metadata.json +0 -10
  246. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/setup.sh +0 -4
  247. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/spec.md +0 -61
  248. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/task.txt +0 -9
  249. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/verifiers/correctness-small.js +0 -135
  250. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/verifiers/scale.js +0 -100
  251. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/verifiers/validation.js +0 -75
  252. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/NOTES.md +0 -93
  253. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/RETIRED.md +0 -16
  254. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/expected.json +0 -65
  255. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/metadata.json +0 -10
  256. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/setup.sh +0 -18
  257. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/spec.md +0 -66
  258. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/task.txt +0 -9
  259. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/verifiers/correctness-small.js +0 -84
  260. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/verifiers/scale.js +0 -184
  261. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/verifiers/validation.js +0 -74
  262. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/NOTES.md +0 -60
  263. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/RETIRED.md +0 -29
  264. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/expected.json +0 -73
  265. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/metadata.json +0 -10
  266. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/setup.sh +0 -28
  267. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/spec.md +0 -58
  268. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/task.txt +0 -5
  269. package/benchmark/auto-resolve/fixtures/test-repo/README.md +0 -12
  270. package/benchmark/auto-resolve/fixtures/test-repo/bin/cli.js +0 -63
  271. package/benchmark/auto-resolve/fixtures/test-repo/package-lock.json +0 -823
  272. package/benchmark/auto-resolve/fixtures/test-repo/package.json +0 -22
  273. package/benchmark/auto-resolve/fixtures/test-repo/playwright.config.js +0 -17
  274. package/benchmark/auto-resolve/fixtures/test-repo/server/index.js +0 -37
  275. package/benchmark/auto-resolve/fixtures/test-repo/tests/cli.test.js +0 -25
  276. package/benchmark/auto-resolve/fixtures/test-repo/tests/server.test.js +0 -58
  277. package/benchmark/auto-resolve/fixtures/test-repo/web/index.html +0 -37
  278. package/benchmark/auto-resolve/results/20260507-f10-f11-tier1-full-pipeline/headroom-gate.json +0 -25
  279. package/benchmark/auto-resolve/results/20260507-f10-f11-tier1-full-pipeline/headroom-gate.md +0 -10
  280. package/benchmark/auto-resolve/results/20260508-f22-exact-error-headroom/headroom-gate.json +0 -18
  281. package/benchmark/auto-resolve/results/20260508-f22-exact-error-headroom/headroom-gate.md +0 -9
  282. package/benchmark/auto-resolve/results/20260508-f26-headroom/headroom-gate.json +0 -18
  283. package/benchmark/auto-resolve/results/20260508-f26-headroom/headroom-gate.md +0 -9
  284. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/F16-cli-quote-tax-rules/l2_risk_probes/result.json +0 -28
  285. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/F23-cli-fulfillment-wave/l2_risk_probes/result.json +0 -28
  286. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/F25-cli-cart-promotion-rules/l2_risk_probes/result.json +0 -30
  287. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/full-pipeline-pair-gate.json +0 -82
  288. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/full-pipeline-pair-gate.md +0 -18
  289. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/headroom-gate.json +0 -46
  290. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/headroom-gate.md +0 -17
  291. package/benchmark/auto-resolve/results/20260511-f12-webhook-headroom/headroom-gate.json +0 -28
  292. package/benchmark/auto-resolve/results/20260511-f12-webhook-headroom/headroom-gate.md +0 -15
  293. package/benchmark/auto-resolve/results/20260511-f15-concurrency-headroom/headroom-gate.json +0 -28
  294. package/benchmark/auto-resolve/results/20260511-f15-concurrency-headroom/headroom-gate.md +0 -15
  295. package/benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/F21-cli-scheduler-priority/l2_risk_probes/result.json +0 -32
  296. package/benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/full-pipeline-pair-gate.json +0 -44
  297. package/benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/full-pipeline-pair-gate.md +0 -16
  298. package/benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/headroom-gate.json +0 -18
  299. package/benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/headroom-gate.md +0 -9
  300. package/benchmark/auto-resolve/results/20260511-f3-http-error-headroom/headroom-gate.json +0 -28
  301. package/benchmark/auto-resolve/results/20260511-f3-http-error-headroom/headroom-gate.md +0 -15
  302. package/benchmark/auto-resolve/results/20260512-f2-medium-headroom/headroom-gate.json +0 -28
  303. package/benchmark/auto-resolve/results/20260512-f2-medium-headroom/headroom-gate.md +0 -15
  304. package/benchmark/auto-resolve/results/20260512-f31-seat-rebalance-headroom/headroom-gate.json +0 -28
  305. package/benchmark/auto-resolve/results/20260512-f31-seat-rebalance-headroom/headroom-gate.md +0 -15
  306. package/benchmark/auto-resolve/results/20260512-f32-subscription-renewal-headroom/headroom-gate.json +0 -28
  307. package/benchmark/auto-resolve/results/20260512-f32-subscription-renewal-headroom/headroom-gate.md +0 -15
  308. package/benchmark/auto-resolve/results/20260512-f4-web-headroom/headroom-gate.json +0 -28
  309. package/benchmark/auto-resolve/results/20260512-f4-web-headroom/headroom-gate.md +0 -15
  310. package/benchmark/auto-resolve/results/20260512-f5-fixloop-headroom/headroom-gate.json +0 -28
  311. package/benchmark/auto-resolve/results/20260512-f5-fixloop-headroom/headroom-gate.md +0 -15
  312. package/benchmark/auto-resolve/results/20260512-f6-checksum-headroom/headroom-gate.json +0 -28
  313. package/benchmark/auto-resolve/results/20260512-f6-checksum-headroom/headroom-gate.md +0 -15
  314. package/benchmark/auto-resolve/results/20260512-f7-scope-headroom/headroom-gate.json +0 -28
  315. package/benchmark/auto-resolve/results/20260512-f7-scope-headroom/headroom-gate.md +0 -15
  316. package/benchmark/auto-resolve/results/20260512-f9-e2e-headroom/headroom-gate.json +0 -28
  317. package/benchmark/auto-resolve/results/20260512-f9-e2e-headroom/headroom-gate.md +0 -15
  318. package/benchmark/auto-resolve/run-real-benchmark.md +0 -303
  319. package/benchmark/auto-resolve/scripts/audit-headroom-rejections.py +0 -441
  320. package/benchmark/auto-resolve/scripts/audit-pair-evidence.py +0 -1256
  321. package/benchmark/auto-resolve/scripts/build-pair-eligible-manifest.py +0 -306
  322. package/benchmark/auto-resolve/scripts/check-f9-artifacts.py +0 -268
  323. package/benchmark/auto-resolve/scripts/collect-swebench-predictions.py +0 -108
  324. package/benchmark/auto-resolve/scripts/compile-report.py +0 -493
  325. package/benchmark/auto-resolve/scripts/fetch-swebench-instances.py +0 -129
  326. package/benchmark/auto-resolve/scripts/frozen-verify-gate.py +0 -434
  327. package/benchmark/auto-resolve/scripts/full-pipeline-pair-gate.py +0 -612
  328. package/benchmark/auto-resolve/scripts/headroom-gate.py +0 -378
  329. package/benchmark/auto-resolve/scripts/iter-0033c-compare.py +0 -683
  330. package/benchmark/auto-resolve/scripts/iter-0033c-l1-summary.py +0 -97
  331. package/benchmark/auto-resolve/scripts/judge-opus-pass.sh +0 -542
  332. package/benchmark/auto-resolve/scripts/judge.sh +0 -565
  333. package/benchmark/auto-resolve/scripts/oracle-scope-tier-a.py +0 -256
  334. package/benchmark/auto-resolve/scripts/oracle-scope-tier-b.py +0 -287
  335. package/benchmark/auto-resolve/scripts/oracle-test-fidelity.py +0 -328
  336. package/benchmark/auto-resolve/scripts/pair-candidate-frontier.py +0 -469
  337. package/benchmark/auto-resolve/scripts/pair-plan-idgen.py +0 -401
  338. package/benchmark/auto-resolve/scripts/pair-plan-lint.py +0 -475
  339. package/benchmark/auto-resolve/scripts/pair-rejected-fixtures.sh +0 -103
  340. package/benchmark/auto-resolve/scripts/pair_evidence_contract.py +0 -270
  341. package/benchmark/auto-resolve/scripts/prepare-swebench-frozen-case.py +0 -273
  342. package/benchmark/auto-resolve/scripts/prepare-swebench-frozen-corpus.py +0 -148
  343. package/benchmark/auto-resolve/scripts/prepare-swebench-solver-worktree.py +0 -210
  344. package/benchmark/auto-resolve/scripts/recent-benchmark-summary.py +0 -232
  345. package/benchmark/auto-resolve/scripts/run-fixture.sh +0 -1024
  346. package/benchmark/auto-resolve/scripts/run-frozen-verify-pair.sh +0 -683
  347. package/benchmark/auto-resolve/scripts/run-full-pipeline-pair-candidate.sh +0 -458
  348. package/benchmark/auto-resolve/scripts/run-headroom-candidate.sh +0 -336
  349. package/benchmark/auto-resolve/scripts/run-iter-0033c.sh +0 -208
  350. package/benchmark/auto-resolve/scripts/run-suite.sh +0 -251
  351. package/benchmark/auto-resolve/scripts/run-swebench-frozen-corpus.sh +0 -310
  352. package/benchmark/auto-resolve/scripts/run-swebench-solver-batch.sh +0 -257
  353. package/benchmark/auto-resolve/scripts/ship-gate.py +0 -391
  354. package/benchmark/auto-resolve/scripts/solo-ceiling-avoidance.py +0 -53
  355. package/benchmark/auto-resolve/scripts/solo-headroom-hypothesis.py +0 -77
  356. package/benchmark/auto-resolve/scripts/swebench-frozen-matrix.py +0 -478
  357. package/benchmark/auto-resolve/scripts/test-audit-headroom-rejections.sh +0 -288
  358. package/benchmark/auto-resolve/scripts/test-audit-pair-evidence.sh +0 -1672
  359. package/benchmark/auto-resolve/scripts/test-benchmark-arg-parsing.sh +0 -1015
  360. package/benchmark/auto-resolve/scripts/test-build-pair-eligible-manifest.sh +0 -491
  361. package/benchmark/auto-resolve/scripts/test-check-f9-artifacts.sh +0 -91
  362. package/benchmark/auto-resolve/scripts/test-frozen-verify-gate.sh +0 -517
  363. package/benchmark/auto-resolve/scripts/test-full-pipeline-pair-gate.sh +0 -610
  364. package/benchmark/auto-resolve/scripts/test-headroom-gate.sh +0 -401
  365. package/benchmark/auto-resolve/scripts/test-iter-0033c-compare.sh +0 -525
  366. package/benchmark/auto-resolve/scripts/test-iter-0033c-l1-summary.sh +0 -254
  367. package/benchmark/auto-resolve/scripts/test-lint-fixtures.sh +0 -580
  368. package/benchmark/auto-resolve/scripts/test-pair-candidate-frontier.sh +0 -591
  369. package/benchmark/auto-resolve/scripts/test-run-full-pipeline-pair-candidate.sh +0 -497
  370. package/benchmark/auto-resolve/scripts/test-run-headroom-candidate.sh +0 -401
  371. package/benchmark/auto-resolve/scripts/test-run-swebench-solver-batch.sh +0 -111
  372. package/benchmark/auto-resolve/scripts/test-ship-gate.sh +0 -1189
  373. package/benchmark/auto-resolve/scripts/test-swebench-frozen-case.sh +0 -1221
  374. package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/NOTES.md +0 -28
  375. package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/expected.json +0 -63
  376. package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/metadata.json +0 -10
  377. package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/setup.sh +0 -3
  378. package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/spec.md +0 -47
  379. package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/task.txt +0 -1
  380. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/NOTES.md +0 -34
  381. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/expected.json +0 -53
  382. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/metadata.json +0 -10
  383. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/setup.sh +0 -3
  384. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/spec.md +0 -50
  385. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/task.txt +0 -1
  386. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/verifiers/duplicate-order-error.js +0 -27
  387. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/verifiers/priority-stock-reservation.js +0 -44
  388. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/NOTES.md +0 -34
  389. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/expected.json +0 -55
  390. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/metadata.json +0 -10
  391. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/setup.sh +0 -3
  392. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/spec.md +0 -52
  393. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/task.txt +0 -1
  394. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/verifiers/duplicate-ticket-error.js +0 -29
  395. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/verifiers/priority-agent-assignment.js +0 -48
  396. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/NOTES.md +0 -34
  397. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/expected.json +0 -55
  398. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/metadata.json +0 -10
  399. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/setup.sh +0 -3
  400. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/spec.md +0 -55
  401. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/task.txt +0 -1
  402. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/verifiers/duplicate-return-error.js +0 -43
  403. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/verifiers/priority-return-routing.js +0 -70
  404. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/NOTES.md +0 -37
  405. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/expected.json +0 -54
  406. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/metadata.json +0 -10
  407. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/setup.sh +0 -3
  408. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/spec.md +0 -59
  409. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/task.txt +0 -1
  410. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/verifiers/credit-ledger-priority.js +0 -98
  411. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/verifiers/duplicate-charge-error.js +0 -38
  412. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/NOTES.md +0 -36
  413. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/expected.json +0 -56
  414. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/metadata.json +0 -10
  415. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/setup.sh +0 -3
  416. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/spec.md +0 -59
  417. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/task.txt +0 -1
  418. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/verifiers/duplicate-refund-error.js +0 -41
  419. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/verifiers/priority-refund-ledger.js +0 -65
  420. package/config/skills/_shared/pair-plan-schema.md +0 -298
  421. package/scripts/lint-fixtures.sh +0 -352
  422. package/scripts/lint-shadow-fixtures.sh +0 -58
  423. package/scripts/lint-skills.sh +0 -4265
  424. package/scripts/test-owner-phases.py +0 -193
@@ -1,525 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Regression tests for iter-0033c-compare.py score-source handling.
3
-
4
- set -euo pipefail
5
-
6
- SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
7
- COMPARE="$SCRIPT_DIR/iter-0033c-compare.py"
8
- TMP_DIR="$(mktemp -d /tmp/iter-0033c-compare-test.XXXXXX)"
9
- trap 'rm -rf "$TMP_DIR"' EXIT
10
-
11
- write_manifest() {
12
- local path="$1"
13
- cat > "$path" <<'JSON'
14
- {
15
- "manifest_sha256": "synthetic",
16
- "fixtures_pair_eligible": ["F1"],
17
- "gate3_threshold_count": 1,
18
- "gate3_total": 1
19
- }
20
- JSON
21
- }
22
-
23
- write_manifest_with_values() {
24
- local path="$1"
25
- local eligible="$2"
26
- local threshold="$3"
27
- local total="$4"
28
- cat > "$path" <<JSON
29
- {
30
- "manifest_sha256": "synthetic",
31
- "fixtures_pair_eligible": $eligible,
32
- "gate3_threshold_count": $threshold,
33
- "gate3_total": $total
34
- }
35
- JSON
36
- }
37
-
38
- write_fixture() {
39
- local run_dir="$1"
40
- local mapping_c="$2"
41
- local fixture="$run_dir/F1-synthetic"
42
- mkdir -p "$fixture"/{solo_claude,l2_gated}
43
- cat > "$fixture/solo_claude/result.json" <<'JSON'
44
- {"elapsed_seconds": 100, "timed_out": false}
45
- JSON
46
- cat > "$fixture/l2_gated/result.json" <<'JSON'
47
- {"elapsed_seconds": 150, "timed_out": false}
48
- JSON
49
- cat > "$fixture/judge.json" <<JSON
50
- {
51
- "_blind_mapping": {"A": "solo_claude", "B": "bare", "C": "$mapping_c", "seed": 1},
52
- "scores_by_arm": {"solo_claude": 60, "bare": 50, "l2_gated": 70},
53
- "disqualifiers_by_arm": {
54
- "solo_claude": {"disqualifier": false},
55
- "l2_gated": {"disqualifier": false}
56
- }
57
- }
58
- JSON
59
- }
60
-
61
- write_fixture_with_malformed_mapping() {
62
- local run_dir="$1"
63
- local fixture="$run_dir/F1-synthetic"
64
- mkdir -p "$fixture"/{solo_claude,l2_gated}
65
- cat > "$fixture/solo_claude/result.json" <<'JSON'
66
- {"elapsed_seconds": 100, "timed_out": false}
67
- JSON
68
- cat > "$fixture/l2_gated/result.json" <<'JSON'
69
- {"elapsed_seconds": 150, "timed_out": false}
70
- JSON
71
- cat > "$fixture/judge.json" <<'JSON'
72
- {
73
- "_blind_mapping": "not-a-dict",
74
- "scores_by_arm": {"solo_claude": 60, "bare": 50, "l2_gated": 70},
75
- "disqualifiers_by_arm": {
76
- "solo_claude": {"disqualifier": false},
77
- "l2_gated": {"disqualifier": false}
78
- }
79
- }
80
- JSON
81
- }
82
-
83
- write_fixture_with_malformed_scores() {
84
- local run_dir="$1"
85
- local fixture="$run_dir/F1-synthetic"
86
- mkdir -p "$fixture"/{solo_claude,l2_gated}
87
- cat > "$fixture/solo_claude/result.json" <<'JSON'
88
- {"elapsed_seconds": 100, "timed_out": false}
89
- JSON
90
- cat > "$fixture/l2_gated/result.json" <<'JSON'
91
- {"elapsed_seconds": 150, "timed_out": false}
92
- JSON
93
- cat > "$fixture/judge.json" <<'JSON'
94
- {
95
- "_blind_mapping": {"A": "solo_claude", "B": "bare", "C": "l2_gated", "seed": 1},
96
- "scores_by_arm": ["not", "a", "dict"],
97
- "disqualifiers_by_arm": {
98
- "solo_claude": {"disqualifier": false},
99
- "l2_gated": {"disqualifier": false}
100
- }
101
- }
102
- JSON
103
- }
104
-
105
- write_fixture_with_malformed_dq_entry() {
106
- local run_dir="$1"
107
- local fixture="$run_dir/F1-synthetic"
108
- mkdir -p "$fixture"/{solo_claude,l2_gated}
109
- cat > "$fixture/solo_claude/result.json" <<'JSON'
110
- {"elapsed_seconds": 100, "timed_out": false}
111
- JSON
112
- cat > "$fixture/l2_gated/result.json" <<'JSON'
113
- {"elapsed_seconds": 150, "timed_out": false}
114
- JSON
115
- cat > "$fixture/judge.json" <<'JSON'
116
- {
117
- "_blind_mapping": {"A": "solo_claude", "B": "bare", "C": "l2_gated", "seed": 1},
118
- "scores_by_arm": {"solo_claude": 60, "bare": 50, "l2_gated": 70},
119
- "disqualifiers_by_arm": {"l2_gated": true}
120
- }
121
- JSON
122
- }
123
-
124
- write_fixture_with_malformed_legacy_dq() {
125
- local run_dir="$1"
126
- local fixture="$run_dir/F1-synthetic"
127
- mkdir -p "$fixture"/{solo_claude,l2_gated}
128
- cat > "$fixture/solo_claude/result.json" <<'JSON'
129
- {"elapsed_seconds": 100, "timed_out": false}
130
- JSON
131
- cat > "$fixture/l2_gated/result.json" <<'JSON'
132
- {"elapsed_seconds": 150, "timed_out": false}
133
- JSON
134
- cat > "$fixture/judge.json" <<'JSON'
135
- {
136
- "_blind_mapping": {"A": "solo_claude", "B": "bare", "C": "l2_gated", "seed": 1},
137
- "scores_by_arm": {"solo_claude": 60, "bare": 50, "l2_gated": 70},
138
- "disqualifiers": ["not", "a", "dict"]
139
- }
140
- JSON
141
- }
142
-
143
- write_fixture_with_string_dq_entry() {
144
- local run_dir="$1"
145
- local fixture="$run_dir/F1-synthetic"
146
- mkdir -p "$fixture"/{solo_claude,l2_gated}
147
- cat > "$fixture/solo_claude/result.json" <<'JSON'
148
- {"elapsed_seconds": 100, "timed_out": false}
149
- JSON
150
- cat > "$fixture/l2_gated/result.json" <<'JSON'
151
- {"elapsed_seconds": 150, "timed_out": false}
152
- JSON
153
- cat > "$fixture/judge.json" <<'JSON'
154
- {
155
- "_blind_mapping": {"A": "solo_claude", "B": "bare", "C": "l2_gated", "seed": 1},
156
- "scores_by_arm": {"solo_claude": 60, "bare": 50, "l2_gated": 70},
157
- "disqualifiers_by_arm": {
158
- "solo_claude": {"disqualifier": false},
159
- "l2_gated": {"disqualifier": "false"}
160
- }
161
- }
162
- JSON
163
- }
164
-
165
- write_fixture_with_string_timeout() {
166
- local run_dir="$1"
167
- local fixture="$run_dir/F1-synthetic"
168
- mkdir -p "$fixture"/{solo_claude,l2_gated}
169
- cat > "$fixture/solo_claude/result.json" <<'JSON'
170
- {"elapsed_seconds": 100, "timed_out": false}
171
- JSON
172
- cat > "$fixture/l2_gated/result.json" <<'JSON'
173
- {"elapsed_seconds": 150, "timed_out": "false"}
174
- JSON
175
- cat > "$fixture/judge.json" <<'JSON'
176
- {
177
- "_blind_mapping": {"A": "solo_claude", "B": "bare", "C": "l2_gated", "seed": 1},
178
- "scores_by_arm": {"solo_claude": 60, "bare": 50, "l2_gated": 70},
179
- "disqualifiers_by_arm": {
180
- "solo_claude": {"disqualifier": false},
181
- "l2_gated": {"disqualifier": false}
182
- }
183
- }
184
- JSON
185
- }
186
-
187
- write_fixture_with_malformed_result() {
188
- local run_dir="$1"
189
- local fixture="$run_dir/F1-synthetic"
190
- mkdir -p "$fixture"/{solo_claude,l2_gated}
191
- printf '["not", "a", "dict"]\n' > "$fixture/solo_claude/result.json"
192
- cat > "$fixture/l2_gated/result.json" <<'JSON'
193
- {"elapsed_seconds": 150, "timed_out": false}
194
- JSON
195
- cat > "$fixture/judge.json" <<'JSON'
196
- {
197
- "_blind_mapping": {"A": "solo_claude", "B": "bare", "C": "l2_gated", "seed": 1},
198
- "scores_by_arm": {"solo_claude": 60, "bare": 50, "l2_gated": 70},
199
- "disqualifiers_by_arm": {
200
- "solo_claude": {"disqualifier": false},
201
- "l2_gated": {"disqualifier": false}
202
- }
203
- }
204
- JSON
205
- }
206
-
207
- write_state_pair_judge() {
208
- local arm="$1"
209
- local pair_judge_json="$2"
210
- local run_dir="$TMP_DIR/bench-synthetic-F1-synthetic-$arm/.devlyn/runs/001"
211
- mkdir -p "$run_dir"
212
- cat > "$run_dir/pipeline.state.json" <<JSON
213
- {
214
- "phases": {
215
- "verify": {
216
- "sub_verdicts": {
217
- "judge": "PASS_WITH_ISSUES",
218
- "pair_judge": $pair_judge_json
219
- }
220
- }
221
- }
222
- }
223
- JSON
224
- }
225
-
226
- expect_fail_contains() {
227
- local label="$1"
228
- local needle="$2"
229
- shift 2
230
- local out="$TMP_DIR/$label.out"
231
- if "$@" > "$out" 2>&1; then
232
- echo "expected failure for $label" >&2
233
- cat "$out" >&2
234
- exit 1
235
- fi
236
- if ! grep -Fq "$needle" "$out"; then
237
- echo "missing expected text for $label: $needle" >&2
238
- cat "$out" >&2
239
- exit 1
240
- fi
241
- }
242
-
243
- MANIFEST="$TMP_DIR/manifest.json"
244
- write_manifest "$MANIFEST"
245
-
246
- cat > "$TMP_DIR/nan-threshold-manifest.json" <<'JSON'
247
- {
248
- "fixtures_pair_eligible": ["F1"],
249
- "gate3_threshold_count": NaN,
250
- "gate3_total": 1,
251
- "manifest_sha256": "synthetic"
252
- }
253
- JSON
254
- expect_fail_contains nan-threshold-manifest "manifest malformed: invalid JSON" \
255
- python3 "$COMPARE" \
256
- --manifest "$TMP_DIR/nan-threshold-manifest.json" \
257
- --results-dir "$TMP_DIR" \
258
- --work-dir-root "$TMP_DIR" \
259
- --run-id synthetic \
260
- --out-json "$TMP_DIR/nan-threshold.json" \
261
- --out-md "$TMP_DIR/nan-threshold.md"
262
-
263
- write_manifest_with_values "$TMP_DIR/empty-manifest.json" '[]' 0 0
264
- expect_fail_contains empty-manifest "fixtures_pair_eligible must not be empty" \
265
- python3 "$COMPARE" \
266
- --manifest "$TMP_DIR/empty-manifest.json" \
267
- --results-dir "$TMP_DIR" \
268
- --work-dir-root "$TMP_DIR" \
269
- --run-id synthetic \
270
- --out-json "$TMP_DIR/empty.json" \
271
- --out-md "$TMP_DIR/empty.md"
272
-
273
- write_manifest_with_values "$TMP_DIR/zero-threshold-manifest.json" '["F1"]' 0 1
274
- expect_fail_contains zero-threshold-manifest "gate3_threshold_count must be a positive integer" \
275
- python3 "$COMPARE" \
276
- --manifest "$TMP_DIR/zero-threshold-manifest.json" \
277
- --results-dir "$TMP_DIR" \
278
- --work-dir-root "$TMP_DIR" \
279
- --run-id synthetic \
280
- --out-json "$TMP_DIR/zero-threshold.json" \
281
- --out-md "$TMP_DIR/zero-threshold.md"
282
-
283
- write_manifest_with_values "$TMP_DIR/total-mismatch-manifest.json" '["F1"]' 1 2
284
- expect_fail_contains total-mismatch-manifest "gate3_total must equal fixtures_pair_eligible length" \
285
- python3 "$COMPARE" \
286
- --manifest "$TMP_DIR/total-mismatch-manifest.json" \
287
- --results-dir "$TMP_DIR" \
288
- --work-dir-root "$TMP_DIR" \
289
- --run-id synthetic \
290
- --out-json "$TMP_DIR/total-mismatch.json" \
291
- --out-md "$TMP_DIR/total-mismatch.md"
292
-
293
- cat > "$TMP_DIR/bad-rejected-reasons-manifest.json" <<'JSON'
294
- {
295
- "manifest_sha256": "synthetic",
296
- "fixtures_pair_eligible": ["F1"],
297
- "gate3_threshold_count": 1,
298
- "gate3_total": 1,
299
- "selection_rule": {
300
- "rejected_excluded": ["F2"],
301
- "rejected_excluded_reasons": {"F3": "wrong fixture"}
302
- }
303
- }
304
- JSON
305
- expect_fail_contains bad-rejected-reasons-manifest "selection_rule.rejected_excluded_reasons keys must match rejected_excluded" \
306
- python3 "$COMPARE" \
307
- --manifest "$TMP_DIR/bad-rejected-reasons-manifest.json" \
308
- --results-dir "$TMP_DIR" \
309
- --work-dir-root "$TMP_DIR" \
310
- --run-id synthetic \
311
- --out-json "$TMP_DIR/bad-rejected-reasons.json" \
312
- --out-md "$TMP_DIR/bad-rejected-reasons.md"
313
-
314
- PASS_DIR="$TMP_DIR/pass-results"
315
- mkdir -p "$PASS_DIR"
316
- write_fixture "$PASS_DIR" "l2_gated"
317
- python3 "$COMPARE" \
318
- --manifest "$MANIFEST" \
319
- --results-dir "$PASS_DIR" \
320
- --work-dir-root "$TMP_DIR" \
321
- --run-id synthetic \
322
- --out-json "$TMP_DIR/pass.json" \
323
- --out-md "$TMP_DIR/pass.md"
324
- grep -Fq '"ship_blockers_failed": []' "$TMP_DIR/pass.json"
325
- grep -Fq '"l2_gated_score": 70' "$TMP_DIR/pass.json"
326
-
327
- MALFORMED_PAIR_STATE_DIR="$TMP_DIR/malformed-pair-state-results"
328
- mkdir -p "$MALFORMED_PAIR_STATE_DIR"
329
- write_fixture "$MALFORMED_PAIR_STATE_DIR" "l2_gated"
330
- write_state_pair_judge l2_gated '""'
331
- python3 "$COMPARE" \
332
- --manifest "$MANIFEST" \
333
- --results-dir "$MALFORMED_PAIR_STATE_DIR" \
334
- --work-dir-root "$TMP_DIR" \
335
- --run-id synthetic \
336
- --out-json "$TMP_DIR/malformed-pair-state.json" \
337
- --out-md "$TMP_DIR/malformed-pair-state.md"
338
- grep -Fq '"l2_gated_pair_judge_present": false' "$TMP_DIR/malformed-pair-state.json"
339
- grep -Fq '"pair_fired": false' "$TMP_DIR/malformed-pair-state.json"
340
- grep -Fq '"ship_blockers_failed": []' "$TMP_DIR/malformed-pair-state.json"
341
-
342
- BAD_DIR="$TMP_DIR/bad-results"
343
- mkdir -p "$BAD_DIR"
344
- write_fixture "$BAD_DIR" "l2_forced"
345
- expect_fail_contains bad-mapping "SHIP-BLOCKER FAIL" \
346
- python3 "$COMPARE" \
347
- --manifest "$MANIFEST" \
348
- --results-dir "$BAD_DIR" \
349
- --work-dir-root "$TMP_DIR" \
350
- --run-id synthetic \
351
- --out-json "$TMP_DIR/bad.json" \
352
- --out-md "$TMP_DIR/bad.md"
353
- grep -Fq '"l2_gated_score": null' "$TMP_DIR/bad.json"
354
- grep -Fq '"3-lift-on-pair-eligible"' "$TMP_DIR/bad.json"
355
-
356
- MALFORMED_DIR="$TMP_DIR/malformed-results"
357
- mkdir -p "$MALFORMED_DIR"
358
- write_fixture_with_malformed_mapping "$MALFORMED_DIR"
359
- expect_fail_contains malformed-mapping "SHIP-BLOCKER FAIL" \
360
- python3 "$COMPARE" \
361
- --manifest "$MANIFEST" \
362
- --results-dir "$MALFORMED_DIR" \
363
- --work-dir-root "$TMP_DIR" \
364
- --run-id synthetic \
365
- --out-json "$TMP_DIR/malformed.json" \
366
- --out-md "$TMP_DIR/malformed.md"
367
- grep -Fq '"solo_score": null' "$TMP_DIR/malformed.json"
368
- grep -Fq '"l2_gated_score": null' "$TMP_DIR/malformed.json"
369
- grep -Fq '"solo_dq": true' "$TMP_DIR/malformed.json"
370
- grep -Fq '"l2_gated_dq": true' "$TMP_DIR/malformed.json"
371
-
372
- MALFORMED_SCORES_DIR="$TMP_DIR/malformed-scores-results"
373
- mkdir -p "$MALFORMED_SCORES_DIR"
374
- write_fixture_with_malformed_scores "$MALFORMED_SCORES_DIR"
375
- expect_fail_contains malformed-scores "SHIP-BLOCKER FAIL" \
376
- python3 "$COMPARE" \
377
- --manifest "$MANIFEST" \
378
- --results-dir "$MALFORMED_SCORES_DIR" \
379
- --work-dir-root "$TMP_DIR" \
380
- --run-id synthetic \
381
- --out-json "$TMP_DIR/malformed-scores.json" \
382
- --out-md "$TMP_DIR/malformed-scores.md"
383
- grep -Fq '"solo_score": null' "$TMP_DIR/malformed-scores.json"
384
- grep -Fq '"l2_gated_score": null' "$TMP_DIR/malformed-scores.json"
385
-
386
- OVERRANGE_SCORES_DIR="$TMP_DIR/overrange-scores-results"
387
- mkdir -p "$OVERRANGE_SCORES_DIR"
388
- write_fixture "$OVERRANGE_SCORES_DIR" "l2_gated"
389
- python3 - "$OVERRANGE_SCORES_DIR/F1-synthetic/judge.json" <<'PY'
390
- import json, sys
391
- path = sys.argv[1]
392
- data = json.load(open(path))
393
- data["scores_by_arm"]["l2_gated"] = 101
394
- data["c_score"] = 101
395
- json.dump(data, open(path, "w"), indent=2)
396
- PY
397
- expect_fail_contains overrange-scores "SHIP-BLOCKER FAIL" \
398
- python3 "$COMPARE" \
399
- --manifest "$MANIFEST" \
400
- --results-dir "$OVERRANGE_SCORES_DIR" \
401
- --work-dir-root "$TMP_DIR" \
402
- --run-id synthetic \
403
- --out-json "$TMP_DIR/overrange-scores.json" \
404
- --out-md "$TMP_DIR/overrange-scores.md"
405
- grep -Fq '"l2_gated_score": null' "$TMP_DIR/overrange-scores.json"
406
-
407
- BOOLEAN_SCORES_DIR="$TMP_DIR/boolean-scores-results"
408
- mkdir -p "$BOOLEAN_SCORES_DIR"
409
- write_fixture "$BOOLEAN_SCORES_DIR" "l2_gated"
410
- python3 - "$BOOLEAN_SCORES_DIR/F1-synthetic/judge.json" <<'PY'
411
- import json, sys
412
- path = sys.argv[1]
413
- data = json.load(open(path))
414
- data["scores_by_arm"]["solo_claude"] = True
415
- data["a_score"] = True
416
- json.dump(data, open(path, "w"), indent=2)
417
- PY
418
- expect_fail_contains boolean-scores "SHIP-BLOCKER FAIL" \
419
- python3 "$COMPARE" \
420
- --manifest "$MANIFEST" \
421
- --results-dir "$BOOLEAN_SCORES_DIR" \
422
- --work-dir-root "$TMP_DIR" \
423
- --run-id synthetic \
424
- --out-json "$TMP_DIR/boolean-scores.json" \
425
- --out-md "$TMP_DIR/boolean-scores.md"
426
- grep -Fq '"solo_score": null' "$TMP_DIR/boolean-scores.json"
427
-
428
- BOOLEAN_WALL_DIR="$TMP_DIR/boolean-wall-results"
429
- mkdir -p "$BOOLEAN_WALL_DIR"
430
- write_fixture "$BOOLEAN_WALL_DIR" "l2_gated"
431
- python3 - "$BOOLEAN_WALL_DIR/F1-synthetic/l2_gated/result.json" <<'PY'
432
- import json, sys
433
- path = sys.argv[1]
434
- data = json.load(open(path))
435
- data["elapsed_seconds"] = True
436
- json.dump(data, open(path, "w"), indent=2)
437
- PY
438
- python3 "$COMPARE" \
439
- --manifest "$MANIFEST" \
440
- --results-dir "$BOOLEAN_WALL_DIR" \
441
- --work-dir-root "$TMP_DIR" \
442
- --run-id synthetic \
443
- --out-json "$TMP_DIR/boolean-wall.json" \
444
- --out-md "$TMP_DIR/boolean-wall.md" >/dev/null
445
- grep -Fq '"l2_gated_wall": null' "$TMP_DIR/boolean-wall.json"
446
-
447
- NAN_WALL_DIR="$TMP_DIR/nan-wall-results"
448
- mkdir -p "$NAN_WALL_DIR"
449
- write_fixture "$NAN_WALL_DIR" "l2_gated"
450
- cat > "$NAN_WALL_DIR/F1-synthetic/l2_gated/result.json" <<'JSON'
451
- {"elapsed_seconds": NaN, "timed_out": false}
452
- JSON
453
- python3 "$COMPARE" \
454
- --manifest "$MANIFEST" \
455
- --results-dir "$NAN_WALL_DIR" \
456
- --work-dir-root "$TMP_DIR" \
457
- --run-id synthetic \
458
- --out-json "$TMP_DIR/nan-wall.json" \
459
- --out-md "$TMP_DIR/nan-wall.md" >/dev/null
460
- grep -Fq '"l2_gated_wall": null' "$TMP_DIR/nan-wall.json"
461
-
462
- STRING_TIMEOUT_DIR="$TMP_DIR/string-timeout-results"
463
- mkdir -p "$STRING_TIMEOUT_DIR"
464
- write_fixture_with_string_timeout "$STRING_TIMEOUT_DIR"
465
- expect_fail_contains string-timeout "SHIP-BLOCKER FAIL" \
466
- python3 "$COMPARE" \
467
- --manifest "$MANIFEST" \
468
- --results-dir "$STRING_TIMEOUT_DIR" \
469
- --work-dir-root "$TMP_DIR" \
470
- --run-id synthetic \
471
- --out-json "$TMP_DIR/string-timeout.json" \
472
- --out-md "$TMP_DIR/string-timeout.md"
473
- grep -Fq '"l2_gated_timeout": true' "$TMP_DIR/string-timeout.json"
474
-
475
- MALFORMED_DQ_ENTRY_DIR="$TMP_DIR/malformed-dq-entry-results"
476
- mkdir -p "$MALFORMED_DQ_ENTRY_DIR"
477
- write_fixture_with_malformed_dq_entry "$MALFORMED_DQ_ENTRY_DIR"
478
- python3 "$COMPARE" \
479
- --manifest "$MANIFEST" \
480
- --results-dir "$MALFORMED_DQ_ENTRY_DIR" \
481
- --work-dir-root "$TMP_DIR" \
482
- --run-id synthetic \
483
- --out-json "$TMP_DIR/malformed-dq-entry.json" \
484
- --out-md "$TMP_DIR/malformed-dq-entry.md" >/dev/null
485
- grep -Fq '"l2_gated_dq": true' "$TMP_DIR/malformed-dq-entry.json"
486
-
487
- STRING_DQ_ENTRY_DIR="$TMP_DIR/string-dq-entry-results"
488
- mkdir -p "$STRING_DQ_ENTRY_DIR"
489
- write_fixture_with_string_dq_entry "$STRING_DQ_ENTRY_DIR"
490
- python3 "$COMPARE" \
491
- --manifest "$MANIFEST" \
492
- --results-dir "$STRING_DQ_ENTRY_DIR" \
493
- --work-dir-root "$TMP_DIR" \
494
- --run-id synthetic \
495
- --out-json "$TMP_DIR/string-dq-entry.json" \
496
- --out-md "$TMP_DIR/string-dq-entry.md" >/dev/null
497
- grep -Fq '"l2_gated_dq": true' "$TMP_DIR/string-dq-entry.json"
498
-
499
- MALFORMED_LEGACY_DQ_DIR="$TMP_DIR/malformed-legacy-dq-results"
500
- mkdir -p "$MALFORMED_LEGACY_DQ_DIR"
501
- write_fixture_with_malformed_legacy_dq "$MALFORMED_LEGACY_DQ_DIR"
502
- python3 "$COMPARE" \
503
- --manifest "$MANIFEST" \
504
- --results-dir "$MALFORMED_LEGACY_DQ_DIR" \
505
- --work-dir-root "$TMP_DIR" \
506
- --run-id synthetic \
507
- --out-json "$TMP_DIR/malformed-legacy-dq.json" \
508
- --out-md "$TMP_DIR/malformed-legacy-dq.md" >/dev/null
509
- grep -Fq '"ship_blockers_failed": []' "$TMP_DIR/malformed-legacy-dq.json"
510
- grep -Fq '"solo_dq": true' "$TMP_DIR/malformed-legacy-dq.json"
511
- grep -Fq '"l2_gated_dq": true' "$TMP_DIR/malformed-legacy-dq.json"
512
-
513
- MALFORMED_RESULT_DIR="$TMP_DIR/malformed-result-results"
514
- mkdir -p "$MALFORMED_RESULT_DIR"
515
- write_fixture_with_malformed_result "$MALFORMED_RESULT_DIR"
516
- python3 "$COMPARE" \
517
- --manifest "$MANIFEST" \
518
- --results-dir "$MALFORMED_RESULT_DIR" \
519
- --work-dir-root "$TMP_DIR" \
520
- --run-id synthetic \
521
- --out-json "$TMP_DIR/malformed-result.json" \
522
- --out-md "$TMP_DIR/malformed-result.md" >/dev/null
523
- grep -Fq '"solo_wall": null' "$TMP_DIR/malformed-result.json"
524
-
525
- echo "PASS test-iter-0033c-compare"