wdi-method 0.4.6 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +271 -252
- package/bin/wdi-method.js +1221 -1030
- package/kit/.constitution/method/README.md +73 -169
- package/kit/.constitution/{constitution.md → method/constitution.md} +10 -56
- package/kit/.constitution/{document → method/document}/architecture-guide.md +209 -209
- package/kit/.constitution/{document → method/document}/corpus-guide.md +4 -4
- package/kit/.constitution/{document → method/document}/delivery-flow-guide.md +338 -338
- package/kit/.constitution/{document → method/document}/sdd-guide.md +1 -1
- package/kit/.constitution/{document → method/document}/templates/cross-cutting.md +2 -2
- package/kit/.constitution/{document → method/document}/templates/design-system.md +67 -67
- package/kit/.constitution/{document → method/document}/templates/inventory.md +69 -69
- package/kit/.constitution/{document → method/document}/templates/sdd.md +1 -1
- package/kit/.constitution/{document → method/document}/templates/structure-codebase.md +129 -129
- package/kit/.constitution/{document → method/document}/templates/structure-document.md +90 -90
- package/kit/.constitution/{language-guide.md → method/language-guide.md} +2 -2
- package/kit/.constitution/{method-glossary.md → method/method-glossary.md} +169 -169
- package/kit/.constitution/{repo-guide.md → method/repo-guide.md} +120 -97
- package/kit/.constitution/method/scripts/__pycache__/validate.cpython-314.pyc +0 -0
- package/kit/.constitution/{scripts → method/scripts}/timeline.py +2 -2
- package/kit/.constitution/{scripts → method/scripts}/validate.py +1648 -1581
- package/kit/.constitution/{structure-guide.md → method/structure-guide.md} +3 -3
- package/kit/.constitution/method/why/README.md +169 -0
- package/kit/.constitution/method/{artifact-map.md → why/artifact-map.md} +5 -5
- package/kit/.constitution/method/{portability.md → why/portability.md} +6 -6
- package/kit/.constitution/method/{rationale.md → why/rationale.md} +5 -5
- package/kit/.constitution/project/README.md +68 -68
- package/kit/.constitution/project/constitution.md +64 -0
- package/kit/assets/bmad-custom/bmad-advanced-elicitation.toml +15 -15
- package/kit/assets/bmad-custom/bmad-architecture.toml +33 -33
- package/kit/assets/bmad-custom/bmad-code-review.toml +13 -13
- package/kit/assets/bmad-custom/bmad-correct-course.toml +28 -28
- package/kit/assets/bmad-custom/bmad-prd.toml +42 -42
- package/kit/assets/bmad-custom/bmad-product-brief.toml +34 -34
- package/kit/assets/bmad-custom/bmad-retrospective.toml +9 -9
- package/kit/assets/bmad-custom/bmad-spec.toml +16 -16
- package/kit/assets/bmad-custom/bmad-ux.toml +19 -19
- package/kit/skills/wdi-blueprint/SKILL.md +203 -203
- package/kit/skills/wdi-build/SKILL.md +244 -244
- package/kit/skills/wdi-component/SKILL.md +1 -1
- package/kit/skills/wdi-help/SKILL.md +98 -98
- package/kit/skills/wdi-init/SKILL.md +1 -1
- package/kit/skills/wdi-problem/SKILL.md +90 -90
- package/kit/skills/wdi-product/SKILL.md +127 -127
- package/kit/skills/wdi-reconcile/SKILL.md +2 -2
- package/kit/skills/wdi-report/SKILL.md +205 -205
- package/kit/skills/wdi-systematic-debugging/SKILL.md +193 -193
- package/kit/skills/wdi-ux/SKILL.md +145 -145
- package/kit-overlay/AGENTS.md +215 -212
- package/kit-overlay/README.md +24 -17
- package/kit-overlay/constitution.md +10 -56
- package/kit-overlay/portability.md +6 -6
- package/kit-overlay/repo-guide.md +120 -97
- package/package.json +4 -2
- package/scaffold/.control/questions/blocking.md +1 -1
- package/kit/.constitution/README.md +0 -66
- /package/kit/.constitution/{document → method/document}/bmad-guide.md +0 -0
- /package/kit/.constitution/{document → method/document}/bmad-skill-register.md +0 -0
- /package/kit/.constitution/{document → method/document}/brief-guide.md +0 -0
- /package/kit/.constitution/{document → method/document}/decision-guide.md +0 -0
- /package/kit/.constitution/{document → method/document}/prd-guide.md +0 -0
- /package/kit/.constitution/{document → method/document}/srs-guide.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/addendum.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/architecture-spine.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/brief.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/c4.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/contract.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/decision.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/flow.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/integration.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/lc.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/lifecycle.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/meeting.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/model.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/oq.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/prd.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/questions.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/rtr.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/rules.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/scn.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/srs.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/uc.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/ux.md +0 -0
- /package/kit/.constitution/{document → method/document}/ux-guide.md +0 -0
- /package/kit/.constitution/{scripts → method/scripts}/inventory.py +0 -0
- /package/kit/.constitution/{codebase/brownfield-guide.md → project/codebase-brownfield-guide.md} +0 -0
- /package/kit/.constitution/{codebase/conventions-guide.md → project/codebase-conventions-guide.md} +0 -0
- /package/kit/.constitution/{codebase/stack-guide.md → project/codebase-stack-guide.md} +0 -0
|
@@ -1,338 +1,338 @@
|
|
|
1
|
-
---
|
|
2
|
-
status: Accepted
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Delivery Flow Guide
|
|
6
|
-
|
|
7
|
-
**Loaded when:** opening or closing a gate, opening or closing a wave, setting `mode` or
|
|
8
|
-
`risk_accepted`, and any time something already agreed has to change
|
|
9
|
-
|
|
10
|
-
This is the flow itself: five gates, the one knob that sets document depth, the one field that sets
|
|
11
|
-
review intensity, wave sizing, and what happens when a settled thing has to move. Every other guide
|
|
12
|
-
describes one document; this one describes the order they arrive in.
|
|
13
|
-
|
|
14
|
-
## Two fields, and the separation between them is the point
|
|
15
|
-
|
|
16
|
-
| Field | Where | Controls | Values | Default |
|
|
17
|
-
|---|---|---|---|---|
|
|
18
|
-
| `mode` | `index.yaml` (global) **and** `components.yaml` (per component) | **Document depth** — only this | `catalog` · `outline` · `guarded` · `deep` | `catalog` |
|
|
19
|
-
| `risk_accepted` | `components.yaml`, per component | **Review intensity**, and the risk-acceptance record | `low` · `medium` · `high` | proposed by the agent, confirmed by the owner |
|
|
20
|
-
|
|
21
|
-
Both belong to the owner. They MUST NOT be merged, and neither MUST be derived from the other.
|
|
22
|
-
|
|
23
|
-
Merging them makes one legitimate position unsayable: *"this part is risky, I know, and I manage it with
|
|
24
|
-
tests and review — not with prose."* If depth were controlled by `risk_accepted`, the only route to a
|
|
25
|
-
thin document would be raising `risk_accepted` — which means **lying in the risk record** to buy the
|
|
26
|
-
depth you wanted. Recording what is accepted is the entire reason that field exists.
|
|
27
|
-
|
|
28
|
-
Project size MUST NOT appear as an input anywhere. Size decides how many components there are, not how
|
|
29
|
-
deep each one goes.
|
|
30
|
-
|
|
31
|
-
### `mode` — two scopes, and the per-component one wins
|
|
32
|
-
|
|
33
|
-
| Scope | Where | Means |
|
|
34
|
-
|---|---|---|
|
|
35
|
-
| Global | `mode:` in `.control/registry/index.yaml` | The default for every component that does not state its own |
|
|
36
|
-
| Per component | `mode:` on the component's row in `components.yaml` | Wins over global. Written only where a component genuinely needs to differ |
|
|
37
|
-
|
|
38
|
-
Raising and lowering are both **free and need no justification** — it is a preference, and a preference
|
|
39
|
-
does not have to be defended.
|
|
40
|
-
|
|
41
|
-
**There is no third scope.** `mode` MUST NOT be overridden per wave or per `SPEC.md`. A wave MAY cross
|
|
42
|
-
several components, so a per-wave override would give one component two different depths depending on
|
|
43
|
-
which wave touched it — while the document is one, and living.
|
|
44
|
-
|
|
45
|
-
> Depth belongs to the component, not to the work.
|
|
46
|
-
|
|
47
|
-
### The four modes
|
|
48
|
-
|
|
49
|
-
Each contains everything in the one to its left. Value names are English in YAML **and in prose** — one
|
|
50
|
-
thing, one name.
|
|
51
|
-
|
|
52
|
-
| `mode` | What is written for that component, beyond the blueprint | G4 |
|
|
53
|
-
|---|---|---|
|
|
54
|
-
| `catalog` | Nothing. Code is written from the use case catalogue, the three inventories, and C4 | **skipped** |
|
|
55
|
-
| `outline` | Full flow for the use cases the component exists for — at most 3 · local business rules · `Decision Summary` + the `LC` list in the SDD | 20 min |
|
|
56
|
-
| `guarded` | + **`Failure Behaviour` for every boundary** · `Inherited Constraints` · third-party integration documents | 20 min |
|
|
57
|
-
| `deep` | + ABCE robustness analysis · a contract spec per endpoint · data dictionary · flow diagrams · state machines · branch scenarios | 30 min |
|
|
58
|
-
|
|
59
|
-
**A component at `mode: catalog` skips G4 entirely**, and that is what makes a global `catalog` genuinely
|
|
60
|
-
fast. Control does not disappear; it moves to G3, where the use cases, tables, endpoints, screens, domain
|
|
61
|
-
model, and C4 were all approved.
|
|
62
|
-
|
|
63
|
-
**`guarded` is the mode most often needed and most often absent.** It buys the single most expensive thing
|
|
64
|
-
to lose — the answer to *"what happens if this fails halfway"* for each boundary — without buying the
|
|
65
|
-
machinery around it. It stands without ABCE because the boundary list already exists: the API inventory
|
|
66
|
-
names the endpoints, the screen inventory names the screens.
|
|
67
|
-
|
|
68
|
-
Nine things `mode` never touches: the use case list, the API list, the table list, the screen list, the
|
|
69
|
-
domain model, the actor list, the spine, C4 L1/L2/L3, and cross-component business rules. All nine belong
|
|
70
|
-
to the blueprint at G3, so they exist even at `catalog`. The complete per-file manifest is in
|
|
71
|
-
`.constitution/method/artifact-map.md`.
|
|
72
|
-
|
|
73
|
-
**Lowering `mode` deletes nothing.** A file already written stops being required, and that is all.
|
|
74
|
-
|
|
75
|
-
**Raising `mode` on a component whose code already runs** produces an **as-built record**, not a design.
|
|
76
|
-
The evidence labels in `sdd-guide.md` are mandatory there.
|
|
77
|
-
|
|
78
|
-
### `risk_accepted` — review intensity, never depth
|
|
79
|
-
|
|
80
|
-
The direction is readable from the field name: `high` means *"I accept a lot of risk here"*, so its review
|
|
81
|
-
is the lightest.
|
|
82
|
-
|
|
83
|
-
`structure` and `prose` are the baseline everywhere. What `risk_accepted` decides is what is **added**:
|
|
84
|
-
|
|
85
|
-
| Value | Lenses on the documents | On the code |
|
|
86
|
-
|---|---|---|
|
|
87
|
-
| `low` | `structure` · `prose` · **`edge-case-hunter`** | a two-reviewer panel is **required** |
|
|
88
|
-
| `medium` | `structure` · `prose` · **`edge-case-hunter`** | — |
|
|
89
|
-
| `high` | `structure` · `prose` | — |
|
|
90
|
-
|
|
91
|
-
Review lenses are decided here and **nowhere else**. They MUST NOT be read off `mode`: one component MAY
|
|
92
|
-
sit at `mode: catalog` and still be reviewed the hardest.
|
|
93
|
-
|
|
94
|
-
Two things are not free, and `wdi-init` owns the conversation around both: `risk_accepted: high` on a
|
|
95
|
-
component touching money, personal data, an irreversible action, a contractual promise, or an
|
|
96
|
-
un-rollbackable integration requires a `DEC-` of `type: risk-acceptance` with `risk_accepted_by:` pointing
|
|
97
|
-
at it (V23) — and an outside party who will demand the artifacts as a deliverable puts the touched
|
|
98
|
-
component at `mode: deep` and `risk_accepted: low` whatever the global setting says.
|
|
99
|
-
|
|
100
|
-
## Five gates
|
|
101
|
-
|
|
102
|
-
A gate is named for **what is decided there**, never for the work that precedes it. Owner time is spent at
|
|
103
|
-
these five points only; between them the agents work alone.
|
|
104
|
-
|
|
105
|
-
| Gate | Decides | How often | Budget | Varies by `mode`? |
|
|
106
|
-
|---|---|---|---|---|
|
|
107
|
-
| **G1 Problem** | What the problem is, whose it is, why it earns work | once | 20' | no |
|
|
108
|
-
| **G2 Product** | What is built, and how it feels to use | once per PRD | 45' | no |
|
|
109
|
-
| **G3 Blueprint** | The whole portrait: which use cases, their entities, tables, endpoints, screens, and the invariants binding them | **once per product** | 45' | no |
|
|
110
|
-
| **G4 Component** | How one Product Component is built, and what the choice costs | **once per Product Component** | 20–30' | **yes — the only one** |
|
|
111
|
-
| **G5 Release** | Whether it is done and proven | once per wave | 10' | flags only |
|
|
112
|
-
|
|
113
|
-
**Only one gate changes shape with `mode`.** That is what makes this holdable in one head: four of the five
|
|
114
|
-
are always the same, whatever the setting.
|
|
115
|
-
|
|
116
|
-
The word "area" is not used anywhere. There is only Product Component.
|
|
117
|
-
|
|
118
|
-
### What is in the blueprint, and what is not
|
|
119
|
-
|
|
120
|
-
The most decisive boundary in the method. The previous run broke because "complete" was read as "fully
|
|
121
|
-
specified".
|
|
122
|
-
|
|
123
|
-
| In the blueprint — G3, once | Not in it — G4, per component |
|
|
124
|
-
|---|---|
|
|
125
|
-
| Actor list | Full UC flows |
|
|
126
|
-
| **Use case list**: one line per UC — id, title, actor, the `FR` it satisfies, `critical` | ABCE robustness analysis |
|
|
127
|
-
| Domain entities + relations + columns | Failure behaviour per boundary |
|
|
128
|
-
| **Table list**: one line per table plus its key columns | Data dictionary per column |
|
|
129
|
-
| **Endpoint list**: one line per endpoint | Five-lane contract spec per endpoint |
|
|
130
|
-
| **Screen list**: one line per screen | Field detail per form |
|
|
131
|
-
| **C4 L1 + L2 + L3** | Sequence and flow diagrams |
|
|
132
|
-
| Spine: `AD-N` only | State machines per entity |
|
|
133
|
-
| The error envelope and anything else cross-component | A component's local business rules |
|
|
134
|
-
| Business rules binding more than one component | Branch scenarios |
|
|
135
|
-
|
|
136
|
-
**Blueprint content is untouched by `mode` and by `risk_accepted`.** That is what keeps the order
|
|
137
|
-
non-circular: `mode` is first needed at G4, and it has been available since the tail of G2.
|
|
138
|
-
|
|
139
|
-
**G3 is written per component and gated once.** Both are true and it is not a compromise. The UC catalogue,
|
|
140
|
-
actors, and entities fall into each `<pc>`, so they parallelise with the component as the key. The gate is
|
|
141
|
-
one for the whole product, because its value is seeing the whole picture before choosing which component to
|
|
142
|
-
build. Gating per component means approving seven times, each time seeing a seventh of the picture.
|
|
143
|
-
|
|
144
|
-
Two blueprint contents cannot be per component: a per-component DB inventory is a lie because tables are
|
|
145
|
-
shared, and a per-component spine contradicts what a spine is.
|
|
146
|
-
|
|
147
|
-
**What is reviewed at G3 is the generated roll-up**, `.control/generated/blueprint.md`, not seven files. The
|
|
148
|
-
catalogue, actor list, and domain model stay in their component kernels as their permanent home; the roll-up
|
|
149
|
-
assembles them into one page to read. One fact, one home, one view.
|
|
150
|
-
|
|
151
|
-
### `critical` — narrowed, and it decides something only at `deep`
|
|
152
|
-
|
|
153
|
-
A use case is `critical` when it touches **money, personal data, or an irreversible action.** That is the
|
|
154
|
-
whole definition. The two elastic criteria — "the reason this component exists" and "expensive to discover
|
|
155
|
-
late" — are **repealed**, because with them every use case passed.
|
|
156
|
-
|
|
157
|
-
If the count exceeds a third of a component's use cases, the definition was misapplied: derive it again. It
|
|
158
|
-
MUST NOT be negotiated.
|
|
159
|
-
|
|
160
|
-
## Gate checklists
|
|
161
|
-
|
|
162
|
-
Each question is answered **yes / no / change**. One "no" on a ★ question holds the gate.
|
|
163
|
-
|
|
164
|
-
**On `mode: catalog`, only the ★ questions are asked** — fourteen across all five gates. The rest stay here
|
|
165
|
-
as material, and asking them is never wrong; requiring them is.
|
|
166
|
-
|
|
167
|
-
### G1 Problem · 20'
|
|
168
|
-
|
|
169
|
-
1. ★ Who experiences this problem, by name?
|
|
170
|
-
2. ★ What single number proves this worked, three months from now?
|
|
171
|
-
3. If we do not build it, what breaks or is lost?
|
|
172
|
-
4. Who wins and who loses if this ships?
|
|
173
|
-
5. What is the most fragile assumption here, and what does being wrong cost?
|
|
174
|
-
6. What are we deliberately **not** doing?
|
|
175
|
-
7. Is there a cheaper way to the same outcome?
|
|
176
|
-
|
|
177
|
-
### G2 Product · 45'
|
|
178
|
-
|
|
179
|
-
1. ★ For each `FR`: without it, can the user still finish their job? (yes → defer or drop)
|
|
180
|
-
2. ★ Does every `FR` have a proof of done, in a sentence I understand?
|
|
181
|
-
3. ★ Does this still make sense released on its own?
|
|
182
|
-
4. Do the `NFR` numbers come from reality or from feeling?
|
|
183
|
-
5. Can I retell the main UX flow in five sentences without opening the document?
|
|
184
|
-
6. Which `FR` touch money, personal data, or the client's reputation?
|
|
185
|
-
7. What changed from what I approved at G1, and why?
|
|
186
|
-
|
|
187
|
-
### G3 Blueprint · 45'
|
|
188
|
-
|
|
189
|
-
Read against `.control/generated/blueprint.md`, not against seven files.
|
|
190
|
-
|
|
191
|
-
1. ★ Is every use case title a sentence a user would say, not a system term?
|
|
192
|
-
2. ★ Any `FR` with no use case? (the validator answers this, not an opinion)
|
|
193
|
-
3. ★ Do the three inventories and the use case catalogue describe one system — nothing promised with
|
|
194
|
-
nowhere to live, nothing listed that nothing promised?
|
|
195
|
-
4. Actor list: is one missing, or are two actually the same person?
|
|
196
|
-
5. Does every `AD-N` name the concrete failure it prevents, and would breaking it in one component break
|
|
197
|
-
another?
|
|
198
|
-
6. Which business rule am I not sure is right, and who at the client can confirm it?
|
|
199
|
-
7. Is there still a term I have to guess the meaning of?
|
|
200
|
-
|
|
201
|
-
### G4 Component · 20–30'
|
|
202
|
-
|
|
203
|
-
Skipped entirely at `mode: catalog`.
|
|
204
|
-
|
|
205
|
-
1. ★ What is being staked in this component — and does `risk_accepted` say so out loud?
|
|
206
|
-
2. ★ From `guarded` up: which boundary still has no answer for "the other side is slow, absent, or lying"?
|
|
207
|
-
3. ★ What stops us starting tomorrow? (MUST be empty)
|
|
208
|
-
4. ★ Validators green **and** the review leaving no open finding? (both — one is fact, one is judgement)
|
|
209
|
-
5. Does any choice here lock us to one vendor or technology for more than a year?
|
|
210
|
-
6. From the DAG: which story blocks the most other stories?
|
|
211
|
-
7. Top risk: who owns it, and what is the pivot trigger to turn or give up?
|
|
212
|
-
|
|
213
|
-
### G5 Release · 10'
|
|
214
|
-
|
|
215
|
-
1. ★ Is every RTM row for this wave green?
|
|
216
|
-
2. ★ Is every story's acceptance criteria proven by a test, not by an agent's statement?
|
|
217
|
-
3. What was dropped from the plan, and where is it recorded?
|
|
218
|
-
4. Are new risks found while building in the Risk Register?
|
|
219
|
-
5. What one thing made this wave take longer than expected?
|
|
220
|
-
6. What does the client need to know before this goes live?
|
|
221
|
-
7. What is watched in the first week?
|
|
222
|
-
|
|
223
|
-
## Units of work — `FR`, wave, `SPEC`, story
|
|
224
|
-
|
|
225
|
-
| Unit | Is | Lifetime |
|
|
226
|
-
|---|---|---|
|
|
227
|
-
| `FR-N` | One **feature** — one promise to a user. Born at G2 | permanent, lives across releases |
|
|
228
|
-
| wave | One **unit of work**. Opens at G4 or G5, closes at G5 | one slice of work |
|
|
229
|
-
| `SPEC.md` | The machine contract for **one wave**. A projection of `.what/` + `.how/`, and MUST NOT contain anything new | one wave |
|
|
230
|
-
| story | One piece taken by one builder to a green PR | one wave |
|
|
231
|
-
|
|
232
|
-
**One wave = one `SPEC` = one tracker Task.** One to one to one, with no compound joins.
|
|
233
|
-
|
|
234
|
-
A wave's scope is flexible and **ideally one `FR`**, because an `FR` is human-testable from birth — it has a
|
|
235
|
-
proof of done. One `FR` MAY span several waves, one wave MAY carry several small neighbouring `FR`, and a
|
|
236
|
-
wave MAY be a standalone slice of one large `FR`.
|
|
237
|
-
|
|
238
|
-
A wave MAY cross several Product Components. One condition: **G4 has passed for every component the wave
|
|
239
|
-
touches**, or that component is at `mode: catalog`, whose G4 is skipped by design (V22). That is why G4 and
|
|
240
|
-
the wave are deliberately different units — G4 decides *how one component is built*, a wave decides *which
|
|
241
|
-
work happens now*.
|
|
242
|
-
|
|
243
|
-
`SPEC.md` and story files **are not read by humans.** Both are machine contracts, and no review burden MAY
|
|
244
|
-
be moved onto them. The human review surface stops at the PRD, `.what/`, and `.how/`.
|
|
245
|
-
|
|
246
|
-
### Mapping to a tracker
|
|
247
|
-
|
|
248
|
-
| Jira | WDI | Lifetime |
|
|
249
|
-
|---|---|---|
|
|
250
|
-
| Epic | Product Component | permanent — an Epic never closes |
|
|
251
|
-
| Task | **wave = `SPEC.md`** | one wave |
|
|
252
|
-
| Sub-task | story | one wave |
|
|
253
|
-
| Fix Version | release | one release |
|
|
254
|
-
| Label / custom field | the `CAP-N` and `FR-N` the wave satisfies | — |
|
|
255
|
-
| — a document, not an issue | `.what/` · `.how/` · `SPEC.md` | — |
|
|
256
|
-
|
|
257
|
-
**`FR` is not a Task.** It sits at the level of *promise*, not of *work*: one `FR` MAY be delivered by
|
|
258
|
-
stories in two waves, and one story MAY satisfy part of two `FR`. Mapping promise onto work-issue forces a
|
|
259
|
-
1:1 that does not exist, and produces Tasks opened at G2 that hang across releases. `FR` travels as a label
|
|
260
|
-
on the Task.
|
|
261
|
-
|
|
262
|
-
**The corpus stays the source of truth; the tracker is a view.** Story status is read from story-file
|
|
263
|
-
frontmatter, never copied into two places.
|
|
264
|
-
|
|
265
|
-
**Parallelism.** Between stories through the `depends_on` and `touches` DAG; between waves through
|
|
266
|
-
`depends_on` at wave level. A wave that declares no dependency runs in parallel.
|
|
267
|
-
|
|
268
|
-
## Wave size, and what it does not decide
|
|
269
|
-
|
|
270
|
-
| Size | Shape | Effect |
|
|
271
|
-
|---|---|---|
|
|
272
|
-
| **S** | ≤3 stories, no new `FR` | G4 and G5 merge into one 20-minute session |
|
|
273
|
-
| **M** | 4–12 stories | as usual |
|
|
274
|
-
| **L** | >12 stories, or a new container | the retrospective runs |
|
|
275
|
-
|
|
276
|
-
Size is recorded in `waves.yaml`. It MAY be raised mid-flight; it MUST NOT be lowered.
|
|
277
|
-
|
|
278
|
-
**Size does not choose which gates are active** — that is `mode`'s job. It only governs session merging and
|
|
279
|
-
whether the retrospective is required.
|
|
280
|
-
|
|
281
|
-
**Fast Path** skips every gate. It is available for a fix that changes no `FR`, `UC`, `AD-N`, or domain
|
|
282
|
-
model, is at most one story, and touches no money, personal data, or third-party integration. If an `FR`
|
|
283
|
-
turns out to be touched, work MUST stop and become a wave `S`.
|
|
284
|
-
|
|
285
|
-
## Story-closing checklist — three items
|
|
286
|
-
|
|
287
|
-
Answered as each story finishes, before the next is picked up.
|
|
288
|
-
|
|
289
|
-
1. A decision worth remembering? → `wdi-decision`. A story that contradicts an `AD-N` **stops** rather than
|
|
290
|
-
closing; that is the one case where recording is mandatory.
|
|
291
|
-
2. A trap for the next agent? → recorded where the next agent will read it.
|
|
292
|
-
3. Test names matching what `waves.yaml` records?
|
|
293
|
-
|
|
294
|
-
Five items left this list and did not disappear — they moved to **wave close**, where the information is
|
|
295
|
-
actually available: `LC` registration (V12), the `touches` check, SPEC companion distillation, and the
|
|
296
|
-
structure-map refresh. Registering an `LC` before a story was `ready-for-dev` demanded the answer at the
|
|
297
|
-
moment it was thinnest.
|
|
298
|
-
|
|
299
|
-
## When something settled has to change
|
|
300
|
-
|
|
301
|
-
One trigger: **an artifact other people agreed to needs to change.** Run this matrix and reopen the gates it
|
|
302
|
-
names.
|
|
303
|
-
|
|
304
|
-
| What changes | MUST be re-reviewed | Gate reopened |
|
|
305
|
-
|---|---|---|
|
|
306
|
-
| Business Goal | The whole chain beneath it | G1 |
|
|
307
|
-
| `FR` — its **promise** | Related `UC`, decisions naming it, stories not yet `in-progress`, RTM rows | G2 then G3 |
|
|
308
|
-
| `FR` — its **wording** only | Nothing. The skill at work fixes it, one Revision History row per pass | none |
|
|
309
|
-
| `NFR` | Its enforcing decisions and tests | G4 |
|
|
310
|
-
| UX flow | Related use case specifications, stories not yet `in-progress` | G3 |
|
|
311
|
-
| Business rule | `UC` using it, related tests | G3 for a cross-component rule, G4 for a local one |
|
|
312
|
-
| An `AD-N` | Affected C4 components, stories not yet `in-progress` | G4 |
|
|
313
|
-
| Story acceptance criteria | That story's tests, its RTM row | none — the row going green again is enough |
|
|
314
|
-
|
|
315
|
-
The promise-versus-wording split is owned by `prd-guide.md` and MUST NOT be re-decided here.
|
|
316
|
-
|
|
317
|
-
- A story already `in-progress` MUST NOT have its contract changed. Stop it, return it to `ready-for-dev`,
|
|
318
|
-
then change it.
|
|
319
|
-
- Superseded artifacts are never deleted. Their status becomes `superseded` and points at the replacement.
|
|
320
|
-
- A change that cancels more than 30% of a wave's stories MUST go through `wdi-decision`, which wraps
|
|
321
|
-
`bmad-correct-course`, rather than being patched.
|
|
322
|
-
|
|
323
|
-
**A new PRD arriving after G3 amends the blueprint; it does not repeat it.** The new components are born,
|
|
324
|
-
their rows join the catalogue and the three inventories, and **G3 reopens over the delta only**. The
|
|
325
|
-
45-minute session does not run again for one additional initiative.
|
|
326
|
-
|
|
327
|
-
## Roles
|
|
328
|
-
|
|
329
|
-
| Role | Does | Does not |
|
|
330
|
-
|---|---|---|
|
|
331
|
-
| Product Owner | Answers the checklists, decides at the five gates, sets `mode` and `risk_accepted`, owns risk | Write artifacts, read machine contracts |
|
|
332
|
-
| Agent at G1–G3 | Writes the brief, the PRD, and the blueprint | Decide depth or accept risk |
|
|
333
|
-
| Agent at G4 | Writes one component's behaviour and mechanism | Write code |
|
|
334
|
-
| Builder | One story through to a green PR | Change `.what/`, `.how/`, or an `applied` decision |
|
|
335
|
-
| Review panel | Two different CLI families, neither the builder's | Give a final verdict — findings are adjudicated by the coordinator |
|
|
336
|
-
|
|
337
|
-
Panel composition and CLI/model selection are governed by the global Agent Rules and MUST NOT be restated
|
|
338
|
-
here.
|
|
1
|
+
---
|
|
2
|
+
status: Accepted
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Delivery Flow Guide
|
|
6
|
+
|
|
7
|
+
**Loaded when:** opening or closing a gate, opening or closing a wave, setting `mode` or
|
|
8
|
+
`risk_accepted`, and any time something already agreed has to change
|
|
9
|
+
|
|
10
|
+
This is the flow itself: five gates, the one knob that sets document depth, the one field that sets
|
|
11
|
+
review intensity, wave sizing, and what happens when a settled thing has to move. Every other guide
|
|
12
|
+
describes one document; this one describes the order they arrive in.
|
|
13
|
+
|
|
14
|
+
## Two fields, and the separation between them is the point
|
|
15
|
+
|
|
16
|
+
| Field | Where | Controls | Values | Default |
|
|
17
|
+
|---|---|---|---|---|
|
|
18
|
+
| `mode` | `index.yaml` (global) **and** `components.yaml` (per component) | **Document depth** — only this | `catalog` · `outline` · `guarded` · `deep` | `catalog` |
|
|
19
|
+
| `risk_accepted` | `components.yaml`, per component | **Review intensity**, and the risk-acceptance record | `low` · `medium` · `high` | proposed by the agent, confirmed by the owner |
|
|
20
|
+
|
|
21
|
+
Both belong to the owner. They MUST NOT be merged, and neither MUST be derived from the other.
|
|
22
|
+
|
|
23
|
+
Merging them makes one legitimate position unsayable: *"this part is risky, I know, and I manage it with
|
|
24
|
+
tests and review — not with prose."* If depth were controlled by `risk_accepted`, the only route to a
|
|
25
|
+
thin document would be raising `risk_accepted` — which means **lying in the risk record** to buy the
|
|
26
|
+
depth you wanted. Recording what is accepted is the entire reason that field exists.
|
|
27
|
+
|
|
28
|
+
Project size MUST NOT appear as an input anywhere. Size decides how many components there are, not how
|
|
29
|
+
deep each one goes.
|
|
30
|
+
|
|
31
|
+
### `mode` — two scopes, and the per-component one wins
|
|
32
|
+
|
|
33
|
+
| Scope | Where | Means |
|
|
34
|
+
|---|---|---|
|
|
35
|
+
| Global | `mode:` in `.control/registry/index.yaml` | The default for every component that does not state its own |
|
|
36
|
+
| Per component | `mode:` on the component's row in `components.yaml` | Wins over global. Written only where a component genuinely needs to differ |
|
|
37
|
+
|
|
38
|
+
Raising and lowering are both **free and need no justification** — it is a preference, and a preference
|
|
39
|
+
does not have to be defended.
|
|
40
|
+
|
|
41
|
+
**There is no third scope.** `mode` MUST NOT be overridden per wave or per `SPEC.md`. A wave MAY cross
|
|
42
|
+
several components, so a per-wave override would give one component two different depths depending on
|
|
43
|
+
which wave touched it — while the document is one, and living.
|
|
44
|
+
|
|
45
|
+
> Depth belongs to the component, not to the work.
|
|
46
|
+
|
|
47
|
+
### The four modes
|
|
48
|
+
|
|
49
|
+
Each contains everything in the one to its left. Value names are English in YAML **and in prose** — one
|
|
50
|
+
thing, one name.
|
|
51
|
+
|
|
52
|
+
| `mode` | What is written for that component, beyond the blueprint | G4 |
|
|
53
|
+
|---|---|---|
|
|
54
|
+
| `catalog` | Nothing. Code is written from the use case catalogue, the three inventories, and C4 | **skipped** |
|
|
55
|
+
| `outline` | Full flow for the use cases the component exists for — at most 3 · local business rules · `Decision Summary` + the `LC` list in the SDD | 20 min |
|
|
56
|
+
| `guarded` | + **`Failure Behaviour` for every boundary** · `Inherited Constraints` · third-party integration documents | 20 min |
|
|
57
|
+
| `deep` | + ABCE robustness analysis · a contract spec per endpoint · data dictionary · flow diagrams · state machines · branch scenarios | 30 min |
|
|
58
|
+
|
|
59
|
+
**A component at `mode: catalog` skips G4 entirely**, and that is what makes a global `catalog` genuinely
|
|
60
|
+
fast. Control does not disappear; it moves to G3, where the use cases, tables, endpoints, screens, domain
|
|
61
|
+
model, and C4 were all approved.
|
|
62
|
+
|
|
63
|
+
**`guarded` is the mode most often needed and most often absent.** It buys the single most expensive thing
|
|
64
|
+
to lose — the answer to *"what happens if this fails halfway"* for each boundary — without buying the
|
|
65
|
+
machinery around it. It stands without ABCE because the boundary list already exists: the API inventory
|
|
66
|
+
names the endpoints, the screen inventory names the screens.
|
|
67
|
+
|
|
68
|
+
Nine things `mode` never touches: the use case list, the API list, the table list, the screen list, the
|
|
69
|
+
domain model, the actor list, the spine, C4 L1/L2/L3, and cross-component business rules. All nine belong
|
|
70
|
+
to the blueprint at G3, so they exist even at `catalog`. The complete per-file manifest is in
|
|
71
|
+
`.constitution/method/why/artifact-map.md`.
|
|
72
|
+
|
|
73
|
+
**Lowering `mode` deletes nothing.** A file already written stops being required, and that is all.
|
|
74
|
+
|
|
75
|
+
**Raising `mode` on a component whose code already runs** produces an **as-built record**, not a design.
|
|
76
|
+
The evidence labels in `sdd-guide.md` are mandatory there.
|
|
77
|
+
|
|
78
|
+
### `risk_accepted` — review intensity, never depth
|
|
79
|
+
|
|
80
|
+
The direction is readable from the field name: `high` means *"I accept a lot of risk here"*, so its review
|
|
81
|
+
is the lightest.
|
|
82
|
+
|
|
83
|
+
`structure` and `prose` are the baseline everywhere. What `risk_accepted` decides is what is **added**:
|
|
84
|
+
|
|
85
|
+
| Value | Lenses on the documents | On the code |
|
|
86
|
+
|---|---|---|
|
|
87
|
+
| `low` | `structure` · `prose` · **`edge-case-hunter`** | a two-reviewer panel is **required** |
|
|
88
|
+
| `medium` | `structure` · `prose` · **`edge-case-hunter`** | — |
|
|
89
|
+
| `high` | `structure` · `prose` | — |
|
|
90
|
+
|
|
91
|
+
Review lenses are decided here and **nowhere else**. They MUST NOT be read off `mode`: one component MAY
|
|
92
|
+
sit at `mode: catalog` and still be reviewed the hardest.
|
|
93
|
+
|
|
94
|
+
Two things are not free, and `wdi-init` owns the conversation around both: `risk_accepted: high` on a
|
|
95
|
+
component touching money, personal data, an irreversible action, a contractual promise, or an
|
|
96
|
+
un-rollbackable integration requires a `DEC-` of `type: risk-acceptance` with `risk_accepted_by:` pointing
|
|
97
|
+
at it (V23) — and an outside party who will demand the artifacts as a deliverable puts the touched
|
|
98
|
+
component at `mode: deep` and `risk_accepted: low` whatever the global setting says.
|
|
99
|
+
|
|
100
|
+
## Five gates
|
|
101
|
+
|
|
102
|
+
A gate is named for **what is decided there**, never for the work that precedes it. Owner time is spent at
|
|
103
|
+
these five points only; between them the agents work alone.
|
|
104
|
+
|
|
105
|
+
| Gate | Decides | How often | Budget | Varies by `mode`? |
|
|
106
|
+
|---|---|---|---|---|
|
|
107
|
+
| **G1 Problem** | What the problem is, whose it is, why it earns work | once | 20' | no |
|
|
108
|
+
| **G2 Product** | What is built, and how it feels to use | once per PRD | 45' | no |
|
|
109
|
+
| **G3 Blueprint** | The whole portrait: which use cases, their entities, tables, endpoints, screens, and the invariants binding them | **once per product** | 45' | no |
|
|
110
|
+
| **G4 Component** | How one Product Component is built, and what the choice costs | **once per Product Component** | 20–30' | **yes — the only one** |
|
|
111
|
+
| **G5 Release** | Whether it is done and proven | once per wave | 10' | flags only |
|
|
112
|
+
|
|
113
|
+
**Only one gate changes shape with `mode`.** That is what makes this holdable in one head: four of the five
|
|
114
|
+
are always the same, whatever the setting.
|
|
115
|
+
|
|
116
|
+
The word "area" is not used anywhere. There is only Product Component.
|
|
117
|
+
|
|
118
|
+
### What is in the blueprint, and what is not
|
|
119
|
+
|
|
120
|
+
The most decisive boundary in the method. The previous run broke because "complete" was read as "fully
|
|
121
|
+
specified".
|
|
122
|
+
|
|
123
|
+
| In the blueprint — G3, once | Not in it — G4, per component |
|
|
124
|
+
|---|---|
|
|
125
|
+
| Actor list | Full UC flows |
|
|
126
|
+
| **Use case list**: one line per UC — id, title, actor, the `FR` it satisfies, `critical` | ABCE robustness analysis |
|
|
127
|
+
| Domain entities + relations + columns | Failure behaviour per boundary |
|
|
128
|
+
| **Table list**: one line per table plus its key columns | Data dictionary per column |
|
|
129
|
+
| **Endpoint list**: one line per endpoint | Five-lane contract spec per endpoint |
|
|
130
|
+
| **Screen list**: one line per screen | Field detail per form |
|
|
131
|
+
| **C4 L1 + L2 + L3** | Sequence and flow diagrams |
|
|
132
|
+
| Spine: `AD-N` only | State machines per entity |
|
|
133
|
+
| The error envelope and anything else cross-component | A component's local business rules |
|
|
134
|
+
| Business rules binding more than one component | Branch scenarios |
|
|
135
|
+
|
|
136
|
+
**Blueprint content is untouched by `mode` and by `risk_accepted`.** That is what keeps the order
|
|
137
|
+
non-circular: `mode` is first needed at G4, and it has been available since the tail of G2.
|
|
138
|
+
|
|
139
|
+
**G3 is written per component and gated once.** Both are true and it is not a compromise. The UC catalogue,
|
|
140
|
+
actors, and entities fall into each `<pc>`, so they parallelise with the component as the key. The gate is
|
|
141
|
+
one for the whole product, because its value is seeing the whole picture before choosing which component to
|
|
142
|
+
build. Gating per component means approving seven times, each time seeing a seventh of the picture.
|
|
143
|
+
|
|
144
|
+
Two blueprint contents cannot be per component: a per-component DB inventory is a lie because tables are
|
|
145
|
+
shared, and a per-component spine contradicts what a spine is.
|
|
146
|
+
|
|
147
|
+
**What is reviewed at G3 is the generated roll-up**, `.control/generated/blueprint.md`, not seven files. The
|
|
148
|
+
catalogue, actor list, and domain model stay in their component kernels as their permanent home; the roll-up
|
|
149
|
+
assembles them into one page to read. One fact, one home, one view.
|
|
150
|
+
|
|
151
|
+
### `critical` — narrowed, and it decides something only at `deep`
|
|
152
|
+
|
|
153
|
+
A use case is `critical` when it touches **money, personal data, or an irreversible action.** That is the
|
|
154
|
+
whole definition. The two elastic criteria — "the reason this component exists" and "expensive to discover
|
|
155
|
+
late" — are **repealed**, because with them every use case passed.
|
|
156
|
+
|
|
157
|
+
If the count exceeds a third of a component's use cases, the definition was misapplied: derive it again. It
|
|
158
|
+
MUST NOT be negotiated.
|
|
159
|
+
|
|
160
|
+
## Gate checklists
|
|
161
|
+
|
|
162
|
+
Each question is answered **yes / no / change**. One "no" on a ★ question holds the gate.
|
|
163
|
+
|
|
164
|
+
**On `mode: catalog`, only the ★ questions are asked** — fourteen across all five gates. The rest stay here
|
|
165
|
+
as material, and asking them is never wrong; requiring them is.
|
|
166
|
+
|
|
167
|
+
### G1 Problem · 20'
|
|
168
|
+
|
|
169
|
+
1. ★ Who experiences this problem, by name?
|
|
170
|
+
2. ★ What single number proves this worked, three months from now?
|
|
171
|
+
3. If we do not build it, what breaks or is lost?
|
|
172
|
+
4. Who wins and who loses if this ships?
|
|
173
|
+
5. What is the most fragile assumption here, and what does being wrong cost?
|
|
174
|
+
6. What are we deliberately **not** doing?
|
|
175
|
+
7. Is there a cheaper way to the same outcome?
|
|
176
|
+
|
|
177
|
+
### G2 Product · 45'
|
|
178
|
+
|
|
179
|
+
1. ★ For each `FR`: without it, can the user still finish their job? (yes → defer or drop)
|
|
180
|
+
2. ★ Does every `FR` have a proof of done, in a sentence I understand?
|
|
181
|
+
3. ★ Does this still make sense released on its own?
|
|
182
|
+
4. Do the `NFR` numbers come from reality or from feeling?
|
|
183
|
+
5. Can I retell the main UX flow in five sentences without opening the document?
|
|
184
|
+
6. Which `FR` touch money, personal data, or the client's reputation?
|
|
185
|
+
7. What changed from what I approved at G1, and why?
|
|
186
|
+
|
|
187
|
+
### G3 Blueprint · 45'
|
|
188
|
+
|
|
189
|
+
Read against `.control/generated/blueprint.md`, not against seven files.
|
|
190
|
+
|
|
191
|
+
1. ★ Is every use case title a sentence a user would say, not a system term?
|
|
192
|
+
2. ★ Any `FR` with no use case? (the validator answers this, not an opinion)
|
|
193
|
+
3. ★ Do the three inventories and the use case catalogue describe one system — nothing promised with
|
|
194
|
+
nowhere to live, nothing listed that nothing promised?
|
|
195
|
+
4. Actor list: is one missing, or are two actually the same person?
|
|
196
|
+
5. Does every `AD-N` name the concrete failure it prevents, and would breaking it in one component break
|
|
197
|
+
another?
|
|
198
|
+
6. Which business rule am I not sure is right, and who at the client can confirm it?
|
|
199
|
+
7. Is there still a term I have to guess the meaning of?
|
|
200
|
+
|
|
201
|
+
### G4 Component · 20–30'
|
|
202
|
+
|
|
203
|
+
Skipped entirely at `mode: catalog`.
|
|
204
|
+
|
|
205
|
+
1. ★ What is being staked in this component — and does `risk_accepted` say so out loud?
|
|
206
|
+
2. ★ From `guarded` up: which boundary still has no answer for "the other side is slow, absent, or lying"?
|
|
207
|
+
3. ★ What stops us starting tomorrow? (MUST be empty)
|
|
208
|
+
4. ★ Validators green **and** the review leaving no open finding? (both — one is fact, one is judgement)
|
|
209
|
+
5. Does any choice here lock us to one vendor or technology for more than a year?
|
|
210
|
+
6. From the DAG: which story blocks the most other stories?
|
|
211
|
+
7. Top risk: who owns it, and what is the pivot trigger to turn or give up?
|
|
212
|
+
|
|
213
|
+
### G5 Release · 10'
|
|
214
|
+
|
|
215
|
+
1. ★ Is every RTM row for this wave green?
|
|
216
|
+
2. ★ Is every story's acceptance criteria proven by a test, not by an agent's statement?
|
|
217
|
+
3. What was dropped from the plan, and where is it recorded?
|
|
218
|
+
4. Are new risks found while building in the Risk Register?
|
|
219
|
+
5. What one thing made this wave take longer than expected?
|
|
220
|
+
6. What does the client need to know before this goes live?
|
|
221
|
+
7. What is watched in the first week?
|
|
222
|
+
|
|
223
|
+
## Units of work — `FR`, wave, `SPEC`, story
|
|
224
|
+
|
|
225
|
+
| Unit | Is | Lifetime |
|
|
226
|
+
|---|---|---|
|
|
227
|
+
| `FR-N` | One **feature** — one promise to a user. Born at G2 | permanent, lives across releases |
|
|
228
|
+
| wave | One **unit of work**. Opens at G4 or G5, closes at G5 | one slice of work |
|
|
229
|
+
| `SPEC.md` | The machine contract for **one wave**. A projection of `.what/` + `.how/`, and MUST NOT contain anything new | one wave |
|
|
230
|
+
| story | One piece taken by one builder to a green PR | one wave |
|
|
231
|
+
|
|
232
|
+
**One wave = one `SPEC` = one tracker Task.** One to one to one, with no compound joins.
|
|
233
|
+
|
|
234
|
+
A wave's scope is flexible and **ideally one `FR`**, because an `FR` is human-testable from birth — it has a
|
|
235
|
+
proof of done. One `FR` MAY span several waves, one wave MAY carry several small neighbouring `FR`, and a
|
|
236
|
+
wave MAY be a standalone slice of one large `FR`.
|
|
237
|
+
|
|
238
|
+
A wave MAY cross several Product Components. One condition: **G4 has passed for every component the wave
|
|
239
|
+
touches**, or that component is at `mode: catalog`, whose G4 is skipped by design (V22). That is why G4 and
|
|
240
|
+
the wave are deliberately different units — G4 decides *how one component is built*, a wave decides *which
|
|
241
|
+
work happens now*.
|
|
242
|
+
|
|
243
|
+
`SPEC.md` and story files **are not read by humans.** Both are machine contracts, and no review burden MAY
|
|
244
|
+
be moved onto them. The human review surface stops at the PRD, `.what/`, and `.how/`.
|
|
245
|
+
|
|
246
|
+
### Mapping to a tracker
|
|
247
|
+
|
|
248
|
+
| Jira | WDI | Lifetime |
|
|
249
|
+
|---|---|---|
|
|
250
|
+
| Epic | Product Component | permanent — an Epic never closes |
|
|
251
|
+
| Task | **wave = `SPEC.md`** | one wave |
|
|
252
|
+
| Sub-task | story | one wave |
|
|
253
|
+
| Fix Version | release | one release |
|
|
254
|
+
| Label / custom field | the `CAP-N` and `FR-N` the wave satisfies | — |
|
|
255
|
+
| — a document, not an issue | `.what/` · `.how/` · `SPEC.md` | — |
|
|
256
|
+
|
|
257
|
+
**`FR` is not a Task.** It sits at the level of *promise*, not of *work*: one `FR` MAY be delivered by
|
|
258
|
+
stories in two waves, and one story MAY satisfy part of two `FR`. Mapping promise onto work-issue forces a
|
|
259
|
+
1:1 that does not exist, and produces Tasks opened at G2 that hang across releases. `FR` travels as a label
|
|
260
|
+
on the Task.
|
|
261
|
+
|
|
262
|
+
**The corpus stays the source of truth; the tracker is a view.** Story status is read from story-file
|
|
263
|
+
frontmatter, never copied into two places.
|
|
264
|
+
|
|
265
|
+
**Parallelism.** Between stories through the `depends_on` and `touches` DAG; between waves through
|
|
266
|
+
`depends_on` at wave level. A wave that declares no dependency runs in parallel.
|
|
267
|
+
|
|
268
|
+
## Wave size, and what it does not decide
|
|
269
|
+
|
|
270
|
+
| Size | Shape | Effect |
|
|
271
|
+
|---|---|---|
|
|
272
|
+
| **S** | ≤3 stories, no new `FR` | G4 and G5 merge into one 20-minute session |
|
|
273
|
+
| **M** | 4–12 stories | as usual |
|
|
274
|
+
| **L** | >12 stories, or a new container | the retrospective runs |
|
|
275
|
+
|
|
276
|
+
Size is recorded in `waves.yaml`. It MAY be raised mid-flight; it MUST NOT be lowered.
|
|
277
|
+
|
|
278
|
+
**Size does not choose which gates are active** — that is `mode`'s job. It only governs session merging and
|
|
279
|
+
whether the retrospective is required.
|
|
280
|
+
|
|
281
|
+
**Fast Path** skips every gate. It is available for a fix that changes no `FR`, `UC`, `AD-N`, or domain
|
|
282
|
+
model, is at most one story, and touches no money, personal data, or third-party integration. If an `FR`
|
|
283
|
+
turns out to be touched, work MUST stop and become a wave `S`.
|
|
284
|
+
|
|
285
|
+
## Story-closing checklist — three items
|
|
286
|
+
|
|
287
|
+
Answered as each story finishes, before the next is picked up.
|
|
288
|
+
|
|
289
|
+
1. A decision worth remembering? → `wdi-decision`. A story that contradicts an `AD-N` **stops** rather than
|
|
290
|
+
closing; that is the one case where recording is mandatory.
|
|
291
|
+
2. A trap for the next agent? → recorded where the next agent will read it.
|
|
292
|
+
3. Test names matching what `waves.yaml` records?
|
|
293
|
+
|
|
294
|
+
Five items left this list and did not disappear — they moved to **wave close**, where the information is
|
|
295
|
+
actually available: `LC` registration (V12), the `touches` check, SPEC companion distillation, and the
|
|
296
|
+
structure-map refresh. Registering an `LC` before a story was `ready-for-dev` demanded the answer at the
|
|
297
|
+
moment it was thinnest.
|
|
298
|
+
|
|
299
|
+
## When something settled has to change
|
|
300
|
+
|
|
301
|
+
One trigger: **an artifact other people agreed to needs to change.** Run this matrix and reopen the gates it
|
|
302
|
+
names.
|
|
303
|
+
|
|
304
|
+
| What changes | MUST be re-reviewed | Gate reopened |
|
|
305
|
+
|---|---|---|
|
|
306
|
+
| Business Goal | The whole chain beneath it | G1 |
|
|
307
|
+
| `FR` — its **promise** | Related `UC`, decisions naming it, stories not yet `in-progress`, RTM rows | G2 then G3 |
|
|
308
|
+
| `FR` — its **wording** only | Nothing. The skill at work fixes it, one Revision History row per pass | none |
|
|
309
|
+
| `NFR` | Its enforcing decisions and tests | G4 |
|
|
310
|
+
| UX flow | Related use case specifications, stories not yet `in-progress` | G3 |
|
|
311
|
+
| Business rule | `UC` using it, related tests | G3 for a cross-component rule, G4 for a local one |
|
|
312
|
+
| An `AD-N` | Affected C4 components, stories not yet `in-progress` | G4 |
|
|
313
|
+
| Story acceptance criteria | That story's tests, its RTM row | none — the row going green again is enough |
|
|
314
|
+
|
|
315
|
+
The promise-versus-wording split is owned by `prd-guide.md` and MUST NOT be re-decided here.
|
|
316
|
+
|
|
317
|
+
- A story already `in-progress` MUST NOT have its contract changed. Stop it, return it to `ready-for-dev`,
|
|
318
|
+
then change it.
|
|
319
|
+
- Superseded artifacts are never deleted. Their status becomes `superseded` and points at the replacement.
|
|
320
|
+
- A change that cancels more than 30% of a wave's stories MUST go through `wdi-decision`, which wraps
|
|
321
|
+
`bmad-correct-course`, rather than being patched.
|
|
322
|
+
|
|
323
|
+
**A new PRD arriving after G3 amends the blueprint; it does not repeat it.** The new components are born,
|
|
324
|
+
their rows join the catalogue and the three inventories, and **G3 reopens over the delta only**. The
|
|
325
|
+
45-minute session does not run again for one additional initiative.
|
|
326
|
+
|
|
327
|
+
## Roles
|
|
328
|
+
|
|
329
|
+
| Role | Does | Does not |
|
|
330
|
+
|---|---|---|
|
|
331
|
+
| Product Owner | Answers the checklists, decides at the five gates, sets `mode` and `risk_accepted`, owns risk | Write artifacts, read machine contracts |
|
|
332
|
+
| Agent at G1–G3 | Writes the brief, the PRD, and the blueprint | Decide depth or accept risk |
|
|
333
|
+
| Agent at G4 | Writes one component's behaviour and mechanism | Write code |
|
|
334
|
+
| Builder | One story through to a green PR | Change `.what/`, `.how/`, or an `applied` decision |
|
|
335
|
+
| Review panel | Two different CLI families, neither the builder's | Give a final verdict — findings are adjudicated by the coordinator |
|
|
336
|
+
|
|
337
|
+
Panel composition and CLI/model selection are governed by the global Agent Rules and MUST NOT be restated
|
|
338
|
+
here.
|