Model tiering foundation: config/models.conf + doctor checks (#109) - #113
Merged
Conversation
Add the shell-sourceable config/models.conf shipped defaults (fixed coder/hands ceilings, always-max gate model/effort), a per-target override convention at .fabrica/models.conf (mirrors where the north-star work put per-target committed state), and doctor checks (k)/(l) that statically validate the config is present/sourceable with non-empty coder/hands values and warn on a stray CLAUDE_CODE_SUBAGENT_MODEL env override. Closes #109 No behavior change: nothing reads config/models.conf or a target's .fabrica/models.conf yet beyond doctor's own static validation — wiring the coder spawn, hands policy, and gates to this config is follow-up work (#110-#112). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Deploying fabrica with
|
| Latest commit: |
18892b0
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://35e17028.fabrica-6yx.pages.dev |
| Branch Preview URL: | https://coder-109-models-conf.fabrica-6yx.pages.dev |
Owner
Author
Codex reviewer (cross-vendor, read-only)Reviewed-head: 18892b0 Posted verbatim by No actionable findings were identified in the available review context. |
4 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds the shell-sourceable
config/models.confshipped model-tiering defaults, aper-target override convention, and static doctor validation. No behavior change —
nothing reads this config yet.
config/models.conf(POSIX-sh, comments explaining each key):FABRICA_CODER_MODEL=sonnet— floating Claude alias; a full model ID may beused instead to pin an exact snapshot. Fixed ceiling by design, never
escalated at runtime.
FABRICA_HANDS_MODEL=haikuFABRICA_CODEX_MODEL=(empty = inherit the operator/CLI's own defaultfrontier codex)
FABRICA_REVIEW_EFFORT=high,FABRICA_DEBATE_EFFORT=high— gates always max,no class-based routing.
defaults, as a static per-repo commitment (never a per-task rescue). Template at
templates/.fabrica/models.conf.scripts/doctor.shnew checks:config/models.confpresent + sourceable (sourced in a subshell so asyntax error can't abort doctor under
set -e), and — once sourced —FABRICA_CODER_MODEL/FABRICA_HANDS_MODELare non-empty.CLAUDE_CODE_SUBAGENT_MODELis set in the environment (itwould silently override a per-spawn model argument once wiring lands).
ci/required-files.txt: addedconfig/models.conf(per spec) andtemplates/.fabrica/models.conf(the new shipped template — added forfull-backup consistency with the existing
templates/.fabrica/north-star.mdentry, per CLAUDE.md's "add new restore-critical files to the manifest" rule).
principle (gates decide → always max; producers type → fixed ceilings; frontier
thinks, never types), the config table, and the per-target override convention.
Also a short addition to
templates/repo-setup.md(step 7, optional) so thetarget-repo setup checklist mentions the override alongside the north star.
Closes #109
Why (discovery decisions)
scripts/doctor.sh(checks a–j, added by Per-target north star (98a): atomic gate+doctor+persona flip, reading committed target state #101/Greenfield tie-in + MapleFolio history (98b): bootstrap creates committed target north star #104) rather than inventing aparallel validator — added checks (k) and (l), following the same
report/report_warnpattern and the same "static/diagnostic only, nomutation" discipline the rest of the script follows.
per-target committed-state convention — a target repo's own state lives under
its
.fabrica/directory (.fabrica/north-star.mdtoday). The model overridefollows the same pattern at
.fabrica/models.conf, sourced after thecontrol-plane's shipped
config/models.confdefaults, documented inREADME.md's new "Model policy" section and
templates/repo-setup.mdstep 7.No behavior change
Nothing reads
config/models.confor a target's.fabrica/models.confyet beyonddoctor.sh's own static validation. Wiring the coder spawn, the hands policy, andthe gates to this config is follow-up work (issues #110–#112).
Test plan
shellcheck -x -S style(pinned 0.9.0 binary, matching CI) over every*.shin the repo — clean.scripts/test/north-star-resolver.test.sh— 64 passed, 0 failed(no regression).
scripts/test/north-star-gate.test.sh— 190 passed, 0 failed(no regression).
passes.
missing config (fail), empty required value (fail), shell syntax error (fail,
doctor still completes and prints the summary),
CLAUDE_CODE_SUBAGENT_MODELset (warn).
🤖 Generated with Claude Code