feat(config): per-lane model map in models.yaml, resolved by bin/isc — 0.11.0 #5

Merged
ksamaschke merged 1 commit from feat/models-yaml-lane-map into main 2026-07-31 09:44:12 +00:00
Owner

Model selection was tier words baked into skill prose ("strongest available tier"). Every delegated step now runs on a named lane whose model is configured in models.yaml and resolved deterministically by bin/isc. The strong Claude lane is opus, which now resolves to Opus 5.

The schema is shared verbatim with the Codex and Cursor variants, so a lane means the same thing wherever the toolchain runs. Resolution per key, first hit wins: .claude/models.yaml > shared <repo>/models.yaml > ~/.claude/models.yaml > built-in default, with harness.claude.<key> beating a bare key inside a file.

bin/isc (POSIX sh + awk): init, show with provenance, doctor, models. doctor fails on structural errors, unknown keys, unrecognised vendors, and on either routing invariant — cross-family review and cheap-lanes-stay-cheap — each waivable explicitly.

Config picks the model only: lane duty, the reasoning keyword bound to each complexity tier, and the requirements-check → review → green-gate sequence are unchanged.

Reviewed adversarially by GPT-5.6-sol on two independent lenses (code correctness via Codex CLI, contract-vs-implementation via PI), then re-reviewed after fixes. 40 executable checks in tests/isc-smoke.sh; criteria in tests/model-config.acceptance.md.

Model selection was tier words baked into skill prose ("strongest available tier"). Every delegated step now runs on a named **lane** whose model is configured in `models.yaml` and resolved deterministically by `bin/isc`. The strong Claude lane is `opus`, which now resolves to Opus 5. The schema is shared verbatim with the Codex and Cursor variants, so a lane means the same thing wherever the toolchain runs. Resolution per key, first hit wins: `.claude/models.yaml` > shared `<repo>/models.yaml` > `~/.claude/models.yaml` > built-in default, with `harness.claude.<key>` beating a bare key inside a file. `bin/isc` (POSIX sh + awk): `init`, `show` with provenance, `doctor`, `models`. `doctor` fails on structural errors, unknown keys, unrecognised vendors, and on either routing invariant — cross-family review and cheap-lanes-stay-cheap — each waivable explicitly. Config picks the model only: lane duty, the reasoning keyword bound to each complexity tier, and the requirements-check → review → green-gate sequence are unchanged. Reviewed adversarially by GPT-5.6-sol on two independent lenses (code correctness via Codex CLI, contract-vs-implementation via PI), then re-reviewed after fixes. 40 executable checks in `tests/isc-smoke.sh`; criteria in `tests/model-config.acceptance.md`.
Model selection was tier words baked into skill prose ("strongest available
tier"). Every delegated step now runs on a named lane whose model is
configured in models.yaml and resolved deterministically by bin/isc.

Nine portable lanes — implementer_trivial/low/moderate/high,
requirements_checker, reviewer_default, reviewer_security, dispatcher,
researcher — plus engine.<pi|codex>.<fast|ordinary|strong|review|fallback>.
The strong Claude lane is opus, which now resolves to Opus 5.

Resolution, per key, first hit wins: .claude/models.yaml, a shared
<repo>/models.yaml, ~/.claude/models.yaml, built-in default. Inside any file
harness.claude.<key> beats a bare <key>, so one shared file can serve several
harnesses. The schema is shared verbatim with the Codex and Cursor variants,
so a lane means the same thing wherever the toolchain runs.

bin/isc (POSIX sh + awk) resolves and validates it: init, show with
provenance, doctor, models. doctor fails on structural errors, unknown keys,
ids whose vendor cannot be recognised, and on either routing invariant —
cross-family review and cheap-lanes-stay-cheap — each waivable explicitly via
allow_same_family / allow_costly_cheap_lanes. Where an engine can enumerate
its models, a configured engine.<engine>.fallback is applied and shown.

Config picks the model only: lane duty, the reasoning keyword bound to each
complexity tier, and the requirements-check -> review -> green-gate sequence
are unchanged.

Contract: implement-issues/references/model-config.md. Criteria:
tests/model-config.acceptance.md. Executable: tests/isc-smoke.sh (40 checks).
ksamaschke deleted branch feat/models-yaml-lane-map 2026-07-31 09:44:12 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ksamaschke/implementation-skills-claude!5
No description provided.