feat(config): per-lane model map in models.yaml, resolved by bin/isc — 0.11.0 #5
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/models-yaml-lane-map"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
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.yamland resolved deterministically bybin/isc. The strong Claude lane isopus, 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, withharness.claude.<key>beating a bare key inside a file.bin/isc(POSIX sh + awk):init,showwith provenance,doctor,models.doctorfails 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 intests/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).