diff --git a/.agents/writing-docs.md b/.agents/writing-docs.md index 3d5b0e1..cc525a8 100644 --- a/.agents/writing-docs.md +++ b/.agents/writing-docs.md @@ -47,7 +47,11 @@ Optional — include only when the skill needs something in place to be function One to three short sections, in the skill's *own vocabulary*, that make it click — choose whatever headings fit the skill: the loop it runs, the artifact it produces, the fork it makes, the one anti-pattern it kills. There is no prescribed heading; the skills are too heterogeneous for one. -The single non-negotiable: **surface the skill's leading word / load-bearing idea** — `tight` feedback loop, `deep module`, throwaway-code-answers-a-question, red-green. It pays off three ways: the reader learns what the skill *is*, learns the word they'll later think with to *reach for* it, and learns the word to *watch for in the agent's output* — if the leading words come out, the skill fired and is thinking in its own frame; if they don't, that's the tell something is off. +The single non-negotiable: **surface the skill's leading word / load-bearing idea** — `tight` feedback loop, `deep module`, throwaway-code-answers-a-question, red-green. It pays off twice: the reader learns what the skill *is*, and learns the word they'll later think with to *reach for* it. + +## It's working if + +Optional. A short, checkable list of the observable signals that tell the reader the skill is actually doing its job — what they should see when it fires, and by absence when it hasn't. Include it when a skill has crisp tells (e.g. `to-prd` writes without re-interviewing you; a leading word reappearing in the trace); omit the heading when the signals are vague. A few bullets, no more. ## Where it fits diff --git a/docs/engineering/to-prd.md b/docs/engineering/to-prd.md index 21d4988..49f7e94 100644 --- a/docs/engineering/to-prd.md +++ b/docs/engineering/to-prd.md @@ -28,19 +28,25 @@ Reach for it once a change has been talked through and the domain language is se ## What the PRD includes -- problem statement -- solution -- extensive numbered user stories -- implementation decisions -- testing decisions -- out-of-scope items -- further notes +- **Problem statement** — what is broken or missing, and why it's worth solving, in the project's own vocabulary. +- **Solution** — the shape of the fix at a high level, before any implementation detail. +- **User stories** — an extensive, numbered list of the concrete behaviours the change must support, each one independently checkable. +- **Implementation decisions** — the choices already settled during the conversation, so they aren't relitigated later. +- **Testing decisions** — the seams the feature will be tested at, and what "done" looks like. +- **Out-of-scope items** — what this change deliberately does *not* cover, to keep the ticket bounded. +- **Further notes** — anything else worth carrying forward that doesn't fit the sections above. ## Deep modules Before writing the PRD, `to-prd` sketches the **seams** at which the feature will be tested and looks for **deep module** opportunities — a lot of functionality hidden behind a small, stable interface. It prefers existing seams to new ones and the highest seam possible, ideally just one across the whole change. -That matters for agentic development: a good interface gives tests something durable to target, so the code underneath can change without the tests moving. If you see the words _seam_ and _deep module_ coming back at you as it works, the skill is doing its job. +That matters for agentic development: a good interface gives tests something durable to target, so the code underneath can change without the tests moving. + +## It's working if + +- It starts writing the PRD instead of asking you a fresh round of questions. +- It checks the seams with you before writing, and proposes as few as possible. +- The PRD comes back in your project's domain vocabulary, not generic boilerplate. ## Where it fits