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