Problem
Contributors should not need to memorise long uv run --frozen ... invocations. A justfile gives one canonical entry point per gate, identical locally and in CI.
Proposed solution
Port justfile from Teller. Recipes: dev (docker compose up), lint, fmt, typecheck, test, test-integration, coverage, architecture, pre-commit, eval, check (meta-recipe chaining lint typecheck architecture test), frontend-check. All use uv run --frozen to prevent silent re-resolve.
Acceptance criteria
Priority rationale
High: cuts onboarding friction for human + LLM contributors. The single just check is the pre-push gate.
Depends on
#2
Problem
Contributors should not need to memorise long
uv run --frozen ...invocations. A justfile gives one canonical entry point per gate, identical locally and in CI.Proposed solution
Port
justfilefrom Teller. Recipes:dev(docker compose up),lint,fmt,typecheck,test,test-integration,coverage,architecture,pre-commit,eval,check(meta-recipe chaininglint typecheck architecture test),frontend-check. All useuv run --frozento prevent silent re-resolve.Acceptance criteria
just(no args) lists every recipe with its description.just checkruns lint+typecheck+architecture+test in order; exits 0 on empty scaffold.just frontend-checkruns lint+format:check+check+test insidefrontend/(will be wired by feat: frontend scaffold (Vite + React 19.2 + TS strict, eslint flat + prettier + vitest) #21).uv run --frozen(no implicit lock-file mutation).Priority rationale
High: cuts onboarding friction for human + LLM contributors. The single
just checkis the pre-push gate.Depends on
#2