Plan a change

Asking questions is one half; the other is writing intent down. The spec workflow turns a topic into a house-style, drift-checked ADR or blueprint, grounded in the graph — so a decision links to the real symbols it governs and roteiro check can hold code to it later. Four steps; only one needs a model.

# 1 · Gather grounded context for a topic — the symbols, files and
#     ADRs already related to it, straight from the graph (offline)
roteiro spec context "rate limiting"

# 2 · Scaffold a house-style, check-clean skeleton with resolving
#     links and an interview checklist — no model needed (offline)
roteiro spec scaffold "rate limiting" --kind adr --out draft-adr.md

# 3 · Draft the prose with a local generative model, filling the
#     placeholders from the graph context (needs --features serve
#     or inference-local-models, then a pulled model)
roteiro spec draft draft-adr.md

# Then verify the authored links hold against the code (CI gate)
roteiro check

What spec context surfaces is real: for “concurrency” in this repo it returns the Engine trait, the concurrency test symbols that exercise it, and the blueprint section that governs them — the exact material a good ADR should cite. The skeleton it scaffolds is already check-clean, so you are filling in reasoning, not wiring up metadata.

Offline gets you most of the way. spec context and spec scaffold run with no model at all; only spec draft (the prose generation) needs a generative model. On a 16 GB MacBook Air (M3), qwen3-8b drafts comfortably; qwen3-0.6b is the tiny built-in default if you just want a first pass.