Skip to content

Plan and task out spec 003, model configuration - #200

Merged
adamjohnwright merged 1 commit into
mainfrom
plan/model-configuration
Sep 10, 2026
Merged

Plan and task out spec 003, model configuration#200
adamjohnwright merged 1 commit into
mainfrom
plan/model-configuration

Conversation

@adamjohnwright

Copy link
Copy Markdown
Contributor

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_MODEL is how one container overrides a committed config.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.md 3 stages with exit criteria, constitution check, complexity tracking
quickstart.md 7 validation scenarios, each observable failing — including the one that matters most, that a config with no llm section behaves exactly as today
tasks.md 27 tasks, 10 parallelisable, organised by user story

What I deliberately did not generate

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. 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

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>
@adamjohnwright
adamjohnwright merged commit 7ca1a94 into main Sep 10, 2026
10 checks passed
@adamjohnwright
adamjohnwright deleted the plan/model-configuration branch September 10, 2026 17:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant