---
name: specful-design
description: >-
Use when writing or updating a Specful Design: documenting how a subject of the system works, or connecting a
Design to the Requirements it satisfies.
compatibility: Requires the specful CLI on PATH.
---
# Writing a Specful Design
A Design describes how a subject of the system works now, written as though it has always worked this way. It is not a
Requirement (what the software must do) and not an ADR (why a decision was made); if the change is about what or why,
load `specful-requirement` or `specful-adr` instead. History and transitions never appear in the prose: a transition is
a plan, and what used to be true is Git history.
## Workflow
1. Start at `docs/specs/index.md` and follow the scope indexes to the subject's module. Read the neighbouring Designs
and the Requirements they satisfy before writing.
2. Scaffold with `specful new design --title
`. Never hand-allocate an identifier; the command owns the counter.
3. Complete the placeholders. Declare the Requirements the Design `satisfies` and cite governing ADRs through
`governed-by`, naming only the ADR whose rationale this subject embodies, never a related or organising decision such
as the decision to adopt a convention, and omit the field when that record does not exist in the profile. Describe
the subject as it is, at the level a maintainer needs to change it safely; decision rationale belongs in an ADR, not
here. More information is optional and is removed completely when it adds nothing; it never restates a `satisfies` or
`governed-by` edge as a link, since `specful show` already renders those.
4. Run `specful index`, then `specful validate`; commit the regenerated views with the change.
5. Mechanical validation does not judge substantive quality. Use `specful-review` when the adopting repository requires
substantive review or the user asks for it.
For the full Design profile and field-by-field guidance, see .