Design a change — create a change container (if needed) and generate spec artifacts.
Use for:
- Creating a new Beat change and generating spec artifacts (proposal, gherkin, design.md)
- Resuming artifact generation for an existing change that has pending spec artifacts
- Choosing which spec artifacts to include (presets: Full, Standard, Minimal, Technical, Custom)
NOT for:
- Breaking down tasks or creating execution plans (use
/beat:plan)
- Exploring ideas or thinking through a problem before committing (use
/beat:explore)
- Implementing code (use
/beat:apply)
- Reviewing or verifying implementation (use
/beat:verify)
Trigger examples:
- "Design a user authentication feature" / "Create a change for login" / "Generate specs for X"
- Should NOT trigger: "break down the tasks" / "let me think about this" / "implement the change"
Before writing gherkin scenarios: you MUST run the four-challenge CONTEXT.md check
(see step 4 below) and ensure every project-specific term used in scenarios is
defined in beat/CONTEXT.md. Create the glossary lazily — only when the first
term is added.
After writing each artifact: you MUST run the four-check spec self-review
(placeholder / consistency / scope / ambiguity). Fix issues inline.
While writing design.md: you MUST run the three-condition ADR gate
(hard-to-reverse + surprising + real trade-off — see references/adr-format.md)
on each Key Decision. When all three hold, offer to lift the decision into a
new ADR under docs/adr/. The user may decline.
Invoke in order: worktrees first (isolate), then brainstorming (design).
If a prerequisite skill is unavailable (not installed), continue with fallback — but NEVER skip
because you judged it unnecessary.
Prerequisites (invoke before proceeding)
| Skill |
When |
Priority |
| superpowers:using-git-worktrees |
Before first file write |
MUST |
| superpowers:brainstorming |
Before creating proposal or design |
MUST |
| mattpocock-skills:grill-with-docs |
When CONTEXT.md ambiguity is complex enough that a full grilling session is warranted |
OPTIONAL |
If a prerequisite skill is unavailable (skill not installed), skip and continue.
For optional skills (grill-with-docs), offer to invoke when applicable; if the
user declines or it isn't installed, proceed with the four-challenge check inline.
Rationalization Prevention
| Thought |
Reality |
| "I don't need a worktree for just writing specs" |
Without a worktree, artifacts live in the main workspace and won't carry into apply. Isolate from the start. |
| "brainstorming isn't needed, the user already described what they want" |
A description is not a design. brainstorming surfaces assumptions, alternatives, and edge cases. |
| "The user wants speed, invoking superpowers will slow us down" |
Skipping prerequisites produces lower-quality artifacts that cause rework during apply and verify. |
| "This change is simple enough to skip brainstorming" |
Simple changes finish brainstorming quickly. Complex changes need it most. There is no middle ground where skipping helps. |
| "The domain terms are obvious, no need to update CONTEXT.md" |
Obvious to you, not to future-you or anyone else reading the feature in six months. Glossary entries are two lines. Add them inline. |
| "Spec self-review is overkill, the artifact is short" |
Self-review catches placeholders, contradictions, and ambiguities that compound through plan and apply. The four checks take 30 seconds. |
| "This decision is just for this change, no ADR needed" |
Run the three-condition gate. If it's hard-to-reverse, surprising, and a real trade-off, future changes will trip over it — that's the ADR's job. Decisions that are change-specific don't pass the gate; let the gate decide, not your gut. |
| "We'll lift this into an ADR later" |
"Later" rarely arrives. The decision is fresh now; the ADR is 1-3 sentences. Write it inline. |
Red Flags — STOP if you catch yourself:
- Writing any file before invoking using-git-worktrees
- Generating proposal sections without having invoked brainstorming
- Creating design.md without invoking brainstorming first
- Writing gherkin scenarios that contain internal method names, numeric thresholds, or implementation constants
- Writing gherkin scenarios that use project-specific domain terms not defined in
beat/CONTEXT.md
- Modifying an existing feature in
beat/features/ without creating a .orig backup first
- Writing tasks.md or
- [ ] checkboxes — tasks belong in /beat:plan
- Skipping the spec self-review because the artifact "looks fine"
- Writing a Key Decision in
design.md that meets all three ADR conditions without offering an ADR
- Thinking "this prerequisite isn't needed for this particular change"
Process Flow
digraph design {
"Select or create change" [shape=box];
"Invoke using-git-worktrees" [shape=box, style=bold];
"Ask artifact preset" [shape=box];
"Includes proposal?" [shape=diamond];
"Invoke brainstorming" [shape=box, style=bold];
"Create proposal" [shape=box];
"Self-review proposal" [shape=box, style=bold];
"Includes gherkin?" [shape=diamond];
"CONTEXT.md\nfour-challenge check" [shape=box, style=bold];
"Existing scenarios\nto modify?" [shape=diamond];
"Backup .orig +\ncopy to changes/" [shape=box];
"Create gherkin\n(new features only)" [shape=box];
"Self-review gherkin" [shape=box, style=bold];
"Includes design?" [shape=diamond];
"Create design" [shape=box];
"ADR gate\n(per Key Decision)" [shape=box, style=bold];
"Self-review design" [shape=box, style=bold];
"Commit artifacts" [shape=box];
"Show summary" [shape=doublecircle];
"Select or create change" -> "Invoke using-git-worktrees";
"Invoke using-git-worktrees" -> "Ask artifact preset";
"Ask artifact preset" -> "Includes proposal?";
"Includes proposal?" -> "Invoke brainstorming" [label="yes"];
"Includes proposal?" -> "Includes gherkin?" [label="no"];
"Invoke brainstorming" -> "Create proposal";
"Create proposal" -> "Self-review proposal";
"Self-review proposal" -> "Includes gherkin?";
"Includes gherkin?" -> "CONTEXT.md\nfour-challenge check" [label="yes"];
"Includes gherkin?" -> "Includes design?" [label="no"];
"CONTEXT.md\nfour-challenge check" -> "Existing scenarios\nto modify?";
"Existing scenarios\nto modify?" -> "Backup .orig +\ncopy to changes/" [label="yes"];
"Existing scenarios\nto modify?" -> "Create gherkin\n(new features only)" [label="no"];
"Backup .orig +\ncopy to changes/" -> "Create gherkin\n(new features only)";
"Create gherkin\n(new features only)" -> "Self-review gherkin";
"Self-review gherkin" -> "Includes design?";
"Includes design?" -> "Invoke brainstorming" [label="yes, only if\nnot yet invoked"];
"Includes design?" -> "Commit artifacts" [label="no"];
"Invoke brainstorming" -> "Create design" [label="for design"];
"Create design" -> "ADR gate\n(per Key Decision)" [style=bold];
"ADR gate\n(per Key Decision)" -> "Self-review design";
"Self-review design" -> "Commit artifacts";
"Commit artifacts" -> "Show summary";
}
Input: Change name (kebab-case) OR a description of what to build. Can also be an existing change name to fast-forward remaining artifacts.
Steps
If no clear input provided, ask what they want to build
Use AskUserQuestion tool to ask what they want to build.
Derive kebab-case name from description.
Create or select change
Determine the change name. Before creating any files, invoke using-git-worktrees to isolate this change.
- If
beat/changes/<name>/ doesn't exist: create it (directory + status.yaml + features/.gitkeep)
- If it exists: use it, read
status.yaml (schema: references/status-schema.md) to find remaining artifacts
Ask which spec artifacts to include
Read status.yaml. For artifacts still pending, ask user once upfront:
Use AskUserQuestion tool:
"Which spec artifacts do you want? (Tasks are handled separately by /beat:plan)"
- Full: Proposal + Gherkin + Design (recommended for large features)
- Standard: Proposal + Gherkin (recommended for medium features)
- Minimal: Gherkin only (recommended for small bug fixes)
- Technical: Proposal only, no Gherkin (for tooling/infra/refactor changes with no behavior change)
- Custom: Let me choose each one
Mark skipped artifacts as skipped in status.yaml.
Tasks are always set to pending — task breakdown happens in /beat:plan.
Update phase to match the latest completed spec artifact after each creation.
Create artifacts in pipeline order
Read beat/config.yaml if it exists (schema: references/config-schema.md). Use language for artifact output language, inject context, and apply matching rules per artifact type throughout creation.
For each artifact to create (pipeline order: proposal -> gherkin -> design):
- Read all completed artifacts for context
- Invoke prerequisites per the table above (brainstorming before proposal/design — invoke once before the first artifact that needs it; skip for subsequent artifacts if already invoked)
- Gherkin only — before writing scenarios: run the CONTEXT.md four-challenge check (see sub-step below)
- Create the artifact following the patterns below
- After writing: run the spec self-review (see sub-step below); fix issues inline
- Update
status.yaml
- Show brief progress: "Created "
- If context is critically unclear, pause and ask
CONTEXT.md four-challenge check (before writing gherkin):
Read beat/CONTEXT.md if it exists (schema: references/context-format.md). Create it lazily when the first term is added — never preemptively.
Walk through the brainstorming output and any draft scenario text. For each project-specific term, run these checks and update beat/CONTEXT.md inline as findings emerge (never batch):
- Against the glossary — the term conflicts with an existing entry? Call it out, resolve, update.
- Sharpen fuzzy — the term is vague or overloaded (e.g. "account" meaning Customer and User both)? Pick the canonical word, list the others as
_Avoid_.
- Stress-test — invent edge-case scenarios that probe term boundaries; force the boundary to be named.
- Cross-reference code — the user states behaviour that the code contradicts? Surface, decide source of truth, update the loser.
Optional grilling: If mattpocock-skills:grill-with-docs is installed and the ambiguity is complex enough to warrant a full grilling session, offer to invoke it once: "Want to drop into grill-with-docs for a deeper pass on this?" If the user declines, or the skill isn't installed, continue inline with the four challenges. Beat never hard-requires grill-with-docs.
Every project-specific term used in scenarios MUST exist in beat/CONTEXT.md before the scenario is written. Bolded terms in scenarios are the canonical form.
Spec self-review (after writing each artifact):
Re-read the artifact with fresh eyes and check:
- Placeholder scan — any
TBD, TODO, incomplete sections, vague requirements?
- Internal consistency — do sections contradict each other? Does the design match the gherkin scenarios?
- Scope check — is this focused enough for a single implementation plan, or does it need decomposition?
- Ambiguity check — could any requirement be read two different ways? If so, pick one and make it explicit.
Fix issues inline. No need to re-review the fix — just fix and move on.
Artifact patterns:
Proposal: Sections: ## Why, ## What Changes, ## Impact
Gherkin:
- Read
references/feature-writing.md for conventions on description blocks, scenario organization, and review checklist
- Before writing, scan
beat/features/**/*.feature and beat/changes/*/features/*.feature (excluding current change) — read Feature: and Scenario: lines to map existing coverage, deep-read only overlapping features, avoid duplication and align style
- SpecFlow style, tags
@happy-path/@error-handling/@edge-case
- Feature description carries PRD essence (must include: As a / I want / So that)
- Every scenario MUST have a testing layer tag:
@e2e (user journeys needing a running app) or @behavior (business logic testable without a full app; default @behavior)
- Write at behavior level — describe what the system does ("Monthly billing adjusts for short months"), not how a function works ("calculateNextTransactionDate clamps to last day")
- Use business language — no concrete numeric thresholds, code method names, or internal constants (API contract constants are OK as shared vocabulary)
- Repeated Given steps use
Background:
- Tags must serve a filtering purpose — no decorative tags
- BDD focuses on high-level acceptance; boundary values and algorithm details belong in unit tests
- If option 4 (Technical) was chosen, skip gherkin entirely
Modifying existing features (see references/testing-conventions.md for full mechanism):
When the scan reveals scenarios in beat/features/ that need modification:
- Conflict check: scan
beat/features/**/*.feature.orig — if a .orig exists for the same file, another change is modifying it. Warn and stop.
- Backup: rename the original in
beat/features/ to .feature.orig (hides it from BDD runners)
- Copy: copy the original content to
beat/changes/<name>/features/<file>.feature
- Modify: edit the scenario(s) in the
changes/ copy (add/change/remove steps, add new scenarios)
- Record: add the original path to
status.yaml gherkin.modified array
New features that don't modify existing scenarios go directly to changes/<name>/features/ as before.
Design:
- Sections:
## Approach, ## Key Decisions, ## Components
- ADR gate — for each Key Decision, run the three-condition check from
references/adr-format.md:
- Hard to reverse? (cost of changing your mind is meaningful)
- Surprising without context? (future reader will wonder "why on earth this way?")
- Result of a real trade-off? (genuine alternatives existed)
If all three hold, use AskUserQuestion tool: "This decision meets the ADR gate. Lift it into
docs/adr/?" On Yes, write a 1-3 sentence ADR using the template in references/adr-format.md, increment the highest existing number in docs/adr/ by one, and add a cross-reference from design.md (See docs/adr/NNNN-slug.md). On No, continue.
Create docs/adr/ lazily — only on first ADR.
- Architecture hub suggestion (Layer 3, advisory) — if
design.md describes a module-level architecture change (new module, module split/merge, changed module boundaries or responsibilities), suggest updating beat/ARCHITECTURE.md — the hub diagram, modules table, or constraints (see references/architecture-format.md). Create the hub lazily, only if the project is multi-module and the user accepts. Never block.
Commit artifacts and show final status
Commit all change artifacts: git add beat/changes/<name>/ && git commit
Use a descriptive message, e.g. "design(): add spec artifacts".
Update phase to the latest completed spec artifact in status.yaml.
## Design Complete: <change-name>
Created:
- proposal.md (or skipped)
- features/*.feature (or skipped if Technical option)
- design.md (or skipped)
Tasks: pending (run `/beat:plan` to create execution plan)
Spec artifacts ready! Review them, then run `/beat:plan` for task breakdown.
Guardrails
- Gherkin is mandatory by default -- only skip for purely technical changes (option 4: Technical)
- Ask upfront which artifacts to include (don't ask per artifact)
- If change already exists with some artifacts done, only create remaining
- If context is critically unclear, ask -- but prefer reasonable defaults to keep momentum
- Verify each artifact file exists after writing before proceeding
- Tasks are NOT created in this skill — they are handled by
/beat:plan
1---2name: design3description: Use when starting a Beat change to create spec artifacts — not for task breakdown, implementation, or exploration4---56Design a change — create a change container (if needed) and generate spec artifacts.78<decision_boundary>910**Use for:**11- Creating a new Beat change and generating spec artifacts (proposal, gherkin, design.md)12- Resuming artifact generation for an existing change that has pending spec artifacts13- Choosing which spec artifacts to include (presets: Full, Standard, Minimal, Technical, Custom)1415**NOT for:**16- Breaking down tasks or creating execution plans (use `/beat:plan`)17- Exploring ideas or thinking through a problem before committing (use `/beat:explore`)18- Implementing code (use `/beat:apply`)19- Reviewing or verifying implementation (use `/beat:verify`)2021**Trigger examples:**22- "Design a user authentication feature" / "Create a change for login" / "Generate specs for X"23- Should NOT trigger: "break down the tasks" / "let me think about this" / "implement the change"2425</decision_boundary>2627<HARD-GATE>28Before writing any artifact files: you MUST invoke superpowers:using-git-worktrees.29When the artifact selection includes proposal or design, you MUST invoke superpowers:brainstorming30before generating content. This applies even when scope seems obvious.3132Before writing gherkin scenarios: you MUST run the four-challenge CONTEXT.md check33(see step 4 below) and ensure every project-specific term used in scenarios is34defined in `beat/CONTEXT.md`. Create the glossary lazily — only when the first35term is added.3637After writing each artifact: you MUST run the four-check spec self-review38(placeholder / consistency / scope / ambiguity). Fix issues inline.3940While writing `design.md`: you MUST run the three-condition ADR gate41(hard-to-reverse + surprising + real trade-off — see `references/adr-format.md`)42on each Key Decision. When all three hold, offer to lift the decision into a43new ADR under `docs/adr/`. The user may decline.4445Invoke in order: worktrees first (isolate), then brainstorming (design).4647If a prerequisite skill is unavailable (not installed), continue with fallback — but NEVER skip48because you judged it unnecessary.49</HARD-GATE>5051**Prerequisites** (invoke before proceeding)5253| Skill | When | Priority |54|-------|------|----------|55| superpowers:using-git-worktrees | Before first file write | MUST |56| superpowers:brainstorming | Before creating proposal or design | MUST |57| mattpocock-skills:grill-with-docs | When CONTEXT.md ambiguity is complex enough that a full grilling session is warranted | OPTIONAL |5859If a prerequisite skill is unavailable (skill not installed), skip and continue.60For optional skills (grill-with-docs), offer to invoke when applicable; if the61user declines or it isn't installed, proceed with the four-challenge check inline.6263## Rationalization Prevention6465| Thought | Reality |66|---------|---------|67| "I don't need a worktree for just writing specs" | Without a worktree, artifacts live in the main workspace and won't carry into apply. Isolate from the start. |68| "brainstorming isn't needed, the user already described what they want" | A description is not a design. brainstorming surfaces assumptions, alternatives, and edge cases. |69| "The user wants speed, invoking superpowers will slow us down" | Skipping prerequisites produces lower-quality artifacts that cause rework during apply and verify. |70| "This change is simple enough to skip brainstorming" | Simple changes finish brainstorming quickly. Complex changes need it most. There is no middle ground where skipping helps. |71| "The domain terms are obvious, no need to update CONTEXT.md" | Obvious to you, not to future-you or anyone else reading the feature in six months. Glossary entries are two lines. Add them inline. |72| "Spec self-review is overkill, the artifact is short" | Self-review catches placeholders, contradictions, and ambiguities that compound through plan and apply. The four checks take 30 seconds. |73| "This decision is just for this change, no ADR needed" | Run the three-condition gate. If it's hard-to-reverse, surprising, and a real trade-off, future changes will trip over it — that's the ADR's job. Decisions that *are* change-specific don't pass the gate; let the gate decide, not your gut. |74| "We'll lift this into an ADR later" | "Later" rarely arrives. The decision is fresh now; the ADR is 1-3 sentences. Write it inline. |7576## Red Flags — STOP if you catch yourself:7778- Writing any file before invoking using-git-worktrees79- Generating proposal sections without having invoked brainstorming80- Creating design.md without invoking brainstorming first81- Writing gherkin scenarios that contain internal method names, numeric thresholds, or implementation constants82- Writing gherkin scenarios that use project-specific domain terms not defined in `beat/CONTEXT.md`83- Modifying an existing feature in `beat/features/` without creating a `.orig` backup first84- Writing tasks.md or `- [ ]` checkboxes — tasks belong in `/beat:plan`85- Skipping the spec self-review because the artifact "looks fine"86- Writing a Key Decision in `design.md` that meets all three ADR conditions without offering an ADR87- Thinking "this prerequisite isn't needed for this particular change"8889## Process Flow9091```dot92digraph design {93 "Select or create change" [shape=box];94 "Invoke using-git-worktrees" [shape=box, style=bold];95 "Ask artifact preset" [shape=box];96 "Includes proposal?" [shape=diamond];97 "Invoke brainstorming" [shape=box, style=bold];98 "Create proposal" [shape=box];99 "Self-review proposal" [shape=box, style=bold];100 "Includes gherkin?" [shape=diamond];101 "CONTEXT.md\nfour-challenge check" [shape=box, style=bold];102 "Existing scenarios\nto modify?" [shape=diamond];103 "Backup .orig +\ncopy to changes/" [shape=box];104 "Create gherkin\n(new features only)" [shape=box];105 "Self-review gherkin" [shape=box, style=bold];106 "Includes design?" [shape=diamond];107 "Create design" [shape=box];108 "ADR gate\n(per Key Decision)" [shape=box, style=bold];109 "Self-review design" [shape=box, style=bold];110 "Commit artifacts" [shape=box];111 "Show summary" [shape=doublecircle];112113 "Select or create change" -> "Invoke using-git-worktrees";114 "Invoke using-git-worktrees" -> "Ask artifact preset";115 "Ask artifact preset" -> "Includes proposal?";116 "Includes proposal?" -> "Invoke brainstorming" [label="yes"];117 "Includes proposal?" -> "Includes gherkin?" [label="no"];118 "Invoke brainstorming" -> "Create proposal";119 "Create proposal" -> "Self-review proposal";120 "Self-review proposal" -> "Includes gherkin?";121 "Includes gherkin?" -> "CONTEXT.md\nfour-challenge check" [label="yes"];122 "Includes gherkin?" -> "Includes design?" [label="no"];123 "CONTEXT.md\nfour-challenge check" -> "Existing scenarios\nto modify?";124 "Existing scenarios\nto modify?" -> "Backup .orig +\ncopy to changes/" [label="yes"];125 "Existing scenarios\nto modify?" -> "Create gherkin\n(new features only)" [label="no"];126 "Backup .orig +\ncopy to changes/" -> "Create gherkin\n(new features only)";127 "Create gherkin\n(new features only)" -> "Self-review gherkin";128 "Self-review gherkin" -> "Includes design?";129 "Includes design?" -> "Invoke brainstorming" [label="yes, only if\nnot yet invoked"];130 "Includes design?" -> "Commit artifacts" [label="no"];131 "Invoke brainstorming" -> "Create design" [label="for design"];132 "Create design" -> "ADR gate\n(per Key Decision)" [style=bold];133 "ADR gate\n(per Key Decision)" -> "Self-review design";134 "Self-review design" -> "Commit artifacts";135 "Commit artifacts" -> "Show summary";136}137```138139**Input**: Change name (kebab-case) OR a description of what to build. Can also be an existing change name to fast-forward remaining artifacts.140141**Steps**1421431. **If no clear input provided, ask what they want to build**144145 Use **AskUserQuestion tool** to ask what they want to build.146 Derive kebab-case name from description.1471482. **Create or select change**149150 Determine the change name. Before creating any files, invoke `using-git-worktrees` to isolate this change.151152 - If `beat/changes/<name>/` doesn't exist: create it (directory + status.yaml + features/.gitkeep)153 - If it exists: use it, read `status.yaml` (schema: `references/status-schema.md`) to find remaining artifacts1541553. **Ask which spec artifacts to include**156157 Read `status.yaml`. For artifacts still `pending`, ask user once upfront:158159 Use **AskUserQuestion tool**:160 > "Which spec artifacts do you want? (Tasks are handled separately by `/beat:plan`)"161 > 1. Full: Proposal + Gherkin + Design (recommended for large features)162 > 2. Standard: Proposal + Gherkin (recommended for medium features)163 > 3. Minimal: Gherkin only (recommended for small bug fixes)164 > 4. Technical: Proposal only, no Gherkin (for tooling/infra/refactor changes with no behavior change)165 > 5. Custom: Let me choose each one166167 Mark skipped artifacts as `skipped` in `status.yaml`.168 Tasks are always set to `pending` — task breakdown happens in `/beat:plan`.169 Update `phase` to match the latest completed spec artifact after each creation.1701714. **Create artifacts in pipeline order**172173 Read `beat/config.yaml` if it exists (schema: `references/config-schema.md`). Use `language` for artifact output language, inject `context`, and apply matching `rules` per artifact type throughout creation.174175 For each artifact to create (pipeline order: proposal -> gherkin -> design):176 - Read all completed artifacts for context177 - Invoke prerequisites per the table above (brainstorming before proposal/design — invoke once before the first artifact that needs it; skip for subsequent artifacts if already invoked)178 - **Gherkin only — before writing scenarios:** run the CONTEXT.md four-challenge check (see sub-step below)179 - Create the artifact following the patterns below180 - **After writing:** run the spec self-review (see sub-step below); fix issues inline181 - Update `status.yaml`182 - Show brief progress: "Created <artifact>"183 - If context is critically unclear, pause and ask184185 **CONTEXT.md four-challenge check** (before writing gherkin):186187 Read `beat/CONTEXT.md` if it exists (schema: `references/context-format.md`). Create it lazily when the first term is added — never preemptively.188189 Walk through the brainstorming output and any draft scenario text. For each project-specific term, run these checks and update `beat/CONTEXT.md` **inline** as findings emerge (never batch):190191 1. **Against the glossary** — the term conflicts with an existing entry? Call it out, resolve, update.192 2. **Sharpen fuzzy** — the term is vague or overloaded (e.g. "account" meaning Customer and User both)? Pick the canonical word, list the others as `_Avoid_`.193 3. **Stress-test** — invent edge-case scenarios that probe term boundaries; force the boundary to be named.194 4. **Cross-reference code** — the user states behaviour that the code contradicts? Surface, decide source of truth, update the loser.195196 **Optional grilling:** If `mattpocock-skills:grill-with-docs` is installed and the ambiguity is complex enough to warrant a full grilling session, offer to invoke it once: *"Want to drop into grill-with-docs for a deeper pass on this?"* If the user declines, or the skill isn't installed, continue inline with the four challenges. Beat never hard-requires grill-with-docs.197198 Every project-specific term used in scenarios MUST exist in `beat/CONTEXT.md` before the scenario is written. Bolded terms in scenarios are the canonical form.199200 **Spec self-review** (after writing each artifact):201202 Re-read the artifact with fresh eyes and check:203204 1. **Placeholder scan** — any `TBD`, `TODO`, incomplete sections, vague requirements?205 2. **Internal consistency** — do sections contradict each other? Does the design match the gherkin scenarios?206 3. **Scope check** — is this focused enough for a single implementation plan, or does it need decomposition?207 4. **Ambiguity check** — could any requirement be read two different ways? If so, pick one and make it explicit.208209 Fix issues inline. No need to re-review the fix — just fix and move on.210211 **Artifact patterns:**212 - **Proposal**: Sections: `## Why`, `## What Changes`, `## Impact`213 - **Gherkin**:214 - Read `references/feature-writing.md` for conventions on description blocks, scenario organization, and review checklist215 - Before writing, scan `beat/features/**/*.feature` and `beat/changes/*/features/*.feature` (excluding current change) — read `Feature:` and `Scenario:` lines to map existing coverage, deep-read only overlapping features, avoid duplication and align style216 - SpecFlow style, tags `@happy-path`/`@error-handling`/`@edge-case`217 - Feature description carries PRD essence (must include: As a / I want / So that)218 - Every scenario MUST have a testing layer tag: `@e2e` (user journeys needing a running app) or `@behavior` (business logic testable without a full app; default `@behavior`)219 - Write at behavior level — describe what the system does ("Monthly billing adjusts for short months"), not how a function works ("calculateNextTransactionDate clamps to last day")220 - Use business language — no concrete numeric thresholds, code method names, or internal constants (API contract constants are OK as shared vocabulary)221 - Repeated Given steps use `Background:`222 - Tags must serve a filtering purpose — no decorative tags223 - BDD focuses on high-level acceptance; boundary values and algorithm details belong in unit tests224 - If option 4 (Technical) was chosen, skip gherkin entirely225226 **Modifying existing features** (see `references/testing-conventions.md` for full mechanism):227228 When the scan reveals scenarios in `beat/features/` that need modification:229230 1. **Conflict check**: scan `beat/features/**/*.feature.orig` — if a `.orig` exists for the same file, another change is modifying it. Warn and stop.231 2. **Backup**: rename the original in `beat/features/` to `.feature.orig` (hides it from BDD runners)232 3. **Copy**: copy the original content to `beat/changes/<name>/features/<file>.feature`233 4. **Modify**: edit the scenario(s) in the `changes/` copy (add/change/remove steps, add new scenarios)234 5. **Record**: add the original path to `status.yaml` `gherkin.modified` array235236 New features that don't modify existing scenarios go directly to `changes/<name>/features/` as before.237 - **Design**:238 - Sections: `## Approach`, `## Key Decisions`, `## Components`239 - **ADR gate** — for each Key Decision, run the three-condition check from `references/adr-format.md`:240 1. Hard to reverse? (cost of changing your mind is meaningful)241 2. Surprising without context? (future reader will wonder *"why on earth this way?"*)242 3. Result of a real trade-off? (genuine alternatives existed)243 If **all three** hold, use **AskUserQuestion tool**: *"This decision meets the ADR gate. Lift it into `docs/adr/`?"* On Yes, write a 1-3 sentence ADR using the template in `references/adr-format.md`, increment the highest existing number in `docs/adr/` by one, and add a cross-reference from `design.md` (`See docs/adr/NNNN-slug.md`). On No, continue.244 Create `docs/adr/` lazily — only on first ADR.245 - **Architecture hub suggestion** (Layer 3, advisory) — if `design.md` describes a module-level architecture change (new module, module split/merge, changed module boundaries or responsibilities), suggest updating `beat/ARCHITECTURE.md` — the hub diagram, modules table, or constraints (see `references/architecture-format.md`). Create the hub lazily, only if the project is multi-module and the user accepts. Never block.2462475. **Commit artifacts and show final status**248249 Commit all change artifacts: `git add beat/changes/<name>/ && git commit`250251 Use a descriptive message, e.g. "design(<name>): add spec artifacts".252253 Update phase to the latest completed spec artifact in `status.yaml`.254255 ```256 ## Design Complete: <change-name>257258 Created:259 - proposal.md (or skipped)260 - features/*.feature (or skipped if Technical option)261 - design.md (or skipped)262263 Tasks: pending (run `/beat:plan` to create execution plan)264265 Spec artifacts ready! Review them, then run `/beat:plan` for task breakdown.266 ```267268**Guardrails**269- Gherkin is mandatory by default -- only skip for purely technical changes (option 4: Technical)270- Ask upfront which artifacts to include (don't ask per artifact)271- If change already exists with some artifacts done, only create remaining272- If context is critically unclear, ask -- but prefer reasonable defaults to keep momentum273- Verify each artifact file exists after writing before proceeding274- Tasks are NOT created in this skill — they are handled by `/beat:plan`