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
package/AGENTS.md
CHANGED
|
@@ -38,11 +38,11 @@ Each skill's `SKILL.md` is the source of truth for flags and workflow. Do not du
|
|
|
38
38
|
|
|
39
39
|
Engine roles: orchestrator = whichever CLI the user opened (this contract is symmetric with CLAUDE.md. If you are Codex orchestrating `/devlyn:resolve`, the phase machinery is mandatory regardless of task size; if you will not run it, say so explicitly and stop — do not silently degrade to ad-hoc execution); legacy executor (with optional separate worker/primary/pair profiles) uses the canonical skill's orchestrator-supported default, overridable per run with `--engine <name>` or durably via machine-local `.devlyn/engines.json` `{"executor": "<name>", "pair_judge_priority": ["<name>", ...]}`; PLAN is orchestrator-fixed and never inherits `--engine` or the executor pin; pair judge = first available OTHER engine, default for VERIFY whenever available; risk probes remain conditional and --no-pair opts out. Pins fail closed (`BLOCKED:<engine>-unavailable` / `BLOCKED:invalid-engine-config`); new engines plug in by shipping `_shared/adapters/<name>.md`. `/devlyn:engines` (no args) shows the role table + detected engines; `executor <name>` / `pair <name>,...` / `clear` manage the pins. The executor pin binds the orchestrator in plain conversation too, not only inside a skill run: when you would implement directly and executor is pinned to a non-default engine, route that work through the pin — via `/devlyn:resolve` (reads it at PHASE 0) or by delegating to that engine; no pin / no file → use the canonical skill's orchestrator-supported default. The pair-judge pin stays pipeline-scoped. `/devlyn:engines role` configures explicit engine/model/effort for supported worker and judge routes; `/devlyn:resolve --role-config <path>` overrides roles for one run. Canonical skills define precedence, evidence and unsupported-route errors; absent profiles preserve existing defaults.
|
|
40
40
|
|
|
41
|
-
Conversational entry: Before loading a workflow or writing files, inspect the requested change and relevant callers/tests. Quoted phase names, past logs and skill-file paths are context, not an instruction to invoke that workflow; follow the current user request. Default to direct execution when inspection makes the requested behavior, affected boundaries and verification tractable in the current context, including bounded multi-file work. Preserve requested behavior, scope, explicit constraints and the executor pin; make scoped edits, run required checks, review the final diff, and report changes with evidence. One concise route/check explanation suffices; ordinary direct work needs no spec, pipeline state, phase workers or extra approval. For direct/full/queue work, the outer owner reads `references/task-completion.md` relative to the installed `devlyn:resolve` skill's directory: prospective task-branch ownership (linked worktree
|
|
41
|
+
Conversational entry: Before loading a workflow or writing files, inspect the requested change and relevant callers/tests. Quoted phase names, past logs and skill-file paths are context, not an instruction to invoke that workflow; follow the current user request. Default to direct execution when inspection makes the requested behavior, affected boundaries and verification tractable in the current context, including bounded multi-file work. Preserve requested behavior, scope, explicit constraints and the executor pin; make scoped edits, run required checks, review the final diff, and report changes with evidence. One concise route/check explanation suffices; ordinary direct work needs no spec, pipeline state, phase workers or extra approval. For direct/full/queue work, the outer owner reads `references/task-completion.md` relative to the installed `devlyn:resolve` skill's directory: prospective task-branch ownership (own linked worktree), scoped commit acceptance, then PR/merge and recoverable owned-resource cleanup after required archive/queue commits. Local-only/no-push wins; delivery pending/failure stays separate from product verification.
|
|
42
42
|
|
|
43
43
|
Use full `/devlyn:resolve` automatically only when inspection identifies interacting requirements or verification work too complex to manage reliably in the current context, such as coupled durable state, concurrent ownership and failure recovery across boundaries. Name the concrete interaction or verification gap. Domain labels (security/auth/payment/persistence/concurrency/API), file count and a spec document alone do not trigger it. Investigate or clarify missing intent/access first; a pipeline cannot supply them. Direct work still requires risk-proportionate checks and independent review for consequential changes. Explicit resolve (even small), explicit spec-mode workflows and queue drains retain all canonical phases, independent verification, pins and failure handling. If the full-route condition emerges mid-edit, carry the existing delta into its scope/evidence; do not reset the baseline or reconfirm existing authorization.
|
|
44
44
|
|
|
45
|
-
Full-route handoff + loop engineering: the orchestrating model — not the user — invokes the skills. `/devlyn:queue` fronts the intent queue (`docs/specs/queue.md`): no args = status, `add <intent>`, `drain` = serial unattended drain per the contract below. Work selected for full resolve is written to `docs/specs/<id>/spec.md` (always a spec file — the user's reviewed contract; free-form large assumes-and-logs instead of halting, zero-scope-signal goals still halt to ideate), summarized once for user review, then run hands-free via `--spec`. Outer loop per task: before the first full run, commit the scoped queue-item delta (when applicable) and linked spec bundle; findings-backed verdicts (NEEDS_WORK,
|
|
45
|
+
Full-route handoff + loop engineering: the orchestrating model — not the user — invokes the skills. `/devlyn:queue` fronts the intent queue (`docs/specs/queue.md`): no args = status, `add <intent>`, `drain` = serial unattended drain per the contract below. Work selected for full resolve is written to `docs/specs/<id>/spec.md` (always a spec file — the user's reviewed contract; free-form large assumes-and-logs instead of halting, zero-scope-signal goals still halt to ideate), summarized once for user review, then run hands-free via `--spec`. Outer loop per task: before the first full run, commit the scoped queue-item delta (when applicable) and linked spec bundle; findings-backed verdicts (NEEDS_WORK, BLOCKED:repair-budget-exhausted) get a committed spec amendment before re-run, max 3 iterations; infrastructure / invalid-input / engine-availability / implement-empty BLOCKED verdicts surface immediately. Unattended queue drain (`docs/specs/queue.md`, strictly serial): assumptions may only take scope-narrowing, reversible, non-user-visible defaults — material ambiguity marks the item `[F] needs-review`; commit every terminal `[x]` / `[F]` transition before advancing. The canonical commit order is `config/skills/devlyn:resolve/references/outer-loop.md`.
|
|
46
46
|
|
|
47
47
|
## Subtractive-First Editing
|
|
48
48
|
|
package/CLAUDE.md
CHANGED
|
@@ -51,7 +51,7 @@ Each skill's `SKILL.md` is the source of truth for its flags and workflow — do
|
|
|
51
51
|
|
|
52
52
|
### Conversational entry + full-route handoff
|
|
53
53
|
|
|
54
|
-
Before loading a workflow or writing files, inspect the requested change and relevant callers/tests. Quoted phase names, past logs and skill-file paths are context, not an instruction to invoke that workflow; follow the current user request. Default to direct execution when inspection makes the requested behavior, affected boundaries and verification tractable in the current context, including bounded multi-file work. Preserve requested behavior, scope, explicit constraints and the executor pin; make scoped edits, run required checks, review the final diff, and report changes with evidence. One concise route/check explanation suffices; ordinary direct work needs no spec, pipeline state, phase workers or extra approval. For direct/full/queue work, the outer owner reads `references/task-completion.md` relative to the installed `devlyn:resolve` skill's directory: prospective task-branch ownership (linked worktree
|
|
54
|
+
Before loading a workflow or writing files, inspect the requested change and relevant callers/tests. Quoted phase names, past logs and skill-file paths are context, not an instruction to invoke that workflow; follow the current user request. Default to direct execution when inspection makes the requested behavior, affected boundaries and verification tractable in the current context, including bounded multi-file work. Preserve requested behavior, scope, explicit constraints and the executor pin; make scoped edits, run required checks, review the final diff, and report changes with evidence. One concise route/check explanation suffices; ordinary direct work needs no spec, pipeline state, phase workers or extra approval. For direct/full/queue work, the outer owner reads `references/task-completion.md` relative to the installed `devlyn:resolve` skill's directory: prospective task-branch ownership (own linked worktree), scoped commit acceptance, then PR/merge and recoverable owned-resource cleanup after required archive/queue commits. Local-only/no-push wins; delivery pending/failure stays separate from product verification.
|
|
55
55
|
|
|
56
56
|
Use full `/devlyn:resolve` automatically only when inspection identifies interacting requirements or verification work too complex to manage reliably in the current context, such as coupled durable state, concurrent ownership and failure recovery across boundaries. Name the concrete interaction or verification gap. Domain labels (security/auth/payment/persistence/concurrency/API), file count and a spec document alone do not trigger it. Investigate or clarify missing intent/access first; a pipeline cannot supply them. Direct work still requires risk-proportionate checks and independent review for consequential changes. Explicit resolve (even small), explicit spec-mode workflows and queue drains retain all canonical phases, independent verification, pins and failure handling. If the full-route condition emerges mid-edit, carry the existing delta into its scope/evidence; do not reset the baseline or reconfirm existing authorization.
|
|
57
57
|
|
|
@@ -60,7 +60,7 @@ The user does not invoke skills manually; the orchestrating model does. For work
|
|
|
60
60
|
1. Write the agreed contract to `docs/specs/<id>/spec.md` (+ `spec.expected.json` when mechanical verifications exist). Use a spec file for the selected work — a written spec is the user's reviewed contract; free-form large now assumes-and-logs instead of halting (zero-scope-signal goals still halt to ideate).
|
|
61
61
|
2. Present a one-screen plan-contract summary — the user's single review checkpoint, BEFORE the pipeline starts.
|
|
62
62
|
3. On go-ahead, commit the scoped queue-item delta (when applicable) and linked spec bundle, then invoke `/devlyn:resolve --spec <path>` hands-free to completion.
|
|
63
|
-
4. **Per-task outer loop**: read the terminal verdict. Successful normal-run archive → outer-owner completion per the canonical task-completion reference, after any terminal queue commit. Verdicts backed by spec/verification findings (NEEDS_WORK,
|
|
63
|
+
4. **Per-task outer loop**: read the terminal verdict. Successful normal-run archive → outer-owner completion per the canonical task-completion reference, after any terminal queue commit. Verdicts backed by spec/verification findings (NEEDS_WORK, BLOCKED:repair-budget-exhausted) → adjudicate the findings, amend the spec (recorded in the spec file; spec stays read-only inside a run), commit that scoped amendment, then re-invoke — at most 3 outer iterations, then surface with the findings trail. Infrastructure, invalid-input, engine-availability, and implement-empty BLOCKED verdicts are not spec-amendable: surface immediately. Every iteration re-enters through committed durable artifacts (spec, findings, run archive), never conversation memory.
|
|
64
64
|
|
|
65
65
|
**Intent queue (unattended drain)**: the user stacks intents in `docs/specs/queue.md` (ordered checklist; `/devlyn:queue` is the front-end — no args shows status, `add <intent>` appends, `drain` starts the serial drain). Drain strictly serially — per item: spec it, commit the scoped owner baseline, run the outer loop, mark `[x]` done or `[F]` blocked with reason, commit that terminal transition, then complete eligible delivery once. Retain PR/pending workspaces; unavailable separate safe placement stops the drain with remaining items pending. A product-blocked item otherwise never halts the queue. The queue entry is the user's go-ahead, so assume-and-log replaces the interactive checkpoint — but unattended assumptions may only take scope-narrowing, reversible, non-user-visible defaults. Material ambiguity (user-visible behavior, data/state semantics, new files/scripts/flags, implementation surface) → mark `[F] needs-review`, commit it, and move on. End the drain with a per-item product verdict, separate delivery status/URL/resume and assumptions report. The canonical commit order is `config/skills/devlyn:resolve/references/outer-loop.md`.
|
|
66
66
|
|
package/README.md
CHANGED
|
@@ -84,27 +84,14 @@ PLAN → IMPLEMENT → BUILD_GATE → CLEANUP → VERIFY (fresh subagent
|
|
|
84
84
|
Common flags: `--engine claude|codex|omp` (default: the orchestrator-supported default), `--role-config <path>` (one-run worker/judge profiles, see below), `--bypass build-gate,cleanup`, `--pair-verify` (force pair-mode JUDGE in VERIFY), `--no-pair` (intentional solo VERIFY), `--risk-probes` / `--no-risk-probes`, `--perf` (per-phase timing).
|
|
85
85
|
`--pair-verify` and `--no-pair` are mutually exclusive; using both stops with `BLOCKED:invalid-flags`.
|
|
86
86
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
golden fixture, risk-probe, or pair-evidence candidate must also include
|
|
96
|
-
`solo ceiling avoidance`, mention `solo_claude`, and name the concrete
|
|
97
|
-
difference from rejected or solo-saturated controls such as `S2`-`S6`; without
|
|
98
|
-
that, `/devlyn:resolve` stops with `BLOCKED:solo-ceiling-avoidance-required`.
|
|
99
|
-
|
|
100
|
-
Accepted tasks default to owner completion: scoped commit → push → PR → normal
|
|
101
|
-
protected merge → recoverable cleanup of prospectively owned resources. Set
|
|
102
|
-
`git config --local devlyn.completionMode pr` to stop at a PR, or `auto` to restore
|
|
103
|
-
the default; `task-complete.py complete --mode auto|pr` overrides one task.
|
|
104
|
-
Local-only/no-push instructions take precedence. Linked worktrees are optional;
|
|
105
|
-
existing branches cannot be adopted. Full runs require successful archive before
|
|
106
|
-
delivery; direct tasks use their actual checks and root acceptance. Verify-only
|
|
107
|
-
never publishes. Pending checks or unsupported merge policy retain resources and
|
|
87
|
+
Each task gets its own linked worktree; accepted tasks default to scoped commit → push → PR
|
|
88
|
+
→ merge when the repository allows it (otherwise the PR waits for a person). After the
|
|
89
|
+
PR merges, the worktree and branch its session released are cleaned; anything in use is
|
|
90
|
+
kept. Set `git config --local devlyn.completionMode pr` to stop at the PR; `task-complete.py complete --mode auto|pr`
|
|
91
|
+
overrides one task. Local-only/no-push instructions take precedence; existing
|
|
92
|
+
branches cannot be adopted. Full runs require successful archive before delivery;
|
|
93
|
+
direct tasks use their actual checks and root acceptance. Verify-only never
|
|
94
|
+
publishes. Pending checks or unsupported merge policy retain resources and
|
|
108
95
|
report a receipt-based resume command separately from product verification.
|
|
109
96
|
See [task completion](config/skills/devlyn:resolve/references/task-completion.md)
|
|
110
97
|
for allocation, acceptance, writer cessation and recovery.
|
|
@@ -157,74 +144,6 @@ Pin roles durably with `/devlyn:engines` (no args shows the role table + detecte
|
|
|
157
144
|
|
|
158
145
|
If an engine is absent when explicitly selected by flag, pin, or role profile, or OTHER engine is absent under `--pair-verify`, the harness stops with `BLOCKED:<engine>-unavailable` and prints setup guidance. Automatic VERIFY absence is a reported solo route. Use `--no-pair` only when intentionally accepting solo VERIFY; use `--no-risk-probes` only when intentionally disabling automatic high-risk probes.
|
|
159
146
|
|
|
160
|
-
### Benchmark score runs
|
|
161
|
-
|
|
162
|
-
Use the benchmark CLI when a change claims `solo_claude < pair`. The score-focused runners print the run id, startup gate lines, blind-judge score tables, fixture pair margins, average pair margin, wall-time ratio, and failure reasons:
|
|
163
|
-
|
|
164
|
-
```bash
|
|
165
|
-
npx devlyn-cli benchmark headroom --min-fixtures 3 F16-cli-quote-tax-rules F23-cli-fulfillment-wave F25-cli-cart-promotion-rules
|
|
166
|
-
npx devlyn-cli benchmark recent
|
|
167
|
-
npx devlyn-cli benchmark recent --out-md /tmp/devlyn-recent-benchmark.md
|
|
168
|
-
npx devlyn-cli benchmark frontier --out-md /tmp/devlyn-pair-frontier.md
|
|
169
|
-
npx devlyn-cli benchmark audit --out-dir /tmp/devlyn-benchmark-audit
|
|
170
|
-
npx devlyn-cli benchmark audit-headroom --out-json /tmp/devlyn-headroom-audit.json
|
|
171
|
-
npx devlyn-cli benchmark pair --min-fixtures 3 --max-pair-solo-wall-ratio 3 F16-cli-quote-tax-rules F23-cli-fulfillment-wave F25-cli-cart-promotion-rules
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
`benchmark recent` prints a compact, wrap-safe snapshot of the current local
|
|
175
|
-
pair evidence: status counts, pair-lift aggregates, and one card per passing
|
|
176
|
-
pair-evidence fixture. It intentionally avoids wide Markdown tables, so the
|
|
177
|
-
same output stays readable in narrow terminals, PR comments, and release notes.
|
|
178
|
-
`benchmark frontier` also prints a stdout score summary for existing complete pair
|
|
179
|
-
evidence rows, including pair arm, trigger reasons, average/minimum pair margin,
|
|
180
|
-
and wall ratio, plus row-level verdicts even when `--out-json` or `--out-md`
|
|
181
|
-
writes an artifact. Markdown frontier artifacts include a `Triggers` column.
|
|
182
|
-
Full-pipeline pair gate artifacts record `require_hypothesis_trigger` in JSON
|
|
183
|
-
and include a Markdown `Hypothesis trigger` column, so strict regenerated
|
|
184
|
-
evidence shows whether each row carried `spec.solo_headroom_hypothesis`.
|
|
185
|
-
`benchmark audit` is the provider-free release/handoff guard: it writes
|
|
186
|
-
`audit.json` with the frontier summary, artifact map, and compact trigger-backed verdict-bearing `pair_evidence_rows`
|
|
187
|
-
(each row carries `pair_trigger_eligible: true`, non-empty `pair_trigger_reasons`, `pair_trigger_has_canonical_reason: true`, and `pair_trigger_has_hypothesis_reason`; the audit fails rows missing trigger reasons or missing actionable solo-headroom hypotheses in fixture `spec.md` whose observable command matches `expected.json`), runs the frontier with
|
|
188
|
-
`--fail-on-unmeasured`, requires at least four fixtures with passing pair evidence,
|
|
189
|
-
revalidates frontier `verdict: PASS`, zero unmeasured candidates, and revalidates `pair_mode: true`,
|
|
190
|
-
the default 5-point pair margin, and 3x pair/solo wall ratio, then
|
|
191
|
-
audits failed headroom results. The audit stdout also prints
|
|
192
|
-
`headroom_rejections=...`, `pair_evidence_quality=...`,
|
|
193
|
-
`pair_trigger_reasons=...`, `pair_evidence_hypotheses=...`, and
|
|
194
|
-
`pair_evidence_hypothesis_triggers=...` handoff rows, plus
|
|
195
|
-
`pair_trigger_historical_aliases=...` when archived evidence includes legacy
|
|
196
|
-
trigger aliases and `pair_evidence_hypothesis_trigger_gaps=...` when documented
|
|
197
|
-
hypotheses have not yet propagated into trigger reasons, with the rejected-fixture
|
|
198
|
-
coverage counts plus actual minimum pair margin, maximum pair/solo wall ratio,
|
|
199
|
-
and canonical trigger reason coverage plus row-match status.
|
|
200
|
-
The compact evidence row count must match the frontier evidence count,
|
|
201
|
-
`checks.frontier_stdout` records summary, aggregate, final-verdict, expected, printed score-row, trigger-visible row, and hypothesis-trigger-visible row counts,
|
|
202
|
-
`checks.headroom_rejections` records child verdict plus unrecorded/unsupported counts,
|
|
203
|
-
`checks.pair_evidence_quality` records the same quality thresholds from the compact rows,
|
|
204
|
-
`checks.pair_trigger_reasons` records canonical/historical-alias/exposed/total trigger-reason row counts, fixture-level historical alias details, summary count, and row-match status,
|
|
205
|
-
`checks.pair_evidence_hypotheses` records documented/total pair-evidence hypothesis row counts,
|
|
206
|
-
and `checks.pair_evidence_hypothesis_triggers` records whether documented hypotheses also appear as `spec.solo_headroom_hypothesis` trigger reasons plus fixture-level gap details
|
|
207
|
-
so incomplete or low-quality local score artifacts cannot inflate the claim.
|
|
208
|
-
Add `--require-hypothesis-trigger` to turn those hypothesis-trigger gaps from
|
|
209
|
-
archived-evidence WARN rows into release-blocking FAIL rows for newly
|
|
210
|
-
regenerated pair evidence.
|
|
211
|
-
|
|
212
|
-
```bash
|
|
213
|
-
npx devlyn-cli benchmark audit --require-hypothesis-trigger --out-dir /tmp/devlyn-benchmark-audit-strict
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
Historical trigger aliases are only reported for archived artifact review; new
|
|
217
|
-
current pair-evidence gates fail historical-only or unknown trigger reasons and
|
|
218
|
-
require at least one canonical `pair_trigger.reasons` entry.
|
|
219
|
-
`benchmark audit-headroom` fails if an active failed headroom fixture is missing
|
|
220
|
-
from both rejected registry and passing pair evidence.
|
|
221
|
-
Headroom runs use the current claim gate: `bare <= 60`, `solo_claude <= 80`,
|
|
222
|
-
and the default 5-point `bare`/`solo_claude` headroom margins before spending a pair arm.
|
|
223
|
-
Add `--dry-run` to either score runner to validate args, fixture ids, minimum
|
|
224
|
-
fixture count, and the replay command without running arms or judges. Dry-runs
|
|
225
|
-
and lint prove wiring only; real score claims must cite the run id and fixture
|
|
226
|
-
ids.
|
|
227
|
-
|
|
228
147
|
### Migration from earlier versions
|
|
229
148
|
|
|
230
149
|
Reinstall with the new version to refresh instructions and skills for the selected
|
|
@@ -260,19 +179,6 @@ Earlier versions of devlyn-cli shipped 16+ slash commands. The iter-0034 Phase 4
|
|
|
260
179
|
|
|
261
180
|
---
|
|
262
181
|
|
|
263
|
-
## Auto-Activated Skills
|
|
264
|
-
|
|
265
|
-
These activate automatically — no commands needed. They shape how Claude thinks during relevant tasks.
|
|
266
|
-
|
|
267
|
-
| Skill | Activates During |
|
|
268
|
-
|---|---|
|
|
269
|
-
| `root-cause-analysis` | Debugging — enforces 5 Whys, evidence standards |
|
|
270
|
-
| `code-review-standards` | Reviews — severity framework, approval criteria |
|
|
271
|
-
| `ui-implementation-standards` | UI work — design fidelity, accessibility, responsiveness |
|
|
272
|
-
| `code-health-standards` | Maintenance — dead code prevention, complexity thresholds |
|
|
273
|
-
|
|
274
|
-
---
|
|
275
|
-
|
|
276
182
|
## Optional Add-ons
|
|
277
183
|
|
|
278
184
|
Selected during install. Run `npx devlyn-cli` again to add more.
|
|
@@ -292,6 +198,10 @@ Selected during install. Run `npx devlyn-cli` again to add more.
|
|
|
292
198
|
| `devlyn:pencil-pull` | Pull Pencil designs into code |
|
|
293
199
|
| `devlyn:pencil-push` | Push codebase UI to Pencil canvas |
|
|
294
200
|
| `devlyn:reap` | Safely reap orphaned MCP / codex / Superset child processes |
|
|
201
|
+
| `code-health-standards` | Maintainability standards — dead code, dependencies, complexity, naming |
|
|
202
|
+
| `code-review-standards` | Severity framework and approval criteria for reviews |
|
|
203
|
+
| `root-cause-analysis` | Evidence-first why-chain debugging |
|
|
204
|
+
| `ui-implementation-standards` | UI quality bar — design tokens, accessibility, state coverage, responsive layout |
|
|
295
205
|
|
|
296
206
|
</details>
|
|
297
207
|
|
package/bin/devlyn.js
CHANGED
|
@@ -13,8 +13,7 @@ const { updateInstructions, InstructionError } = require('./instructions');
|
|
|
13
13
|
|
|
14
14
|
// The devlyn skill bundle installed into every skill-capable agent's loader
|
|
15
15
|
// directory. Single source of truth so codex/omp/pi stay in lockstep — adding a
|
|
16
|
-
// skill here installs it everywhere.
|
|
17
|
-
// ui-*) stay Claude-core-only, matching the pre-existing Codex bundle.
|
|
16
|
+
// skill here installs it everywhere.
|
|
18
17
|
const DEVLYN_CORE_SKILLS = ['devlyn:resolve', 'devlyn:ideate', 'devlyn:design-ui', 'devlyn:engines', 'devlyn:queue', '_shared'];
|
|
19
18
|
const DEVLYN_SKILL_DIR_STAMP = '__DEVLYN_SKILL_DIR__';
|
|
20
19
|
const DEVLYN_INSTALL_MARKER = '.devlyn-install.json';
|
|
@@ -169,6 +168,11 @@ const DEPRECATED_DIRS = [
|
|
|
169
168
|
// upgrade so users only have them if they opt in via the interactive
|
|
170
169
|
// installer (matches the pencil-pull / pencil-push pattern).
|
|
171
170
|
'skills/devlyn:reap',
|
|
171
|
+
// 0221 Session 1: standards skills moved to optional-skills/ (opt-in).
|
|
172
|
+
'skills/code-health-standards',
|
|
173
|
+
'skills/code-review-standards',
|
|
174
|
+
'skills/root-cause-analysis',
|
|
175
|
+
'skills/ui-implementation-standards',
|
|
172
176
|
// Deleted entirely on 2026-05-14 (devlyn:team-design-ui merged into
|
|
173
177
|
// devlyn:design-ui; devlyn:design-system removed outright). Entries kept
|
|
174
178
|
// so users who previously opted in get their stale copies purged on upgrade.
|
|
@@ -237,6 +241,10 @@ const OPTIONAL_ADDONS = [
|
|
|
237
241
|
{ name: 'devlyn:pencil-pull', desc: 'Pull Pencil designs into code with exact visual fidelity', type: 'local' },
|
|
238
242
|
{ name: 'devlyn:pencil-push', desc: 'Push codebase UI to Pencil canvas for design sync', type: 'local' },
|
|
239
243
|
{ name: 'devlyn:reap', desc: 'Safely reap orphaned MCP / codex / Superset child processes left behind by long Claude sessions', type: 'local' },
|
|
244
|
+
{ name: 'code-health-standards', desc: 'Maintainability standards — dead code, dependencies, complexity, naming, hygiene', type: 'local' },
|
|
245
|
+
{ name: 'code-review-standards', desc: 'Severity framework and approval criteria for reviewing a change', type: 'local' },
|
|
246
|
+
{ name: 'root-cause-analysis', desc: 'Evidence-first why-chain debugging to the actionable root cause', type: 'local' },
|
|
247
|
+
{ name: 'ui-implementation-standards', desc: 'UI quality bar — design tokens, WCAG 2.1 AA, state coverage, responsive layout', type: 'local' },
|
|
240
248
|
// External skill packs (installed via npx skills add)
|
|
241
249
|
{ name: 'vercel-labs/agent-skills', desc: 'React, Next.js, React Native best practices', type: 'external' },
|
|
242
250
|
{ name: 'supabase/agent-skills', desc: 'Supabase integration patterns', type: 'external' },
|
|
@@ -660,7 +668,7 @@ function detectOtherCLIs() {
|
|
|
660
668
|
return detected;
|
|
661
669
|
}
|
|
662
670
|
|
|
663
|
-
// Install
|
|
671
|
+
// Install DEVLYN_CORE_SKILLS into a CLI's
|
|
664
672
|
// global skills directory (e.g. ~/.codex/skills/). Returns count of skills
|
|
665
673
|
// copied. Skipped silently for CLIs without a skillsDir (e.g. cursor, copilot
|
|
666
674
|
// at the time of writing — they don't have an analogous skill-loader).
|
|
@@ -722,7 +730,7 @@ function installAgentsForCLI(cliKey) {
|
|
|
722
730
|
const instr = installInstructionsForCLI(cliKey);
|
|
723
731
|
const skillsCopied = installSkillsForCLI(cliKey);
|
|
724
732
|
if (skillsCopied > 0) {
|
|
725
|
-
log(` → ${skillsCopied} skill${skillsCopied > 1 ? 's' : ''} installed (
|
|
733
|
+
log(` → ${skillsCopied} skill${skillsCopied > 1 ? 's' : ''} installed (${DEVLYN_CORE_SKILLS.join(' / ')})`, 'dim');
|
|
726
734
|
}
|
|
727
735
|
return instr || skillsCopied > 0;
|
|
728
736
|
}
|
|
@@ -928,19 +936,11 @@ function installClaudeCore() {
|
|
|
928
936
|
// Configure global Claude Code settings (~/.claude/settings.json)
|
|
929
937
|
// Project settings may refer to this same file; merge the latest bytes.
|
|
930
938
|
const globalSettings = readGlobalSettings();
|
|
931
|
-
let globalSettingsChanged = false;
|
|
932
|
-
if (!globalSettings.env.CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING) {
|
|
933
|
-
globalSettings.env.CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING = '1';
|
|
934
|
-
globalSettingsChanged = true;
|
|
935
|
-
}
|
|
936
939
|
if (!globalSettings.env.ENABLE_PROMPT_CACHING_1H) {
|
|
937
940
|
globalSettings.env.ENABLE_PROMPT_CACHING_1H = 'true';
|
|
938
|
-
globalSettingsChanged = true;
|
|
939
|
-
}
|
|
940
|
-
if (globalSettingsChanged) {
|
|
941
941
|
if (!fs.existsSync(globalClaudeDir)) fs.mkdirSync(globalClaudeDir, { recursive: true });
|
|
942
942
|
fs.writeFileSync(globalSettingsPath, JSON.stringify(globalSettings, null, 2) + '\n');
|
|
943
|
-
log(' → ~/.claude/settings.json (
|
|
943
|
+
log(' → ~/.claude/settings.json (enabled 1h prompt caching)', 'dim');
|
|
944
944
|
}
|
|
945
945
|
|
|
946
946
|
log('\n✅ Claude Code config installed!', 'green');
|
|
@@ -1022,15 +1022,6 @@ function showHelp() {
|
|
|
1022
1022
|
log(' npx devlyn-cli -y Install Claude core without prompts');
|
|
1023
1023
|
log(' npx devlyn-cli agents Install agents for detected CLIs');
|
|
1024
1024
|
log(' npx devlyn-cli agents all Install agents for all supported CLIs');
|
|
1025
|
-
log(' npx devlyn-cli benchmark Run the resolve benchmark suite');
|
|
1026
|
-
log(' npx devlyn-cli benchmark recent Show compact recent benchmark results');
|
|
1027
|
-
log(' npx devlyn-cli benchmark frontier Show pair candidate frontier scores/triggers without providers');
|
|
1028
|
-
log(' npx devlyn-cli benchmark audit Audit pair evidence readiness');
|
|
1029
|
-
log(' npx devlyn-cli benchmark audit-headroom Audit failed headroom results');
|
|
1030
|
-
log(' npx devlyn-cli benchmark headroom <fixtures...> Score bare vs solo_claude headroom');
|
|
1031
|
-
log(' npx devlyn-cli benchmark pair <fixtures...> Score solo_claude vs pair path');
|
|
1032
|
-
log(' npx devlyn-cli benchmark --bless If ship-gate passes, promote baseline');
|
|
1033
|
-
log(' npx devlyn-cli benchmark --dry-run Validate suite setup without model invocation');
|
|
1034
1025
|
log(' npx devlyn-cli --help Show this help\n');
|
|
1035
1026
|
log('Optional skills (select during install):', 'green');
|
|
1036
1027
|
OPTIONAL_ADDONS.filter((a) => a.type === 'local').forEach((skill) => {
|
|
@@ -1051,170 +1042,6 @@ function showHelp() {
|
|
|
1051
1042
|
log('');
|
|
1052
1043
|
}
|
|
1053
1044
|
|
|
1054
|
-
function showBenchmarkHelp() {
|
|
1055
|
-
log('Usage:', 'green');
|
|
1056
|
-
log(' npx devlyn-cli benchmark [suite] [options] [fixtures...]');
|
|
1057
|
-
log(' npx devlyn-cli benchmark recent [options]');
|
|
1058
|
-
log(' npx devlyn-cli benchmark frontier [options]');
|
|
1059
|
-
log(' npx devlyn-cli benchmark audit [options]');
|
|
1060
|
-
log(' npx devlyn-cli benchmark audit-headroom [options]');
|
|
1061
|
-
log(' npx devlyn-cli benchmark headroom [options] <fixtures...>');
|
|
1062
|
-
log(' npx devlyn-cli benchmark pair [options] <fixtures...>');
|
|
1063
|
-
log('');
|
|
1064
|
-
log('Score-focused runs:', 'green');
|
|
1065
|
-
log(' recent Show compact, wrap-safe recent benchmark results');
|
|
1066
|
-
log(' frontier Show active rejected/evidence/unmeasured pair candidates, scores, and triggers without providers');
|
|
1067
|
-
log(' audit Fail on unmeasured pair candidates and invalid headroom rejections');
|
|
1068
|
-
log(' Prints frontier score rows plus headroom and pair quality handoff rows');
|
|
1069
|
-
log(' audit-headroom Fail on active failed or unsupported headroom rejections');
|
|
1070
|
-
log(' headroom Score bare vs solo_claude before spending the pair arm');
|
|
1071
|
-
log(' pair Score solo_claude vs the selected pair path and print gate tables');
|
|
1072
|
-
log('');
|
|
1073
|
-
log('Shadow suite:', 'green');
|
|
1074
|
-
log(' npx devlyn-cli benchmark suite --suite shadow --dry-run');
|
|
1075
|
-
log(' Lists shadow tasks only; use headroom/pair with explicit S* ids for real measurement');
|
|
1076
|
-
log('');
|
|
1077
|
-
log('Examples:', 'green');
|
|
1078
|
-
log(' npx devlyn-cli benchmark --dry-run F1-cli-trivial-flag');
|
|
1079
|
-
log(' npx devlyn-cli benchmark recent');
|
|
1080
|
-
log(' npx devlyn-cli benchmark recent --out-md /tmp/devlyn-recent-benchmark.md');
|
|
1081
|
-
log(' npx devlyn-cli benchmark frontier --out-md /tmp/devlyn-pair-frontier.md');
|
|
1082
|
-
log(' npx devlyn-cli benchmark audit --out-dir /tmp/devlyn-benchmark-audit');
|
|
1083
|
-
log(' npx devlyn-cli benchmark audit-headroom --out-json /tmp/devlyn-headroom-audit.json');
|
|
1084
|
-
log(' npx devlyn-cli benchmark headroom --min-fixtures 3 F16-cli-quote-tax-rules F23-cli-fulfillment-wave F25-cli-cart-promotion-rules');
|
|
1085
|
-
log(' npx devlyn-cli benchmark pair --min-fixtures 3 --max-pair-solo-wall-ratio 3 F16-cli-quote-tax-rules F23-cli-fulfillment-wave F25-cli-cart-promotion-rules');
|
|
1086
|
-
log('');
|
|
1087
|
-
}
|
|
1088
|
-
|
|
1089
|
-
function showBenchmarkModeHelp(mode) {
|
|
1090
|
-
if (mode === 'recent') {
|
|
1091
|
-
log('Usage:', 'green');
|
|
1092
|
-
log(' npx devlyn-cli benchmark recent [options]');
|
|
1093
|
-
log('');
|
|
1094
|
-
log('Options:', 'green');
|
|
1095
|
-
log(' --out-json PATH');
|
|
1096
|
-
log(' --out-md PATH');
|
|
1097
|
-
log(' --fixtures-root PATH');
|
|
1098
|
-
log(' --registry PATH');
|
|
1099
|
-
log(' --results-root PATH');
|
|
1100
|
-
log(' --max-width N default: 92');
|
|
1101
|
-
log(' --min-pair-margin N default: 5');
|
|
1102
|
-
log(' --max-pair-solo-wall-ratio N default: 3');
|
|
1103
|
-
log('');
|
|
1104
|
-
log('Output:', 'green');
|
|
1105
|
-
log(' Prints compact, wrap-safe benchmark status and pair-evidence cards without wide tables');
|
|
1106
|
-
log('');
|
|
1107
|
-
log('Example:', 'green');
|
|
1108
|
-
log(' npx devlyn-cli benchmark recent');
|
|
1109
|
-
log(' npx devlyn-cli benchmark recent --out-md /tmp/devlyn-recent-benchmark.md');
|
|
1110
|
-
log('');
|
|
1111
|
-
return;
|
|
1112
|
-
}
|
|
1113
|
-
if (mode === 'frontier') {
|
|
1114
|
-
log('Usage:', 'green');
|
|
1115
|
-
log(' npx devlyn-cli benchmark frontier [options]');
|
|
1116
|
-
log('');
|
|
1117
|
-
log('Options:', 'green');
|
|
1118
|
-
log(' --out-json PATH');
|
|
1119
|
-
log(' --out-md PATH');
|
|
1120
|
-
log(' --fixtures-root PATH');
|
|
1121
|
-
log(' --registry PATH');
|
|
1122
|
-
log(' --results-root PATH');
|
|
1123
|
-
log(' --min-pair-margin N default: 5');
|
|
1124
|
-
log(' --max-pair-solo-wall-ratio N default: 3');
|
|
1125
|
-
log(' --fail-on-unmeasured');
|
|
1126
|
-
log('');
|
|
1127
|
-
log('Output:', 'green');
|
|
1128
|
-
log(' Prints pair evidence score rows with trigger reasons; --out-md includes a Triggers column');
|
|
1129
|
-
log('');
|
|
1130
|
-
log('Example:', 'green');
|
|
1131
|
-
log(' npx devlyn-cli benchmark frontier --out-md /tmp/devlyn-pair-frontier.md');
|
|
1132
|
-
log('');
|
|
1133
|
-
return;
|
|
1134
|
-
}
|
|
1135
|
-
if (mode === 'audit-headroom') {
|
|
1136
|
-
log('Usage:', 'green');
|
|
1137
|
-
log(' npx devlyn-cli benchmark audit-headroom [options]');
|
|
1138
|
-
log('');
|
|
1139
|
-
log('Options:', 'green');
|
|
1140
|
-
log(' --out-json PATH');
|
|
1141
|
-
log(' --fixtures-root PATH');
|
|
1142
|
-
log(' --registry PATH');
|
|
1143
|
-
log(' --results-root PATH');
|
|
1144
|
-
log('');
|
|
1145
|
-
log('Example:', 'green');
|
|
1146
|
-
log(' npx devlyn-cli benchmark audit-headroom --out-json /tmp/devlyn-headroom-audit.json');
|
|
1147
|
-
log('');
|
|
1148
|
-
return;
|
|
1149
|
-
}
|
|
1150
|
-
if (mode === 'audit') {
|
|
1151
|
-
log('Usage:', 'green');
|
|
1152
|
-
log(' npx devlyn-cli benchmark audit [options]');
|
|
1153
|
-
log('');
|
|
1154
|
-
log('Options:', 'green');
|
|
1155
|
-
log(' --out-dir PATH');
|
|
1156
|
-
log(' --fixtures-root PATH');
|
|
1157
|
-
log(' --registry PATH');
|
|
1158
|
-
log(' --results-root PATH');
|
|
1159
|
-
log(' --min-pair-evidence N default: 4');
|
|
1160
|
-
log(' --min-pair-margin N default: 5');
|
|
1161
|
-
log(' --max-pair-solo-wall-ratio N default: 3');
|
|
1162
|
-
log(' --require-hypothesis-trigger');
|
|
1163
|
-
log('');
|
|
1164
|
-
log('Output:', 'green');
|
|
1165
|
-
log(' Prints frontier score rows plus headroom_rejections=PASS/FAIL, pair_evidence_quality=PASS/FAIL, pair_trigger_reasons=PASS/FAIL, pair_evidence_hypotheses=PASS/FAIL, pair_evidence_hypothesis_triggers=PASS/WARN/FAIL, historical-alias, and hypothesis-trigger gap handoff rows');
|
|
1166
|
-
log('');
|
|
1167
|
-
log('Example:', 'green');
|
|
1168
|
-
log(' npx devlyn-cli benchmark audit --out-dir /tmp/devlyn-benchmark-audit');
|
|
1169
|
-
log(' npx devlyn-cli benchmark audit --require-hypothesis-trigger --out-dir /tmp/devlyn-benchmark-audit-strict');
|
|
1170
|
-
log('');
|
|
1171
|
-
return;
|
|
1172
|
-
}
|
|
1173
|
-
if (mode === 'headroom') {
|
|
1174
|
-
log('Usage:', 'green');
|
|
1175
|
-
log(' npx devlyn-cli benchmark headroom [options] <fixtures...>');
|
|
1176
|
-
log('');
|
|
1177
|
-
log('Options:', 'green');
|
|
1178
|
-
log(' --run-id ID');
|
|
1179
|
-
log(' --bare-max N default: 60');
|
|
1180
|
-
log(' --solo-max N default: 80');
|
|
1181
|
-
log(' --min-bare-headroom N default: 5');
|
|
1182
|
-
log(' --min-solo-headroom N default: 5');
|
|
1183
|
-
log(' --min-fixtures N default: 2; use 3 for F16/F23/F25 proof reruns; audit requires 4 passing evidence rows');
|
|
1184
|
-
log(' --allow-rejected-fixtures active-fixture diagnostics only');
|
|
1185
|
-
log(' --dry-run validate args/fixtures and print replay command only');
|
|
1186
|
-
log('');
|
|
1187
|
-
log('Example:', 'green');
|
|
1188
|
-
log(' npx devlyn-cli benchmark headroom --min-fixtures 3 F16-cli-quote-tax-rules F23-cli-fulfillment-wave F25-cli-cart-promotion-rules');
|
|
1189
|
-
log('');
|
|
1190
|
-
return;
|
|
1191
|
-
}
|
|
1192
|
-
if (mode === 'pair') {
|
|
1193
|
-
log('Usage:', 'green');
|
|
1194
|
-
log(' npx devlyn-cli benchmark pair [options] <fixtures...>');
|
|
1195
|
-
log('');
|
|
1196
|
-
log('Options:', 'green');
|
|
1197
|
-
log(' --run-id ID');
|
|
1198
|
-
log(' --bare-max N');
|
|
1199
|
-
log(' --solo-max N');
|
|
1200
|
-
log(' --min-bare-headroom N default: 5');
|
|
1201
|
-
log(' --min-solo-headroom N default: 5');
|
|
1202
|
-
log(' --min-fixtures N default: 2; use 3 for F16/F23/F25 proof reruns; audit requires 4 passing evidence rows');
|
|
1203
|
-
log(' --min-pair-margin N default: 5');
|
|
1204
|
-
log(' --max-pair-solo-wall-ratio N default: 3');
|
|
1205
|
-
log(' --pair-arm ARM default: l2_risk_probes; l2_gated is diagnostic');
|
|
1206
|
-
log(' --reuse-calibrated-from RUN_ID');
|
|
1207
|
-
log(' --allow-rejected-fixtures active-fixture diagnostics only');
|
|
1208
|
-
log(' --dry-run validate args/fixtures and print replay command only');
|
|
1209
|
-
log('');
|
|
1210
|
-
log('Example:', 'green');
|
|
1211
|
-
log(' npx devlyn-cli benchmark pair --min-fixtures 3 --max-pair-solo-wall-ratio 3 F16-cli-quote-tax-rules F23-cli-fulfillment-wave F25-cli-cart-promotion-rules');
|
|
1212
|
-
log('');
|
|
1213
|
-
return;
|
|
1214
|
-
}
|
|
1215
|
-
showBenchmarkHelp();
|
|
1216
|
-
}
|
|
1217
|
-
|
|
1218
1045
|
// Main
|
|
1219
1046
|
const args = process.argv.slice(2);
|
|
1220
1047
|
|
|
@@ -1234,45 +1061,6 @@ switch (command) {
|
|
|
1234
1061
|
case 'ls':
|
|
1235
1062
|
listContents();
|
|
1236
1063
|
break;
|
|
1237
|
-
case 'benchmark':
|
|
1238
|
-
case 'bench': {
|
|
1239
|
-
const benchmarkScripts = {
|
|
1240
|
-
suite: 'run-suite.sh',
|
|
1241
|
-
recent: 'recent-benchmark-summary.py',
|
|
1242
|
-
frontier: 'pair-candidate-frontier.py',
|
|
1243
|
-
audit: 'audit-pair-evidence.py',
|
|
1244
|
-
'audit-headroom': 'audit-headroom-rejections.py',
|
|
1245
|
-
headroom: 'run-headroom-candidate.sh',
|
|
1246
|
-
pair: 'run-full-pipeline-pair-candidate.sh',
|
|
1247
|
-
};
|
|
1248
|
-
let forwardedArgs = args.slice(1);
|
|
1249
|
-
if (forwardedArgs[0] === '--help' || forwardedArgs[0] === '-h') {
|
|
1250
|
-
showBenchmarkHelp();
|
|
1251
|
-
break;
|
|
1252
|
-
}
|
|
1253
|
-
let benchmarkMode = 'suite';
|
|
1254
|
-
if (forwardedArgs[0] === 'suite' || forwardedArgs[0] === 'recent' || forwardedArgs[0] === 'frontier' || forwardedArgs[0] === 'audit' || forwardedArgs[0] === 'audit-headroom' || forwardedArgs[0] === 'headroom' || forwardedArgs[0] === 'pair') {
|
|
1255
|
-
benchmarkMode = forwardedArgs[0];
|
|
1256
|
-
forwardedArgs = forwardedArgs.slice(1);
|
|
1257
|
-
}
|
|
1258
|
-
if (forwardedArgs[0] === '--help' || forwardedArgs[0] === '-h') {
|
|
1259
|
-
showBenchmarkModeHelp(benchmarkMode);
|
|
1260
|
-
break;
|
|
1261
|
-
}
|
|
1262
|
-
const runnerName = benchmarkScripts[benchmarkMode];
|
|
1263
|
-
const runner = path.join(__dirname, '..', 'benchmark', 'auto-resolve', 'scripts', runnerName);
|
|
1264
|
-
if (!fs.existsSync(runner)) {
|
|
1265
|
-
log('❌ Benchmark suite runner missing — is this a clean devlyn-cli checkout?', 'yellow');
|
|
1266
|
-
log(` Expected: ${runner}`, 'dim');
|
|
1267
|
-
process.exit(1);
|
|
1268
|
-
}
|
|
1269
|
-
const { spawnSync } = require('child_process');
|
|
1270
|
-
const env = { ...process.env, DEVLYN_BENCHMARK_CLI_SUBCOMMAND: benchmarkMode };
|
|
1271
|
-
const executable = (benchmarkMode === 'recent' || benchmarkMode === 'frontier' || benchmarkMode === 'audit' || benchmarkMode === 'audit-headroom') ? 'python3' : 'bash';
|
|
1272
|
-
const res = spawnSync(executable, [runner, ...forwardedArgs], { stdio: 'inherit', env });
|
|
1273
|
-
process.exit(res.status ?? 1);
|
|
1274
|
-
break;
|
|
1275
|
-
}
|
|
1276
1064
|
case 'agents': {
|
|
1277
1065
|
showLogo();
|
|
1278
1066
|
log('─'.repeat(44), 'dim');
|
|
@@ -131,6 +131,7 @@
|
|
|
131
131
|
"3475b34e03725d5e8ea4f2e2fbecc60e1c3ad4a89167e1bb9a26d41640eccbd7",
|
|
132
132
|
"34a09b8d6023ae5b858ec5135cae8efeabd921e3108e63e9627a222b188fe554",
|
|
133
133
|
"350aa6a3140d56a22cb4d5f2503f453ad238384150dc2b5e480fc626db33dfec",
|
|
134
|
+
"37f003566c80ead28d713e86bd6a877e2e3239302c884911f5144a896c291c17",
|
|
134
135
|
"39af5b94a2734e4fc6c943b604fde4b0d798c4a2a7b1ffb5d053ab7f22488de3",
|
|
135
136
|
"39c3033487667dc0020f9cb6c106afb000177294560be80d67b5020475aec3f6",
|
|
136
137
|
"3c38ab8745dde6391d4dda47d74fe5f8cef410c28325d43dc0dd22e8cf4ab4a7",
|
|
@@ -221,6 +222,7 @@
|
|
|
221
222
|
"9f62c5b2a94e8b5e81528ccbdb6f78d147d14882108568b2cb3b7f85212694c0",
|
|
222
223
|
"a02eb2d8d77553327fb77377dbfedeab059b2e68e0a33c469b9be54a5d55182b",
|
|
223
224
|
"a3a15249968f64085b0cec8c0826688a4c3a1e4cf09b4879054baa086d5cbca1",
|
|
225
|
+
"a4da26a46ab83815d8ca5d747c68a907ad67dad485adbc6c863b982ee23b307e",
|
|
224
226
|
"a5d6ff585d696254d6727cd1e6d7f8825881f90210eff744265e211ced715ea3",
|
|
225
227
|
"a7ff913df40945a8a16b6632214020a368119ff665953d4a07ec58330b39f101",
|
|
226
228
|
"aafc680a7ac73e100f4a17d2c4070190e68563f78614c39f4c2f58f1e291d9a9",
|
|
@@ -255,6 +257,7 @@
|
|
|
255
257
|
"caaed0b9f9f1e425dcfa45b098c9cde91fc06e50339600585bb7597dd634f636",
|
|
256
258
|
"cb72ba4857899e510a64d8365529e46593e8c69b829d0b5b90e611dd9f1fbdc0",
|
|
257
259
|
"cc8bf51efb9ef8e5fa4134743f2d25434f4fd51595128edcfd2331dbf29d7dd5",
|
|
260
|
+
"ccacf091bab4102d7156631c6227120a661bb4ec0df514e14a59db44b7bd5dfd",
|
|
258
261
|
"ce1b0d9d0621fd057e684dc18b43156d30f589c72ed20189ea1232ea4f7ce6c6",
|
|
259
262
|
"cebacda3b11db7aa161d96b12edd6f3f790ee2850404cd42ecdf2912ed53de08",
|
|
260
263
|
"cefad7acb7dcd92777f888081aa6585b1418aa581366736fd44db68b1bd66dd0",
|
|
@@ -270,6 +273,7 @@
|
|
|
270
273
|
"ddb200267b43942de3c061b449d08cc3f73441258b74816cfe13da091377b428",
|
|
271
274
|
"dff43f9976c68267baf13f6a460f24af8e76be233c8440ac4684dc664106deae",
|
|
272
275
|
"e237f12ed08800ccc4c6eb4ae57cdd59d61198711f6a3b02dcb668aa08fddb93",
|
|
276
|
+
"e289dbab99dadb30d8315b32b8243154148c82955f238936bce4c1fe1c3ae525",
|
|
273
277
|
"e2bac40f3ff0b39726f95caaa9b19aa3b21596f165ac7a9dc68ebf42681d58cb",
|
|
274
278
|
"e3ee2da50e961046da3f5b68b0c328570307fb21a93424ae22536b8f216b55a3",
|
|
275
279
|
"e43e4b5b86044fbf7be8d7fd1e3e27cd2089bfc8243e07dc2c3fc034c19794ea",
|
|
@@ -400,6 +404,7 @@
|
|
|
400
404
|
"287fa116a8235756a8b0e28caa951a9ad981667443434e13dbfde3c23f1590e6",
|
|
401
405
|
"28c5b42a58dca1a093576c8c35369c346caaf3963e14a4702ab3330d0d93e4d4",
|
|
402
406
|
"2939f7a22fd12f3ca3fdd0a08fc52535cf25dae38b9b445aceed09dc331fc1de",
|
|
407
|
+
"2969b7a979fd58d76a2b274270edaf5c08bb8a09e1f25bae34d81a350742ecb2",
|
|
403
408
|
"2989b31e2b03781fb27bdf016db97045772eaaf7459a68728cbbfaa7df916a11",
|
|
404
409
|
"2a23d1450b104b591b0c1358c181bd3ec30c32b8e3a477c342c31272117fdc9d",
|
|
405
410
|
"2a2d82124b77fb1a077bae0a31c849e15ad4b8a3221f5252c99955dd1b835b1b",
|
|
@@ -459,6 +464,8 @@
|
|
|
459
464
|
"43fc337e91354bc672daafc86122b6f15b33c9ca71097a6a056fc55bb0fba1c4",
|
|
460
465
|
"440ddccccc9060a3f5c1a69568e95197b4238cdb4992c4de605d62d6990590e3",
|
|
461
466
|
"4428ea64057045d076c80488245cf7461d45fa7b2e966de5f65292458f96e718",
|
|
467
|
+
"447d13ec6bc76320d5d305a69c3154a707d7ca0054c170d5d8a18e8c6f7e4001",
|
|
468
|
+
"45335f760ad0ac3f1fb23ebc9d3ed4e4bf325656dadd4e9cedb9c31c12804361",
|
|
462
469
|
"4549d24fa764d8cd240c7eae696e875378590aa7a27097dfeceb90c7a4bb9291",
|
|
463
470
|
"4609f53455366937df6cbd0f2b4cd19972ebe2db4c89a470fffd44b98583a6f2",
|
|
464
471
|
"462d1647f9e1506d5fc8cd31e2ce9cccb3cba0063193a2145007126ea7e8ed59",
|
|
@@ -769,6 +776,7 @@
|
|
|
769
776
|
"e29fec7d54a144ea4867a3764fccdee6849d58d0f32eacdd56b2c317863fa1c6",
|
|
770
777
|
"e2e0fc585321ee2013cccaed95d47c49fbca71b54c67abad9080d19d70e3c1a5",
|
|
771
778
|
"e3b2f7be15a793f07cbe8e51aa2feeac51d4c67077b94e5e20bad2e14be07fc5",
|
|
779
|
+
"e468c242cc38c390f9679fca61f355848f58d51570249dfbb65b4f2e26a9dfb1",
|
|
772
780
|
"e4bafa0f553e899b65f05feabf4cbe86d8246c57cbba745eb79e6aa858f40a6b",
|
|
773
781
|
"e5160f4da789914e7f93694a55b9f80b8d06c3b0a126ff60f7627b0b418ae292",
|
|
774
782
|
"e55a62fa1a993f5df1b44d1c55ef27915938d58a1c357604f3dc150f795672df",
|
|
@@ -67,8 +67,7 @@ tool-use loop (2/3 made zero tool calls and fabricated findings), and a
|
|
|
67
67
|
|
|
68
68
|
The judge prompt must name the exact permitted command(s). Derive the prompt
|
|
69
69
|
anchor and allow-list string identically from one source, in this precedence:
|
|
70
|
-
the
|
|
71
|
-
otherwise the backticked commands in the spec's `## Verification` bullets;
|
|
70
|
+
the backticked commands in the spec's `## Verification` bullets;
|
|
72
71
|
otherwise the repo's existing test/CLI runner. If none exists, the probe
|
|
73
72
|
obligation does not arise and a static review is correct for that spec.
|
|
74
73
|
The documented `Bash(<command>)` form matches the exact command or its prefix;
|
|
@@ -110,6 +110,9 @@ BOOTSTRAP_TEMP_PATTERNS = tuple(
|
|
|
110
110
|
PER_RUN_PATTERNS += BOOTSTRAP_TEMP_PATTERNS
|
|
111
111
|
|
|
112
112
|
SAFE_RUN_ID_RE = re.compile(r"^[A-Za-z0-9_.-]+$")
|
|
113
|
+
valid_final_verdict = runpy.run_path(
|
|
114
|
+
pathlib.Path(__file__).with_name("terminal-claim-check.py")
|
|
115
|
+
)["valid_final_verdict"]
|
|
113
116
|
|
|
114
117
|
|
|
115
118
|
class ArchiveError(Exception):
|
|
@@ -173,9 +176,7 @@ def read_run_id(devlyn: pathlib.Path) -> str:
|
|
|
173
176
|
def is_completed(state: object) -> bool:
|
|
174
177
|
phases = state.get("phases") if isinstance(state, dict) else None
|
|
175
178
|
final = phases.get("final_report") if isinstance(phases, dict) else None
|
|
176
|
-
if not isinstance(final, dict) or final.get("verdict")
|
|
177
|
-
"PASS", "PASS_WITH_ISSUES", "NEEDS_WORK", "BLOCKED",
|
|
178
|
-
):
|
|
179
|
+
if not isinstance(final, dict) or not valid_final_verdict(final.get("verdict")):
|
|
179
180
|
return False
|
|
180
181
|
timestamp = final.get("completed_at")
|
|
181
182
|
if not isinstance(timestamp, str) or not re.fullmatch(
|
|
@@ -566,6 +567,16 @@ def completion_self_test() -> None:
|
|
|
566
567
|
print("PASS archive completion: 8 terminal forms; malformed/unfinished/residue retained beyond keep-10")
|
|
567
568
|
|
|
568
569
|
|
|
570
|
+
def full_terminal_verdict_completion_self_test() -> None:
|
|
571
|
+
timestamp = "2026-09-06T00:00:00Z"
|
|
572
|
+
assert is_completed({"phases": {"final_report": {
|
|
573
|
+
"verdict": "BLOCKED:repair-budget-exhausted", "completed_at": timestamp,
|
|
574
|
+
}}})
|
|
575
|
+
assert not is_completed({"phases": {"final_report": {
|
|
576
|
+
"verdict": "BLOCKED:", "completed_at": timestamp,
|
|
577
|
+
}}})
|
|
578
|
+
|
|
579
|
+
|
|
569
580
|
def self_test() -> int:
|
|
570
581
|
assert dynamic_judge_role_artifacts(pathlib.Path(".devlyn"), {"phases": {"verify": None}}) == []
|
|
571
582
|
assert dynamic_judge_role_artifacts(pathlib.Path(".devlyn"), {"phases": {}}) == []
|
|
@@ -921,6 +932,7 @@ def self_test() -> int:
|
|
|
921
932
|
else:
|
|
922
933
|
raise AssertionError("NaN archive run_id was accepted")
|
|
923
934
|
completion_self_test()
|
|
935
|
+
full_terminal_verdict_completion_self_test()
|
|
924
936
|
return 0
|
|
925
937
|
|
|
926
938
|
|