implement
Work the plan one thin slice at a time. A slice is the smallest piece that changes observable behavior.
When a spec exists at docs/specs/<slug>.md, its acceptance criteria are the plan: work criterion by criterion, and let the spec's non-goals fence every diff. A spec that still carries an ## Open decisions section is a draft, not a plan: stop and route back to drill; implementation cannot start until the draft is settled.
Follow the conventions architecture owns, loading only the ones the slice touches: the universal set indexed in architecture/conventions/ (types, failure, direction, purity, concurrency, security, observability, cohesion), FRONTEND.md for UI from a settled design, BACKEND.md for an API, service, or job, and the matching file in tooling/ for the toolchain or stack.
- Pick the smallest unfinished slice of the plan.
- Write the test that fails for it. Test external behavior through the interface, never implementation details. If no failing test can be written, the seam is wrong: stop and fix the plan, not the test.
- Write the minimum code that makes it pass.
- Refactor only with tests green. Match the existing style of the surrounding code.
- Repeat until the plan has no unfinished slices.
Rules: