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.
- package/AGENTS.md +2 -2
- package/CLAUDE.md +2 -2
- package/README.md +12 -102
- package/bin/devlyn.js +13 -225
- package/bin/instruction-templates.json +6 -0
- package/config/skills/_shared/adapters/grok.md +1 -2
- package/config/skills/_shared/archive_run.py +15 -3
- package/config/skills/_shared/judge-role-evidence.py +21 -1
- package/config/skills/_shared/runtime-principles.md +1 -1
- package/config/skills/_shared/spec-verify-check.py +0 -653
- package/config/skills/_shared/state-phase-write.py +351 -25
- package/config/skills/_shared/task-complete.py +635 -143
- package/config/skills/_shared/terminal-claim-check.py +229 -4
- package/config/skills/_shared/verify-merge-findings.py +93 -2
- package/config/skills/devlyn:ideate/SKILL.md +3 -4
- package/config/skills/devlyn:ideate/references/elicitation.md +2 -35
- package/config/skills/devlyn:ideate/references/from-spec-mode.md +3 -18
- package/config/skills/devlyn:ideate/references/project-mode.md +1 -16
- package/config/skills/devlyn:ideate/references/spec-template.md +0 -2
- package/config/skills/devlyn:queue/SKILL.md +6 -4
- package/config/skills/devlyn:resolve/SKILL.md +16 -25
- package/config/skills/devlyn:resolve/references/free-form-mode.md +0 -14
- package/config/skills/devlyn:resolve/references/outer-loop.md +1 -1
- package/config/skills/devlyn:resolve/references/phases/build-gate.md +1 -1
- package/config/skills/devlyn:resolve/references/phases/cleanup.md +3 -3
- package/config/skills/devlyn:resolve/references/phases/implement.md +1 -1
- package/config/skills/devlyn:resolve/references/phases/probe-derive.md +1 -16
- package/config/skills/devlyn:resolve/references/phases/verify.md +4 -9
- package/config/skills/devlyn:resolve/references/state-schema.md +9 -7
- package/config/skills/devlyn:resolve/references/task-completion.md +46 -37
- package/{config/skills → optional-skills}/code-health-standards/SKILL.md +4 -13
- package/{config/skills → optional-skills}/code-review-standards/SKILL.md +4 -12
- package/{config/skills → optional-skills}/root-cause-analysis/SKILL.md +4 -12
- package/{config/skills → optional-skills}/ui-implementation-standards/SKILL.md +4 -14
- package/package.json +1 -57
- package/benchmark/auto-resolve/BENCHMARK-DESIGN.md +0 -289
- package/benchmark/auto-resolve/BENCHMARK-RESULTS.md +0 -341
- package/benchmark/auto-resolve/README.md +0 -696
- package/benchmark/auto-resolve/RUBRIC.md +0 -177
- package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/NOTES.md +0 -34
- package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/expected.json +0 -68
- package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/setup.sh +0 -4
- package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/spec.md +0 -44
- package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/task.ko.txt +0 -8
- package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/task.txt +0 -8
- package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/NOTES.md +0 -68
- package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/expected.json +0 -60
- package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/setup.sh +0 -17
- package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/spec.md +0 -51
- package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/task.txt +0 -9
- package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/verifiers/invalid.js +0 -29
- package/benchmark/auto-resolve/fixtures/F10-persist-write-collision/verifiers/parallel.js +0 -50
- package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/NOTES.md +0 -75
- package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/expected.json +0 -52
- package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/setup.sh +0 -171
- package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/spec.md +0 -50
- package/benchmark/auto-resolve/fixtures/F11-batch-import-all-or-nothing/task.txt +0 -9
- package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/NOTES.md +0 -89
- package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/expected.json +0 -74
- package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/setup.sh +0 -251
- package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/spec.md +0 -57
- package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/task.txt +0 -13
- package/benchmark/auto-resolve/fixtures/F12-webhook-raw-body-signature/verifiers/replay-malformed-body.js +0 -64
- package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/NOTES.md +0 -104
- package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/expected.json +0 -46
- package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/setup.sh +0 -336
- package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/spec.md +0 -51
- package/benchmark/auto-resolve/fixtures/F15-frozen-diff-race-review/task.txt +0 -9
- package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/NOTES.md +0 -38
- package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/expected.json +0 -64
- package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/setup.sh +0 -32
- package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/spec.md +0 -63
- package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/task.txt +0 -7
- package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/verifiers/exact-success.js +0 -54
- package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/verifiers/no-hardcoded-pricing.js +0 -47
- package/benchmark/auto-resolve/fixtures/F16-cli-quote-tax-rules/verifiers/stock-error.js +0 -45
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/NOTES.md +0 -57
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/expected-pair-plan-registry.json +0 -170
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/expected.json +0 -84
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/metadata.json +0 -21
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/pair-plan.sample-fail.json +0 -214
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/pair-plan.sample-pass.json +0 -223
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/setup.sh +0 -5
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/spec.md +0 -55
- package/benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/task.txt +0 -14
- package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/NOTES.md +0 -39
- package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/expected.json +0 -62
- package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/setup.sh +0 -2
- package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/spec.md +0 -67
- package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/task.txt +0 -7
- package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/verifiers/error-order.js +0 -55
- package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/verifiers/priority-blocked.js +0 -48
- package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/NOTES.md +0 -35
- package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/expected.json +0 -56
- package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/setup.sh +0 -2
- package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/spec.md +0 -64
- package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/task.txt +0 -7
- package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/verifiers/conflicting-duplicate.js +0 -34
- package/benchmark/auto-resolve/fixtures/F22-cli-ledger-close/verifiers/idempotent-close.js +0 -41
- package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/NOTES.md +0 -39
- package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/expected.json +0 -56
- package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/setup.sh +0 -2
- package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/spec.md +0 -76
- package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/task.txt +0 -7
- package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/verifiers/priority-rollback.js +0 -64
- package/benchmark/auto-resolve/fixtures/F23-cli-fulfillment-wave/verifiers/single-warehouse-fefo.js +0 -66
- package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/NOTES.md +0 -40
- package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/expected.json +0 -66
- package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/setup.sh +0 -36
- package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/spec.md +0 -71
- package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/task.txt +0 -7
- package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/verifiers/catalog-source.js +0 -57
- package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/verifiers/exact-success.js +0 -63
- package/benchmark/auto-resolve/fixtures/F25-cli-cart-promotion-rules/verifiers/stock-error.js +0 -34
- package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/NOTES.md +0 -31
- package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/expected.json +0 -68
- package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/setup.sh +0 -17
- package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/spec.md +0 -68
- package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/task.txt +0 -7
- package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/verifiers/conflicting-duplicate.js +0 -29
- package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/verifiers/exact-payout.js +0 -58
- package/benchmark/auto-resolve/fixtures/F26-cli-payout-ledger-rules/verifiers/rules-source.js +0 -56
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/NOTES.md +0 -35
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/expected-pair-plan-registry.json +0 -162
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/expected.json +0 -67
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/metadata.json +0 -19
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/setup.sh +0 -4
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/spec.md +0 -55
- package/benchmark/auto-resolve/fixtures/F3-backend-contract-risk/task.txt +0 -9
- package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/NOTES.md +0 -34
- package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/expected.json +0 -57
- package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/setup.sh +0 -2
- package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/spec.md +0 -67
- package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/task.txt +0 -7
- package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/verifiers/duplicate-event-error.js +0 -35
- package/benchmark/auto-resolve/fixtures/F31-cli-seat-rebalance/verifiers/priority-transfer-rollback.js +0 -53
- package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/NOTES.md +0 -38
- package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/expected.json +0 -57
- package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/setup.sh +0 -2
- package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/spec.md +0 -70
- package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/task.txt +0 -3
- package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/verifiers/duplicate-renewal-error.js +0 -42
- package/benchmark/auto-resolve/fixtures/F32-cli-subscription-renewal/verifiers/priority-credit-rollback.js +0 -70
- package/benchmark/auto-resolve/fixtures/F4-web-browser-design/NOTES.md +0 -47
- package/benchmark/auto-resolve/fixtures/F4-web-browser-design/expected.json +0 -57
- package/benchmark/auto-resolve/fixtures/F4-web-browser-design/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/F4-web-browser-design/setup.sh +0 -6
- package/benchmark/auto-resolve/fixtures/F4-web-browser-design/spec.md +0 -48
- package/benchmark/auto-resolve/fixtures/F4-web-browser-design/task.txt +0 -9
- package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/NOTES.md +0 -45
- package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/expected.json +0 -65
- package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/setup.sh +0 -55
- package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/spec.md +0 -48
- package/benchmark/auto-resolve/fixtures/F5-fix-loop-red-green/task.txt +0 -7
- package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/NOTES.md +0 -43
- package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/expected.json +0 -77
- package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/setup.sh +0 -4
- package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/spec.md +0 -48
- package/benchmark/auto-resolve/fixtures/F6-dep-audit-native-module/task.txt +0 -10
- package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/NOTES.md +0 -57
- package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/expected.json +0 -76
- package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/setup.sh +0 -36
- package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/spec.md +0 -45
- package/benchmark/auto-resolve/fixtures/F7-out-of-scope-trap/task.txt +0 -7
- package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/NOTES.md +0 -53
- package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/expected.json +0 -63
- package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/setup.sh +0 -4
- package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/spec.md +0 -48
- package/benchmark/auto-resolve/fixtures/F8-known-limit-ambiguous/task.txt +0 -1
- package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/NOTES.md +0 -105
- package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/expected.json +0 -74
- package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/setup.sh +0 -28
- package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/spec.md +0 -59
- package/benchmark/auto-resolve/fixtures/F9-e2e-ideate-to-resolve/task.txt +0 -5
- package/benchmark/auto-resolve/fixtures/SCHEMA.md +0 -188
- package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/NOTES.md +0 -37
- package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/RETIRED.md +0 -13
- package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/expected.json +0 -56
- package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/setup.sh +0 -18
- package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/spec.md +0 -69
- package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/task.txt +0 -7
- package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/verifiers/exact-proration.js +0 -48
- package/benchmark/auto-resolve/fixtures/retired/F27-cli-subscription-proration/verifiers/rules-source-and-conflict.js +0 -79
- package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/NOTES.md +0 -54
- package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/RETIRED.md +0 -7
- package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/expected.json +0 -67
- package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/setup.sh +0 -2
- package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/spec.md +0 -67
- package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/task.txt +0 -5
- package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/verifiers/policy-precedence.js +0 -72
- package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/verifiers/validation-and-immutability.js +0 -43
- package/benchmark/auto-resolve/fixtures/retired/F28-cli-return-authorization/verifiers/validation-boundary.js +0 -116
- package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/NOTES.md +0 -35
- package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/RETIRED.md +0 -12
- package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/expected.json +0 -58
- package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/setup.sh +0 -2
- package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/spec.md +0 -73
- package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/task.txt +0 -17
- package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/verifiers/mixed-idempotent-settlement.js +0 -53
- package/benchmark/auto-resolve/fixtures/retired/F30-cli-credit-hold-settlement/verifiers/rejection-boundaries.js +0 -74
- package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/NOTES.md +0 -28
- package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/RETIRED.md +0 -15
- package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/expected.json +0 -57
- package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/setup.sh +0 -50
- package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/spec.md +0 -59
- package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/task.txt +0 -9
- package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/verifiers/ordered-settlement.js +0 -88
- package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/verifiers/reject-invalid.js +0 -45
- package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/NOTES.md +0 -30
- package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/RETIRED.md +0 -16
- package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/expected.json +0 -64
- package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/setup.sh +0 -21
- package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/spec.md +0 -58
- package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/task.txt +0 -9
- package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/verifiers/dup-op.js +0 -54
- package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/verifiers/priority-apply.js +0 -82
- package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/verifiers/rollback.js +0 -77
- package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/NOTES.md +0 -99
- package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/RETIRED.md +0 -18
- package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/expected.json +0 -64
- package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/setup.sh +0 -4
- package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/spec.md +0 -61
- package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/task.txt +0 -9
- package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/verifiers/correctness-small.js +0 -135
- package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/verifiers/scale.js +0 -100
- package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/verifiers/validation.js +0 -75
- package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/NOTES.md +0 -93
- package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/RETIRED.md +0 -16
- package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/expected.json +0 -65
- package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/setup.sh +0 -18
- package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/spec.md +0 -66
- package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/task.txt +0 -9
- package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/verifiers/correctness-small.js +0 -84
- package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/verifiers/scale.js +0 -184
- package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/verifiers/validation.js +0 -74
- package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/NOTES.md +0 -60
- package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/RETIRED.md +0 -29
- package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/expected.json +0 -73
- package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/metadata.json +0 -10
- package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/setup.sh +0 -28
- package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/spec.md +0 -58
- package/benchmark/auto-resolve/fixtures/retired/F9-e2e-ideate-to-preflight/task.txt +0 -5
- package/benchmark/auto-resolve/fixtures/test-repo/README.md +0 -12
- package/benchmark/auto-resolve/fixtures/test-repo/bin/cli.js +0 -63
- package/benchmark/auto-resolve/fixtures/test-repo/package-lock.json +0 -823
- package/benchmark/auto-resolve/fixtures/test-repo/package.json +0 -22
- package/benchmark/auto-resolve/fixtures/test-repo/playwright.config.js +0 -17
- package/benchmark/auto-resolve/fixtures/test-repo/server/index.js +0 -37
- package/benchmark/auto-resolve/fixtures/test-repo/tests/cli.test.js +0 -25
- package/benchmark/auto-resolve/fixtures/test-repo/tests/server.test.js +0 -58
- package/benchmark/auto-resolve/fixtures/test-repo/web/index.html +0 -37
- package/benchmark/auto-resolve/results/20260507-f10-f11-tier1-full-pipeline/headroom-gate.json +0 -25
- package/benchmark/auto-resolve/results/20260507-f10-f11-tier1-full-pipeline/headroom-gate.md +0 -10
- package/benchmark/auto-resolve/results/20260508-f22-exact-error-headroom/headroom-gate.json +0 -18
- package/benchmark/auto-resolve/results/20260508-f22-exact-error-headroom/headroom-gate.md +0 -9
- package/benchmark/auto-resolve/results/20260508-f26-headroom/headroom-gate.json +0 -18
- package/benchmark/auto-resolve/results/20260508-f26-headroom/headroom-gate.md +0 -9
- package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/F16-cli-quote-tax-rules/l2_risk_probes/result.json +0 -28
- package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/F23-cli-fulfillment-wave/l2_risk_probes/result.json +0 -28
- package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/F25-cli-cart-promotion-rules/l2_risk_probes/result.json +0 -30
- package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/full-pipeline-pair-gate.json +0 -82
- package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/full-pipeline-pair-gate.md +0 -18
- package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/headroom-gate.json +0 -46
- package/benchmark/auto-resolve/results/20260510-f16-f23-f25-combined-proof/headroom-gate.md +0 -17
- package/benchmark/auto-resolve/results/20260511-f12-webhook-headroom/headroom-gate.json +0 -28
- package/benchmark/auto-resolve/results/20260511-f12-webhook-headroom/headroom-gate.md +0 -15
- package/benchmark/auto-resolve/results/20260511-f15-concurrency-headroom/headroom-gate.json +0 -28
- package/benchmark/auto-resolve/results/20260511-f15-concurrency-headroom/headroom-gate.md +0 -15
- package/benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/F21-cli-scheduler-priority/l2_risk_probes/result.json +0 -32
- package/benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/full-pipeline-pair-gate.json +0 -44
- package/benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/full-pipeline-pair-gate.md +0 -16
- package/benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/headroom-gate.json +0 -18
- package/benchmark/auto-resolve/results/20260511-f21-current-riskprobes-v1/headroom-gate.md +0 -9
- package/benchmark/auto-resolve/results/20260511-f3-http-error-headroom/headroom-gate.json +0 -28
- package/benchmark/auto-resolve/results/20260511-f3-http-error-headroom/headroom-gate.md +0 -15
- package/benchmark/auto-resolve/results/20260512-f2-medium-headroom/headroom-gate.json +0 -28
- package/benchmark/auto-resolve/results/20260512-f2-medium-headroom/headroom-gate.md +0 -15
- package/benchmark/auto-resolve/results/20260512-f31-seat-rebalance-headroom/headroom-gate.json +0 -28
- package/benchmark/auto-resolve/results/20260512-f31-seat-rebalance-headroom/headroom-gate.md +0 -15
- package/benchmark/auto-resolve/results/20260512-f32-subscription-renewal-headroom/headroom-gate.json +0 -28
- package/benchmark/auto-resolve/results/20260512-f32-subscription-renewal-headroom/headroom-gate.md +0 -15
- package/benchmark/auto-resolve/results/20260512-f4-web-headroom/headroom-gate.json +0 -28
- package/benchmark/auto-resolve/results/20260512-f4-web-headroom/headroom-gate.md +0 -15
- package/benchmark/auto-resolve/results/20260512-f5-fixloop-headroom/headroom-gate.json +0 -28
- package/benchmark/auto-resolve/results/20260512-f5-fixloop-headroom/headroom-gate.md +0 -15
- package/benchmark/auto-resolve/results/20260512-f6-checksum-headroom/headroom-gate.json +0 -28
- package/benchmark/auto-resolve/results/20260512-f6-checksum-headroom/headroom-gate.md +0 -15
- package/benchmark/auto-resolve/results/20260512-f7-scope-headroom/headroom-gate.json +0 -28
- package/benchmark/auto-resolve/results/20260512-f7-scope-headroom/headroom-gate.md +0 -15
- package/benchmark/auto-resolve/results/20260512-f9-e2e-headroom/headroom-gate.json +0 -28
- package/benchmark/auto-resolve/results/20260512-f9-e2e-headroom/headroom-gate.md +0 -15
- package/benchmark/auto-resolve/run-real-benchmark.md +0 -303
- package/benchmark/auto-resolve/scripts/audit-headroom-rejections.py +0 -441
- package/benchmark/auto-resolve/scripts/audit-pair-evidence.py +0 -1256
- package/benchmark/auto-resolve/scripts/build-pair-eligible-manifest.py +0 -306
- package/benchmark/auto-resolve/scripts/check-f9-artifacts.py +0 -268
- package/benchmark/auto-resolve/scripts/collect-swebench-predictions.py +0 -108
- package/benchmark/auto-resolve/scripts/compile-report.py +0 -493
- package/benchmark/auto-resolve/scripts/fetch-swebench-instances.py +0 -129
- package/benchmark/auto-resolve/scripts/frozen-verify-gate.py +0 -434
- package/benchmark/auto-resolve/scripts/full-pipeline-pair-gate.py +0 -612
- package/benchmark/auto-resolve/scripts/headroom-gate.py +0 -378
- package/benchmark/auto-resolve/scripts/iter-0033c-compare.py +0 -683
- package/benchmark/auto-resolve/scripts/iter-0033c-l1-summary.py +0 -97
- package/benchmark/auto-resolve/scripts/judge-opus-pass.sh +0 -542
- package/benchmark/auto-resolve/scripts/judge.sh +0 -565
- package/benchmark/auto-resolve/scripts/oracle-scope-tier-a.py +0 -256
- package/benchmark/auto-resolve/scripts/oracle-scope-tier-b.py +0 -287
- package/benchmark/auto-resolve/scripts/oracle-test-fidelity.py +0 -328
- package/benchmark/auto-resolve/scripts/pair-candidate-frontier.py +0 -469
- package/benchmark/auto-resolve/scripts/pair-plan-idgen.py +0 -401
- package/benchmark/auto-resolve/scripts/pair-plan-lint.py +0 -475
- package/benchmark/auto-resolve/scripts/pair-rejected-fixtures.sh +0 -103
- package/benchmark/auto-resolve/scripts/pair_evidence_contract.py +0 -270
- package/benchmark/auto-resolve/scripts/prepare-swebench-frozen-case.py +0 -273
- package/benchmark/auto-resolve/scripts/prepare-swebench-frozen-corpus.py +0 -148
- package/benchmark/auto-resolve/scripts/prepare-swebench-solver-worktree.py +0 -210
- package/benchmark/auto-resolve/scripts/recent-benchmark-summary.py +0 -232
- package/benchmark/auto-resolve/scripts/run-fixture.sh +0 -1024
- package/benchmark/auto-resolve/scripts/run-frozen-verify-pair.sh +0 -683
- package/benchmark/auto-resolve/scripts/run-full-pipeline-pair-candidate.sh +0 -458
- package/benchmark/auto-resolve/scripts/run-headroom-candidate.sh +0 -336
- package/benchmark/auto-resolve/scripts/run-iter-0033c.sh +0 -208
- package/benchmark/auto-resolve/scripts/run-suite.sh +0 -251
- package/benchmark/auto-resolve/scripts/run-swebench-frozen-corpus.sh +0 -310
- package/benchmark/auto-resolve/scripts/run-swebench-solver-batch.sh +0 -257
- package/benchmark/auto-resolve/scripts/ship-gate.py +0 -391
- package/benchmark/auto-resolve/scripts/solo-ceiling-avoidance.py +0 -53
- package/benchmark/auto-resolve/scripts/solo-headroom-hypothesis.py +0 -77
- package/benchmark/auto-resolve/scripts/swebench-frozen-matrix.py +0 -478
- package/benchmark/auto-resolve/scripts/test-audit-headroom-rejections.sh +0 -288
- package/benchmark/auto-resolve/scripts/test-audit-pair-evidence.sh +0 -1672
- package/benchmark/auto-resolve/scripts/test-benchmark-arg-parsing.sh +0 -1015
- package/benchmark/auto-resolve/scripts/test-build-pair-eligible-manifest.sh +0 -491
- package/benchmark/auto-resolve/scripts/test-check-f9-artifacts.sh +0 -91
- package/benchmark/auto-resolve/scripts/test-frozen-verify-gate.sh +0 -517
- package/benchmark/auto-resolve/scripts/test-full-pipeline-pair-gate.sh +0 -610
- package/benchmark/auto-resolve/scripts/test-headroom-gate.sh +0 -401
- package/benchmark/auto-resolve/scripts/test-iter-0033c-compare.sh +0 -525
- package/benchmark/auto-resolve/scripts/test-iter-0033c-l1-summary.sh +0 -254
- package/benchmark/auto-resolve/scripts/test-lint-fixtures.sh +0 -580
- package/benchmark/auto-resolve/scripts/test-pair-candidate-frontier.sh +0 -591
- package/benchmark/auto-resolve/scripts/test-run-full-pipeline-pair-candidate.sh +0 -497
- package/benchmark/auto-resolve/scripts/test-run-headroom-candidate.sh +0 -401
- package/benchmark/auto-resolve/scripts/test-run-swebench-solver-batch.sh +0 -111
- package/benchmark/auto-resolve/scripts/test-ship-gate.sh +0 -1189
- package/benchmark/auto-resolve/scripts/test-swebench-frozen-case.sh +0 -1221
- package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/NOTES.md +0 -28
- package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/expected.json +0 -63
- package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/metadata.json +0 -10
- package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/setup.sh +0 -3
- package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/spec.md +0 -47
- package/benchmark/auto-resolve/shadow-fixtures/S1-cli-lang-flag/task.txt +0 -1
- package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/NOTES.md +0 -34
- package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/expected.json +0 -53
- package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/metadata.json +0 -10
- package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/setup.sh +0 -3
- package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/spec.md +0 -50
- package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/task.txt +0 -1
- package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/verifiers/duplicate-order-error.js +0 -27
- package/benchmark/auto-resolve/shadow-fixtures/S2-cli-inventory-reservation/verifiers/priority-stock-reservation.js +0 -44
- package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/NOTES.md +0 -34
- package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/expected.json +0 -55
- package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/metadata.json +0 -10
- package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/setup.sh +0 -3
- package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/spec.md +0 -52
- package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/task.txt +0 -1
- package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/verifiers/duplicate-ticket-error.js +0 -29
- package/benchmark/auto-resolve/shadow-fixtures/S3-cli-ticket-assignment/verifiers/priority-agent-assignment.js +0 -48
- package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/NOTES.md +0 -34
- package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/expected.json +0 -55
- package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/metadata.json +0 -10
- package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/setup.sh +0 -3
- package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/spec.md +0 -55
- package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/task.txt +0 -1
- package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/verifiers/duplicate-return-error.js +0 -43
- package/benchmark/auto-resolve/shadow-fixtures/S4-cli-return-routing/verifiers/priority-return-routing.js +0 -70
- package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/NOTES.md +0 -37
- package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/expected.json +0 -54
- package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/metadata.json +0 -10
- package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/setup.sh +0 -3
- package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/spec.md +0 -59
- package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/task.txt +0 -1
- package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/verifiers/credit-ledger-priority.js +0 -98
- package/benchmark/auto-resolve/shadow-fixtures/S5-cli-credit-grant-ledger/verifiers/duplicate-charge-error.js +0 -38
- package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/NOTES.md +0 -36
- package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/expected.json +0 -56
- package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/metadata.json +0 -10
- package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/setup.sh +0 -3
- package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/spec.md +0 -59
- package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/task.txt +0 -1
- package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/verifiers/duplicate-refund-error.js +0 -41
- package/benchmark/auto-resolve/shadow-fixtures/S6-cli-refund-window-ledger/verifiers/priority-refund-ledger.js +0 -65
- package/config/skills/_shared/pair-plan-schema.md +0 -298
- package/scripts/lint-fixtures.sh +0 -352
- package/scripts/lint-shadow-fixtures.sh +0 -58
- package/scripts/lint-skills.sh +0 -4265
- package/scripts/test-owner-phases.py +0 -238
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"verification_commands": [
|
|
3
|
-
{
|
|
4
|
-
"cmd": "node bin/cli.js hello",
|
|
5
|
-
"exit_code": 0,
|
|
6
|
-
"stdout_contains": [
|
|
7
|
-
"Hello, world!"
|
|
8
|
-
],
|
|
9
|
-
"stdout_not_contains": []
|
|
10
|
-
},
|
|
11
|
-
{
|
|
12
|
-
"cmd": "node bin/cli.js hello --name alice",
|
|
13
|
-
"exit_code": 0,
|
|
14
|
-
"stdout_contains": [
|
|
15
|
-
"Hello, alice!"
|
|
16
|
-
],
|
|
17
|
-
"stdout_not_contains": []
|
|
18
|
-
},
|
|
19
|
-
{
|
|
20
|
-
"cmd": "node bin/cli.js version",
|
|
21
|
-
"exit_code": 0,
|
|
22
|
-
"stdout_contains": [
|
|
23
|
-
"0.1.0"
|
|
24
|
-
],
|
|
25
|
-
"stdout_not_contains": []
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
"cmd": "node bin/cli.js --help",
|
|
29
|
-
"exit_code": 0,
|
|
30
|
-
"stdout_contains": [
|
|
31
|
-
"hello"
|
|
32
|
-
],
|
|
33
|
-
"stdout_not_contains": []
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
"cmd": "node --test tests/cli.test.js",
|
|
37
|
-
"exit_code": 0,
|
|
38
|
-
"stdout_contains": [],
|
|
39
|
-
"stdout_not_contains": [
|
|
40
|
-
"not ok "
|
|
41
|
-
]
|
|
42
|
-
}
|
|
43
|
-
],
|
|
44
|
-
"forbidden_patterns": [
|
|
45
|
-
{
|
|
46
|
-
"pattern": "catch\\s*\\([^)]*\\)\\s*\\{\\s*\\}",
|
|
47
|
-
"description": "empty catch block",
|
|
48
|
-
"files": [
|
|
49
|
-
"bin/cli.js"
|
|
50
|
-
],
|
|
51
|
-
"severity": "disqualifier"
|
|
52
|
-
}
|
|
53
|
-
],
|
|
54
|
-
"required_files": [
|
|
55
|
-
"bin/cli.js"
|
|
56
|
-
],
|
|
57
|
-
"forbidden_files": [],
|
|
58
|
-
"max_deps_added": 0,
|
|
59
|
-
"spec_output_files": [
|
|
60
|
-
"bin/cli.js",
|
|
61
|
-
"tests/**"
|
|
62
|
-
]
|
|
63
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "F8-known-limit-ambiguous",
|
|
3
|
-
"category": "edge",
|
|
4
|
-
"difficulty": "ambiguous",
|
|
5
|
-
"timeout_seconds": 900,
|
|
6
|
-
"required_tools": ["node"],
|
|
7
|
-
"browser": false,
|
|
8
|
-
"deps_change_expected": false,
|
|
9
|
-
"intent": "Deliberately under-specified feature request: 'make the CLI better'. Both arms must disambiguate before building. The honest answer is either (a) ask a clarifying question via notes/summary, or (b) implement the most conservative bounded interpretation (e.g., a --help improvement). Fixture documents where the harness may not beat bare."
|
|
10
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: "F8-known-limit-ambiguous"
|
|
3
|
-
title: "Improve the CLI"
|
|
4
|
-
status: planned
|
|
5
|
-
complexity: medium
|
|
6
|
-
depends-on: []
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# F8 Improve the CLI
|
|
10
|
-
|
|
11
|
-
## Context
|
|
12
|
-
|
|
13
|
-
> "Users have been saying the CLI could be better. Make it better."
|
|
14
|
-
|
|
15
|
-
That is the entire ask. It is deliberately under-specified to document a
|
|
16
|
-
known limit of the harness: what happens when the product decision hasn't
|
|
17
|
-
been made? The honest response is to NOT guess a sweeping refactor — instead,
|
|
18
|
-
pick the smallest, clearly-beneficial, scope-obvious change that every
|
|
19
|
-
reasonable reader would agree with (e.g., a slightly more helpful `--help`
|
|
20
|
-
block), and document what WAS NOT done for lack of direction.
|
|
21
|
-
|
|
22
|
-
## Requirements
|
|
23
|
-
|
|
24
|
-
- [ ] Make a small, defensible improvement to the CLI. Any of these qualifies:
|
|
25
|
-
- Adding a missing short flag (`-h` alias is already there; choose something else).
|
|
26
|
-
- Producing a nicer `--help` that lists each subcommand with a one-line description.
|
|
27
|
-
- Distinguishing unknown-command and no-command cases in error output.
|
|
28
|
-
- [ ] Existing behavior is not regressed. `node bin/cli.js hello` / `version` / `--help` still exit 0 with their current semantics.
|
|
29
|
-
- [ ] Add at least one test that asserts the new behavior.
|
|
30
|
-
- [ ] Include a brief note in the commit message or a comment explaining what you chose, why, and what you explicitly did NOT do.
|
|
31
|
-
|
|
32
|
-
## Constraints
|
|
33
|
-
|
|
34
|
-
- **No new npm dependencies.**
|
|
35
|
-
- **No sweeping refactors.** Do not rewrite the argument parser or invert the file's control flow.
|
|
36
|
-
- **No breaking changes** to current subcommands.
|
|
37
|
-
|
|
38
|
-
## Out of Scope
|
|
39
|
-
|
|
40
|
-
- Adding new subcommands the user didn't ask for.
|
|
41
|
-
- Restyling, renaming, or deleting existing subcommands.
|
|
42
|
-
- Touching `server/` or `web/`.
|
|
43
|
-
|
|
44
|
-
## Verification
|
|
45
|
-
|
|
46
|
-
- Existing baseline commands behave identically.
|
|
47
|
-
- At least one new assertion in `tests/` exercises the change.
|
|
48
|
-
- `node bin/cli.js --help` (if changed) is valid UTF-8 and lists every real subcommand once.
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
Users have been saying the CLI could be better. Make it better.
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
# F9 — Notes (2-skill contract, post iter-0033a)
|
|
2
|
-
|
|
3
|
-
## Purpose
|
|
4
|
-
|
|
5
|
-
**Load-bearing for the novice-user contract.** The suite ship-gate requires
|
|
6
|
-
F9 to pass (variant arm margin ≥ +5) on every shipped version. If F9 fails,
|
|
7
|
-
the "type `/devlyn:ideate` and ship worldclass software" promise is not being
|
|
8
|
-
met.
|
|
9
|
-
|
|
10
|
-
Renamed 2026-04-30 (iter-0033a) from the `-to-preflight` legacy id to match
|
|
11
|
-
the shipped 2-skill product surface: `/devlyn:ideate` → `/devlyn:resolve --spec`.
|
|
12
|
-
The pre-rename copy is preserved at `fixtures/retired/F9-e2e-ideate-to-preflight/`
|
|
13
|
-
for recovery if the OLD 3-skill chain ever needs replay.
|
|
14
|
-
|
|
15
|
-
## What the variant arm does (2-skill chain)
|
|
16
|
-
|
|
17
|
-
A novice-simulating prompt (`task.txt` is identical to what the user typed)
|
|
18
|
-
is delivered to a fresh Claude session. The session has the new 2-skill kit
|
|
19
|
-
installed. The pipeline arm is expected to:
|
|
20
|
-
|
|
21
|
-
1. Recognize this is a vague idea, not a spec → invoke `/devlyn:ideate`.
|
|
22
|
-
2. Ideate produces `docs/specs/<id>-<slug>/spec.md` + `spec.expected.json`
|
|
23
|
-
and announces `spec ready — /devlyn:resolve --spec <emitted-path>`.
|
|
24
|
-
3. Run `/devlyn:resolve --spec <emitted-path>` (PLAN → IMPLEMENT → BUILD_GATE
|
|
25
|
-
→ CLEANUP → VERIFY in one skill). VERIFY is the fresh-subagent final
|
|
26
|
-
phase, replacing the standalone `/devlyn:preflight` skill from the
|
|
27
|
-
3-skill era.
|
|
28
|
-
|
|
29
|
-
The variant prompt explicitly instructs this chain so the test isn't about
|
|
30
|
-
Claude inventing the chain — it's about the new tools being usable end-to-end
|
|
31
|
-
when invoked.
|
|
32
|
-
|
|
33
|
-
## What the bare arm does
|
|
34
|
-
|
|
35
|
-
Same raw task delivered as a direct prompt with anti-skill rules. Bare
|
|
36
|
-
implements `gitstats` using its own judgment. Bare does NOT produce any
|
|
37
|
-
`docs/specs/**` artifacts (and isn't expected to).
|
|
38
|
-
|
|
39
|
-
## Why margin ≥ +5 is required (vs L0 / bare)
|
|
40
|
-
|
|
41
|
-
The pipeline's whole value prop is that it trades some bare-case tokens for
|
|
42
|
-
quality uplift on novice flows. If this fixture can't show ≥ +5 margin
|
|
43
|
-
vs L0, we're paying pipeline cost without delivering on the novice promise.
|
|
44
|
-
|
|
45
|
-
**OLD-vs-NEW comparison is NOT measured here.** OLD `/devlyn:ideate` was
|
|
46
|
-
replaced in iter-0032 (the new ideate is the only ideate at HEAD). Calling
|
|
47
|
-
the OLD F9 chain (`/devlyn:ideate` → `/devlyn:auto-resolve` → `/devlyn:preflight`)
|
|
48
|
-
at HEAD would invoke NEW ideate against OLD auto-resolve — a broken hybrid.
|
|
49
|
-
The harness refuses `--resolve-skill old` on F9 with a hard error.
|
|
50
|
-
|
|
51
|
-
## Scoring notes
|
|
52
|
-
|
|
53
|
-
- The variant's `docs/specs/<id>-<slug>/spec.md` + `spec.expected.json` ARE
|
|
54
|
-
part of the judge's evaluation. The judge sees the full product (code +
|
|
55
|
-
spec + tests), not just the diff to `bin/cli.js`.
|
|
56
|
-
- Bare doesn't produce spec files, so bare's judge payload is code+test only.
|
|
57
|
-
This asymmetry is INTENTIONAL — the fixture tests total-output quality,
|
|
58
|
-
not per-file quality.
|
|
59
|
-
|
|
60
|
-
## Skill-driven artifact check (out-of-band, NOT in expected.json)
|
|
61
|
-
|
|
62
|
-
Per Codex R0.5 §B: `expected.json.verification_commands` apply to ALL arms
|
|
63
|
-
(see `run-fixture.sh:472`). A `docs/specs/**` check in expected.json would
|
|
64
|
-
punish the bare arm (which doesn't run ideate). Skill-driven artifact
|
|
65
|
-
verification lives in `scripts/check-f9-artifacts.py`, which runs AFTER
|
|
66
|
-
the per-fixture verification block and asserts every non-bare skill arm
|
|
67
|
-
(`variant`, `solo_claude`, `l2_gated`, `l2_risk_probes`, `l2_forced`)
|
|
68
|
-
produced:
|
|
69
|
-
|
|
70
|
-
- `docs/specs/<id>-<slug>/spec.md` exists.
|
|
71
|
-
- `docs/specs/<id>-<slug>/spec.expected.json` exists.
|
|
72
|
-
- transcript contains `/devlyn:resolve --spec` exactly once.
|
|
73
|
-
- transcript does NOT contain `/devlyn:auto-resolve` or `/devlyn:preflight`.
|
|
74
|
-
|
|
75
|
-
## Failure modes detected
|
|
76
|
-
|
|
77
|
-
- **Pipeline skips ideate.** Variant invokes `/devlyn:resolve` directly on
|
|
78
|
-
the raw idea → free-form classifier kicks in → spec quality is shallow.
|
|
79
|
-
Caught by `scripts/check-f9-artifacts.py`: `docs/specs/**` files missing.
|
|
80
|
-
- **Bare over-engineers.** Without a skeleton, bare builds too much,
|
|
81
|
-
touches wrong files, adds deps. Caught by spec constraints (no new deps,
|
|
82
|
-
forbidden empty catch).
|
|
83
|
-
- **Variant chains the OLD names.** If the variant transcript contains
|
|
84
|
-
`/devlyn:auto-resolve` or `/devlyn:preflight`, the prompt-following gate
|
|
85
|
-
fails. iter-0033a's harness change ensures the variant prompt names only
|
|
86
|
-
the 2 surviving skills.
|
|
87
|
-
- **Spec emit path divergence.** If the new ideate refactors away from
|
|
88
|
-
`<spec-dir>/<id>-<slug>/spec.md`, the harness check fails (path-shape
|
|
89
|
-
regression smoke #4 of iter-0033a catches it before benchmark runs).
|
|
90
|
-
|
|
91
|
-
## Rotation trigger
|
|
92
|
-
|
|
93
|
-
F9 is the last fixture we rotate — it's the anchor. If it saturates
|
|
94
|
-
(variant consistently > 95), the whole suite needs a harder novice-flow
|
|
95
|
-
anchor before we retire this one.
|
|
96
|
-
|
|
97
|
-
## Current pair-evidence status
|
|
98
|
-
|
|
99
|
-
Rejected as pair-lift evidence until reworked. `20260512-f9-e2e-headroom`
|
|
100
|
-
measured bare 60 / solo_claude 90 with a +30 solo-over-bare margin, and
|
|
101
|
-
`check-f9-artifacts.py` passed for bare (exempt) and solo_claude. The headroom
|
|
102
|
-
gate still failed because bare headroom was 0 < 5, solo_claude exceeded 80, and
|
|
103
|
-
bare carried a judge disqualifier. Keep F9 as the novice-flow anchor, but do not
|
|
104
|
-
spend pair arms on it as pair evidence until the fixture is reworked and clears
|
|
105
|
-
a fresh headroom gate.
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"verification_commands": [
|
|
3
|
-
{
|
|
4
|
-
"cmd": "node bin/cli.js gitstats",
|
|
5
|
-
"exit_code": 0,
|
|
6
|
-
"stdout_contains": [
|
|
7
|
-
"Commits:",
|
|
8
|
-
"Last commit:"
|
|
9
|
-
],
|
|
10
|
-
"stdout_not_contains": [
|
|
11
|
-
"Error:"
|
|
12
|
-
]
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
"cmd": "node bin/cli.js gitstats --json",
|
|
16
|
-
"exit_code": 0,
|
|
17
|
-
"stdout_contains": [
|
|
18
|
-
"{",
|
|
19
|
-
"commits",
|
|
20
|
-
"authors"
|
|
21
|
-
],
|
|
22
|
-
"stdout_not_contains": []
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
"cmd": "cd /tmp && node -e 'const { spawnSync } = require(\"child_process\"); const p = process.env.BENCH_WORKDIR || process.cwd(); console.log(spawnSync(\"node\", [p + \"/bin/cli.js\", \"gitstats\"], { encoding: \"utf8\", cwd: \"/tmp\" }).status)'",
|
|
26
|
-
"exit_code": 0,
|
|
27
|
-
"stdout_contains": [
|
|
28
|
-
"2"
|
|
29
|
-
],
|
|
30
|
-
"stdout_not_contains": [
|
|
31
|
-
"0"
|
|
32
|
-
]
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
"cmd": "node bin/cli.js hello",
|
|
36
|
-
"exit_code": 0,
|
|
37
|
-
"stdout_contains": [
|
|
38
|
-
"Hello, world!"
|
|
39
|
-
],
|
|
40
|
-
"stdout_not_contains": []
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"cmd": "node --test tests/",
|
|
44
|
-
"exit_code": 0,
|
|
45
|
-
"stdout_contains": [],
|
|
46
|
-
"stdout_not_contains": []
|
|
47
|
-
}
|
|
48
|
-
],
|
|
49
|
-
"forbidden_patterns": [
|
|
50
|
-
{
|
|
51
|
-
"pattern": "catch\\s*\\([^)]*\\)\\s*\\{\\s*\\}",
|
|
52
|
-
"description": "empty catch",
|
|
53
|
-
"files": [
|
|
54
|
-
"bin/cli.js"
|
|
55
|
-
],
|
|
56
|
-
"severity": "disqualifier"
|
|
57
|
-
}
|
|
58
|
-
],
|
|
59
|
-
"required_files": [
|
|
60
|
-
"bin/cli.js"
|
|
61
|
-
],
|
|
62
|
-
"forbidden_files": [],
|
|
63
|
-
"max_deps_added": 0,
|
|
64
|
-
"tier_a_waivers": [
|
|
65
|
-
"docs/specs/**",
|
|
66
|
-
"docs/VISION.md",
|
|
67
|
-
"docs/ROADMAP.md",
|
|
68
|
-
"docs/roadmap/**"
|
|
69
|
-
],
|
|
70
|
-
"spec_output_files": [
|
|
71
|
-
"bin/**",
|
|
72
|
-
"tests/**"
|
|
73
|
-
]
|
|
74
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "F9-e2e-ideate-to-resolve",
|
|
3
|
-
"category": "e2e",
|
|
4
|
-
"difficulty": "high",
|
|
5
|
-
"timeout_seconds": 3600,
|
|
6
|
-
"required_tools": ["node"],
|
|
7
|
-
"browser": false,
|
|
8
|
-
"deps_change_expected": false,
|
|
9
|
-
"intent": "End-to-end novice flow (2-skill contract): from a vague idea ('git stats CLI for the current repo') the variant must run /devlyn:ideate → /devlyn:resolve --spec <emitted-path> to produce spec + implemented code + verified output. VERIFY is the fresh-subagent final phase of resolve (no separate preflight skill). The bare arm receives the same vague idea as a direct prompt. This fixture gates the novice-user contract."
|
|
10
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# F9 setup — seed a few synthetic commits with different authors so the
|
|
3
|
-
# `gitstats` subcommand's "top 3 authors by commit count" requirement is
|
|
4
|
-
# meaningfully exercised. Without this, every commit author is the runner's
|
|
5
|
-
# default and the ranking test is a no-op.
|
|
6
|
-
set -e
|
|
7
|
-
|
|
8
|
-
commit_as() {
|
|
9
|
-
local name="$1" email="$2" file="$3" message="$4"
|
|
10
|
-
echo "$(date +%s%N) $name" >> "$file"
|
|
11
|
-
git add "$file"
|
|
12
|
-
git -c user.name="$name" -c user.email="$email" commit -q -m "$message"
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
mkdir -p .bench-seed
|
|
16
|
-
|
|
17
|
-
commit_as "Alpha Author" "alpha@bench.test" .bench-seed/log "seed: alpha 1"
|
|
18
|
-
commit_as "Alpha Author" "alpha@bench.test" .bench-seed/log "seed: alpha 2"
|
|
19
|
-
commit_as "Alpha Author" "alpha@bench.test" .bench-seed/log "seed: alpha 3"
|
|
20
|
-
commit_as "Alpha Author" "alpha@bench.test" .bench-seed/log "seed: alpha 4"
|
|
21
|
-
commit_as "Beta Author" "beta@bench.test" .bench-seed/log "seed: beta 1"
|
|
22
|
-
commit_as "Beta Author" "beta@bench.test" .bench-seed/log "seed: beta 2"
|
|
23
|
-
commit_as "Beta Author" "beta@bench.test" .bench-seed/log "seed: beta 3"
|
|
24
|
-
commit_as "Gamma Author" "gamma@bench.test" .bench-seed/log "seed: gamma 1"
|
|
25
|
-
commit_as "Gamma Author" "gamma@bench.test" .bench-seed/log "seed: gamma 2"
|
|
26
|
-
commit_as "Delta Author" "delta@bench.test" .bench-seed/log "seed: delta 1"
|
|
27
|
-
|
|
28
|
-
echo "F9 setup: seeded 10 commits across 4 authors (Alpha 4 / Beta 3 / Gamma 2 / Delta 1)"
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: "F9-e2e-ideate-to-resolve"
|
|
3
|
-
title: "End-to-end: idea → shipped CLI feature (2-skill contract)"
|
|
4
|
-
status: planned
|
|
5
|
-
complexity: high
|
|
6
|
-
depends-on: []
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# F9 End-to-End Novice Flow (2-skill chain)
|
|
10
|
-
|
|
11
|
-
## Context
|
|
12
|
-
|
|
13
|
-
A first-time user has a vague idea:
|
|
14
|
-
|
|
15
|
-
> "I want a CLI subcommand that shows basic stats about the current git repo — commit count, last commit date, top 3 authors. Call it `gitstats`."
|
|
16
|
-
|
|
17
|
-
The variant arm is expected to use the 2-skill chain:
|
|
18
|
-
`/devlyn:ideate` → `/devlyn:resolve --spec <emitted-path>`. The bare arm
|
|
19
|
-
receives the same idea as a direct prompt and implements it without the
|
|
20
|
-
pipeline.
|
|
21
|
-
|
|
22
|
-
This fixture is the suite's most important gate for the "novice user contract":
|
|
23
|
-
a first-time user typing `/devlyn:ideate` should land at working,
|
|
24
|
-
well-structured software. VERIFY runs as the fresh-subagent final phase
|
|
25
|
-
inside `/devlyn:resolve` (no separate preflight skill in the 2-skill design).
|
|
26
|
-
|
|
27
|
-
## Requirements
|
|
28
|
-
|
|
29
|
-
- [ ] A new `gitstats` subcommand exists in `bin/cli.js`.
|
|
30
|
-
- [ ] `node bin/cli.js gitstats` (run inside a git repo) prints:
|
|
31
|
-
- Line 1: commit count (e.g., `Commits: 42`).
|
|
32
|
-
- Line 2: last commit ISO date (e.g., `Last commit: 2026-04-23T12:00:00Z`).
|
|
33
|
-
- Lines 3-5: top 3 authors by commit count, format `<rank>. <name> <count>`.
|
|
34
|
-
- [ ] Run outside a git repo → stderr message `Error: not a git repository` and exit 2.
|
|
35
|
-
- [ ] `node bin/cli.js gitstats --json` emits valid JSON with the same data.
|
|
36
|
-
- [ ] Existing subcommands (`hello`, `version`) unchanged.
|
|
37
|
-
- [ ] Add at least one test.
|
|
38
|
-
|
|
39
|
-
## Constraints
|
|
40
|
-
|
|
41
|
-
- **No new npm dependencies.** Use `child_process` to shell out to `git`.
|
|
42
|
-
- **No silent catches.**
|
|
43
|
-
- **Non-git-repo handling.** Do not assume the user is always in a repo.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
## Out of Scope
|
|
47
|
-
|
|
48
|
-
- Parsing commit messages, tags, branches.
|
|
49
|
-
- Remote API calls.
|
|
50
|
-
- Touching `server/` or `web/`.
|
|
51
|
-
|
|
52
|
-
## Verification
|
|
53
|
-
|
|
54
|
-
- Inside this worktree (which IS a git repo): `node bin/cli.js gitstats` exits 0 and prints at least 5 lines of summary.
|
|
55
|
-
- `node bin/cli.js gitstats --json | node -e 'const d=JSON.parse(require("fs").readFileSync(0,"utf8")); console.log(typeof d.commits)'` prints `number`.
|
|
56
|
-
- `cd /tmp && node <worktree>/bin/cli.js gitstats` (from outside a repo — use the worktree's absolute path) exits 2.
|
|
57
|
-
- `node --test tests/` passes.
|
|
58
|
-
|
|
59
|
-
(Skill-driven artifact checks — `docs/specs/<id>-<slug>/spec.md` + `spec.expected.json` existence, transcript fingerprint — live in `scripts/check-f9-artifacts.py`, NOT in the shared verification block above. Bare is exempt. See NOTES.md.)
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
I want a CLI subcommand that shows basic stats about the current git repo — commit count, last commit date, top 3 authors. Call it `gitstats`.
|
|
2
|
-
|
|
3
|
-
Should work inside this repo when I run `node bin/cli.js gitstats`, and fail cleanly if I'm not in a git repo. A `--json` flag for machine-readable output would be useful too.
|
|
4
|
-
|
|
5
|
-
Keep the existing `hello` and `version` subcommands working. Add a test. No new npm dependencies.
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
# Fixture Schema
|
|
2
|
-
|
|
3
|
-
Every fixture is a directory under `benchmark/auto-resolve/fixtures/F<N>-<slug>/` with these files. **All six files are required** (setup.sh may be empty when the starting `test-repo` copy needs no modification).
|
|
4
|
-
|
|
5
|
-
## metadata.json
|
|
6
|
-
|
|
7
|
-
```json
|
|
8
|
-
{
|
|
9
|
-
"id": "F2-cli-medium-subcommand",
|
|
10
|
-
"category": "medium",
|
|
11
|
-
"difficulty": "medium",
|
|
12
|
-
"timeout_seconds": 1200,
|
|
13
|
-
"required_tools": ["node"],
|
|
14
|
-
"browser": false,
|
|
15
|
-
"deps_change_expected": false,
|
|
16
|
-
"intent": "One-sentence plain-language statement of the work, the SINGLE source of truth for spec.md and task.txt."
|
|
17
|
-
}
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
- **id** — matches directory name, used across artifacts.
|
|
21
|
-
- **category** — one of `trivial | medium | high-risk | stress | edge | e2e`. Drives which ship-gate rule applies.
|
|
22
|
-
- **difficulty** — expected difficulty independent of category. Rubric uses this only for saturation detection (when `bare` and `solo_claude` both exceed 95 for two versions, flag fixture for rotation).
|
|
23
|
-
- **timeout_seconds** — per-arm hard timeout. Runner kills the arm at this limit and marks result `TIMEOUT`.
|
|
24
|
-
- **required_tools** — binaries the arm's environment must provide. Runner checks before invocation.
|
|
25
|
-
- **browser** — true if arm must be able to run Playwright. Runner uses this to decide whether `test-repo`'s Playwright deps get installed before the arm starts.
|
|
26
|
-
- **deps_change_expected** — true if the task involves modifying `package.json` / lockfiles. The pipeline arm's CRITIC security sub-pass is expected to trigger native `security-review` dep audit when true.
|
|
27
|
-
- **intent** — **load-bearing**. A short plain-language statement shared by all arms. `spec.md` formalizes it into resolve-ready form; `task.txt` renders it as a direct prompt. A CI lint ensures both derive from this field and stay in sync.
|
|
28
|
-
|
|
29
|
-
## spec.md
|
|
30
|
-
|
|
31
|
-
Resolve-ready spec for the pipeline arm. Same format `/devlyn:ideate` produces:
|
|
32
|
-
|
|
33
|
-
```markdown
|
|
34
|
-
---
|
|
35
|
-
id: "<fixture-id>"
|
|
36
|
-
title: "<short title>"
|
|
37
|
-
status: planned
|
|
38
|
-
complexity: medium
|
|
39
|
-
depends-on: []
|
|
40
|
-
---
|
|
41
|
-
|
|
42
|
-
# <fixture-id> <Title>
|
|
43
|
-
|
|
44
|
-
## Context
|
|
45
|
-
2-3 sentences describing WHY (not HOW). Must be traceable back to `metadata.intent`.
|
|
46
|
-
|
|
47
|
-
## Requirements
|
|
48
|
-
- [ ] Specific, testable, scoped.
|
|
49
|
-
- [ ] ...
|
|
50
|
-
|
|
51
|
-
## Constraints
|
|
52
|
-
- Concrete, with reasoning for each (not bare).
|
|
53
|
-
|
|
54
|
-
## Out of Scope
|
|
55
|
-
- Explicit "must NOT build" list. Audited by resolve/JUDGE as anti-commitments.
|
|
56
|
-
|
|
57
|
-
## Verification
|
|
58
|
-
- Concrete commands whose expected behavior is named.
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
`complexity` is the resolve spec contract enum, not the benchmark difficulty
|
|
62
|
-
label. Use `trivial`, `medium`, or `high` for new fixtures; `large` is accepted
|
|
63
|
-
only for compatibility with external/legacy specs. Keep ambiguous calibration
|
|
64
|
-
labels in `metadata.difficulty`, not spec frontmatter.
|
|
65
|
-
|
|
66
|
-
## task.txt
|
|
67
|
-
|
|
68
|
-
Bare-arm input. Plain English, same intent, but framed as a user request rather than a formal spec. Intentionally lacks the structured Requirements/Constraints/Out-of-Scope sections — bare must make those calls itself. Must not leak "use the devlyn skill" hints.
|
|
69
|
-
|
|
70
|
-
## expected.json
|
|
71
|
-
|
|
72
|
-
Machine-readable acceptance criteria used by both `run-fixture.sh` verification and the judge's rubric anchor.
|
|
73
|
-
|
|
74
|
-
```json
|
|
75
|
-
{
|
|
76
|
-
"verification_commands": [
|
|
77
|
-
{
|
|
78
|
-
"cmd": "node bin/cli.js doctor",
|
|
79
|
-
"exit_code": 0,
|
|
80
|
-
"stdout_contains": ["doctor: "],
|
|
81
|
-
"stdout_not_contains": ["undefined"],
|
|
82
|
-
"contract_refs": []
|
|
83
|
-
}
|
|
84
|
-
],
|
|
85
|
-
"forbidden_patterns": [
|
|
86
|
-
{
|
|
87
|
-
"pattern": "catch\\s*\\(\\s*[a-zA-Z_]*\\s*\\)\\s*\\{\\s*return",
|
|
88
|
-
"description": "silent catch returning a fallback value — violates no-silent-catches policy",
|
|
89
|
-
"files": ["bin/cli.js"],
|
|
90
|
-
"severity": "disqualifier"
|
|
91
|
-
}
|
|
92
|
-
],
|
|
93
|
-
"required_files": ["bin/cli.js"],
|
|
94
|
-
"forbidden_files": [],
|
|
95
|
-
"tier_a_waivers": [],
|
|
96
|
-
"spec_output_files": ["bin/cli.js"],
|
|
97
|
-
"max_deps_added": 0
|
|
98
|
-
}
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
- **verification_commands** — runner executes each. Each command's pass/fail contributes to the arm's `verify_score`.
|
|
102
|
-
Commands run with `BENCH_WORKDIR` (fresh arm work tree) and
|
|
103
|
-
`BENCH_FIXTURE_DIR` (the fixture directory outside the arm work tree) in
|
|
104
|
-
the environment. Put discriminator/oracle scripts under the fixture
|
|
105
|
-
directory when the arm should not read the verifier source; any
|
|
106
|
-
`$BENCH_FIXTURE_DIR/...` file path referenced by a command must exist and
|
|
107
|
-
must not escape the fixture directory. Hidden oracle commands must reference
|
|
108
|
-
the verifier through an explicit `$BENCH_FIXTURE_DIR/...` path rather than
|
|
109
|
-
`cd "$BENCH_FIXTURE_DIR"` indirection.
|
|
110
|
-
Any command that references `BENCH_FIXTURE_DIR` is a hidden oracle and must
|
|
111
|
-
include `contract_refs`: exact substrings from `spec.md` proving the oracle
|
|
112
|
-
tests a visible contract rather than inventing a narrower one. Hidden oracle
|
|
113
|
-
commands must also assert `stdout_contains: ["\"ok\":true"]` so a verifier
|
|
114
|
-
cannot pass silently without emitting the success sentinel.
|
|
115
|
-
- **forbidden_patterns** — regexes scanned across `diff.patch`. Match at `severity: "disqualifier"` is a hard-floor fail. Match at `severity: "warning"` goes into the judge's critical-findings report.
|
|
116
|
-
- **required_files** — must exist after the arm runs.
|
|
117
|
-
- **forbidden_files** — must NOT appear in the arm's diff.
|
|
118
|
-
- **tier_a_waivers** — optional globs for files the spec explicitly authorizes even though Tier A scope oracle would normally flag them.
|
|
119
|
-
- **spec_output_files** — files or globs that define the authorized output surface for Tier B scope tracing.
|
|
120
|
-
- **max_deps_added** — count of new entries under `dependencies`/`devDependencies` in `package.json`. Exceeds → hard-floor fail.
|
|
121
|
-
|
|
122
|
-
## high-risk metadata
|
|
123
|
-
|
|
124
|
-
Fixtures with `metadata.json` `category: "high-risk"` must include at least
|
|
125
|
-
one resolve risk-trigger term in `metadata.intent` or `spec.md`, matching the
|
|
126
|
-
conditional risk-probe triggers used by `/devlyn:resolve`: security/auth,
|
|
127
|
-
money/pricing/tax/ledger, persistence/data mutation, idempotency/replay,
|
|
128
|
-
API/webhook/signature, allocation/scheduling/inventory/rollback/transaction,
|
|
129
|
-
priority, or output/response-shape contracts. This keeps future pair-evidence
|
|
130
|
-
candidates from relying on a label that would not actually activate the pair
|
|
131
|
-
path.
|
|
132
|
-
|
|
133
|
-
## NOTES.md
|
|
134
|
-
|
|
135
|
-
Human-readable explanation of why this fixture exists. Must answer:
|
|
136
|
-
|
|
137
|
-
1. What specific failure mode does this fixture detect?
|
|
138
|
-
2. What pipeline phase(s) is this testing?
|
|
139
|
-
3. Why can't another fixture cover this?
|
|
140
|
-
4. When should this fixture be retired or replaced?
|
|
141
|
-
|
|
142
|
-
Notes are read during suite design review, not during runs.
|
|
143
|
-
|
|
144
|
-
If `NOTES.md` records that a fixture failed a headroom gate or was rejected as
|
|
145
|
-
pair-lift evidence, add the fixture to
|
|
146
|
-
`benchmark/auto-resolve/scripts/pair-rejected-fixtures.sh` in the same change.
|
|
147
|
-
Rejected controls should remain replayable, but they must not be silently
|
|
148
|
-
re-spent as fresh pair candidates.
|
|
149
|
-
|
|
150
|
-
## Retired fixtures
|
|
151
|
-
|
|
152
|
-
Move fixtures that are no longer valid active golden-suite evidence to
|
|
153
|
-
`fixtures/retired/<fixture-id>/`. Retired fixtures are preserved for replay and
|
|
154
|
-
historical diagnosis, but `run-suite.sh` does not auto-discover them. Each
|
|
155
|
-
retired fixture must keep the six fixture files plus `RETIRED.md` explaining
|
|
156
|
-
the run id or concrete reason it left the active suite.
|
|
157
|
-
|
|
158
|
-
## setup.sh
|
|
159
|
-
|
|
160
|
-
Deterministic starting state. Runs against a fresh copy of `benchmark/auto-resolve/fixtures/test-repo/` before either arm starts. Common uses:
|
|
161
|
-
|
|
162
|
-
- Install extra deps (`npm install --prefix . something`).
|
|
163
|
-
- Apply a `.patch` that introduces a bug to fix.
|
|
164
|
-
- Create pre-existing files referenced by the spec.
|
|
165
|
-
|
|
166
|
-
Script must be idempotent when re-applied. Empty file (just `#!/usr/bin/env bash\nset -e\n`) is valid when no setup needed.
|
|
167
|
-
|
|
168
|
-
---
|
|
169
|
-
|
|
170
|
-
## Drift Prevention
|
|
171
|
-
|
|
172
|
-
A CI lint step (`scripts/lint-fixtures.sh`) verifies:
|
|
173
|
-
|
|
174
|
-
- All six files present per fixture.
|
|
175
|
-
- `metadata.intent` substring appears in both `spec.md::Context` and `task.txt` (≥ 60% token overlap using simple tokenization).
|
|
176
|
-
- `spec.md` frontmatter `id` matches directory name.
|
|
177
|
-
- `expected.json` is valid JSON.
|
|
178
|
-
- Active high-risk fixtures include a resolve risk-trigger term in
|
|
179
|
-
`metadata.intent` or `spec.md`.
|
|
180
|
-
- Active fixtures whose `NOTES.md` records headroom-gate failure or pair-lift
|
|
181
|
-
rejection are covered by `pair-rejected-fixtures.sh`.
|
|
182
|
-
- Active fixtures whose `NOTES.md` records `pair_evidence_passed` include an
|
|
183
|
-
actionable solo-headroom hypothesis in `spec.md`, using the same checker as
|
|
184
|
-
shadow candidates, and the hypothesis observable command must match a
|
|
185
|
-
`verification_commands[].cmd` entry in `expected.json`.
|
|
186
|
-
- `setup.sh` is executable.
|
|
187
|
-
- Retired fixtures under `fixtures/retired/F*/` keep `RETIRED.md`, preserve the
|
|
188
|
-
six fixture files, and are excluded from active suite discovery.
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
# F27 CLI subscription proration
|
|
2
|
-
|
|
3
|
-
## Failure mode
|
|
4
|
-
|
|
5
|
-
This fixture detects billing implementations that look correct on one happy
|
|
6
|
-
path but mishandle date boundaries, per-segment rounding, duplicate credits, or
|
|
7
|
-
hardcode plan and tax rules instead of reading the seeded data file.
|
|
8
|
-
|
|
9
|
-
## Pipeline phase target
|
|
10
|
-
|
|
11
|
-
PLAN must separate input validation, period segmentation, per-segment proration,
|
|
12
|
-
credit de-duplication, tax calculation, and output formatting. VERIFY should
|
|
13
|
-
probe date boundary and data-source variants because a small example can pass
|
|
14
|
-
while production invoices are off by one day or one cent.
|
|
15
|
-
|
|
16
|
-
## Why existing fixtures do not cover it
|
|
17
|
-
|
|
18
|
-
F25 covers cart promotions and F26 covers payout ledger events. This fixture
|
|
19
|
-
adds subscription billing proration: effective-date segmentation, period-day
|
|
20
|
-
denominators, credit idempotency, and tax after credits. It was intended to
|
|
21
|
-
cover a pair-risk-probe gap, but the first real headroom smoke showed the
|
|
22
|
-
visible contract was explicit enough for `solo_claude` to solve cleanly.
|
|
23
|
-
|
|
24
|
-
## Retirement
|
|
25
|
-
|
|
26
|
-
Retire or replace if both bare and solo consistently exceed the headroom
|
|
27
|
-
thresholds, or if a later billing fixture provides the same proration and
|
|
28
|
-
idempotent-credit signal with lower wall time.
|
|
29
|
-
|
|
30
|
-
## Measurement notes
|
|
31
|
-
|
|
32
|
-
- `20260511-f27-headroom-smoke-061401`: headroom FAIL. Judge scores were
|
|
33
|
-
bare 33 / solo_claude 94 (`solo_over_bare` +61). Bare passed 1 of 3
|
|
34
|
-
verification commands; solo passed 3 of 3 with terminal `PASS`.
|
|
35
|
-
- Do not spend a pair arm on this fixture in its current shape. It needs either
|
|
36
|
-
a harder visible contract that solo misses without pair probes, or rotation
|
|
37
|
-
out of the pair-candidate set.
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
# Retired: F27 CLI subscription proration
|
|
2
|
-
|
|
3
|
-
Retired from the active golden suite after headroom smoke
|
|
4
|
-
`20260511-f27-headroom-smoke-061401`.
|
|
5
|
-
|
|
6
|
-
Reason: `solo_claude` scored 94, exceeding the headroom ceiling of 80, while
|
|
7
|
-
`bare` scored 33 and passed only 1 of 3 verification commands. The fixture is
|
|
8
|
-
too explicit for current solo/pair lift measurement and too expensive to keep
|
|
9
|
-
in the default suite.
|
|
10
|
-
|
|
11
|
-
Future use: rework the visible contract so it creates a fair pair-risk-probe
|
|
12
|
-
gap, or replace it with a different billing fixture. Do not count this fixture
|
|
13
|
-
as pair evidence in its current form.
|