devlyn-cli 2.7.0 → 2.8.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 +9 -1
- package/CLAUDE.md +30 -11
- package/README.md +14 -2
- package/benchmark/auto-resolve/fixtures/F1-cli-trivial-flag/task.ko.txt +8 -0
- package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/NOTES.md +28 -0
- package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/RETIRED.md +15 -0
- package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/expected.json +57 -0
- package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/metadata.json +10 -0
- package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/setup.sh +50 -0
- package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/spec.md +59 -0
- package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/task.txt +9 -0
- package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/verifiers/ordered-settlement.js +88 -0
- package/benchmark/auto-resolve/fixtures/retired/F34-cli-settle-inflight/verifiers/reject-invalid.js +45 -0
- package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/NOTES.md +30 -0
- package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/RETIRED.md +16 -0
- package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/expected.json +64 -0
- package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/metadata.json +10 -0
- package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/setup.sh +21 -0
- package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/spec.md +58 -0
- package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/task.txt +9 -0
- package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/verifiers/dup-op.js +54 -0
- package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/verifiers/priority-apply.js +82 -0
- package/benchmark/auto-resolve/fixtures/retired/F35-cli-apply-journal/verifiers/rollback.js +77 -0
- package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/NOTES.md +99 -0
- package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/RETIRED.md +18 -0
- package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/expected.json +64 -0
- package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/metadata.json +10 -0
- package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/setup.sh +4 -0
- package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/spec.md +61 -0
- package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/task.txt +9 -0
- package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/verifiers/correctness-small.js +135 -0
- package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/verifiers/scale.js +100 -0
- package/benchmark/auto-resolve/fixtures/retired/F36-cli-session-admission/verifiers/validation.js +75 -0
- package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/NOTES.md +93 -0
- package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/RETIRED.md +16 -0
- package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/expected.json +65 -0
- package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/metadata.json +10 -0
- package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/setup.sh +18 -0
- package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/spec.md +66 -0
- package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/task.txt +9 -0
- package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/verifiers/correctness-small.js +84 -0
- package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/verifiers/scale.js +184 -0
- package/benchmark/auto-resolve/fixtures/retired/F37-cli-rule-lookup/verifiers/validation.js +74 -0
- package/benchmark/auto-resolve/scripts/pair-rejected-fixtures.sh +12 -0
- package/benchmark/auto-resolve/scripts/run-fixture.sh +39 -1
- package/benchmark/auto-resolve/scripts/test-lint-fixtures.sh +1 -1
- package/bin/devlyn.js +42 -1
- package/config/skills/_shared/adapters/README.md +7 -0
- package/config/skills/_shared/adapters/claude.md +47 -0
- package/config/skills/_shared/adapters/omp.md +17 -0
- package/config/skills/_shared/archive_run.py +8 -2
- package/config/skills/_shared/codex-config.md +22 -6
- package/config/skills/_shared/engine-doctor.sh +107 -0
- package/config/skills/_shared/engine-preflight.md +18 -11
- package/config/skills/_shared/expected.schema.json +26 -0
- package/config/skills/_shared/runtime-principles.md +1 -1
- package/config/skills/_shared/spec-verify-check.py +773 -486
- package/config/skills/_shared/state-phase-write.py +374 -0
- package/config/skills/_shared/verify-merge-findings.py +177 -61
- package/config/skills/devlyn:engines/SKILL.md +47 -0
- package/config/skills/devlyn:ideate/SKILL.md +22 -3
- package/config/skills/devlyn:ideate/references/elicitation.md +2 -2
- package/config/skills/devlyn:ideate/references/from-spec-mode.md +2 -2
- package/config/skills/devlyn:ideate/references/project-mode.md +1 -1
- package/config/skills/devlyn:ideate/references/spec-template.md +15 -4
- package/config/skills/devlyn:queue/SKILL.md +26 -0
- package/config/skills/devlyn:resolve/SKILL.md +54 -24
- package/config/skills/devlyn:resolve/references/free-form-mode.md +1 -1
- package/config/skills/devlyn:resolve/references/phases/build-gate.md +2 -2
- package/config/skills/devlyn:resolve/references/phases/cleanup.md +1 -1
- package/config/skills/devlyn:resolve/references/phases/implement.md +1 -1
- package/config/skills/devlyn:resolve/references/phases/plan.md +3 -2
- package/config/skills/devlyn:resolve/references/phases/probe-derive.md +8 -0
- package/config/skills/devlyn:resolve/references/phases/verify.md +18 -9
- package/config/skills/devlyn:resolve/references/state-schema.md +10 -6
- package/optional-skills/devlyn:pencil-pull/SKILL.md +5 -0
- package/optional-skills/devlyn:pencil-push/SKILL.md +5 -0
- package/package.json +1 -1
- package/scripts/lint-skills.sh +48 -41
package/scripts/lint-skills.sh
CHANGED
|
@@ -59,6 +59,7 @@ critical_path_files=$(cat <<'EOF'
|
|
|
59
59
|
_shared/spec-verify-check.py
|
|
60
60
|
_shared/collect-codex-findings.py
|
|
61
61
|
_shared/verify-merge-findings.py
|
|
62
|
+
_shared/state-phase-write.py
|
|
62
63
|
devlyn:ideate/SKILL.md
|
|
63
64
|
devlyn:ideate/references/spec-template.md
|
|
64
65
|
devlyn:ideate/references/elicitation.md
|
|
@@ -77,6 +78,7 @@ _shared/expected.schema.json
|
|
|
77
78
|
_shared/adapters/README.md
|
|
78
79
|
_shared/adapters/claude.md
|
|
79
80
|
_shared/adapters/codex.md
|
|
81
|
+
_shared/adapters/omp.md
|
|
80
82
|
_shared/codex-config.md
|
|
81
83
|
_shared/codex-monitored.sh
|
|
82
84
|
_shared/engine-preflight.md
|
|
@@ -243,7 +245,7 @@ if [ ! -e "optional-skills/devlyn:design-ui" ]; then
|
|
|
243
245
|
else
|
|
244
246
|
bad "devlyn:design-ui must not be installed as an optional addon"
|
|
245
247
|
fi
|
|
246
|
-
if grep -Fq "const DEVLYN_CORE_SKILLS = ['devlyn:resolve', 'devlyn:ideate', 'devlyn:design-ui', '_shared'];" bin/devlyn.js \
|
|
248
|
+
if grep -Fq "const DEVLYN_CORE_SKILLS = ['devlyn:resolve', 'devlyn:ideate', 'devlyn:design-ui', 'devlyn:engines', 'devlyn:queue', '_shared'];" bin/devlyn.js \
|
|
247
249
|
&& grep -Fq "skillsToInstall: DEVLYN_CORE_SKILLS" bin/devlyn.js; then
|
|
248
250
|
ok "Codex install includes devlyn:design-ui (via shared DEVLYN_CORE_SKILLS bundle)"
|
|
249
251
|
else
|
|
@@ -394,7 +396,7 @@ if ! grep -Fq 'SAFE_RUN_ID_RE' config/skills/_shared/archive_run.py \
|
|
|
394
396
|
|| ! grep -Fq 'invalid JSON numeric constant: NaN' config/skills/_shared/archive_run.py \
|
|
395
397
|
|| ! grep -Fq '"verify.pair.findings.jsonl"' config/skills/_shared/archive_run.py \
|
|
396
398
|
|| ! grep -Fq '"verify-merge.summary.json"' config/skills/_shared/archive_run.py \
|
|
397
|
-
|| ! grep -Fq '"
|
|
399
|
+
|| ! grep -Fq '"*-judge.*"' config/skills/_shared/archive_run.py; then
|
|
398
400
|
bad "archive_run.py must safely archive pair/risk-probe evidence and reject unsafe run ids"
|
|
399
401
|
fi
|
|
400
402
|
|
|
@@ -601,9 +603,16 @@ then
|
|
|
601
603
|
else
|
|
602
604
|
bad "solo-headroom command detection constants must stay in parity"
|
|
603
605
|
fi
|
|
604
|
-
if ! grep -Fq '
|
|
605
|
-
|| ! grep -Fq '
|
|
606
|
-
|
|
606
|
+
if ! grep -Fq 'def resolve_required_risk_probe_requirements' config/skills/_shared/spec-verify-check.py \
|
|
607
|
+
|| ! grep -Fq 'def validate_required_risk_probe_requirement' config/skills/_shared/spec-verify-check.py \
|
|
608
|
+
|| ! grep -Fq 'missing required probe(s)' config/skills/_shared/spec-verify-check.py \
|
|
609
|
+
|| ! grep -Fq 'risk-probes.jsonl missing a declared required_risk_probe_requirements' config/skills/_shared/spec-verify-check.py \
|
|
610
|
+
|| ! grep -Fq 'risk-probes.jsonl covering a declared required_risk_probe_requirements' config/skills/_shared/spec-verify-check.py \
|
|
611
|
+
|| ! grep -Fq 'required_risk_probe_requirements with an unknown tag was accepted' config/skills/_shared/spec-verify-check.py \
|
|
612
|
+
|| ! grep -Fq 'required_risk_probe_requirements.derived_from not present in the' config/skills/_shared/spec-verify-check.py \
|
|
613
|
+
|| ! grep -Fq 'required_risk_probe_requirements' config/skills/_shared/expected.schema.json \
|
|
614
|
+
|| ! grep -Fq 'required_risk_probe_requirements' config/skills/devlyn:ideate/references/spec-template.md; then
|
|
615
|
+
bad "spec-verify-check.py must enforce declared required_risk_probe_requirements (iter-0049 language-neutral F3 replacement)"
|
|
607
616
|
fi
|
|
608
617
|
if ! grep -Fq 'spec.expected.json top-level array produced a traceback' config/skills/_shared/spec-verify-check.py \
|
|
609
618
|
|| ! grep -Fq 'invalid spec.expected.json produced a traceback' config/skills/_shared/spec-verify-check.py \
|
|
@@ -616,10 +625,6 @@ if ! grep -Fq 'spec.expected.json top-level array produced a traceback' config/s
|
|
|
616
625
|
|| ! grep -Fq 'has invalid JSON' config/skills/_shared/spec-verify-check.py; then
|
|
617
626
|
bad "spec-verify-check.py self-test must fail malformed spec.expected.json cleanly without traceback"
|
|
618
627
|
fi
|
|
619
|
-
if ! grep -Fq 'required.add("error_contract")' config/skills/_shared/spec-verify-check.py \
|
|
620
|
-
|| ! grep -Fq 'error_contract without exit-code evidence was accepted' config/skills/_shared/spec-verify-check.py; then
|
|
621
|
-
bad "spec-verify-check.py must require error_contract risk probes for invalid/stderr/JSON-error/exit-2 verification text"
|
|
622
|
-
fi
|
|
623
628
|
if ! grep -Fq '"asserts_named_stream_output"' config/skills/_shared/spec-verify-check.py \
|
|
624
629
|
|| ! grep -Fq '"asserts_error_payload_or_stderr"' config/skills/_shared/spec-verify-check.py \
|
|
625
630
|
|| ! grep -Fq '"asserts_nonzero_or_exit_2"' config/skills/_shared/spec-verify-check.py \
|
|
@@ -632,7 +637,6 @@ if ! grep -Fq '"asserts_named_stream_output"' config/skills/_shared/spec-verify-
|
|
|
632
637
|
fi
|
|
633
638
|
if ! grep -Fq '"http_error_contract"' config/skills/_shared/spec-verify-check.py \
|
|
634
639
|
|| ! grep -Fq 'asserts_http_error_status' config/skills/_shared/spec-verify-check.py \
|
|
635
|
-
|| ! grep -Fq 'http error text did not require http_error_contract tag' config/skills/_shared/spec-verify-check.py \
|
|
636
640
|
|| ! grep -Fq 'http_error_contract without payload evidence was accepted' config/skills/_shared/spec-verify-check.py \
|
|
637
641
|
|| ! grep -Fq 'exact error body shape_contract without exact object evidence was accepted' config/skills/_shared/spec-verify-check.py \
|
|
638
642
|
|| ! grep -Fq 'exact error body shape_contract with exact object evidence was rejected' config/skills/_shared/spec-verify-check.py \
|
|
@@ -643,55 +647,31 @@ fi
|
|
|
643
647
|
if ! grep -Fq '"uses_visible_input_key_names"' config/skills/_shared/spec-verify-check.py \
|
|
644
648
|
|| ! grep -Fq '"asserts_visible_output_key_names"' config/skills/_shared/spec-verify-check.py \
|
|
645
649
|
|| ! grep -Fq '"asserts_no_unexpected_output_keys"' config/skills/_shared/spec-verify-check.py \
|
|
646
|
-
|| ! grep -Fq '
|
|
650
|
+
|| ! grep -Fq 'shape_contract co-occurring with error_contract without' config/skills/_shared/spec-verify-check.py \
|
|
647
651
|
|| ! grep -Fq 'JSON error object shape_contract with exact object evidence was rejected' config/skills/_shared/spec-verify-check.py \
|
|
648
|
-
|| ! grep -Fq '
|
|
649
|
-
|| ! grep -Fq '
|
|
650
|
-
|| ! grep -Fq 'inline JSON object shape_contract with key evidence was rejected' config/skills/_shared/spec-verify-check.py \
|
|
651
|
-
|| ! grep -Fq 'inline JSON error text did not require shape_contract tag' config/skills/_shared/spec-verify-check.py \
|
|
652
|
-
|| ! grep -Fq 'inline JSON error shape_contract with exact object evidence was rejected' config/skills/_shared/spec-verify-check.py \
|
|
653
|
-
|| ! grep -Fq 'shape_contract without exact key evidence was accepted' config/skills/_shared/spec-verify-check.py \
|
|
652
|
+
|| ! grep -Fq 'shape_contract without any evidence was accepted' config/skills/_shared/spec-verify-check.py \
|
|
653
|
+
|| ! grep -Fq 'shape_contract with exact key evidence was rejected' config/skills/_shared/spec-verify-check.py \
|
|
654
654
|
|| ! grep -Fq '`shape_contract` when the visible text names exact keys' config/skills/devlyn:resolve/references/phases/probe-derive.md \
|
|
655
655
|
|| ! grep -Fq '`shape_contract` must' config/skills/devlyn:resolve/SKILL.md; then
|
|
656
|
-
bad "risk-probe shape contracts must require exact visible input/output key evidence when
|
|
657
|
-
fi
|
|
658
|
-
if ! grep -Fq "forbidden[ -]+window" config/skills/_shared/spec-verify-check.py \
|
|
659
|
-
|| grep -Fq "r'blocked|overlap|forbidden|window'" config/skills/_shared/spec-verify-check.py \
|
|
660
|
-
|| ! grep -Fq 'generic forbidden-pattern verification text incorrectly required boundary_overlap' config/skills/_shared/spec-verify-check.py; then
|
|
661
|
-
bad "risk-probe boundary_overlap must trigger for forbidden windows / blocked overlap, not generic forbidden pattern text"
|
|
662
|
-
fi
|
|
663
|
-
if ! grep -Fq '(?:stock|inventory|balance|availability).{0,80}(?:later|remaining|after failures)' config/skills/_shared/spec-verify-check.py \
|
|
664
|
-
|| ! grep -Fq 'stock validation error text incorrectly required prior_consumption' config/skills/_shared/spec-verify-check.py; then
|
|
665
|
-
bad "risk-probe prior_consumption must trigger on later/remaining state consumption, not plain stock validation errors"
|
|
656
|
+
bad "risk-probe shape contracts must require exact visible input/output key evidence unconditionally, and asserts_exact_error_object when co-occurring with error_contract/http_error_contract"
|
|
666
657
|
fi
|
|
667
658
|
if ! grep -Fq '"auth_signature_contract"' config/skills/_shared/spec-verify-check.py \
|
|
668
659
|
|| ! grep -Fq '"idempotency_replay"' config/skills/_shared/spec-verify-check.py \
|
|
669
660
|
|| ! grep -Fq 'asserts_signature_over_exact_bytes' config/skills/_shared/spec-verify-check.py \
|
|
670
661
|
|| ! grep -Fq 'duplicate_id_rejected_regardless_of_body' config/skills/_shared/spec-verify-check.py \
|
|
671
|
-
|| ! grep -Fq 'webhook signature/replay text did not require auth/idempotency probe tags' config/skills/_shared/spec-verify-check.py \
|
|
672
662
|
|| ! grep -Fq '`auth_signature_contract`: `asserts_signature_over_exact_bytes`' config/skills/devlyn:resolve/references/phases/probe-derive.md \
|
|
673
663
|
|| ! grep -Fq '`idempotency_replay`: `first_delivery_then_duplicate`' config/skills/devlyn:resolve/references/phases/probe-derive.md \
|
|
674
664
|
|| ! grep -Fq '`auth_signature_contract` must include `asserts_signature_over_exact_bytes`' config/skills/devlyn:resolve/SKILL.md; then
|
|
675
665
|
bad "risk-probe webhook/signature/replay contracts must require concrete auth_signature_contract and idempotency_replay tags"
|
|
676
666
|
fi
|
|
677
|
-
if ! grep -Fq 'signing|signed' config/skills/_shared/spec-verify-check.py \
|
|
678
|
-
|| ! grep -Fq 'same.{0,40}`?id`?' config/skills/_shared/spec-verify-check.py; then
|
|
679
|
-
bad "risk-probe webhook signature/replay trigger must catch signing/signed and same accepted id wording"
|
|
680
|
-
fi
|
|
681
|
-
if ! grep -Fq 'duplicate[ -]+(?:delivery|event|id)' config/skills/_shared/spec-verify-check.py \
|
|
682
|
-
|| ! grep -Fq 'duplicate SKU verification text incorrectly required idempotency_replay' config/skills/_shared/spec-verify-check.py; then
|
|
683
|
-
bad "risk-probe idempotency_replay must trigger on duplicate delivery/event/id, not duplicate SKU aggregation"
|
|
684
|
-
fi
|
|
685
667
|
if ! grep -Fq '"concurrent_state_consistency"' config/skills/_shared/spec-verify-check.py \
|
|
686
668
|
|| ! grep -Fq 'overlapping_mutations_exercised' config/skills/_shared/spec-verify-check.py \
|
|
687
|
-
|| ! grep -Fq 'concurrent state text did not require concurrent_state_consistency tag' config/skills/_shared/spec-verify-check.py \
|
|
688
669
|
|| ! grep -Fq '`concurrent_state_consistency`: `overlapping_mutations_exercised`' config/skills/devlyn:resolve/references/phases/probe-derive.md \
|
|
689
670
|
|| ! grep -Fq '`concurrent_state_consistency` must' config/skills/devlyn:resolve/SKILL.md; then
|
|
690
671
|
bad "risk-probe concurrent state contracts must require concrete concurrent_state_consistency markers"
|
|
691
672
|
fi
|
|
692
673
|
if ! grep -Fq '"atomic_batch_state"' config/skills/_shared/spec-verify-check.py \
|
|
693
674
|
|| ! grep -Fq 'mixed_valid_invalid_batch' config/skills/_shared/spec-verify-check.py \
|
|
694
|
-
|| ! grep -Fq 'atomic batch text did not require atomic_batch_state tag' config/skills/_shared/spec-verify-check.py \
|
|
695
675
|
|| ! grep -Fq 'atomic_batch_state without success-order evidence was accepted' config/skills/_shared/spec-verify-check.py \
|
|
696
676
|
|| ! grep -Fq '`atomic_batch_state`: `mixed_valid_invalid_batch`' config/skills/devlyn:resolve/references/phases/probe-derive.md \
|
|
697
677
|
|| ! grep -Fq '`atomic_batch_state` must include `mixed_valid_invalid_batch`' config/skills/devlyn:resolve/SKILL.md; then
|
|
@@ -1098,6 +1078,20 @@ if ! grep -Fq 'If the spec includes a solo-headroom hypothesis, one of the two t
|
|
|
1098
1078
|
else
|
|
1099
1079
|
ok "resolve pair-JUDGE prompts prioritize solo-headroom hypothesis"
|
|
1100
1080
|
fi
|
|
1081
|
+
if ! grep -Fq 'names the primary judge; if pair-mode triggers, the first available OTHER' config/skills/devlyn:resolve/references/phases/verify.md \
|
|
1082
|
+
|| ! grep -Fq 'names the primary judge; if pair-mode triggers, the first available OTHER' .claude/skills/devlyn:resolve/references/phases/verify.md \
|
|
1083
|
+
|| ! grep -Fq 'names the primary judge; if pair-mode triggers, the first available OTHER' .agents/skills/devlyn:resolve/references/phases/verify.md \
|
|
1084
|
+
|| ! grep -Fq 'do not run the OTHER engine as the' config/skills/devlyn:resolve/SKILL.md \
|
|
1085
|
+
|| ! grep -Fq 'do not run the OTHER engine as the' .claude/skills/devlyn:resolve/SKILL.md \
|
|
1086
|
+
|| ! grep -Fq 'do not run the OTHER engine as the' .agents/skills/devlyn:resolve/SKILL.md \
|
|
1087
|
+
|| ! grep -Fq '_shared/adapters/claude.md` `## Invocation' config/skills/devlyn:resolve/references/phases/verify.md \
|
|
1088
|
+
|| ! grep -Fq '_shared/adapters/claude.md` `## Invocation' config/skills/devlyn:resolve/SKILL.md \
|
|
1089
|
+
|| ! grep -Fq '## Invocation' config/skills/_shared/adapters/claude.md \
|
|
1090
|
+
|| ! grep -Fq '.devlyn/claude-judge.stdout' config/skills/_shared/adapters/claude.md; then
|
|
1091
|
+
bad "engine-neutral pair-judge dual declaration (iter-0060) out of sync"
|
|
1092
|
+
else
|
|
1093
|
+
ok "engine-neutral pair-judge dual declaration (iter-0060) in sync"
|
|
1094
|
+
fi
|
|
1101
1095
|
if ! grep -Fq 'current free-form `state.complexity` is `"large"`' config/skills/devlyn:resolve/SKILL.md \
|
|
1102
1096
|
|| ! grep -Fq 'current free-form `state.complexity` is `"large"`' .claude/skills/devlyn:resolve/SKILL.md \
|
|
1103
1097
|
|| ! grep -Fq 'current free-form `state.complexity` is `"large"`' .agents/skills/devlyn:resolve/SKILL.md \
|
|
@@ -1352,7 +1346,7 @@ for file in \
|
|
|
1352
1346
|
.agents/skills/devlyn:resolve/references/state-schema.md
|
|
1353
1347
|
do
|
|
1354
1348
|
if ! grep -Fq 'MECHANICAL and the primary JUDGE have no verdict-binding blockers' "$file" \
|
|
1355
|
-
|| ! grep -Fq 'may set only `user_no_pair`, `mechanical_blocker`, `primary_judge_blocker`, or null' "$file" \
|
|
1349
|
+
|| ! grep -Fq 'may set only `user_no_pair`, `mechanical_blocker`, `primary_judge_blocker`, `auto_pair_other_engine_unavailable`, or null' "$file" \
|
|
1356
1350
|
|| ! grep -Fq '`risk_profile` must remain an object with boolean' "$file" \
|
|
1357
1351
|
|| ! grep -Fq 'state implies a pair decision is required but `pair_trigger` is missing' "$file"; then
|
|
1358
1352
|
bad "$file — state schema must document pair_trigger blocker and missing-trigger enforcement"
|
|
@@ -1458,7 +1452,7 @@ isolation_missing=0
|
|
|
1458
1452
|
for needle in \
|
|
1459
1453
|
'CODEX_MONITORED_ISOLATED=1 bash "$CODEX_MONITORED_PATH"' \
|
|
1460
1454
|
'CODEX_MONITORED_ISOLATED=1` and `-c model_reasoning_effort=medium' \
|
|
1461
|
-
'
|
|
1455
|
+
'CODEX_MONITORED_PATH="$DEVLYN_SHARED_DIR/codex-monitored.sh"'
|
|
1462
1456
|
do
|
|
1463
1457
|
if ! grep -RInF "$needle" config/skills >/dev/null 2>&1; then
|
|
1464
1458
|
bad "missing isolated Codex invocation contract: $needle"
|
|
@@ -1544,6 +1538,19 @@ if [ $isolation_missing -eq 0 ]; then
|
|
|
1544
1538
|
ok "bounded Codex probe/judge calls require isolated wrapper mode"
|
|
1545
1539
|
fi
|
|
1546
1540
|
|
|
1541
|
+
section "Check 10a1: Shared helper paths resolve from the invoked skill"
|
|
1542
|
+
shared_path_offenders=$(grep -RInF '.claude/skills/_shared' config/skills 2>/dev/null \
|
|
1543
|
+
| grep -v 'roadmap-archival-workspace/' \
|
|
1544
|
+
| grep -v 'devlyn:auto-resolve-workspace/' \
|
|
1545
|
+
| grep -v 'devlyn:ideate-workspace/' \
|
|
1546
|
+
| grep -v 'preflight-workspace/' \
|
|
1547
|
+
|| true)
|
|
1548
|
+
if [ -z "$shared_path_offenders" ]; then
|
|
1549
|
+
ok "no project-relative .claude/skills/_shared paths in managed skills"
|
|
1550
|
+
else
|
|
1551
|
+
while IFS= read -r f; do bad "$f"; done <<< "$shared_path_offenders"
|
|
1552
|
+
fi
|
|
1553
|
+
|
|
1547
1554
|
# ---------------------------------------------------------------------------
|
|
1548
1555
|
# 10b. Shared routing docs must describe the current 2-skill surface.
|
|
1549
1556
|
# A stale auto-resolve/preflight/ideate-CHALLENGE reference can misroute
|
|
@@ -3640,7 +3647,7 @@ if ! grep -Fq 'high-risk fixture must include a resolve risk-trigger term' scrip
|
|
|
3640
3647
|
|| ! grep -Fq 'DEVLYN_FIXTURES_DIR="$FIXTURES_DIR" bash "$ROOT/scripts/lint-fixtures.sh"' benchmark/auto-resolve/scripts/test-lint-fixtures.sh \
|
|
3641
3648
|
|| ! grep -Fq 'DEVLYN_LINT_FIXTURES_NO_JSONSCHEMA=1' benchmark/auto-resolve/scripts/test-lint-fixtures.sh \
|
|
3642
3649
|
|| ! grep -Fq 'spec-verify-check --check-expected failed' benchmark/auto-resolve/scripts/test-lint-fixtures.sh \
|
|
3643
|
-
|| ! grep -Fq 'unless
|
|
3650
|
+
|| ! grep -Fq 'unless spec.expected.json declares "pure_design": true' benchmark/auto-resolve/scripts/test-lint-fixtures.sh \
|
|
3644
3651
|
|| ! grep -Fq 'verification_commands must be an array' benchmark/auto-resolve/scripts/test-lint-fixtures.sh \
|
|
3645
3652
|
|| ! grep -Fq 'expected.json must be an object' benchmark/auto-resolve/scripts/test-lint-fixtures.sh \
|
|
3646
3653
|
|| ! grep -Fq 'hidden oracle missing contract_refs' benchmark/auto-resolve/scripts/test-lint-fixtures.sh \
|