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
- Start at
docs/specs/index.mdand follow the scope indexes to the subject's module. Read the neighbouring Designs and the Requirements they satisfy before writing. - Scaffold with
specful new design --title <TITLE> --scope <SCOPE>. Never hand-allocate an identifier; the command owns the counter. - Complete the placeholders. Declare the Requirements the Design
satisfiesand cite governing ADRs throughgoverned-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 asatisfiesorgoverned-byedge as a link, sincespecful showalready renders those. - Run
specful index, thenspecful validate; commit the regenerated views with the change. - Mechanical validation does not judge substantive quality. Use
specful-reviewwhen the adopting repository requires substantive review or the user asks for it.
For the full Design profile and field-by-field guidance, see https://unkos-dev.github.io/specful/.