Plan and task out spec 003, model configuration - #200
Merged
Conversation
Spec Kit has been half-used here: three specs written, one plan, and nothing ever carried through to tasks. This takes 003 the rest of the way -- plan.md, quickstart.md, tasks.md -- before writing any code. The plan settles three things the spec left implicit. Precedence is environment over file, which is the reverse of util/secrets.py, and the reason is worth stating rather than discovering: a mounted secret comes from the deployment and should beat a checked-in file, while LLM_MODEL is how one container overrides a committed config.yml. Both are "the more specific wins". Validation happens at startup and against the table alone (D1 as recommended): no API call, so it works offline and cannot make startup depend on OpenAI being reachable. And US2 is P1 alongside US1, not after it, because shipping "you can configure a model" without "you find out at startup when it is wrong" adds two new ways to be wrong and no new way to notice. quickstart.md is the validation guide: seven scenarios, each a thing that can be observed failing, including the one that matters most -- that a config with no llm section behaves exactly as it does today. No research.md, data-model.md or contracts/. The unknowns were settled by measurement in #189, the data model is three optional fields on an existing pydantic class, and the only external contract is config.yml, whose schema file is edited in Stage 1. Generating empty scaffolding would be ceremony, as it was for 001. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.
Spec Kit has been half-used here: three specs written, one plan, and nothing ever carried through to tasks. This takes 003 the rest of the way —
plan.md,quickstart.md,tasks.md— before any code.Three things the plan settles that the spec left implicit
Precedence is environment over file — the reverse of
util/secrets.py, where a mounted secret beats the environment. Worth stating rather than discovering: a secret comes from the deployment and should beat a checked-in file;LLM_MODELis how one container overrides a committedconfig.yml. Both rules are "the more specific thing wins"; they only look contradictory.Validation is against the table, not the API (D1 as recommended) — no network call at startup, works offline, and startup cannot come to depend on OpenAI being reachable.
US2 is P1 alongside US1, not after it. Shipping "you can configure a model" without "you find out at startup when it is wrong" adds two new ways to be wrong and no new way to notice.
Artifacts
plan.mdquickstart.mdllmsection behaves exactly as todaytasks.mdWhat I deliberately did not generate
No
research.md,data-model.mdorcontracts/. The unknowns were settled by measurement in #189, the data model is three optional fields on an existing pydantic class, and the only external contract isconfig.yml— whose schema file is edited in Stage 1. Empty scaffolding would be ceremony, as it was for 001.Implementation follows in a separate PR, so the plan can be argued with before the code exists.
🤖 Generated with Claude Code