| type | feature |
|---|
One short paragraph: the user-visible reason this behavior exists. No implementation.
Bulleted paths — packages and app routes this behavior touches. Follow the
boundaries in monorepo.md (e.g. validation + queries in
packages/domain/, per ADR-0009).
Present-tense statements of what the system does. Include the unhappy paths: validation failures, foreign/unknown ids (404, never 403 — see web.md), signed-out access, and what is deliberately atomic. Quantify where a number is the contract (query counts, time budgets).
A small table of concrete cases — input/state → observable behavior. Cover at least one happy path, one rejection, and one boundary. These become tests.
| State / input | Behavior |
|---|---|
| … | … |
How a reader confirms this spec is currently true: the test command, plus any manual drill (curl check, keyboard-only pass, stopped-database check).
Deliberate limits and the reason each exists — what the system does NOT do, so the day that changes, the change is a decision and not an accident. Cite ADRs where one governs.
Adjacent behavior this spec deliberately does not cover, with a pointer to the spec that owns it — or a note that it does not exist yet.