devlyn-cli 3.2.1 → 3.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +8 -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 +660 -150
- 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 +47 -38
- 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,223 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"accepted_invariants": [
|
|
3
|
-
{
|
|
4
|
-
"authority": "expected.json/forbidden_patterns",
|
|
5
|
-
"id": "forbidden_pattern__silent_catch_returning_a_fallback_value_violates_no_silent_c__bin_cli_js",
|
|
6
|
-
"operational_check": "variant arm output MUST NOT contain regex pattern \"catch\\\\s*\\\\([^)]*\\\\)\\\\s*\\\\{[^}]*return\\\\s+(\\\\[\\\\]|null|undefined|\\\\{|false|'')\" in files ['bin/cli.js']; rationale: silent catch returning a fallback value — violates no-silent-catches policy",
|
|
7
|
-
"paraphrase": "variant arm output MUST NOT contain regex pattern \"catch\\\\s*\\\\([^)]*\\\\)\\\\s*\\\\{[^}]*return\\\\s+(\\\\[\\\\]|null|undefined|\\\\{|",
|
|
8
|
-
"source_refs": [
|
|
9
|
-
"expected.json:forbidden_patterns[0]"
|
|
10
|
-
]
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
"authority": "expected.json/forbidden_patterns",
|
|
14
|
-
"id": "forbidden_pattern__ts_ignore_escape_hatch__bin_cli_js",
|
|
15
|
-
"operational_check": "variant arm output MUST NOT contain regex pattern '@ts-ignore' in files ['bin/cli.js']; rationale: @ts-ignore escape hatch",
|
|
16
|
-
"paraphrase": "variant arm output MUST NOT contain regex pattern '@ts-ignore' in files ['bin/cli.js']; rationale: @ts-ignore escape hat",
|
|
17
|
-
"source_refs": [
|
|
18
|
-
"expected.json:forbidden_patterns[1]"
|
|
19
|
-
]
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
"authority": "expected.json/max_deps_added",
|
|
23
|
-
"id": "max_deps_added__0",
|
|
24
|
-
"operational_check": "variant arm MUST NOT add more than 0 new npm dependencies (count delta of package.json:dependencies + devDependencies)",
|
|
25
|
-
"paraphrase": "variant arm MUST NOT add more than 0 new npm dependencies (count delta of package.json:dependencies + devDependencies)",
|
|
26
|
-
"source_refs": [
|
|
27
|
-
"expected.json:max_deps_added"
|
|
28
|
-
]
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
"authority": "expected.json/required_files",
|
|
32
|
-
"id": "required_file__bin_cli_js",
|
|
33
|
-
"operational_check": "variant arm output MUST contain file 'bin/cli.js' (created or preserved)",
|
|
34
|
-
"paraphrase": "variant arm output MUST contain file 'bin/cli.js' (created or preserved)",
|
|
35
|
-
"source_refs": [
|
|
36
|
-
"expected.json:required_files[bin/cli.js]"
|
|
37
|
-
]
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
"authority": "metadata/oracle-allowlist",
|
|
41
|
-
"id": "scope-tier-a:lockfile-deletion",
|
|
42
|
-
"operational_check": "variant arm MUST NOT delete a scaffold-present lockfile",
|
|
43
|
-
"paraphrase": "variant arm MUST NOT delete a scaffold-present lockfile",
|
|
44
|
-
"source_refs": [
|
|
45
|
-
"oracle-scope-tier-a.py"
|
|
46
|
-
]
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
"authority": "metadata/oracle-allowlist",
|
|
50
|
-
"id": "scope-tier-a:tier-a-violation",
|
|
51
|
-
"operational_check": "variant arm MUST NOT add or modify paths matching: docs/roadmap/** | docs/VISION.md | docs/ROADMAP.md | .github/** | node_modules/** | **/node_modules/** | test-results/** | coverage/** | .nyc_output/** | basename suffix .log | basename prefix .env or secrets.",
|
|
52
|
-
"paraphrase": "variant arm MUST NOT add or modify paths matching: docs/roadmap/** | docs/VISION.md | docs/ROADMAP.md | .github/** | nod",
|
|
53
|
-
"source_refs": [
|
|
54
|
-
"oracle-scope-tier-a.py"
|
|
55
|
-
]
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
"authority": "metadata/oracle-allowlist",
|
|
59
|
-
"id": "scope-tier-b:scope-unmatched",
|
|
60
|
-
"operational_check": "every variant-touched file MUST be either inside spec_output_files (Tier C) OR reachable from a Tier C seed via static JS/TS imports OR matched by expected.json:tier_a_waivers",
|
|
61
|
-
"paraphrase": "every variant-touched file MUST be either inside spec_output_files (Tier C) OR reachable from a Tier C seed via static J",
|
|
62
|
-
"source_refs": [
|
|
63
|
-
"oracle-scope-tier-b.py"
|
|
64
|
-
]
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
"authority": "expected.json/spec_output_files",
|
|
68
|
-
"id": "spec_output_file__bin_cli_js",
|
|
69
|
-
"operational_check": "variant-touched files MUST be inside (or reachable via static imports from) the spec_output_files set; 'bin/cli.js' is one Tier C seed",
|
|
70
|
-
"paraphrase": "variant-touched files MUST be inside (or reachable via static imports from) the spec_output_files set; 'bin/cli.js' is o",
|
|
71
|
-
"source_refs": [
|
|
72
|
-
"expected.json:spec_output_files[bin/cli.js]"
|
|
73
|
-
]
|
|
74
|
-
},
|
|
75
|
-
{
|
|
76
|
-
"authority": "expected.json/spec_output_files",
|
|
77
|
-
"id": "spec_output_file__tests_cli_test_js",
|
|
78
|
-
"operational_check": "variant-touched files MUST be inside (or reachable via static imports from) the spec_output_files set; 'tests/cli.test.js' is one Tier C seed",
|
|
79
|
-
"paraphrase": "variant-touched files MUST be inside (or reachable via static imports from) the spec_output_files set; 'tests/cli.test.j",
|
|
80
|
-
"source_refs": [
|
|
81
|
-
"expected.json:spec_output_files[tests/cli.test.js]"
|
|
82
|
-
]
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
"authority": "metadata/oracle-allowlist",
|
|
86
|
-
"id": "test-fidelity:assertion-regression",
|
|
87
|
-
"operational_check": "effective assertion count MUST NOT drop and skipped-test count MUST NOT rise; vacuous expect.assertions(0) is treated as a real regression",
|
|
88
|
-
"paraphrase": "effective assertion count MUST NOT drop and skipped-test count MUST NOT rise; vacuous expect.assertions(0) is treated as",
|
|
89
|
-
"source_refs": [
|
|
90
|
-
"oracle-test-fidelity.py"
|
|
91
|
-
]
|
|
92
|
-
},
|
|
93
|
-
{
|
|
94
|
-
"authority": "metadata/oracle-allowlist",
|
|
95
|
-
"id": "test-fidelity:mock-swap",
|
|
96
|
-
"operational_check": "post-arm test file MUST NOT swap REAL_PATTERNS hits for MOCK_PATTERNS hits (jest/vi/sinon, nock/msw, app.handle/inject/callback, hand-rolled IncomingMessage/ServerResponse, etc.); a drop in real_calls combined with a rise in mock_calls is a mock-swap flag",
|
|
97
|
-
"paraphrase": "post-arm test file MUST NOT swap REAL_PATTERNS hits for MOCK_PATTERNS hits (jest/vi/sinon, nock/msw, app.handle/inject/c",
|
|
98
|
-
"source_refs": [
|
|
99
|
-
"oracle-test-fidelity.py"
|
|
100
|
-
]
|
|
101
|
-
},
|
|
102
|
-
{
|
|
103
|
-
"authority": "metadata/oracle-allowlist",
|
|
104
|
-
"id": "test-fidelity:test-file-deleted",
|
|
105
|
-
"operational_check": "no scaffold-present test file may be deleted by the variant arm; deletion of an existing tests/*.test.* / *.spec.* / *.e2e.* file is a flag-severity finding",
|
|
106
|
-
"paraphrase": "no scaffold-present test file may be deleted by the variant arm; deletion of an existing tests/*.test.* / *.spec.* / *.e",
|
|
107
|
-
"source_refs": [
|
|
108
|
-
"oracle-test-fidelity.py"
|
|
109
|
-
]
|
|
110
|
-
},
|
|
111
|
-
{
|
|
112
|
-
"authority": "metadata/oracle-allowlist",
|
|
113
|
-
"id": "test-fidelity:test-file-renamed",
|
|
114
|
-
"operational_check": "rename of a scaffold-present test file is warn-severity (content fidelity not verified across renames in step 1)",
|
|
115
|
-
"paraphrase": "rename of a scaffold-present test file is warn-severity (content fidelity not verified across renames in step 1)",
|
|
116
|
-
"source_refs": [
|
|
117
|
-
"oracle-test-fidelity.py"
|
|
118
|
-
]
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
"authority": "expected.json/verification_commands",
|
|
122
|
-
"id": "verification__3f35982a",
|
|
123
|
-
"operational_check": "running `node bin/cli.js doctor` in the post-arm work dir MUST exit with code 0; stdout MUST contain all of ['doctor:']; stdout MUST NOT contain any of ['undefined', 'Error:']",
|
|
124
|
-
"paraphrase": "running `node bin/cli.js doctor` in the post-arm work dir MUST exit with code 0; stdout MUST contain all of ['doctor:'];",
|
|
125
|
-
"source_refs": [
|
|
126
|
-
"expected.json:verification_commands[0]"
|
|
127
|
-
]
|
|
128
|
-
},
|
|
129
|
-
{
|
|
130
|
-
"authority": "expected.json/verification_commands",
|
|
131
|
-
"id": "verification__460fce04",
|
|
132
|
-
"operational_check": "running `HOME=/nonexistent node bin/cli.js doctor` in the post-arm work dir MUST exit with code 1; stdout MUST contain all of ['/nonexistent']; stdout MUST NOT contain any of []",
|
|
133
|
-
"paraphrase": "running `HOME=/nonexistent node bin/cli.js doctor` in the post-arm work dir MUST exit with code 1; stdout MUST contain a",
|
|
134
|
-
"source_refs": [
|
|
135
|
-
"expected.json:verification_commands[1]"
|
|
136
|
-
]
|
|
137
|
-
},
|
|
138
|
-
{
|
|
139
|
-
"authority": "expected.json/verification_commands",
|
|
140
|
-
"id": "verification__973e287e",
|
|
141
|
-
"operational_check": "running `python3 -c \"import subprocess; r = subprocess.run(['node', 'bin/cli.js', 'doctor'], capture_output=True); n = r.stdout.count(b'\\x1b['); print(n); exit(0 if n == 0 else 1)\"` in the post-arm work dir MUST exit with code 0; stdout MUST contain all of ['0']; stdout MUST NOT contain any of []",
|
|
142
|
-
"paraphrase": "running `python3 -c \"import subprocess; r = subprocess.run(['node', 'bin/cli.js', 'doctor'], capture_output=True); n = r",
|
|
143
|
-
"source_refs": [
|
|
144
|
-
"expected.json:verification_commands[2]"
|
|
145
|
-
]
|
|
146
|
-
},
|
|
147
|
-
{
|
|
148
|
-
"authority": "expected.json/verification_commands",
|
|
149
|
-
"id": "verification__d6253a97",
|
|
150
|
-
"operational_check": "running `node bin/cli.js doctor --help` in the post-arm work dir MUST exit with code 0; stdout MUST contain all of ['doctor']; stdout MUST NOT contain any of []",
|
|
151
|
-
"paraphrase": "running `node bin/cli.js doctor --help` in the post-arm work dir MUST exit with code 0; stdout MUST contain all of ['doc",
|
|
152
|
-
"source_refs": [
|
|
153
|
-
"expected.json:verification_commands[3]"
|
|
154
|
-
]
|
|
155
|
-
},
|
|
156
|
-
{
|
|
157
|
-
"authority": "expected.json/verification_commands",
|
|
158
|
-
"id": "verification__e0f149e4",
|
|
159
|
-
"operational_check": "running `node bin/cli.js --help` in the post-arm work dir MUST exit with code 0; stdout MUST contain all of ['doctor']; stdout MUST NOT contain any of []",
|
|
160
|
-
"paraphrase": "running `node bin/cli.js --help` in the post-arm work dir MUST exit with code 0; stdout MUST contain all of ['doctor']; ",
|
|
161
|
-
"source_refs": [
|
|
162
|
-
"expected.json:verification_commands[4]"
|
|
163
|
-
]
|
|
164
|
-
},
|
|
165
|
-
{
|
|
166
|
-
"authority": "expected.json/verification_commands",
|
|
167
|
-
"id": "verification__fdbcd321",
|
|
168
|
-
"operational_check": "running `node bin/cli.js doctor --verbose` in the post-arm work dir MUST exit with code 0; stdout MUST contain all of ['doctor:']; stdout MUST NOT contain any of ['Error:']",
|
|
169
|
-
"paraphrase": "running `node bin/cli.js doctor --verbose` in the post-arm work dir MUST exit with code 0; stdout MUST contain all of ['",
|
|
170
|
-
"source_refs": [
|
|
171
|
-
"expected.json:verification_commands[5]"
|
|
172
|
-
]
|
|
173
|
-
}
|
|
174
|
-
],
|
|
175
|
-
"authority_order": [
|
|
176
|
-
"spec.md",
|
|
177
|
-
"expected.json/rubric",
|
|
178
|
-
"phase prompt",
|
|
179
|
-
"model preference"
|
|
180
|
-
],
|
|
181
|
-
"escalated_to_user": [],
|
|
182
|
-
"fixture_id": "F2-cli-medium-subcommand",
|
|
183
|
-
"model_stamps": {
|
|
184
|
-
"claude": {
|
|
185
|
-
"blocked_ids": [],
|
|
186
|
-
"model": "claude-opus-4-7",
|
|
187
|
-
"signed_plan_sha256": "7329b8955a94ac680a7a58d09bfc53ce4de17609495b4bf4658cf2d3a43dacd5",
|
|
188
|
-
"status": "sign",
|
|
189
|
-
"timestamp": "2026-04-29T18:30:00Z"
|
|
190
|
-
},
|
|
191
|
-
"codex": {
|
|
192
|
-
"blocked_ids": [],
|
|
193
|
-
"model": "gpt-5.5",
|
|
194
|
-
"signed_plan_sha256": "7329b8955a94ac680a7a58d09bfc53ce4de17609495b4bf4658cf2d3a43dacd5",
|
|
195
|
-
"status": "sign",
|
|
196
|
-
"timestamp": "2026-04-29T18:31:00Z"
|
|
197
|
-
}
|
|
198
|
-
},
|
|
199
|
-
"plan_status": "final",
|
|
200
|
-
"planning_mode": "pair",
|
|
201
|
-
"rejected_alternatives": [],
|
|
202
|
-
"rounds": [
|
|
203
|
-
{
|
|
204
|
-
"claude_draft_sha256": "0000000000000000000000000000000000000000000000000000000000000000",
|
|
205
|
-
"codex_draft_sha256": "1111111111111111111111111111111111111111111111111111111111111111",
|
|
206
|
-
"merged_sha256": "2222222222222222222222222222222222222222222222222222222222222222",
|
|
207
|
-
"note": "sample-pass synthetic round (test fixture)",
|
|
208
|
-
"round": 1
|
|
209
|
-
}
|
|
210
|
-
],
|
|
211
|
-
"schema_version": "1",
|
|
212
|
-
"source": {
|
|
213
|
-
"canonical_id_registry_path": "benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/expected-pair-plan-registry.json",
|
|
214
|
-
"canonical_id_registry_sha256": "98ac16e4536ea3ef2e51d3c728982c014211c193a742cea74f1331e4fbba76be",
|
|
215
|
-
"expected_path": "benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/expected.json",
|
|
216
|
-
"expected_sha256": "ddef8feba49f20b6957e37840bc6a03e78e554776e380d81ad6390944c72fcab",
|
|
217
|
-
"rubric_path": "benchmark/auto-resolve/RUBRIC.md",
|
|
218
|
-
"rubric_sha256": "5b5b709a0b57f7e6f4fbc072af91e1edbc8d7910ae16b9b7be7170616aeaa9af",
|
|
219
|
-
"spec_path": "benchmark/auto-resolve/fixtures/F2-cli-medium-subcommand/spec.md",
|
|
220
|
-
"spec_sha256": "9b0949c2afd4a522de2bdbbf267d93907fd908bf0f1d0dc5e111ee30ba875bb7"
|
|
221
|
-
},
|
|
222
|
-
"unresolved": []
|
|
223
|
-
}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: "F2-cli-medium-subcommand"
|
|
3
|
-
title: "Add `doctor` subcommand to bench-test-repo CLI"
|
|
4
|
-
status: planned
|
|
5
|
-
complexity: medium
|
|
6
|
-
depends-on: []
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# F2 Add `doctor` subcommand
|
|
10
|
-
|
|
11
|
-
## Context
|
|
12
|
-
|
|
13
|
-
`bench-test-repo` users need a one-command way to diagnose their local
|
|
14
|
-
environment — node version, Claude Code install, plugins, skills — without
|
|
15
|
-
digging through the filesystem. A `doctor` subcommand lands that capability
|
|
16
|
-
inside the CLI itself.
|
|
17
|
-
|
|
18
|
-
## Requirements
|
|
19
|
-
|
|
20
|
-
- [ ] `node bin/cli.js doctor` produces a status report and exits 0 on a clean machine.
|
|
21
|
-
- [ ] Node version check — requires `process.version >= v18.0.0`, emits a status line, marks FAIL if below.
|
|
22
|
-
- [ ] `$HOME/.claude/` check — exists as directory AND is writable. Missing → FAIL. Exists but not writable (EACCES) → FAIL with a distinct "permission" message.
|
|
23
|
-
- [ ] Installed plugins scan — read subdirectories of `$HOME/.claude/plugins/cache/` and print a summary line with the count; `--verbose` lists names.
|
|
24
|
-
- [ ] Installed skills scan — count files matching `$HOME/.claude/skills/**/SKILL.md`; print count; `--verbose` lists relative paths.
|
|
25
|
-
- [ ] Colored output with `[OK]` (green), `[WARN]` (yellow), `[FAIL]` (red) via ANSI escape codes **only when `process.stdout.isTTY` is true** — piped output must contain no `\x1b[` sequences.
|
|
26
|
-
- [ ] Summary line: `doctor: <N> ok, <M> warn, <K> fail`.
|
|
27
|
-
- [ ] Exit code: `0` if zero fails, `1` otherwise.
|
|
28
|
-
- [ ] `--verbose` flag expands details for plugins/skills scans.
|
|
29
|
-
- [ ] `node bin/cli.js doctor --help` prints a short help block and exits 0.
|
|
30
|
-
- [ ] `node bin/cli.js --help` lists `doctor` as an available subcommand.
|
|
31
|
-
- [ ] `HOME=/nonexistent node bin/cli.js doctor` prints a FAIL line clearly referencing the missing `/nonexistent/.claude` and exits 1.
|
|
32
|
-
|
|
33
|
-
## Constraints
|
|
34
|
-
|
|
35
|
-
- **Zero new npm dependencies.** Use only Node.js built-ins (`fs`, `path`, `os`, `process`).
|
|
36
|
-
- **No silent error catches.** Do not wrap operations in `try { … } catch { return fallbackValue }`. All errors visible to the user with actionable messages.
|
|
37
|
-
- **HOME guard.** If `process.env.HOME` is undefined or empty, emit a clear FAIL line ("HOME environment variable is not set") and exit 1.
|
|
38
|
-
- **EACCES handling.** If `readdirSync` fails with EACCES, emit a permission-specific message quoting the offending path. Do not silently return an empty list.
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
## Out of Scope
|
|
42
|
-
|
|
43
|
-
- Auto-repair (report only; do not offer to fix detected problems).
|
|
44
|
-
- Checking remote/registry state (npm, GitHub).
|
|
45
|
-
- Any feature requiring a new npm dependency.
|
|
46
|
-
|
|
47
|
-
## Verification
|
|
48
|
-
|
|
49
|
-
- `node bin/cli.js doctor` exits 0 on a machine with `~/.claude` present.
|
|
50
|
-
- `HOME=/nonexistent node bin/cli.js doctor` prints a FAIL line referencing `/nonexistent/.claude` and exits 1.
|
|
51
|
-
- `node bin/cli.js doctor | cat` contains no `\x1b[` sequences.
|
|
52
|
-
- `node bin/cli.js doctor --help` prints help, exits 0.
|
|
53
|
-
- `node bin/cli.js --help` mentions `doctor`.
|
|
54
|
-
- `git diff -- package.json` is empty.
|
|
55
|
-
- `node bin/cli.js doctor --verbose` lists plugins and skills.
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
Add a `doctor` subcommand to bench-test-repo's CLI (`bin/cli.js`) that diagnoses the local environment. When a user runs `node bin/cli.js doctor`, it should check:
|
|
2
|
-
|
|
3
|
-
1. Node version is >= v18.0.0
|
|
4
|
-
2. $HOME/.claude/ exists and is writable
|
|
5
|
-
3. How many plugins are installed under $HOME/.claude/plugins/cache/
|
|
6
|
-
4. How many skills are installed (SKILL.md files under $HOME/.claude/skills/)
|
|
7
|
-
|
|
8
|
-
Each check produces a status line with a tag — `[OK]`, `[WARN]`, or `[FAIL]`. The tags should be colored (green/yellow/red) when output is a TTY, but plain text when piped. End with a summary line like `doctor: 3 ok, 1 warn, 0 fail` and exit 0 if no fails, 1 otherwise.
|
|
9
|
-
|
|
10
|
-
Add a `--verbose` flag that lists the individual plugins and skill paths. Add `--help` for the subcommand. Make sure `node bin/cli.js --help` mentions `doctor`.
|
|
11
|
-
|
|
12
|
-
Keep it to Node.js built-ins only (fs, path, os, process) — no new npm dependencies. Handle errors explicitly: if HOME is unset, fail cleanly with a helpful message; if a directory can't be read due to permissions (EACCES), say so with the path.
|
|
13
|
-
|
|
14
|
-
Running `HOME=/nonexistent node bin/cli.js doctor` should exit 1 and mention the missing `/nonexistent/.claude`.
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
# F21 CLI scheduler priority
|
|
2
|
-
|
|
3
|
-
## Failure mode
|
|
4
|
-
|
|
5
|
-
This fixture detects implementations that pass simple scheduling tests while
|
|
6
|
-
missing interaction rules: global priority ordering, earliest-fit placement,
|
|
7
|
-
blocked-interval exclusion, half-open time boundaries, and deterministic output
|
|
8
|
-
ordering.
|
|
9
|
-
|
|
10
|
-
## Pipeline phase target
|
|
11
|
-
|
|
12
|
-
PLAN must preserve the ordering and interval invariants. IMPLEMENT must build a
|
|
13
|
-
small scheduling engine without adding dependencies. VERIFY should catch
|
|
14
|
-
counterexamples where local request order or naive overlap checks produce a
|
|
15
|
-
plausible but wrong schedule.
|
|
16
|
-
|
|
17
|
-
## Why existing fixtures do not cover it
|
|
18
|
-
|
|
19
|
-
F16 covers checkout arithmetic. F10/F11/F12/F15 cover server behavior. None
|
|
20
|
-
exercise a CLI algorithm where the correct result depends on sorting,
|
|
21
|
-
interval arithmetic, and output ordering at once.
|
|
22
|
-
|
|
23
|
-
## Measurement status
|
|
24
|
-
|
|
25
|
-
Pair evidence passed in `20260511-f21-current-riskprobes-v1`: bare `33`,
|
|
26
|
-
solo_claude `66`, pair `99`, margin `+33`, wall `1.47x`,
|
|
27
|
-
arm `l2_risk_probes`, verdict `pair_evidence_passed`.
|
|
28
|
-
|
|
29
|
-
## Solo-headroom hypothesis
|
|
30
|
-
|
|
31
|
-
A capable solo_claude baseline is expected to miss global priority ordering
|
|
32
|
-
combined with blocked-interval earliest-fit placement; observable command
|
|
33
|
-
`node "$BENCH_FIXTURE_DIR/verifiers/priority-blocked.js"` exposes the miss.
|
|
34
|
-
|
|
35
|
-
## Retirement
|
|
36
|
-
|
|
37
|
-
Retire or replace when both bare and solo consistently exceed the headroom
|
|
38
|
-
thresholds, or if future fixtures cover the same interval-scheduling failure
|
|
39
|
-
mode with better discrimination.
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"verification_commands": [
|
|
3
|
-
{
|
|
4
|
-
"cmd": "node --test tests/cli.test.js",
|
|
5
|
-
"exit_code": 0,
|
|
6
|
-
"stdout_contains": [],
|
|
7
|
-
"stdout_not_contains": ["not ok "]
|
|
8
|
-
},
|
|
9
|
-
{
|
|
10
|
-
"cmd": "node \"$BENCH_FIXTURE_DIR/verifiers/priority-blocked.js\"",
|
|
11
|
-
"exit_code": 0,
|
|
12
|
-
"stdout_contains": ["\"ok\":true"],
|
|
13
|
-
"stdout_not_contains": [],
|
|
14
|
-
"contract_refs": [
|
|
15
|
-
"Process requests globally by `priority` descending, then `submitted_at` ascending, then `id` ascending.",
|
|
16
|
-
"For each request, place it on the requested resource at the earliest start minute that is greater than or equal to the request's requested `start`, fits wholly inside one availability window, does not overlap any blocked interval, and does not overlap any already accepted request on that resource.",
|
|
17
|
-
"A request may end exactly at a window end, but any one-minute overlap with a blocked interval is rejected or moved later."
|
|
18
|
-
]
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
"cmd": "node \"$BENCH_FIXTURE_DIR/verifiers/error-order.js\"",
|
|
22
|
-
"exit_code": 0,
|
|
23
|
-
"stdout_contains": ["\"ok\":true"],
|
|
24
|
-
"stdout_not_contains": [],
|
|
25
|
-
"contract_refs": [
|
|
26
|
-
"If the request references an unknown resource, reject with `{ \"id\": string, \"reason\": \"unknown_resource\" }`.",
|
|
27
|
-
"`rejected` is ordered in the original request input order.",
|
|
28
|
-
"Duplicate request ids are invalid input: exit `2`, one JSON error to stderr, no stdout."
|
|
29
|
-
]
|
|
30
|
-
}
|
|
31
|
-
],
|
|
32
|
-
"forbidden_patterns": [
|
|
33
|
-
{
|
|
34
|
-
"pattern": "catch\\s*\\([^)]*\\)\\s*\\{[^}]*return\\s+(null|undefined|''|\\{\\})",
|
|
35
|
-
"description": "silent catch returning fallback in scheduler path",
|
|
36
|
-
"files": ["bin/cli.js", "tests/cli.test.js"],
|
|
37
|
-
"severity": "disqualifier"
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
"pattern": "catch\\s*\\([^)]*\\)\\s*\\{\\s*\\}",
|
|
41
|
-
"description": "empty catch block",
|
|
42
|
-
"files": ["bin/cli.js", "tests/cli.test.js"],
|
|
43
|
-
"severity": "disqualifier"
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
"pattern": "catch\\s*(?:\\([^)]*\\))?\\s*\\{[^}]*ignore[^}]*\\}",
|
|
47
|
-
"description": "silent catch-ignore cleanup",
|
|
48
|
-
"files": ["bin/cli.js", "tests/cli.test.js"],
|
|
49
|
-
"severity": "disqualifier"
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
"pattern": "/\\*\\s*eslint-disable",
|
|
53
|
-
"description": "eslint-disable without scoped justification",
|
|
54
|
-
"files": ["bin/cli.js"],
|
|
55
|
-
"severity": "disqualifier"
|
|
56
|
-
}
|
|
57
|
-
],
|
|
58
|
-
"required_files": ["bin/cli.js", "tests/cli.test.js"],
|
|
59
|
-
"forbidden_files": [],
|
|
60
|
-
"max_deps_added": 0,
|
|
61
|
-
"spec_output_files": ["bin/cli.js", "tests/cli.test.js"]
|
|
62
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "F21-cli-scheduler-priority",
|
|
3
|
-
"category": "high-risk",
|
|
4
|
-
"difficulty": "high",
|
|
5
|
-
"timeout_seconds": 1500,
|
|
6
|
-
"required_tools": ["node"],
|
|
7
|
-
"browser": false,
|
|
8
|
-
"deps_change_expected": false,
|
|
9
|
-
"intent": "Add a bench-cli schedule command that assigns appointment requests to resource availability windows using priority, submitted order, blocked intervals, and earliest-fit placement while producing exact JSON accept/reject results."
|
|
10
|
-
}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: "F21-cli-scheduler-priority"
|
|
3
|
-
title: "Priority appointment scheduler"
|
|
4
|
-
status: planned
|
|
5
|
-
complexity: high
|
|
6
|
-
depends-on: []
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# F21 Priority appointment scheduler
|
|
10
|
-
|
|
11
|
-
## Context
|
|
12
|
-
|
|
13
|
-
Add a `bench-cli schedule --input <path>` command that assigns appointment
|
|
14
|
-
requests to resource availability windows using priority, submitted order,
|
|
15
|
-
blocked intervals, and earliest-fit placement while producing exact JSON
|
|
16
|
-
accept/reject results.
|
|
17
|
-
|
|
18
|
-
The scheduler is used by downstream automation, so output shape, ordering, and
|
|
19
|
-
failure reasons must be deterministic.
|
|
20
|
-
|
|
21
|
-
## Requirements
|
|
22
|
-
|
|
23
|
-
- [ ] `bench-cli schedule --input <path>` reads JSON shaped as `{ "resources": Array<Resource>, "requests": Array<Request> }`.
|
|
24
|
-
- [ ] Each resource has `{ "id": string, "windows": [{ "start": "HH:MM", "end": "HH:MM" }], "blocked": [{ "start": "HH:MM", "end": "HH:MM" }] }`. `blocked` may be empty.
|
|
25
|
-
- [ ] Each request has `{ "id": string, "resource": string, "start": "HH:MM", "duration_min": number, "priority": number, "submitted_at": string }`.
|
|
26
|
-
- [ ] Times are same-day 24-hour clock minutes. A range is half-open: `[start, end)`. A request ending exactly at a window end is allowed; overlapping a blocked range by one minute is not allowed.
|
|
27
|
-
- [ ] Process requests globally by `priority` descending, then `submitted_at` ascending, then `id` ascending.
|
|
28
|
-
- [ ] For each request, place it on the requested resource at the earliest start minute that is greater than or equal to the request's requested `start`, fits wholly inside one availability window, does not overlap any blocked interval, and does not overlap any already accepted request on that resource.
|
|
29
|
-
- [ ] Do not move a request to a different resource.
|
|
30
|
-
- [ ] If no placement exists, reject with `{ "id": string, "reason": "no_slot" }`.
|
|
31
|
-
- [ ] If the request references an unknown resource, reject with `{ "id": string, "reason": "unknown_resource" }`.
|
|
32
|
-
- [ ] Invalid top-level shape, invalid time strings, non-positive or non-integer `duration_min`, or duplicate request ids exits `2`, writes exactly one JSON error object to stderr, and writes nothing to stdout.
|
|
33
|
-
- [ ] On success, write exactly one JSON object to stdout and no stderr. Keys: `scheduled`, `rejected`.
|
|
34
|
-
- [ ] `scheduled` is ordered by actual scheduled start time ascending, then resource id ascending, then request id ascending. Each row has keys `id`, `resource`, `start`, `end`.
|
|
35
|
-
- [ ] `rejected` is ordered in the original request input order. Each row has keys `id`, `reason`.
|
|
36
|
-
- [ ] `tests/cli.test.js` is updated. Existing tests still pass AND at least two scheduler tests cover one success case and one rejection case.
|
|
37
|
-
|
|
38
|
-
## Constraints
|
|
39
|
-
|
|
40
|
-
- **No new npm dependencies.**
|
|
41
|
-
- **No silent catches in implementation or tests.** Invalid input and file-read failures must surface as JSON errors with exit `2`; test cleanup should use explicit safe primitives such as `fs.rmSync(path, { force: true })`, not `catch { /* ignore */ }`.
|
|
42
|
-
- **No mutation of the input file.**
|
|
43
|
-
- **No extra stdout/stderr text** on the success path; downstream tooling parses stdout as JSON.
|
|
44
|
-
- **Touch only `bin/cli.js` and `tests/cli.test.js`.**
|
|
45
|
-
|
|
46
|
-
## Out of Scope
|
|
47
|
-
|
|
48
|
-
- Multiple-day scheduling.
|
|
49
|
-
- Time zones.
|
|
50
|
-
- Recurring appointments.
|
|
51
|
-
- Persisting scheduled results.
|
|
52
|
-
- Touching `server/`, `web/`, or `tests/server.test.js`.
|
|
53
|
-
|
|
54
|
-
## Verification
|
|
55
|
-
|
|
56
|
-
- `node --test tests/cli.test.js` exits 0.
|
|
57
|
-
- A higher-priority later-submitted request can take the first slot, forcing a lower-priority earlier-submitted request to the next non-overlapping slot.
|
|
58
|
-
- A request may end exactly at a window end, but any one-minute overlap with a blocked interval is rejected or moved later.
|
|
59
|
-
- Unknown resources are reported in `rejected` without aborting the whole run.
|
|
60
|
-
- Duplicate request ids are invalid input: exit `2`, one JSON error to stderr, no stdout.
|
|
61
|
-
- `git diff --stat` shows only `bin/cli.js` and `tests/cli.test.js` touched.
|
|
62
|
-
|
|
63
|
-
## Solo-headroom hypothesis
|
|
64
|
-
|
|
65
|
-
A capable solo_claude baseline is expected to miss global priority ordering
|
|
66
|
-
across resources while preserving blocked-interval earliest-fit placement;
|
|
67
|
-
observable command `node "$BENCH_FIXTURE_DIR/verifiers/priority-blocked.js"` exposes the miss.
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
Add a `schedule` command to `bench-cli` so users can run `bench-cli schedule --input <path>` with a JSON file containing resources and appointment requests. It should assign requests to resource availability windows using priority, submitted order, blocked intervals, and earliest-fit placement, then print one exact JSON result with `scheduled` and `rejected` arrays.
|
|
2
|
-
|
|
3
|
-
The input has resources with `id`, `windows`, and `blocked`, and requests with `id`, `resource`, `start`, `duration_min`, `priority`, and `submitted_at`. Times are same-day `HH:MM` values. Process requests by priority descending, then submitted_at ascending, then id ascending. A placement must stay on the requested resource, start no earlier than the requested start, fit inside one window, avoid blocked intervals, and avoid already accepted requests.
|
|
4
|
-
|
|
5
|
-
On success, stdout must be exactly parseable JSON and stderr must be empty. `scheduled` rows must be ordered by actual scheduled start time, then resource id, then request id. `rejected` rows must stay in original request input order. Invalid input, duplicate request ids, invalid times, bad durations, or file-read failures should exit `2`, print exactly one JSON error object to stderr, and print nothing to stdout.
|
|
6
|
-
|
|
7
|
-
Update `tests/cli.test.js` so existing tests still pass and add at least two scheduler tests: one success case and one rejection case. Do not use silent catches in implementation or test cleanup; use explicit safe primitives such as `fs.rmSync(path, { force: true })` instead of `catch { /* ignore */ }`. No new npm dependencies. Only touch `bin/cli.js` and `tests/cli.test.js`.
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
const assert = require('node:assert');
|
|
3
|
-
const { execFileSync, spawnSync } = require('node:child_process');
|
|
4
|
-
const fs = require('node:fs');
|
|
5
|
-
const os = require('node:os');
|
|
6
|
-
const path = require('node:path');
|
|
7
|
-
|
|
8
|
-
const work = process.env.BENCH_WORKDIR || process.cwd();
|
|
9
|
-
const cli = path.join(work, 'bin', 'cli.js');
|
|
10
|
-
const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'f21-errors-'));
|
|
11
|
-
|
|
12
|
-
const unknownInput = path.join(tmp, 'unknown.json');
|
|
13
|
-
fs.writeFileSync(unknownInput, JSON.stringify({
|
|
14
|
-
resources: [
|
|
15
|
-
{ id: 'r1', windows: [{ start: '10:00', end: '10:30' }], blocked: [] }
|
|
16
|
-
],
|
|
17
|
-
requests: [
|
|
18
|
-
{ id: 'unknown-first', resource: 'missing', start: '10:00', duration_min: 5, priority: 9, submitted_at: '2026-01-01T10:00:00Z' },
|
|
19
|
-
{ id: 'too-long', resource: 'r1', start: '10:00', duration_min: 45, priority: 8, submitted_at: '2026-01-01T10:01:00Z' },
|
|
20
|
-
{ id: 'ok', resource: 'r1', start: '10:00', duration_min: 30, priority: 7, submitted_at: '2026-01-01T10:02:00Z' }
|
|
21
|
-
]
|
|
22
|
-
}), 'utf8');
|
|
23
|
-
|
|
24
|
-
const out = execFileSync('node', [cli, 'schedule', '--input', unknownInput], {
|
|
25
|
-
cwd: work,
|
|
26
|
-
encoding: 'utf8',
|
|
27
|
-
stdio: ['ignore', 'pipe', 'pipe']
|
|
28
|
-
});
|
|
29
|
-
const parsed = JSON.parse(out);
|
|
30
|
-
assert.deepStrictEqual(parsed.scheduled, [
|
|
31
|
-
{ id: 'ok', resource: 'r1', start: '10:00', end: '10:30' }
|
|
32
|
-
]);
|
|
33
|
-
assert.deepStrictEqual(parsed.rejected, [
|
|
34
|
-
{ id: 'unknown-first', reason: 'unknown_resource' },
|
|
35
|
-
{ id: 'too-long', reason: 'no_slot' }
|
|
36
|
-
]);
|
|
37
|
-
|
|
38
|
-
const dupInput = path.join(tmp, 'dup.json');
|
|
39
|
-
fs.writeFileSync(dupInput, JSON.stringify({
|
|
40
|
-
resources: [
|
|
41
|
-
{ id: 'r1', windows: [{ start: '10:00', end: '11:00' }], blocked: [] }
|
|
42
|
-
],
|
|
43
|
-
requests: [
|
|
44
|
-
{ id: 'dup', resource: 'r1', start: '10:00', duration_min: 10, priority: 1, submitted_at: '2026-01-01T10:00:00Z' },
|
|
45
|
-
{ id: 'dup', resource: 'r1', start: '10:10', duration_min: 10, priority: 1, submitted_at: '2026-01-01T10:01:00Z' }
|
|
46
|
-
]
|
|
47
|
-
}), 'utf8');
|
|
48
|
-
const dup = spawnSync('node', [cli, 'schedule', '--input', dupInput], {
|
|
49
|
-
cwd: work,
|
|
50
|
-
encoding: 'utf8'
|
|
51
|
-
});
|
|
52
|
-
assert.strictEqual(dup.status, 2);
|
|
53
|
-
assert.strictEqual(dup.stdout, '');
|
|
54
|
-
assert.doesNotThrow(() => JSON.parse(dup.stderr));
|
|
55
|
-
console.log(JSON.stringify({ ok: true }));
|
package/benchmark/auto-resolve/fixtures/F21-cli-scheduler-priority/verifiers/priority-blocked.js
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
const assert = require('node:assert');
|
|
3
|
-
const { execFileSync } = require('node:child_process');
|
|
4
|
-
const fs = require('node:fs');
|
|
5
|
-
const os = require('node:os');
|
|
6
|
-
const path = require('node:path');
|
|
7
|
-
|
|
8
|
-
const work = process.env.BENCH_WORKDIR || process.cwd();
|
|
9
|
-
const cli = path.join(work, 'bin', 'cli.js');
|
|
10
|
-
const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'f21-schedule-'));
|
|
11
|
-
const input = path.join(tmp, 'input.json');
|
|
12
|
-
|
|
13
|
-
fs.writeFileSync(input, JSON.stringify({
|
|
14
|
-
resources: [
|
|
15
|
-
{
|
|
16
|
-
id: 'room-a',
|
|
17
|
-
windows: [{ start: '09:00', end: '10:00' }],
|
|
18
|
-
blocked: [{ start: '09:30', end: '09:40' }]
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
id: 'room-b',
|
|
22
|
-
windows: [{ start: '09:00', end: '09:45' }],
|
|
23
|
-
blocked: []
|
|
24
|
-
}
|
|
25
|
-
],
|
|
26
|
-
requests: [
|
|
27
|
-
{ id: 'low-first', resource: 'room-a', start: '09:00', duration_min: 30, priority: 1, submitted_at: '2026-01-01T09:00:00Z' },
|
|
28
|
-
{ id: 'high-second', resource: 'room-a', start: '09:00', duration_min: 30, priority: 10, submitted_at: '2026-01-01T09:05:00Z' },
|
|
29
|
-
{ id: 'edge-ok', resource: 'room-b', start: '09:15', duration_min: 30, priority: 5, submitted_at: '2026-01-01T09:01:00Z' },
|
|
30
|
-
{ id: 'blocked-one-minute', resource: 'room-a', start: '09:29', duration_min: 2, priority: 4, submitted_at: '2026-01-01T09:02:00Z' }
|
|
31
|
-
]
|
|
32
|
-
}), 'utf8');
|
|
33
|
-
|
|
34
|
-
const stdout = execFileSync('node', [cli, 'schedule', '--input', input], {
|
|
35
|
-
cwd: work,
|
|
36
|
-
encoding: 'utf8',
|
|
37
|
-
stdio: ['ignore', 'pipe', 'pipe']
|
|
38
|
-
});
|
|
39
|
-
const parsed = JSON.parse(stdout);
|
|
40
|
-
assert.deepStrictEqual(parsed.scheduled, [
|
|
41
|
-
{ id: 'high-second', resource: 'room-a', start: '09:00', end: '09:30' },
|
|
42
|
-
{ id: 'edge-ok', resource: 'room-b', start: '09:15', end: '09:45' },
|
|
43
|
-
{ id: 'blocked-one-minute', resource: 'room-a', start: '09:40', end: '09:42' }
|
|
44
|
-
]);
|
|
45
|
-
assert.deepStrictEqual(parsed.rejected, [
|
|
46
|
-
{ id: 'low-first', reason: 'no_slot' }
|
|
47
|
-
]);
|
|
48
|
-
console.log(JSON.stringify({ ok: true }));
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
# F22 CLI ledger close
|
|
2
|
-
|
|
3
|
-
## Failure mode
|
|
4
|
-
|
|
5
|
-
This fixture detects finance-style reconciliation mistakes: applying duplicate
|
|
6
|
-
transactions twice, silently accepting conflicting duplicate ids, validating
|
|
7
|
-
only while mutating balances, rejecting negative balances that are explicitly
|
|
8
|
-
allowed, or producing nondeterministic account ordering.
|
|
9
|
-
|
|
10
|
-
## Pipeline phase target
|
|
11
|
-
|
|
12
|
-
PLAN must separate validation, idempotency, chronological application, and
|
|
13
|
-
output formatting. IMPLEMENT must keep cents as integers and avoid fallback
|
|
14
|
-
error handling. VERIFY should catch duplicate-id counterexamples and negative
|
|
15
|
-
balance behavior.
|
|
16
|
-
|
|
17
|
-
## Why existing fixtures do not cover it
|
|
18
|
-
|
|
19
|
-
F16 covers order quote arithmetic, but not ledger idempotency or full-input
|
|
20
|
-
validation before mutation. F21 covers interval scheduling. Server fixtures
|
|
21
|
-
cover API behavior rather than CLI reconciliation.
|
|
22
|
-
|
|
23
|
-
## Measurement status
|
|
24
|
-
|
|
25
|
-
Headroom runs reject F22 as full-pipeline pair-lift evidence. In
|
|
26
|
-
`20260507-f21-f22-full-pipeline-pair`, F22 scored bare 91 / solo_claude 98 and
|
|
27
|
-
failed the headroom gate. In `20260508-f22-exact-error-headroom`, F22 scored
|
|
28
|
-
bare 94 / solo_claude 98 after the exact-error fixture revision. Keep it as a ledger
|
|
29
|
-
reconciliation control, not as counted `solo < pair` evidence.
|
|
30
|
-
|
|
31
|
-
## Retirement
|
|
32
|
-
|
|
33
|
-
Retire or replace if both bare and solo consistently score above the headroom
|
|
34
|
-
thresholds, or if a future ledger fixture captures the same duplicate-id and
|
|
35
|
-
validation-before-mutation risks with stronger discrimination.
|