devlyn-cli 3.2.1 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (423) hide show
  1. package/AGENTS.md +2 -2
  2. package/CLAUDE.md +2 -2
  3. package/README.md +12 -102
  4. package/bin/devlyn.js +13 -225
  5. package/bin/instruction-templates.json +6 -0
  6. package/config/skills/_shared/adapters/grok.md +1 -2
  7. package/config/skills/_shared/archive_run.py +15 -3
  8. package/config/skills/_shared/judge-role-evidence.py +21 -1
  9. package/config/skills/_shared/runtime-principles.md +1 -1
  10. package/config/skills/_shared/spec-verify-check.py +0 -653
  11. package/config/skills/_shared/state-phase-write.py +351 -25
  12. package/config/skills/_shared/task-complete.py +635 -143
  13. package/config/skills/_shared/terminal-claim-check.py +229 -4
  14. package/config/skills/_shared/verify-merge-findings.py +93 -2
  15. package/config/skills/devlyn:ideate/SKILL.md +3 -4
  16. package/config/skills/devlyn:ideate/references/elicitation.md +2 -35
  17. package/config/skills/devlyn:ideate/references/from-spec-mode.md +3 -18
  18. package/config/skills/devlyn:ideate/references/project-mode.md +1 -16
  19. package/config/skills/devlyn:ideate/references/spec-template.md +0 -2
  20. package/config/skills/devlyn:queue/SKILL.md +6 -4
  21. package/config/skills/devlyn:resolve/SKILL.md +16 -25
  22. package/config/skills/devlyn:resolve/references/free-form-mode.md +0 -14
  23. package/config/skills/devlyn:resolve/references/outer-loop.md +1 -1
  24. package/config/skills/devlyn:resolve/references/phases/build-gate.md +1 -1
  25. package/config/skills/devlyn:resolve/references/phases/cleanup.md +3 -3
  26. package/config/skills/devlyn:resolve/references/phases/implement.md +1 -1
  27. package/config/skills/devlyn:resolve/references/phases/probe-derive.md +1 -16
  28. package/config/skills/devlyn:resolve/references/phases/verify.md +4 -9
  29. package/config/skills/devlyn:resolve/references/state-schema.md +9 -7
  30. package/config/skills/devlyn:resolve/references/task-completion.md +46 -37
  31. package/{config/skills → optional-skills}/code-health-standards/SKILL.md +4 -13
  32. package/{config/skills → optional-skills}/code-review-standards/SKILL.md +4 -12
  33. package/{config/skills → optional-skills}/root-cause-analysis/SKILL.md +4 -12
  34. package/{config/skills → optional-skills}/ui-implementation-standards/SKILL.md +4 -14
  35. package/package.json +1 -57
  36. package/benchmark/auto-resolve/BENCHMARK-DESIGN.md +0 -289
  37. package/benchmark/auto-resolve/BENCHMARK-RESULTS.md +0 -341
  38. package/benchmark/auto-resolve/README.md +0 -696
  39. package/benchmark/auto-resolve/RUBRIC.md +0 -177
  40. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/NOTES.md +0 -34
  41. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/expected.json +0 -68
  42. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/metadata.json +0 -10
  43. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/setup.sh +0 -4
  44. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/spec.md +0 -44
  45. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/task.ko.txt +0 -8
  46. package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/task.txt +0 -8
  47. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/NOTES.md +0 -68
  48. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/expected.json +0 -60
  49. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/metadata.json +0 -10
  50. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/setup.sh +0 -17
  51. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/spec.md +0 -51
  52. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/task.txt +0 -9
  53. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/verifiers/invalid.js +0 -29
  54. package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/verifiers/parallel.js +0 -50
  55. package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/NOTES.md +0 -75
  56. package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/expected.json +0 -52
  57. package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/metadata.json +0 -10
  58. package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/setup.sh +0 -171
  59. package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/spec.md +0 -50
  60. package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/task.txt +0 -9
  61. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/NOTES.md +0 -89
  62. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/expected.json +0 -74
  63. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/metadata.json +0 -10
  64. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/setup.sh +0 -251
  65. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/spec.md +0 -57
  66. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/task.txt +0 -13
  67. package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/verifiers/replay-malformed-body.js +0 -64
  68. package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/NOTES.md +0 -104
  69. package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/expected.json +0 -46
  70. package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/metadata.json +0 -10
  71. package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/setup.sh +0 -336
  72. package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/spec.md +0 -51
  73. package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/task.txt +0 -9
  74. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/NOTES.md +0 -38
  75. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/expected.json +0 -64
  76. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/metadata.json +0 -10
  77. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/setup.sh +0 -32
  78. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/spec.md +0 -63
  79. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/task.txt +0 -7
  80. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/verifiers/exact-success.js +0 -54
  81. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/verifiers/no-hardcoded-pricing.js +0 -47
  82. package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/verifiers/stock-error.js +0 -45
  83. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/NOTES.md +0 -57
  84. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/expected-pair-plan-registry.json +0 -170
  85. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/expected.json +0 -84
  86. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/metadata.json +0 -21
  87. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/pair-plan.sample-fail.json +0 -214
  88. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/pair-plan.sample-pass.json +0 -223
  89. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/setup.sh +0 -5
  90. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/spec.md +0 -55
  91. package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/task.txt +0 -14
  92. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/NOTES.md +0 -39
  93. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/expected.json +0 -62
  94. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/metadata.json +0 -10
  95. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/setup.sh +0 -2
  96. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/spec.md +0 -67
  97. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/task.txt +0 -7
  98. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/verifiers/error-order.js +0 -55
  99. package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/verifiers/priority-blocked.js +0 -48
  100. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/NOTES.md +0 -35
  101. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/expected.json +0 -56
  102. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/metadata.json +0 -10
  103. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/setup.sh +0 -2
  104. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/spec.md +0 -64
  105. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/task.txt +0 -7
  106. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/verifiers/conflicting-duplicate.js +0 -34
  107. package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/verifiers/idempotent-close.js +0 -41
  108. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/NOTES.md +0 -39
  109. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/expected.json +0 -56
  110. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/metadata.json +0 -10
  111. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/setup.sh +0 -2
  112. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/spec.md +0 -76
  113. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/task.txt +0 -7
  114. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/verifiers/priority-rollback.js +0 -64
  115. package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/verifiers/single-warehouse-fefo.js +0 -66
  116. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/NOTES.md +0 -40
  117. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/expected.json +0 -66
  118. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/metadata.json +0 -10
  119. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/setup.sh +0 -36
  120. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/spec.md +0 -71
  121. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/task.txt +0 -7
  122. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/verifiers/catalog-source.js +0 -57
  123. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/verifiers/exact-success.js +0 -63
  124. package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/verifiers/stock-error.js +0 -34
  125. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/NOTES.md +0 -31
  126. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/expected.json +0 -68
  127. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/metadata.json +0 -10
  128. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/setup.sh +0 -17
  129. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/spec.md +0 -68
  130. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/task.txt +0 -7
  131. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/verifiers/conflicting-duplicate.js +0 -29
  132. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/verifiers/exact-payout.js +0 -58
  133. package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/verifiers/rules-source.js +0 -56
  134. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/NOTES.md +0 -35
  135. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/expected-pair-plan-registry.json +0 -162
  136. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/expected.json +0 -67
  137. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/metadata.json +0 -19
  138. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/setup.sh +0 -4
  139. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/spec.md +0 -55
  140. package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/task.txt +0 -9
  141. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/NOTES.md +0 -34
  142. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/expected.json +0 -57
  143. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/metadata.json +0 -10
  144. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/setup.sh +0 -2
  145. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/spec.md +0 -67
  146. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/task.txt +0 -7
  147. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/verifiers/duplicate-event-error.js +0 -35
  148. package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/verifiers/priority-transfer-rollback.js +0 -53
  149. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/NOTES.md +0 -38
  150. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/expected.json +0 -57
  151. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/metadata.json +0 -10
  152. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/setup.sh +0 -2
  153. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/spec.md +0 -70
  154. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/task.txt +0 -3
  155. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/verifiers/duplicate-renewal-error.js +0 -42
  156. package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/verifiers/priority-credit-rollback.js +0 -70
  157. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/NOTES.md +0 -47
  158. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/expected.json +0 -57
  159. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/metadata.json +0 -10
  160. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/setup.sh +0 -6
  161. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/spec.md +0 -48
  162. package/benchmark/auto-resolve/fixtures/F4-web-browser-design/task.txt +0 -9
  163. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/NOTES.md +0 -45
  164. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/expected.json +0 -65
  165. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/metadata.json +0 -10
  166. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/setup.sh +0 -55
  167. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/spec.md +0 -48
  168. package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/task.txt +0 -7
  169. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/NOTES.md +0 -43
  170. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/expected.json +0 -77
  171. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/metadata.json +0 -10
  172. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/setup.sh +0 -4
  173. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/spec.md +0 -48
  174. package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/task.txt +0 -10
  175. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/NOTES.md +0 -57
  176. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/expected.json +0 -76
  177. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/metadata.json +0 -10
  178. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/setup.sh +0 -36
  179. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/spec.md +0 -45
  180. package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/task.txt +0 -7
  181. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/NOTES.md +0 -53
  182. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/expected.json +0 -63
  183. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/metadata.json +0 -10
  184. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/setup.sh +0 -4
  185. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/spec.md +0 -48
  186. package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/task.txt +0 -1
  187. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/NOTES.md +0 -105
  188. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/expected.json +0 -74
  189. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/metadata.json +0 -10
  190. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/setup.sh +0 -28
  191. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/spec.md +0 -59
  192. package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/task.txt +0 -5
  193. package/benchmark/auto-resolve/fixtures/SCHEMA.md +0 -188
  194. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/NOTES.md +0 -37
  195. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/RETIRED.md +0 -13
  196. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/expected.json +0 -56
  197. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/metadata.json +0 -10
  198. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/setup.sh +0 -18
  199. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/spec.md +0 -69
  200. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/task.txt +0 -7
  201. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/verifiers/exact-proration.js +0 -48
  202. package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/verifiers/rules-source-and-conflict.js +0 -79
  203. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/NOTES.md +0 -54
  204. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/RETIRED.md +0 -7
  205. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/expected.json +0 -67
  206. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/metadata.json +0 -10
  207. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/setup.sh +0 -2
  208. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/spec.md +0 -67
  209. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/task.txt +0 -5
  210. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/verifiers/policy-precedence.js +0 -72
  211. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/verifiers/validation-and-immutability.js +0 -43
  212. package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/verifiers/validation-boundary.js +0 -116
  213. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/NOTES.md +0 -35
  214. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/RETIRED.md +0 -12
  215. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/expected.json +0 -58
  216. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/metadata.json +0 -10
  217. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/setup.sh +0 -2
  218. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/spec.md +0 -73
  219. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/task.txt +0 -17
  220. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/verifiers/mixed-idempotent-settlement.js +0 -53
  221. package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/verifiers/rejection-boundaries.js +0 -74
  222. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/NOTES.md +0 -28
  223. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/RETIRED.md +0 -15
  224. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/expected.json +0 -57
  225. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/metadata.json +0 -10
  226. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/setup.sh +0 -50
  227. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/spec.md +0 -59
  228. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/task.txt +0 -9
  229. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/verifiers/ordered-settlement.js +0 -88
  230. package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/verifiers/reject-invalid.js +0 -45
  231. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/NOTES.md +0 -30
  232. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/RETIRED.md +0 -16
  233. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/expected.json +0 -64
  234. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/metadata.json +0 -10
  235. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/setup.sh +0 -21
  236. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/spec.md +0 -58
  237. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/task.txt +0 -9
  238. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/verifiers/dup-op.js +0 -54
  239. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/verifiers/priority-apply.js +0 -82
  240. package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/verifiers/rollback.js +0 -77
  241. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/NOTES.md +0 -99
  242. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/RETIRED.md +0 -18
  243. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/expected.json +0 -64
  244. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/metadata.json +0 -10
  245. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/setup.sh +0 -4
  246. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/spec.md +0 -61
  247. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/task.txt +0 -9
  248. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/verifiers/correctness-small.js +0 -135
  249. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/verifiers/scale.js +0 -100
  250. package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/verifiers/validation.js +0 -75
  251. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/NOTES.md +0 -93
  252. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/RETIRED.md +0 -16
  253. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/expected.json +0 -65
  254. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/metadata.json +0 -10
  255. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/setup.sh +0 -18
  256. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/spec.md +0 -66
  257. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/task.txt +0 -9
  258. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/verifiers/correctness-small.js +0 -84
  259. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/verifiers/scale.js +0 -184
  260. package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/verifiers/validation.js +0 -74
  261. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/NOTES.md +0 -60
  262. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/RETIRED.md +0 -29
  263. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/expected.json +0 -73
  264. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/metadata.json +0 -10
  265. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/setup.sh +0 -28
  266. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/spec.md +0 -58
  267. package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/task.txt +0 -5
  268. package/benchmark/auto-resolve/fixtures/test-repo/README.md +0 -12
  269. package/benchmark/auto-resolve/fixtures/test-repo/bin/cli.js +0 -63
  270. package/benchmark/auto-resolve/fixtures/test-repo/package-lock.json +0 -823
  271. package/benchmark/auto-resolve/fixtures/test-repo/package.json +0 -22
  272. package/benchmark/auto-resolve/fixtures/test-repo/playwright.config.js +0 -17
  273. package/benchmark/auto-resolve/fixtures/test-repo/server/index.js +0 -37
  274. package/benchmark/auto-resolve/fixtures/test-repo/tests/cli.test.js +0 -25
  275. package/benchmark/auto-resolve/fixtures/test-repo/tests/server.test.js +0 -58
  276. package/benchmark/auto-resolve/fixtures/test-repo/web/index.html +0 -37
  277. package/benchmark/auto-resolve/results/20260507-f10-f11-tier1-full-pipeline/headroom-gate.json +0 -25
  278. package/benchmark/auto-resolve/results/20260507-f10-f11-tier1-full-pipeline/headroom-gate.md +0 -10
  279. package/benchmark/auto-resolve/results/20260508-f22-exact-error-headroom/headroom-gate.json +0 -18
  280. package/benchmark/auto-resolve/results/20260508-f22-exact-error-headroom/headroom-gate.md +0 -9
  281. package/benchmark/auto-resolve/results/20260508-f26-headroom/headroom-gate.json +0 -18
  282. package/benchmark/auto-resolve/results/20260508-f26-headroom/headroom-gate.md +0 -9
  283. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/F16-cli-quote-tax-rules/l2_risk_probes/result.json +0 -28
  284. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/F23-cli-fulfillment-wave/l2_risk_probes/result.json +0 -28
  285. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/F25-cli-cart-promotion-rules/l2_risk_probes/result.json +0 -30
  286. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/full-pipeline-pair-gate.json +0 -82
  287. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/full-pipeline-pair-gate.md +0 -18
  288. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/headroom-gate.json +0 -46
  289. package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/headroom-gate.md +0 -17
  290. package/benchmark/auto-resolve/results/20260511-f12-webhook-headroom/headroom-gate.json +0 -28
  291. package/benchmark/auto-resolve/results/20260511-f12-webhook-headroom/headroom-gate.md +0 -15
  292. package/benchmark/auto-resolve/results/20260511-f15-concurrency-headroom/headroom-gate.json +0 -28
  293. package/benchmark/auto-resolve/results/20260511-f15-concurrency-headroom/headroom-gate.md +0 -15
  294. package/benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/F21-cli-scheduler-priority/l2_risk_probes/result.json +0 -32
  295. package/benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/full-pipeline-pair-gate.json +0 -44
  296. package/benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/full-pipeline-pair-gate.md +0 -16
  297. package/benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/headroom-gate.json +0 -18
  298. package/benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/headroom-gate.md +0 -9
  299. package/benchmark/auto-resolve/results/20260511-f3-http-error-headroom/headroom-gate.json +0 -28
  300. package/benchmark/auto-resolve/results/20260511-f3-http-error-headroom/headroom-gate.md +0 -15
  301. package/benchmark/auto-resolve/results/20260512-f2-medium-headroom/headroom-gate.json +0 -28
  302. package/benchmark/auto-resolve/results/20260512-f2-medium-headroom/headroom-gate.md +0 -15
  303. package/benchmark/auto-resolve/results/20260512-f31-seat-rebalance-headroom/headroom-gate.json +0 -28
  304. package/benchmark/auto-resolve/results/20260512-f31-seat-rebalance-headroom/headroom-gate.md +0 -15
  305. package/benchmark/auto-resolve/results/20260512-f32-subscription-renewal-headroom/headroom-gate.json +0 -28
  306. package/benchmark/auto-resolve/results/20260512-f32-subscription-renewal-headroom/headroom-gate.md +0 -15
  307. package/benchmark/auto-resolve/results/20260512-f4-web-headroom/headroom-gate.json +0 -28
  308. package/benchmark/auto-resolve/results/20260512-f4-web-headroom/headroom-gate.md +0 -15
  309. package/benchmark/auto-resolve/results/20260512-f5-fixloop-headroom/headroom-gate.json +0 -28
  310. package/benchmark/auto-resolve/results/20260512-f5-fixloop-headroom/headroom-gate.md +0 -15
  311. package/benchmark/auto-resolve/results/20260512-f6-checksum-headroom/headroom-gate.json +0 -28
  312. package/benchmark/auto-resolve/results/20260512-f6-checksum-headroom/headroom-gate.md +0 -15
  313. package/benchmark/auto-resolve/results/20260512-f7-scope-headroom/headroom-gate.json +0 -28
  314. package/benchmark/auto-resolve/results/20260512-f7-scope-headroom/headroom-gate.md +0 -15
  315. package/benchmark/auto-resolve/results/20260512-f9-e2e-headroom/headroom-gate.json +0 -28
  316. package/benchmark/auto-resolve/results/20260512-f9-e2e-headroom/headroom-gate.md +0 -15
  317. package/benchmark/auto-resolve/run-real-benchmark.md +0 -303
  318. package/benchmark/auto-resolve/scripts/audit-headroom-rejections.py +0 -441
  319. package/benchmark/auto-resolve/scripts/audit-pair-evidence.py +0 -1256
  320. package/benchmark/auto-resolve/scripts/build-pair-eligible-manifest.py +0 -306
  321. package/benchmark/auto-resolve/scripts/check-f9-artifacts.py +0 -268
  322. package/benchmark/auto-resolve/scripts/collect-swebench-predictions.py +0 -108
  323. package/benchmark/auto-resolve/scripts/compile-report.py +0 -493
  324. package/benchmark/auto-resolve/scripts/fetch-swebench-instances.py +0 -129
  325. package/benchmark/auto-resolve/scripts/frozen-verify-gate.py +0 -434
  326. package/benchmark/auto-resolve/scripts/full-pipeline-pair-gate.py +0 -612
  327. package/benchmark/auto-resolve/scripts/headroom-gate.py +0 -378
  328. package/benchmark/auto-resolve/scripts/iter-0033c-compare.py +0 -683
  329. package/benchmark/auto-resolve/scripts/iter-0033c-l1-summary.py +0 -97
  330. package/benchmark/auto-resolve/scripts/judge-opus-pass.sh +0 -542
  331. package/benchmark/auto-resolve/scripts/judge.sh +0 -565
  332. package/benchmark/auto-resolve/scripts/oracle-scope-tier-a.py +0 -256
  333. package/benchmark/auto-resolve/scripts/oracle-scope-tier-b.py +0 -287
  334. package/benchmark/auto-resolve/scripts/oracle-test-fidelity.py +0 -328
  335. package/benchmark/auto-resolve/scripts/pair-candidate-frontier.py +0 -469
  336. package/benchmark/auto-resolve/scripts/pair-plan-idgen.py +0 -401
  337. package/benchmark/auto-resolve/scripts/pair-plan-lint.py +0 -475
  338. package/benchmark/auto-resolve/scripts/pair-rejected-fixtures.sh +0 -103
  339. package/benchmark/auto-resolve/scripts/pair_evidence_contract.py +0 -270
  340. package/benchmark/auto-resolve/scripts/prepare-swebench-frozen-case.py +0 -273
  341. package/benchmark/auto-resolve/scripts/prepare-swebench-frozen-corpus.py +0 -148
  342. package/benchmark/auto-resolve/scripts/prepare-swebench-solver-worktree.py +0 -210
  343. package/benchmark/auto-resolve/scripts/recent-benchmark-summary.py +0 -232
  344. package/benchmark/auto-resolve/scripts/run-fixture.sh +0 -1024
  345. package/benchmark/auto-resolve/scripts/run-frozen-verify-pair.sh +0 -683
  346. package/benchmark/auto-resolve/scripts/run-full-pipeline-pair-candidate.sh +0 -458
  347. package/benchmark/auto-resolve/scripts/run-headroom-candidate.sh +0 -336
  348. package/benchmark/auto-resolve/scripts/run-iter-0033c.sh +0 -208
  349. package/benchmark/auto-resolve/scripts/run-suite.sh +0 -251
  350. package/benchmark/auto-resolve/scripts/run-swebench-frozen-corpus.sh +0 -310
  351. package/benchmark/auto-resolve/scripts/run-swebench-solver-batch.sh +0 -257
  352. package/benchmark/auto-resolve/scripts/ship-gate.py +0 -391
  353. package/benchmark/auto-resolve/scripts/solo-ceiling-avoidance.py +0 -53
  354. package/benchmark/auto-resolve/scripts/solo-headroom-hypothesis.py +0 -77
  355. package/benchmark/auto-resolve/scripts/swebench-frozen-matrix.py +0 -478
  356. package/benchmark/auto-resolve/scripts/test-audit-headroom-rejections.sh +0 -288
  357. package/benchmark/auto-resolve/scripts/test-audit-pair-evidence.sh +0 -1672
  358. package/benchmark/auto-resolve/scripts/test-benchmark-arg-parsing.sh +0 -1015
  359. package/benchmark/auto-resolve/scripts/test-build-pair-eligible-manifest.sh +0 -491
  360. package/benchmark/auto-resolve/scripts/test-check-f9-artifacts.sh +0 -91
  361. package/benchmark/auto-resolve/scripts/test-frozen-verify-gate.sh +0 -517
  362. package/benchmark/auto-resolve/scripts/test-full-pipeline-pair-gate.sh +0 -610
  363. package/benchmark/auto-resolve/scripts/test-headroom-gate.sh +0 -401
  364. package/benchmark/auto-resolve/scripts/test-iter-0033c-compare.sh +0 -525
  365. package/benchmark/auto-resolve/scripts/test-iter-0033c-l1-summary.sh +0 -254
  366. package/benchmark/auto-resolve/scripts/test-lint-fixtures.sh +0 -580
  367. package/benchmark/auto-resolve/scripts/test-pair-candidate-frontier.sh +0 -591
  368. package/benchmark/auto-resolve/scripts/test-run-full-pipeline-pair-candidate.sh +0 -497
  369. package/benchmark/auto-resolve/scripts/test-run-headroom-candidate.sh +0 -401
  370. package/benchmark/auto-resolve/scripts/test-run-swebench-solver-batch.sh +0 -111
  371. package/benchmark/auto-resolve/scripts/test-ship-gate.sh +0 -1189
  372. package/benchmark/auto-resolve/scripts/test-swebench-frozen-case.sh +0 -1221
  373. package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/NOTES.md +0 -28
  374. package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/expected.json +0 -63
  375. package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/metadata.json +0 -10
  376. package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/setup.sh +0 -3
  377. package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/spec.md +0 -47
  378. package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/task.txt +0 -1
  379. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/NOTES.md +0 -34
  380. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/expected.json +0 -53
  381. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/metadata.json +0 -10
  382. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/setup.sh +0 -3
  383. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/spec.md +0 -50
  384. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/task.txt +0 -1
  385. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/verifiers/duplicate-order-error.js +0 -27
  386. package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/verifiers/priority-stock-reservation.js +0 -44
  387. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/NOTES.md +0 -34
  388. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/expected.json +0 -55
  389. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/metadata.json +0 -10
  390. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/setup.sh +0 -3
  391. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/spec.md +0 -52
  392. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/task.txt +0 -1
  393. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/verifiers/duplicate-ticket-error.js +0 -29
  394. package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/verifiers/priority-agent-assignment.js +0 -48
  395. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/NOTES.md +0 -34
  396. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/expected.json +0 -55
  397. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/metadata.json +0 -10
  398. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/setup.sh +0 -3
  399. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/spec.md +0 -55
  400. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/task.txt +0 -1
  401. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/verifiers/duplicate-return-error.js +0 -43
  402. package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/verifiers/priority-return-routing.js +0 -70
  403. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/NOTES.md +0 -37
  404. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/expected.json +0 -54
  405. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/metadata.json +0 -10
  406. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/setup.sh +0 -3
  407. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/spec.md +0 -59
  408. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/task.txt +0 -1
  409. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/verifiers/credit-ledger-priority.js +0 -98
  410. package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/verifiers/duplicate-charge-error.js +0 -38
  411. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/NOTES.md +0 -36
  412. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/expected.json +0 -56
  413. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/metadata.json +0 -10
  414. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/setup.sh +0 -3
  415. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/spec.md +0 -59
  416. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/task.txt +0 -1
  417. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/verifiers/duplicate-refund-error.js +0 -41
  418. package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/verifiers/priority-refund-ledger.js +0 -65
  419. package/config/skills/_shared/pair-plan-schema.md +0 -298
  420. package/scripts/lint-fixtures.sh +0 -352
  421. package/scripts/lint-shadow-fixtures.sh +0 -58
  422. package/scripts/lint-skills.sh +0 -4265
  423. package/scripts/test-owner-phases.py +0 -238
@@ -7,22 +7,24 @@ authorized by the task scope; no additional approval ceremony is required.
7
7
 
8
8
  ## Allocate before work
9
9
 
10
- Use the installed `_shared/task-complete.py` from the retained base checkout,
10
+ Use the installed `_shared/task-complete.py` from the anchor checkout,
11
11
  before committing owner inputs or starting direct/full work:
12
12
 
13
13
  ```sh
14
14
  python3 "$DEVLYN_SHARED_DIR/task-complete.py" allocate --repo . \
15
15
  --task '<task identity>' --branch '<absent task branch>' \
16
- --repository '<owner/repo>' --remote origin --base main
16
+ --worktree '<absent path>' --repository '<owner/repo>' --remote origin --base main
17
17
  ```
18
18
 
19
- This creates and switches to a native task branch. Add `--worktree <absent path>`
20
- only when the owner explicitly chooses a linked checkout; allocation is optional
21
- for worktrees. Save the returned receipt path, outside the task checkout under
22
- the common Gitdir. Existing branches/trees cannot be adopted, even when their
23
- names look generated. An interrupted allocation stays blocked for inspection;
24
- do not delete its receipt and enroll the resulting branch. Pre-existing tasks
25
- remain owner-managed and cannot use this helper retroactively.
19
+ Every task owns a linked worktree; `--worktree` is required. Its baseline is the
20
+ exact fetched remote base, independent of the anchor's branch or dirty state;
21
+ allocation leaves the anchor's HEAD, index and files untouched. Save the returned
22
+ receipt path under the common Gitdir. `reconciled` reports earlier accepted,
23
+ PR-delivered tasks whose merged resources were cleaned or retained; it is
24
+ informational, so never resume or release a receipt you do not own. Existing
25
+ branches/trees cannot be adopted, even when their names look generated. An
26
+ interrupted allocation stays blocked for inspection; do not delete its receipt
27
+ and enroll the resulting branch. Unreceipted tasks remain owner-managed.
26
28
 
27
29
  Allocation also returns a receipt-owned `scratch` directory. Put disposable
28
30
  build intermediates there (for example, set
@@ -48,8 +50,9 @@ history are never adopted or swept. A refused cleanup does not block source
48
50
  delivery; it stays visible in the handoff with its receipt and retry command
49
51
  (`CLEANUP_PENDING` after delivered source). No task is described as cleaned
50
52
  while owned disposable files remain. On resumption, finish any pending scratch
51
- cleanup before allocating more temporary storage. Rebuild from retained inputs
52
- when needed; cleanup is not an instruction to restart parked work.
53
+ cleanup before allocating more temporary storage; the next allocation also
54
+ retries it for completed deliveries with released writers. Rebuild from retained
55
+ inputs when needed; cleanup is not an instruction to restart parked work.
53
56
 
54
57
  ## Accept a scoped commit
55
58
 
@@ -87,21 +90,28 @@ Complete once per item after that commit. Failed items are never published.
87
90
 
88
91
  ## Deliver and resume
89
92
 
93
+ Wait for your children, stop your dev servers and task writers, then leave the
94
+ task tree. Make the FIRST completion call from outside it with the installed
95
+ helper and `--writers-stopped`; this releases the tree for cleanup after merge:
96
+
90
97
  ```sh
91
98
  python3 "$DEVLYN_SHARED_DIR/task-complete.py" complete \
92
- --receipt '<returned receipt.json>' --acceptance .devlyn/acceptance.json
99
+ --receipt '<returned receipt.json>' \
100
+ --acceptance '<task worktree>/.devlyn/acceptance.json' --writers-stopped
93
101
  ```
94
102
 
95
103
  Project policy is `git config --local devlyn.completionMode auto|pr`; absent means
96
- `auto`. Invalid local values fail before external effects, even with an override.
104
+ `pr`. Invalid local values fail before external effects, even with an override.
97
105
  Use `complete --mode auto|pr` for one task, or `--local-only`/`--no-push` to honor
98
106
  the user's delivery restriction. These per-task choices persist in the receipt.
99
107
 
100
108
  `pr` pushes the exact accepted task ref and creates/reuses its exact repository,
101
- head and base PR, then reports `PR` with its URL and retains the checkout. `auto`
102
- also requests `gh pr merge --auto --merge --match-head-commit <accepted SHA>`.
103
- Repository checks/reviews and merge policy remain authoritative: no admin bypass,
104
- strategy fallback or repository setting changes. A repository that disallows
109
+ head and base PR. While OPEN, it cancels owned auto-merge, reports `PR` with its URL
110
+ and retains the checkout. Once MERGED by any method, either mode cleans released
111
+ resources in that call, on resume or at the next allocation. Opt-in `auto` also requests
112
+ `gh pr merge --auto --merge --match-head-commit <accepted SHA>`. Repository
113
+ checks/reviews and merge policy remain authoritative: no admin bypass, strategy
114
+ fallback or repository setting changes. A repository that disallows
105
115
  merge commits fails visibly; disabled auto merge may also reject a pending
106
116
  request. Command success alone never proves merge.
107
117
 
@@ -113,30 +123,29 @@ immutable product result; do not rewrite an archived PASS for a delivery error.
113
123
 
114
124
  ## Yield and retain recoverability
115
125
 
116
- After actual matching MERGED evidence, wait for the owner's actual children,
117
- stop/yield known task writers, and invoke completion with `--writers-stopped`.
118
- For a removable linked checkout, run from outside it using the installed helper
119
- outside that checkout. An OS process observation supplements the owner assertion;
120
- neither the receipt nor a scan guarantees exclusion of future writers. Unknown
121
- writers, inaccessible process state, caller cwd inside the tree, dirty/untracked
122
- files, changed refs/Gitdir/registration or locks retain the affected resources.
123
- On native Windows, locking and file durability are supported, but the helper cannot prove writer cessation and reports `writer observation unsupported on this platform; retain workspace`. Even `--writers-stopped` cannot authorize deletion without that observation: retain the workspace, refs and external receipt/custody, report delivery separately, and preserve the receipt-based resume command. Do not kill unknown processes or force worktree removal to make completion pass.
126
+ Cleanup requires actual matching MERGED evidence; linked-tree removal also
127
+ requires the owner's recorded release. OS observation supplements it; neither the receipt
128
+ nor a scan guarantees exclusion of future writers. Processes with cwd or open
129
+ files inside the tree, inaccessible process state (on Linux, other users'
130
+ processes unless run as root), caller cwd inside the tree, dirty/untracked files,
131
+ a nested repository or worktree, or changed refs/Gitdir/registration retain
132
+ affected resources. Use `git worktree lock` to keep a tree.
133
+ On native Windows, locking and file durability are supported, but the helper cannot prove writer cessation and reports `writer observation unsupported on this platform; retain workspace`. Even `--writers-stopped` cannot authorize deletion without that observation: retain the workspace, its task refs and external receipt/custody, report delivery separately, and preserve the receipt-based resume command. Do not kill unknown processes or force worktree removal to make completion pass.
124
134
 
125
135
  The receipt directory holds byte-verified `custody/`, `manifest.json` and a guarded
126
136
  `refs/devlyn/completed/<id>` recovery ref. Archive/check evidence is copied there
127
- before publication; removal rechecks it and source reachability through the merge.
128
- Ignored files in removable trees must be covered by that exact owned evidence
129
- manifest. Unknown ignored data requires explicit owner custody outside the helper;
130
- it never silently archives or deletes arbitrary user content. A partial/corrupt
131
- custody copy blocks cleanup and retains the original for repair.
132
-
133
- In-place completion retains the checkout and its ignored user data, switches
134
- safely to updated base, then compare-deletes only its exact owned task refs.
135
- Linked completion uses native non-force removal. Local ref deletion is guarded
136
- by the expected SHA; remote deletion uses an exact force-with-lease solely as
137
+ before publication; removal rechecks it, the recovery ref and the merge commit on base.
138
+ Ignored build output and other ignored files are disposable under native
139
+ non-force worktree removal. The tree's `.devlyn/` files are byte/mode-verified
140
+ and preserved as `<receipt dir>/records/.devlyn`; non-regular files or symlinks
141
+ there retain the tree. Partial/corrupt custody or records retain it for repair.
142
+
143
+ Legacy in-place receipts retire refs only once their task branch is no longer
144
+ checked out; their checkout is never modified. Local ref deletion is guarded by
145
+ the expected SHA; remote deletion uses an exact force-with-lease solely as
137
146
  compare-and-delete, never for product publication. A changed remote branch is
138
- retained. Retry after removal uses the external receipt and evidence, so the
139
- removed checkout is not needed. Recovery refs/evidence have no automatic expiry.
147
+ retained. Retry uses the external receipt/evidence after removal. Recovery
148
+ refs/evidence have no automatic expiry.
140
149
 
141
150
  Queue drains remain serial. Record source verdict and delivery status separately;
142
151
  retain pending/PR workspaces. Before advancing, use a separate owned branch from
@@ -1,15 +1,11 @@
1
+ ---
2
+ name: code-health-standards
3
+ description: Maintainability standards for code you write or change — prevent dead code and orphaned references, justify every new dependency, keep functions, files, nesting and parameter counts within complexity thresholds, follow the established naming conventions, and keep debug logging, commented-out code, swallowed errors and hardcoded secrets out of production code. Use when writing, refactoring or deleting code, adding a dependency, or creating new files or modules.
4
+ ---
1
5
  # Code Health Standards
2
6
 
3
7
  Standards for keeping codebases lean and maintainable. Apply these thresholds during development — catching debt early is cheaper than cleaning it later.
4
8
 
5
- ## Trigger
6
-
7
- - Writing new code or modifying existing code
8
- - Adding dependencies
9
- - Creating new files or modules
10
- - Refactoring or restructuring code
11
- - Any use of `/devlyn:clean`, `/devlyn:resolve`, or `/devlyn:review`
12
-
13
9
  ## Dead Code Prevention
14
10
 
15
11
  When writing code, check that you aren't creating orphans:
@@ -67,8 +63,3 @@ Code committed to production should not contain:
67
63
  - Empty catch blocks or swallowed errors
68
64
  - Hardcoded secrets, API keys, or environment-specific URLs
69
65
  - Type `any` (TypeScript) without a justifying comment
70
-
71
- ## Routing
72
-
73
- - **Active cleanup**: Use `/devlyn:clean` to scan and remove accumulated debt
74
- - **Focused cleanup**: Use `/devlyn:clean [category]` for targeted sweeps (dead code, deps, tests, complexity, hygiene)
@@ -1,14 +1,11 @@
1
+ ---
2
+ name: code-review-standards
3
+ description: Severity framework (CRITICAL security, HIGH code quality, MEDIUM best practice, LOW cleanup) and approval criteria for judging a code change. Use when reviewing, auditing or validating a diff, pull request or just-finished implementation, or when deciding whether a change is ready to approve.
4
+ ---
1
5
  # Code Review Standards
2
6
 
3
7
  Severity framework and quality bar for reviewing code changes. Apply this framework whenever reviewing, auditing, or validating code.
4
8
 
5
- ## Trigger
6
-
7
- - Post-implementation review
8
- - Code review requests
9
- - PR review or diff analysis
10
- - Any use of `/devlyn:review` or `/devlyn:team-review`
11
-
12
9
  ## Severity Framework
13
10
 
14
11
  ### CRITICAL — Security (blocks approval)
@@ -57,8 +54,3 @@ Severity framework and quality bar for reviewing code changes. Apply this framew
57
54
  - MEDIUM issues are fixed or have concrete justification for deferral
58
55
  - Lint passes
59
56
  - Test suite passes
60
-
61
- ## Routing
62
-
63
- - **Quick review** (few files, straightforward changes): Use `/devlyn:review`
64
- - **Thorough review** (many files, security-sensitive, user-facing): Use `/devlyn:team-review` for multi-perspective coverage
@@ -1,15 +1,11 @@
1
+ ---
2
+ name: root-cause-analysis
3
+ description: Evidence-first debugging method — trace a symptom through successive why-steps to the actionable root cause, cite file:line for every claim, and fix the cause instead of masking the symptom. Use when diagnosing a bug, error, failing test, stack trace or unexpected behavior, or when asked why something happens.
4
+ ---
1
5
  # Root Cause Analysis
2
6
 
3
7
  Standard methodology for investigating bugs, issues, and unexpected behavior. Apply this framework whenever diagnosing a problem.
4
8
 
5
- ## Trigger
6
-
7
- - User reports a bug or unexpected behavior
8
- - Error logs or stack traces need diagnosis
9
- - "Why does X happen?" or "What's causing X?" questions
10
- - Debugging sessions
11
- - Any use of `/devlyn:resolve`
12
-
13
9
  ## 5 Whys Protocol
14
10
 
15
11
  For every issue, trace from symptom to root cause:
@@ -59,7 +55,3 @@ Every fix MUST address the root cause. Stop immediately if you catch yourself:
59
55
  If the task is unreasonable or infeasible, or if any of the tests are incorrect, inform the user rather than working around them. The solution should be robust, maintainable, and extendable.
60
56
 
61
57
  If the real fix requires significant refactoring, present the scope to the user — never ship a workaround "for now".
62
-
63
- ## Routing
64
-
65
- - Use `/devlyn:resolve` — handles both simple and multi-module investigations; VERIFY pair-judge fires conditionally on high-risk / complex specs.
@@ -1,15 +1,11 @@
1
+ ---
2
+ name: ui-implementation-standards
3
+ description: Quality bar for building or changing user interfaces — design-system token fidelity, WCAG 2.1 AA accessibility, loading/empty/error/success/disabled state coverage, purposeful animation, and mobile-first responsive layout. Use when implementing or modifying UI components, pages or styles, or when turning a design or design system into code.
4
+ ---
1
5
  # UI Implementation Standards
2
6
 
3
7
  Quality framework for building and improving UI from design systems. Apply these standards whenever implementing or modifying visual components.
4
8
 
5
- ## Trigger
6
-
7
- - Building UI components or pages
8
- - Implementing designs from a design system
9
- - Improving or refactoring existing UI
10
- - Any use of `/devlyn:design-ui`
11
- - Frontend development tasks involving visual design
12
-
13
9
  ## Design System Fidelity
14
10
 
15
11
  When a design system exists at `docs/design-system.md`:
@@ -66,9 +62,3 @@ Every interactive component or data-dependent view needs all states:
66
62
  - No inline styles — use the token/theme system
67
63
  - Server components where possible (Next.js), client components only for interactivity
68
64
  - Keep component files focused — one component per file
69
-
70
- ## Routing
71
-
72
- - **Build new UI or improve existing**: Use `/devlyn:implement-ui` for a full team approach
73
- - **Add features to existing UI**: Use `/devlyn:resolve` with the feature description
74
- - **Review UI code quality**: Use `/devlyn:team-review` for multi-perspective code review
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "devlyn-cli",
3
- "version": "3.2.1",
3
+ "version": "3.3.0",
4
4
  "description": "Loop & harness engineering for AI coding agents (Claude Code, Codex, and any AGENTS.md-driven agent) — take intent to shipped, engineer-quality software hands-free with phase-gated pipelines and agent orchestration",
5
5
  "homepage": "https://github.com/fysoul17/devlyn-cli#readme",
6
6
  "bin": {
@@ -18,65 +18,9 @@
18
18
  "!config/skills/roadmap-archival-workspace",
19
19
  "!config/skills/roadmap-archival-workspace/**",
20
20
  "optional-skills",
21
- "benchmark/auto-resolve/BENCHMARK-DESIGN.md",
22
- "benchmark/auto-resolve/BENCHMARK-RESULTS.md",
23
- "benchmark/auto-resolve/README.md",
24
- "benchmark/auto-resolve/RUBRIC.md",
25
- "benchmark/auto-resolve/run-real-benchmark.md",
26
- "benchmark/auto-resolve/fixtures/SCHEMA.md",
27
- "benchmark/auto-resolve/fixtures/F*/**",
28
- "benchmark/auto-resolve/fixtures/retired/F*/**",
29
- "benchmark/auto-resolve/shadow-fixtures/S*/**",
30
- "benchmark/auto-resolve/fixtures/test-repo/**",
31
- "!benchmark/auto-resolve/fixtures/test-repo/node_modules/**",
32
- "benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/headroom-gate.md",
33
- "benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/headroom-gate.json",
34
- "benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/full-pipeline-pair-gate.md",
35
- "benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/full-pipeline-pair-gate.json",
36
- "benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/F16-cli-quote-tax-rules/l2_risk_probes/result.json",
37
- "benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/F23-cli-fulfillment-wave/l2_risk_probes/result.json",
38
- "benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/F25-cli-cart-promotion-rules/l2_risk_probes/result.json",
39
- "benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/headroom-gate.md",
40
- "benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/headroom-gate.json",
41
- "benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/full-pipeline-pair-gate.md",
42
- "benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/full-pipeline-pair-gate.json",
43
- "benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/F21-cli-scheduler-priority/l2_risk_probes/result.json",
44
- "benchmark/auto-resolve/results/20260507-f10-f11-tier1-full-pipeline/headroom-gate.md",
45
- "benchmark/auto-resolve/results/20260507-f10-f11-tier1-full-pipeline/headroom-gate.json",
46
- "benchmark/auto-resolve/results/20260508-f22-exact-error-headroom/headroom-gate.md",
47
- "benchmark/auto-resolve/results/20260508-f22-exact-error-headroom/headroom-gate.json",
48
- "benchmark/auto-resolve/results/20260508-f26-headroom/headroom-gate.md",
49
- "benchmark/auto-resolve/results/20260508-f26-headroom/headroom-gate.json",
50
- "benchmark/auto-resolve/results/20260511-f3-http-error-headroom/headroom-gate.md",
51
- "benchmark/auto-resolve/results/20260511-f3-http-error-headroom/headroom-gate.json",
52
- "benchmark/auto-resolve/results/20260511-f12-webhook-headroom/headroom-gate.md",
53
- "benchmark/auto-resolve/results/20260511-f12-webhook-headroom/headroom-gate.json",
54
- "benchmark/auto-resolve/results/20260511-f15-concurrency-headroom/headroom-gate.md",
55
- "benchmark/auto-resolve/results/20260511-f15-concurrency-headroom/headroom-gate.json",
56
- "benchmark/auto-resolve/results/20260512-f2-medium-headroom/headroom-gate.md",
57
- "benchmark/auto-resolve/results/20260512-f2-medium-headroom/headroom-gate.json",
58
- "benchmark/auto-resolve/results/20260512-f4-web-headroom/headroom-gate.md",
59
- "benchmark/auto-resolve/results/20260512-f4-web-headroom/headroom-gate.json",
60
- "benchmark/auto-resolve/results/20260512-f5-fixloop-headroom/headroom-gate.md",
61
- "benchmark/auto-resolve/results/20260512-f5-fixloop-headroom/headroom-gate.json",
62
- "benchmark/auto-resolve/results/20260512-f6-checksum-headroom/headroom-gate.md",
63
- "benchmark/auto-resolve/results/20260512-f6-checksum-headroom/headroom-gate.json",
64
- "benchmark/auto-resolve/results/20260512-f7-scope-headroom/headroom-gate.md",
65
- "benchmark/auto-resolve/results/20260512-f7-scope-headroom/headroom-gate.json",
66
- "benchmark/auto-resolve/results/20260512-f9-e2e-headroom/headroom-gate.md",
67
- "benchmark/auto-resolve/results/20260512-f9-e2e-headroom/headroom-gate.json",
68
- "benchmark/auto-resolve/results/20260512-f31-seat-rebalance-headroom/headroom-gate.md",
69
- "benchmark/auto-resolve/results/20260512-f31-seat-rebalance-headroom/headroom-gate.json",
70
- "benchmark/auto-resolve/results/20260512-f32-subscription-renewal-headroom/headroom-gate.md",
71
- "benchmark/auto-resolve/results/20260512-f32-subscription-renewal-headroom/headroom-gate.json",
72
- "benchmark/auto-resolve/scripts/**",
73
21
  "!**/__pycache__",
74
22
  "!**/__pycache__/**",
75
23
  "!**/*.pyc",
76
- "scripts/lint-fixtures.sh",
77
- "scripts/lint-shadow-fixtures.sh",
78
- "scripts/lint-skills.sh",
79
- "scripts/test-owner-phases.py",
80
24
  "CLAUDE.md",
81
25
  "AGENTS.md"
82
26
  ],
@@ -1,289 +0,0 @@
1
- # Benchmark Suite Design — v1
2
-
3
- **Outer goal**: see [`autoresearch/NORTH-STAR.md`](../../autoresearch/NORTH-STAR.md) — the harness composes frontier LLMs into a hands-free pipeline that delivers engineer-quality software for users who do not know context engineering, with each composition layer (L0 bare → L1 solo harness → L2 pair harness) justifying its added cost on quality AND wall-time efficiency. This benchmark is the measurement instrument for that contract.
4
-
5
- **Purpose.** Replace ad-hoc harness benchmarking with a permanent, comprehensive,
6
- one-command suite that gates every future harness change with a ship/rollback
7
- decision. Any prompt edit, phase reorder, new native skill, or model upgrade
8
- can be validated by running the suite and reading the numbers.
9
-
10
- **Arm structure.** Current full-pipeline evidence uses three arms: `bare` (L0),
11
- `solo_claude` (L1 solo harness), and an L2 pair arm (`variant` in the smoke
12
- suite, or a focused pair arm such as `l2_risk_probes` in pair-candidate runs).
13
- Pair claims are headroom-gated: counted fixtures must leave room above solo
14
- (`bare <= 60`, `solo_claude <= 80`, default 5-point `bare`/`solo_claude` headroom margins),
15
- the pair arm must actually run, and blind judging must show pair above solo by
16
- the configured margin.
17
-
18
- **Non-goals.** Publishable-research statistical rigor. Not a regression test
19
- library for the product code — those live elsewhere. Not a substitute for
20
- production telemetry — just enough signal for ship decisions.
21
-
22
- ---
23
-
24
- ## Principles
25
-
26
- 1. **One command.** `npx devlyn-cli benchmark` runs everything and prints a
27
- verdict. No manual fixture setup.
28
- 2. **Novice-proof.** The suite exercises the same paths a first-time user
29
- hits — including an end-to-end `ideate → resolve` fixture.
30
- 3. **LLM-upgrade friendly.** Rubric, fixture semantics, and thresholds stay
31
- stable; scores and margins float up as models improve. Nothing is
32
- hardcoded to a specific model version.
33
- 4. **Karpathy.** No fixture earns its place unless it tests a distinct
34
- failure mode. Tooling stays boring. History plumbing is simple.
35
- 5. **Ship gate is numbers, not vibes.** Concrete thresholds in RUBRIC.md.
36
-
37
- ---
38
-
39
- ## Directory Layout
40
-
41
- ```
42
- benchmark/auto-resolve/
43
- ├── BENCHMARK-DESIGN.md # this file
44
- ├── README.md # how to run, interpret, extend
45
- ├── RUBRIC.md # stable judge rubric + ship gates
46
- │
47
- ├── fixtures/
48
- │ ├── SCHEMA.md # fixture file format
49
- │ ├── test-repo/ # bootstrap Node project (shared base)
50
- │ │ ├── bin/cli.js
51
- │ │ ├── server/index.js
52
- │ │ ├── web/page.html
53
- │ │ ├── tests/
54
- │ │ ├── playwright.config.js
55
- │ │ └── package.json
56
- │ │
57
- │ ├── F1-cli-trivial-flag/
58
- │ ├── F2-cli-medium-subcommand/
59
- │ ├── F3-backend-contract-risk/
60
- │ ├── F4-web-browser-design/
61
- │ ├── F5-fix-loop-red-green/
62
- │ ├── F6-dep-audit-native-module/
63
- │ ├── F7-out-of-scope-trap/
64
- │ ├── F8-known-limit-ambiguous/
65
- │ ├── F9-e2e-ideate-to-resolve/
66
- │ └── F10+ extensions for headroom, full-pipeline pair, and frozen VERIFY
67
- │
68
- ├── scripts/
69
- │ ├── run-suite.sh # smoke entry — runs fixture arms + judge + report
70
- │ ├── run-fixture.sh # one fixture, one arm
71
- │ ├── judge.sh # Codex blind judge (model-agnostic)
72
- │ ├── compile-report.py # aggregate into report.md + summary.json
73
- │ └── ship-gate.py # apply thresholds, return ship/rollback verdict
74
- │
75
- ├── results/ # per-run artifacts (overwritten)
76
- │ └── <run-id>/
77
- │ ├── <fixture>/
78
- │ │ ├── bare/{input.md, transcript.txt, diff.patch, result.json}
79
- │ │ ├── solo_claude/{same}
80
- │ │ └── variant or l2_risk_probes/{same}
81
- │ ├── <fixture>/judge.json
82
- │ ├── report.md
83
- │ └── summary.json
84
- │
85
- └── history/
86
- ├── runs/ # append-only immutable records
87
- │ └── 2026-04-23T120000Z-v3.6.json
88
- ├── latest.json # pointer to most recent run
89
- └── baselines/
90
- └── shipped.json # last blessed version, used for regression check
91
- ```
92
-
93
- ---
94
-
95
- ## Fixture Schema
96
-
97
- Every fixture is a directory with these files (see `fixtures/SCHEMA.md`):
98
-
99
- | File | Purpose |
100
- |------|---------|
101
- | `metadata.json` | id, category, difficulty, timeout, required tools, intent block |
102
- | `spec.md` | pipeline-arm input (resolve-ready spec with Requirements/Constraints/Out-of-Scope/Verification) |
103
- | `task.txt` | bare-arm input (same intent, natural-language framing) |
104
- | `expected.json` | machine-readable acceptance criteria + forbidden patterns + verification commands |
105
- | `NOTES.md` | why this fixture exists, the specific failure mode it tests |
106
- | `setup.sh` | deterministic starting state — applies to a fresh copy of `test-repo/` |
107
-
108
- **Drift prevention**: `spec.md` and `task.txt` both derive from the same
109
- `intent` block in `metadata.json`. A lint step in CI verifies they stay
110
- consistent.
111
-
112
- ---
113
-
114
- ## Core Fixtures And Extensions
115
-
116
- The original v3.6 matrix covered F1-F9. Later fixtures extend the same schema
117
- for headroom, full-pipeline pair, and frozen VERIFY evidence.
118
-
119
- Category coverage matrix for the original core set (rows = concerns, columns =
120
- fixtures):
121
-
122
- | Fixture | Trivial | Medium | High-risk | Stress | Edge | E2E |
123
- |---------|---------|--------|-----------|--------|------|-----|
124
- | F1-cli-trivial-flag | ✓ | | | | | |
125
- | F2-cli-medium-subcommand | | ✓ | | | | |
126
- | F3-backend-contract-risk | | | ✓ | | | |
127
- | F4-web-browser-design | | | | ✓ (browser-validate) | | |
128
- | F5-fix-loop-red-green | | | | ✓ (FIX LOOP) | | |
129
- | F6-dep-audit-native-module | | | | ✓ (CRITIC security dep audit) | | |
130
- | F7-out-of-scope-trap | | | | ✓ (scope discipline) | | |
131
- | F8-known-limit-ambiguous | | | | | ✓ (documents where pipeline may lose) | |
132
- | F9-e2e-ideate-to-resolve | | | | | | ✓ (novice full-flow) |
133
-
134
- **F9 is load-bearing** for the "novice user types `/devlyn:ideate`" promise.
135
- Input is a vague idea; the pipeline path turns it into a spec with ideate and
136
- then resolves that spec. Bare arm runs a direct prompt. Judge compares the final
137
- usable artifact set.
138
-
139
- ---
140
-
141
- ## Single-Command Invocation
142
-
143
- ### User experience
144
-
145
- ```bash
146
- npx devlyn-cli benchmark # n=1 smoke, all fixtures
147
- npx devlyn-cli benchmark F2 F5 # specific fixtures only
148
- npx devlyn-cli benchmark --judge-only --run-id <id> # re-judge without re-running
149
- ```
150
-
151
- Output on completion:
152
-
153
- ```
154
- Benchmark Suite Run — 2026-04-23T12:00Z (v3.6)
155
- Judge: codex CLI flagship, xhigh, blind (model recorded in run history)
156
-
157
- Fixture variant (L2) solo_claude (L1) bare (L0) variant-solo_claude Verdict
158
- F1-cli-trivial-flag 95 92 88 +3 PASS
159
- F2-cli-medium-subcommand 92 86 81 +6 PASS
160
- F3-backend-contract-risk 89 80 72 +9 PASS
161
- F4-web-browser-design 87 83 79 +4 PASS
162
- F5-fix-loop-red-green 91 78 65 +13 PASS
163
- F6-dep-audit-native-module 88 82 70 +6 PASS
164
- F7-out-of-scope-trap 94 85 73 +9 PASS
165
- F8-known-limit-ambiguous 78 79 79 -1 EXPECTED (known-limit)
166
- F9-e2e-ideate-to-resolve 90 84 68 +6 PASS
167
- ---------------------------------------------------------
168
- Suite average variant (L2) score: 89.3
169
- Suite average solo_claude (L1) score: 83.2
170
- Suite average bare (L0) score: 75.0
171
- Suite average variant-solo_claude margin: +6.1 (pair-evidence floor: +5 on eligible fixtures)
172
- Hard-floor violations: 0
173
- Regression vs shipped: n/a (first run of v3.6)
174
- SHIP-GATE VERDICT: ✅ PASS
175
- ```
176
-
177
- ### Runner orchestration
178
-
179
- `run-suite.sh`:
180
-
181
- 1. Generate run-id `<ISO>-<sha>-<branch>`
182
- 2. For each fixture × each arm (`variant`/L2, `solo_claude`/L1, `bare`/L0): parallelizable via `xargs -P`
183
- - `run-fixture.sh --fixture FX --arm variant` → writes `results/<run-id>/FX/variant/*`
184
- 3. For each fixture: `judge.sh FX <run-id>` → writes `results/<run-id>/FX/judge.json`
185
- 4. `compile-report.py <run-id>` → writes `report.md` + `summary.json`
186
- 5. `ship-gate.py <run-id>` → exit 0 (PASS) / 1 (FAIL). Prints verdict to stdout.
187
- 6. If PASS and `--bless` flag: copy `summary.json` → `history/baselines/shipped.json`
188
- 7. Always: append `history/runs/<run-id>.json` + update `latest.json`
189
-
190
- ### `run-fixture.sh` contract
191
-
192
- - Creates fresh temp copy of `test-repo/` at `/tmp/bench-<run-id>-<fixture>-<arm>/`
193
- - Applies `setup.sh` if present
194
- - Copies `spec.md` for `variant`/`solo_claude` or `task.txt` for `bare` as the prompt
195
- - Invokes `/devlyn:resolve --spec` for `variant`, `/devlyn:resolve --spec --engine claude --no-pair --no-risk-probes` for `solo_claude`, or bare Claude for `bare` via isolated Agent
196
- - Captures: `diff.patch`, `changed-files.txt`, `transcript.txt`, `timing.json`
197
- - Runs `expected.json::verification_commands`, writes pass/fail per command to `verify.json`
198
- - Writes `result.json` with aggregate: exit code, duration, files changed, verification score
199
-
200
- ### `judge.sh` contract
201
-
202
- - Reads `results/<run-id>/<fixture>/{variant,solo_claude,bare}/{diff.patch,verify.json}` + fixture's `spec.md` + `expected.json`
203
- - Builds a blind prompt: labels arms A and B randomly per fixture (seed recorded)
204
- - Invokes isolated Codex (current flagship — no model hardcode) with RUBRIC.md
205
- - Writes `judge.json`: per-axis scores, winner, margin, critical findings, disqualifiers
206
- - Idempotent: re-running overwrites the same `judge.json`
207
-
208
- ---
209
-
210
- ## LLM-Upgrade Resilience
211
-
212
- Three mechanisms:
213
-
214
- 1. **No hardcoded models.** Judge invocation omits `-m`, so it inherits
215
- whichever flagship the CLI currently ships. The blind judge is isolated from
216
- user config/rules/hooks so local agent instructions cannot contaminate the
217
- judgment. Same for agents — they run against whatever Claude Code
218
- session-model the caller has. Model provenance is captured in `result.json`
219
- per run.
220
-
221
- 2. **Margin as primary signal, absolute score as secondary.** When models
222
- improve, all arms tend to get better. Pairwise margins remain the stable
223
- signal: `solo_claude`-`bare` (L1-L0) measures solo harness value,
224
- pair-`solo_claude` (L2-L1) measures pair value on eligible fixtures, and
225
- `variant`-`bare` (L2-L0) remains the legacy suite signal. Ship gates are
226
- defined on margin (`>= +5`) and regression (`-3 or worse`), not absolute
227
- score.
228
-
229
- 3. **Fixture difficulty gradient.** F1 (trivial) is expected to saturate near
230
- 100 quickly as models improve — that's fine, it still catches catastrophic
231
- regressions. F5/F9 (stress/E2E) have enough depth that even a near-perfect
232
- model won't 100-zero bare. If any fixture saturates (all compared gated arms
233
- > 95 for two consecutive versions), we replace it with a harder one and
234
- document the swap in `history/runs/<ts>-fixture-rotation.json`.
235
-
236
- ---
237
-
238
- ## Ship Gates (from RUBRIC.md)
239
-
240
- Hard floors (any single failure blocks ship):
241
-
242
- - **No silent-catch / fabricated verification / skipped required test in variant.** Judge flags this as disqualifier.
243
- - **Variant may not lose any fixture by more than −5** versus previous shipped version (per-fixture regression floor).
244
- - **At least 7 gated, headroom-available fixtures** must have margin ≥ +5
245
- (suite coverage).
246
- - **F9 (E2E) must PASS** — novice-flow contract.
247
-
248
- Soft gates (trigger rollback discussion):
249
-
250
- - Suite average margin drop > 3 vs last shipped.
251
- - Any fixture with margin ≤ 0 that previously had margin > +5.
252
- - Critical-finding catch-rate decrease vs the last shipped comparable arm.
253
-
254
- Known-limit exception:
255
-
256
- - F8 is explicitly allowed to tie or lose (margin in [-3, +3]). Its job is to
257
- document honesty, not to beat bare.
258
-
259
- ---
260
-
261
- ## Karpathy Check
262
-
263
- Where over-engineering lurks:
264
-
265
- - ❌ **Automatic history mutation during development.** Add append-only
266
- history AFTER the suite format stabilizes (one version after initial ship).
267
- - ❌ **Statistical tooling beyond mean/median/margin.** n=1-3 doesn't need
268
- t-tests.
269
- - ❌ **Auto-generated fixture cards / dashboards.** Plain `report.md` is enough.
270
- - ✅ **Keep scripts under 100 lines each** unless they're doing concrete,
271
- repeated work the user would do by hand.
272
-
273
- If the suite tooling grows past ~800 total lines, prune aggressively before
274
- adding anything.
275
-
276
- ---
277
-
278
- ## Open Questions (to be answered before first full ship-gate run)
279
-
280
- 1. Where does `benchmark` subcommand live? Inside `bin/devlyn.js` or as
281
- standalone `benchmark/auto-resolve/scripts/run-suite.sh` invoked via `npm
282
- run`? **Proposal**: both — `bin/devlyn.js benchmark` is the advertised
283
- entry, which shells out to the script.
284
- 2. Parallel run safety — can we run the selected fixture set × 3 arms concurrently without
285
- rate-limit / lockfile conflicts? **Proposal**: default sequential with
286
- `--parallel N` flag. Default `N=1` for safety; the user can opt in.
287
- 3. Token accounting — Claude Code doesn't expose subagent totals reliably.
288
- **Proposal**: capture wall time as primary efficiency metric; token
289
- estimate as best-effort secondary. Do not gate ship on token math alone.