wdi-method 0.5.13 → 0.6.0
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 +436 -271
- package/bin/wdi-method.js +198 -5
- package/kit/.constitution/method/README.md +76 -75
- package/kit/.constitution/method/constitution.md +2 -1
- package/kit/.constitution/method/document/architecture-guide.md +10 -10
- package/kit/.constitution/method/document/bmad-guide.md +50 -16
- package/kit/.constitution/method/document/bmad-skill-register.md +74 -71
- package/kit/.constitution/method/document/brief-guide.md +42 -11
- package/kit/.constitution/method/document/corpus-guide.md +146 -11
- package/kit/.constitution/method/document/decision-guide.md +199 -134
- package/kit/.constitution/method/document/delivery-flow-guide.md +154 -83
- package/kit/.constitution/method/document/prd-guide.md +63 -20
- package/kit/.constitution/method/document/sdd-guide.md +5 -4
- package/kit/.constitution/method/document/srs-guide.md +150 -147
- package/kit/.constitution/method/document/templates/addendum.md +70 -71
- package/kit/.constitution/method/document/templates/architecture-spine.md +6 -4
- package/kit/.constitution/method/document/templates/brief.md +132 -110
- package/kit/.constitution/method/document/templates/c4.md +11 -11
- package/kit/.constitution/method/document/templates/contract.md +51 -52
- package/kit/.constitution/method/document/templates/cross-cutting.md +1 -2
- package/kit/.constitution/method/document/templates/design-system.md +0 -1
- package/kit/.constitution/method/document/templates/integration.md +68 -69
- package/kit/.constitution/method/document/templates/inventory.md +0 -1
- package/kit/.constitution/method/document/templates/lc.md +49 -47
- package/kit/.constitution/method/document/templates/lifecycle.md +51 -52
- package/kit/.constitution/method/document/templates/model.md +68 -55
- package/kit/.constitution/method/document/templates/oq.md +45 -45
- package/kit/.constitution/method/document/templates/prd.md +244 -226
- package/kit/.constitution/method/document/templates/questions.md +100 -76
- package/kit/.constitution/method/document/templates/rules.md +46 -47
- package/kit/.constitution/method/document/templates/sdd.md +26 -11
- package/kit/.constitution/method/document/templates/srs.md +46 -25
- package/kit/.constitution/method/document/templates/uc.md +1 -1
- package/kit/.constitution/method/document/templates/ux.md +76 -77
- package/kit/.constitution/method/document/ux-guide.md +115 -99
- package/kit/.constitution/method/language-guide.md +1 -1
- package/kit/.constitution/method/method-glossary.md +29 -16
- package/kit/.constitution/method/scripts/timeline.py +663 -665
- package/kit/.constitution/method/scripts/validate.py +1143 -362
- package/kit/.constitution/method/structure-guide.md +3 -3
- package/kit/.constitution/method/why/README.md +184 -169
- package/kit/.constitution/method/why/artifact-map.md +15 -13
- package/kit/.constitution/method/why/mode-risk-map.md +140 -0
- package/kit/.constitution/method/why/portability.md +1 -1
- package/kit/.constitution/method/why/rationale.md +12 -5
- package/kit/.constitution/project/README.md +2 -2
- package/kit/.constitution/project/codebase-brownfield-guide.md +18 -18
- package/kit/.constitution/project/codebase-conventions-guide.md +18 -18
- package/kit/.constitution/project/codebase-stack-guide.md +18 -18
- package/kit/assets/bmad-custom/bmad-architecture.toml +1 -1
- package/kit/assets/bmad-custom/bmad-correct-course.toml +5 -5
- package/kit/assets/bmad-custom/bmad-prd.toml +9 -3
- package/kit/assets/bmad-custom/bmad-product-brief.toml +6 -2
- package/kit/skills/wdi-blueprint/SKILL.md +71 -10
- package/kit/skills/wdi-build/SKILL.md +233 -122
- package/kit/skills/wdi-component/SKILL.md +8 -6
- package/kit/skills/wdi-decision/SKILL.md +187 -183
- package/kit/skills/wdi-help/SKILL.md +8 -7
- package/kit/skills/wdi-init/SKILL.md +20 -6
- package/kit/skills/wdi-problem/SKILL.md +31 -13
- package/kit/skills/wdi-product/SKILL.md +30 -17
- package/kit/skills/wdi-question/SKILL.md +170 -88
- package/kit/skills/wdi-reconcile/SKILL.md +33 -10
- package/kit/skills/wdi-report/SKILL.md +77 -25
- package/kit/skills/wdi-review/SKILL.md +201 -118
- package/kit/skills/wdi-systematic-debugging/SKILL.md +7 -7
- package/kit/skills/wdi-upgrade/SKILL.md +179 -0
- package/kit/skills/wdi-ux/SKILL.md +35 -11
- package/kit-overlay/AGENTS.md +2 -2
- package/kit-overlay/README.md +76 -75
- package/kit-overlay/constitution.md +2 -1
- package/kit-overlay/portability.md +1 -1
- package/package.json +43 -43
- package/scaffold/.control/product-glossary.md +1 -1
- package/scaffold/.control/registry/goals.yaml +25 -0
- package/scaffold/.control/registry/index.yaml +5 -5
- package/scaffold/.control/registry/specs.yaml +5 -0
- package/scaffold/.control/structure-codebase.md +19 -19
- package/scaffold/.control/structure-document.md +25 -25
- package/kit/.constitution/method/document/templates/rtr.md +0 -61
- package/kit/assets/bmad-custom/bmad-build-auto.toml +0 -10
- package/kit/assets/bmad-custom/bmad-build.toml +0 -52
- package/kit/assets/bmad-custom/bmad-code-review.toml +0 -13
- package/kit/assets/bmad-custom/bmad-retrospective.toml +0 -9
- package/kit/assets/bmad-custom/bmad-spec.toml +0 -16
- package/scaffold/.control/registry/requirements.yaml +0 -15
- package/scaffold/.control/registry/waves.yaml +0 -5
|
@@ -90,7 +90,7 @@ For the codebase map the distinction is exact and MUST NOT be softened:
|
|
|
90
90
|
container gets a heading.** Reading it both ways makes the rule unsatisfiable: a `built: false` container
|
|
91
91
|
— a database, a web server — MUST be registered, because it runs inside the boundary and carries NFRs,
|
|
92
92
|
and MUST NOT get a heading, because no code of ours lives there. So the check is **heading = exactly the
|
|
93
|
-
`built: true` containers**, and
|
|
93
|
+
`built: true` containers**, and `container-built` runs it. `c4-l2-containers.md` still owns the list itself.
|
|
94
94
|
|
|
95
95
|
### Sections that are not units
|
|
96
96
|
|
|
@@ -136,8 +136,8 @@ A folder with no key file MUST still appear in the tree. Folders are complete; f
|
|
|
136
136
|
measured, only felt.
|
|
137
137
|
- A map MUST be refreshed when a base folder is born or removed, when a key file moves or is
|
|
138
138
|
renamed, when a project or container is added, or when a key file's role changes.
|
|
139
|
-
- **
|
|
140
|
-
because a structural change is visible at the end of a
|
|
139
|
+
- **Spec close** carries this hook — it left the ticket-closing checklist along with four other items,
|
|
140
|
+
because a structural change is visible at the end of a spec and guessed at the end of a ticket.
|
|
141
141
|
- A map MUST NOT be edited by hand. `wdi-init` intent `structure` re-derives it from the actual tree;
|
|
142
142
|
a hand edit records what someone remembers, and memory is exactly what the map exists to replace.
|
|
143
143
|
- A map whose **Verified** commit is no longer an ancestor of `HEAD` SHOULD be treated as stale, and
|
|
@@ -1,169 +1,184 @@
|
|
|
1
|
-
---
|
|
2
|
-
status: Reference
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# The WDI Method — orientation
|
|
6
|
-
|
|
7
|
-
**Opened when:** you have never seen this method before, or you have and want the shape back in one reading.
|
|
8
|
-
|
|
9
|
-
This file **explains**. It does not bind — `../document/*-guide.md` does, and where the two disagree the guide
|
|
10
|
-
wins and the disagreement is a defect to report.
|
|
11
|
-
|
|
12
|
-
Five minutes.
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
| **
|
|
34
|
-
| **
|
|
35
|
-
| **
|
|
36
|
-
| **
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
|
47
|
-
|
|
48
|
-
`mode`
|
|
49
|
-
`
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
`
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
|
64
|
-
|
|
65
|
-
|
|
|
66
|
-
|
|
|
67
|
-
|
|
|
68
|
-
|
|
|
69
|
-
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
|
98
|
-
|
|
99
|
-
| `wdi-
|
|
100
|
-
| `wdi-
|
|
101
|
-
| `wdi-
|
|
102
|
-
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
| `wdi-
|
|
113
|
-
| `wdi-
|
|
114
|
-
| `wdi-
|
|
115
|
-
| `wdi-
|
|
116
|
-
| `wdi-
|
|
117
|
-
| `wdi-
|
|
118
|
-
| `wdi-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
|
125
|
-
|
|
126
|
-
|
|
|
127
|
-
|
|
|
128
|
-
|
|
|
129
|
-
|
|
|
130
|
-
|
|
|
131
|
-
|
|
|
132
|
-
|
|
|
133
|
-
| `
|
|
134
|
-
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
|
147
|
-
|
|
148
|
-
|
|
|
149
|
-
|
|
|
150
|
-
|
|
|
151
|
-
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
|
164
|
-
|
|
|
165
|
-
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
1
|
+
---
|
|
2
|
+
status: Reference
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# The WDI Method — orientation
|
|
6
|
+
|
|
7
|
+
**Opened when:** you have never seen this method before, or you have and want the shape back in one reading.
|
|
8
|
+
|
|
9
|
+
This file **explains**. It does not bind — `../document/*-guide.md` does, and where the two disagree the guide
|
|
10
|
+
wins and the disagreement is a defect to report.
|
|
11
|
+
|
|
12
|
+
Five minutes. Four more files sit beside this one: `artifact-map.md` for *"where does this file go"*,
|
|
13
|
+
`mode-risk-map.md` for *"I set a `mode` and a `risk_accepted` — what changes?"*, `portability.md` for which
|
|
14
|
+
files are the method's and which are the product's, and `rationale.md` for *"why is it like this"* — open
|
|
15
|
+
that last one before changing a rule, so you know what you are about to break.
|
|
16
|
+
|
|
17
|
+
## What the method is
|
|
18
|
+
|
|
19
|
+
Two methods joined. **WDI** owns the flow, the gates, and the artifacts nobody else writes. **BMad** owns
|
|
20
|
+
the writing skills where it has one. Every BMad skill is invoked through a WDI wrapper, never directly: the
|
|
21
|
+
wrapper is what checks position, verifies the result against the guide, and lands the memlog.
|
|
22
|
+
|
|
23
|
+
The whole thing rests on one sentence:
|
|
24
|
+
|
|
25
|
+
> Owner time is spent at five points. Between them, the agents work alone.
|
|
26
|
+
|
|
27
|
+
## Five gates
|
|
28
|
+
|
|
29
|
+
A gate is named for **what is decided there**, never for the work before it.
|
|
30
|
+
|
|
31
|
+
| Gate | Decides | How often | Budget |
|
|
32
|
+
|---|---|---|---|
|
|
33
|
+
| **G1 Problem** | What the problem is, whose it is, why it earns work | once | 20' |
|
|
34
|
+
| **G2 Product** | What is built, and how it feels to use | once per PRD | 45' |
|
|
35
|
+
| **G3 Blueprint** | The whole portrait: which use cases, their entities, tables, endpoints, screens, and the invariants binding them | once per **product** | 45' |
|
|
36
|
+
| **G4 Component** | How one Product Component is built, and what the choice costs | once per **component** | 20–30' |
|
|
37
|
+
| **G5 Release** | Whether it is done and proven | once per spec | 10' |
|
|
38
|
+
|
|
39
|
+
**Only G4 can disappear.** At `mode: catalog` its session does not happen at all; the other four always run,
|
|
40
|
+
and what each decides never changes. What `mode` does shorten everywhere is the **checklist**: at `catalog`
|
|
41
|
+
only the ★ questions are required, at G1 and G5 as much as at G4. Sessions fixed, checklist elastic — that is
|
|
42
|
+
what lets the whole system be held in one head.
|
|
43
|
+
|
|
44
|
+
## Two settings, and they control different things
|
|
45
|
+
|
|
46
|
+
| Setting | Where | Controls |
|
|
47
|
+
|---|---|---|
|
|
48
|
+
| `mode` | globally in `index.yaml`, per component in `components.yaml` | **Document depth**, and only that |
|
|
49
|
+
| `risk_accepted` | per component | **Review intensity**, and only that |
|
|
50
|
+
|
|
51
|
+
`mode` takes `catalog` · `outline` · `guarded` · `deep`, and the default is `catalog`. A component at
|
|
52
|
+
`catalog` **skips G4 entirely** — its control moved to G3, where its use cases, tables, endpoints, screens,
|
|
53
|
+
domain model, and C4 were all approved.
|
|
54
|
+
|
|
55
|
+
`risk_accepted` takes `low` · `medium` · `high`, and its direction reads off the name: `high` means *"I
|
|
56
|
+
accept a lot of risk here"*, so its review is the lightest.
|
|
57
|
+
|
|
58
|
+
Keeping them apart is what lets one component be **thin on purpose and reviewed the hardest**. Why that
|
|
59
|
+
matters is in `rationale.md`; what each value demands is in `../document/delivery-flow-guide.md`.
|
|
60
|
+
|
|
61
|
+
## The run, first time through
|
|
62
|
+
|
|
63
|
+
| # | Step | Run | Gate |
|
|
64
|
+
|---|---|---|---|
|
|
65
|
+
| 0 | Set up | `wdi-init` intent `setup` — registry scaffolded, global `mode` set, existing documents reported, structure maps derived | — |
|
|
66
|
+
| 1 | Discovery and brief | `wdi-problem` | **G1** |
|
|
67
|
+
| 2 | PRD, one per initiative | `wdi-product` intent `prd` | **G2** |
|
|
68
|
+
| 2b | UX — only when the interface is a large part of the promise. **Before G2**, because G2 reads its `EXPERIENCE.md` | `wdi-ux` | with **G2** |
|
|
69
|
+
| 3 | Birth the components, set `mode` and `risk_accepted`, and land the waiting UX halves | `wdi-init` intent `component` | — (tail of G2) |
|
|
70
|
+
| 4 | Blueprint | `wdi-blueprint` intent `catalog`, then `platform` | **G3** |
|
|
71
|
+
| 5 | One component's depth | `wdi-component` — as deep as its `mode`; **skipped at `catalog`** | **G4** |
|
|
72
|
+
| 6 | Pick the work | `wdi-report` intent `estimate` — candidate tasks derived from `CAP`/`FR`; one row becomes one spec | — |
|
|
73
|
+
| 7 | Build | `wdi-build` — opens the spec, has the owner run `to-spec` and `to-tickets`, ships each ticket, closes the spec | **G5** |
|
|
74
|
+
|
|
75
|
+
After step 7 the next component enters at **step 5** (at `mode: catalog`, at step 6), not at the
|
|
76
|
+
beginning. Steps 0–4 happen once in the life of the product.
|
|
77
|
+
|
|
78
|
+
**What the human reads is one rendered page per gate**: `.what-rendered/_product-brief/brief.md` at G1,
|
|
79
|
+
`.what-rendered/_prd/<slug>/prd.md` at G2, `.how-rendered/blueprint.md` at G3,
|
|
80
|
+
`.how-rendered/<pc>/SDD-<pc>.md` at G4. The working documents under `.what/` and `.how/` point at the
|
|
81
|
+
registry instead of repeating it and are the AI's. `SPEC.md` and ticket files are **not read by humans**.
|
|
82
|
+
|
|
83
|
+
`to-spec`, `to-tickets`, and `implement` come from [mattpocock/skills](https://github.com/mattpocock/skills):
|
|
84
|
+
in Claude Code `/plugin install mattpocock-skills`; for Codex, Cursor, and other agents
|
|
85
|
+
`npx skills@latest add mattpocock/skills` (copies them into the repo — take `setup-matt-pocock-skills`
|
|
86
|
+
too). Then `/setup-matt-pocock-skills` once, to name the tracker. G1–G4 run without them; `wdi-build`
|
|
87
|
+
and the Fast Path do not.
|
|
88
|
+
|
|
89
|
+
## The run, every time after
|
|
90
|
+
|
|
91
|
+
| Situation | Run |
|
|
92
|
+
|---|---|
|
|
93
|
+
| The next component is being taken on | `wdi-init` intent `mode` or `risk` if either needs changing → `wdi-component` → **G4** → `wdi-build` → **G5** |
|
|
94
|
+
| That component is at `mode: catalog` | straight to `wdi-build`. G4 is skipped |
|
|
95
|
+
| A promise changes where a PRD already exists | `wdi-product` intent `update` — never a second PRD for the same area |
|
|
96
|
+
| A new initiative with a different reader | `wdi-product` intent `prd` → `wdi-init` intent `component` if it births components |
|
|
97
|
+
| A small fix touching no `FR`, `UC`, `AD-N`, or domain model | Fast Path: the owner runs `/implement` directly, with no wrapper. It **stops and becomes a spec `S`** the moment an `FR` is touched |
|
|
98
|
+
| A bug, a failing test, unexpected behaviour | `wdi-systematic-debugging`, **before** any fix is proposed |
|
|
99
|
+
| A planning assumption turned out void | `wdi-decision` — it wraps `bmad-correct-course`, proposes, and changes nothing itself |
|
|
100
|
+
| An estimate or a task list is needed | `wdi-report` intent `estimate` |
|
|
101
|
+
| `wdi-method update` printed an `upgrade` line | `wdi-upgrade`, before any other skill — it moves content into the new shape, never invents it, one commit |
|
|
102
|
+
| You do not know where you are | `wdi-help` |
|
|
103
|
+
|
|
104
|
+
## Sixteen skills
|
|
105
|
+
|
|
106
|
+
Named for the **gate they serve**, so *"which skill do I run"* is answered by *"which gate am I at"*.
|
|
107
|
+
|
|
108
|
+
**Moment-bound** — running them outside their point is wrong:
|
|
109
|
+
|
|
110
|
+
| Skill | Its moment |
|
|
111
|
+
|---|---|
|
|
112
|
+
| `wdi-init` intent `setup` | before G1, once per project |
|
|
113
|
+
| `wdi-problem` | G1 |
|
|
114
|
+
| `wdi-product` | G2 |
|
|
115
|
+
| `wdi-init` intent `component` | tail of G2, and whenever a new PRD births a component |
|
|
116
|
+
| `wdi-blueprint` | G3 |
|
|
117
|
+
| `wdi-component` | G4 |
|
|
118
|
+
| `wdi-build` | G5, one spec per run |
|
|
119
|
+
|
|
120
|
+
**Anytime** — run the moment the trigger appears, without waiting for a gate:
|
|
121
|
+
|
|
122
|
+
| Skill | Its trigger |
|
|
123
|
+
|---|---|
|
|
124
|
+
| `wdi-decision` | A decision worth remembering · a void assumption · an accepted decision to carry into documents |
|
|
125
|
+
| `wdi-question` | Something that cannot be decided now |
|
|
126
|
+
| `wdi-log` | A meeting finished, or a non-technical fact now binds |
|
|
127
|
+
| `wdi-help` | "Where am I, what next" |
|
|
128
|
+
| `wdi-upgrade` | `wdi-method update` just moved the method version, and the summary listed content still in the old shape. Moves it, never invents it; one commit |
|
|
129
|
+
| `wdi-reconcile` | Any time. Read-only — it reports, it never edits |
|
|
130
|
+
| `wdi-review` | Over any document, any time |
|
|
131
|
+
| `wdi-systematic-debugging` | A bug, a failed test, a failed build, unexpected behaviour |
|
|
132
|
+
| `wdi-report` | An estimate at the start · progress periodically · before a client update |
|
|
133
|
+
| `wdi-init` intents `mode` · `risk` · `structure` | Any time |
|
|
134
|
+
| `wdi-ux` | Any time after a PRD exists, if UX is being used |
|
|
135
|
+
|
|
136
|
+
## Who writes what — WDI and BMad
|
|
137
|
+
|
|
138
|
+
| Artifact | Written by | Wrapped in |
|
|
139
|
+
|---|---|---|
|
|
140
|
+
| Product brief | `bmad-product-brief` | `wdi-problem` |
|
|
141
|
+
| PRD | `bmad-prd` | `wdi-product` |
|
|
142
|
+
| UX | `bmad-ux` | `wdi-ux` |
|
|
143
|
+
| Spine + C4 | `bmad-architecture` | `wdi-blueprint` |
|
|
144
|
+
| **UC catalogue · actors · entities · business rules** | **nothing in BMad** | `wdi-blueprint` writes it itself |
|
|
145
|
+
| **SRS and all of `.what/<pc>/`** | **nothing in BMad** | `wdi-component` writes it itself |
|
|
146
|
+
| **SDD and all of `.how/<pc>/`** | **nothing in BMad** | `wdi-component` writes it itself |
|
|
147
|
+
| `SPEC.md` + tickets | `to-spec` · `to-tickets` — **not BMad's**, and the owner runs them | `wdi-build` |
|
|
148
|
+
| Code | `implement`, with `tdd` inside it — same | `wdi-build` |
|
|
149
|
+
| Code review | `code-review` — same | `wdi-build` |
|
|
150
|
+
| Document review | `bmad-review` | `wdi-review` |
|
|
151
|
+
| Course correction | `bmad-correct-course` | `wdi-decision` |
|
|
152
|
+
|
|
153
|
+
**The bold rows are why this method exists.** BMad stops at the promise and starts again at the mechanism,
|
|
154
|
+
and every behaviour in between had no author. Three consequences stick to those artifacts and are handled
|
|
155
|
+
deliberately: no `doc_standards` fires a review, no memlog is born on its own, and no template enforces
|
|
156
|
+
itself.
|
|
157
|
+
|
|
158
|
+
## Where things live
|
|
159
|
+
|
|
160
|
+
| The thing in your hand | Its folder |
|
|
161
|
+
|---|---|
|
|
162
|
+
| How we work — a rule, a guide, a template | `.constitution/` |
|
|
163
|
+
| What currently holds — a decision, a question, a registry, a map | `.control/` |
|
|
164
|
+
| What is promised — the brief, a PRD, a use case, a business rule | `.what/` |
|
|
165
|
+
| How it is built — the spine, C4, an inventory, an SDD, a contract | `.how/` |
|
|
166
|
+
| The complete page a human reads at a gate — regenerated, never edited | `.what-rendered/` · `.how-rendered/` |
|
|
167
|
+
| A skill run's working output | `_bmad-output/` |
|
|
168
|
+
| Scratch that empties when the task closes | `.work/` |
|
|
169
|
+
| The application | `src/` · `web/` |
|
|
170
|
+
|
|
171
|
+
The test that settles anything ambiguous: **is this file still correct after its spec has passed?** Yes →
|
|
172
|
+
the corpus. No → `_bmad-output/`. In doubt, `../document/corpus-guide.md`.
|
|
173
|
+
|
|
174
|
+
## Model choice
|
|
175
|
+
|
|
176
|
+
| Point | Model |
|
|
177
|
+
|---|---|
|
|
178
|
+
| Decisions — proposing a slicing, wording a `DEC-`, preparing a gate | `opus@high` |
|
|
179
|
+
| Writing, derivation, a review-fix pass | `sonnet@high` |
|
|
180
|
+
| Code review panel | Reviewers dispatched separately from the builder — the local Agent Rules govern CLI/model pairing |
|
|
181
|
+
|
|
182
|
+
In a derivation pass, quality comes from the input rather than the model. Running a "find the gap" lens with
|
|
183
|
+
the most careful model produces the most gaps, and each one becomes an open question — a cost nobody sees
|
|
184
|
+
until the question list has stopped being readable.
|
|
@@ -11,7 +11,7 @@ wins and the disagreement is a defect to report.
|
|
|
11
11
|
|
|
12
12
|
It answers three questions and nothing else: which files exist at each `mode`, who owns each one, and how
|
|
13
13
|
the units of work line up. The **rules** about depth live in `../document/delivery-flow-guide.md`; what is
|
|
14
|
-
here is the map.
|
|
14
|
+
here is the map. What `mode` and `risk_accepted` do **together**, cell by cell, is in `mode-risk-map.md`.
|
|
15
15
|
|
|
16
16
|
## The one thing to read first
|
|
17
17
|
|
|
@@ -91,14 +91,15 @@ Repealed: `_platform/architecture/` (one file does not earn a folder) and `<pc>/
|
|
|
91
91
|
|
|
92
92
|
| File | Holds | Present at |
|
|
93
93
|
|---|---|---|
|
|
94
|
-
| `.control/registry/
|
|
94
|
+
| `.control/registry/goals.yaml` | `BG` | every mode |
|
|
95
|
+
| `.control/registry/requirements-<slug>.yaml` | `CAP` · `FR` · `NFR` · `UJ`, one file per PRD initiative | every mode |
|
|
95
96
|
| `.control/registry/usecases.yaml` | `UC-N` with `critical` and the `FR` it satisfies | every mode |
|
|
96
97
|
| `.control/registry/components.yaml` → `product_components` | Component · `mode` · `risk_accepted` · `risk_note` · `owns` · `g4_passed` | every mode |
|
|
97
98
|
| `.control/registry/components.yaml` → `containers` | The containers from C4 L2 | every mode |
|
|
98
99
|
| `.control/registry/components.yaml` → `platform_owns` | Entities no Product Component's promise explains. `_platform` is not a component and has no `mode` | every mode |
|
|
99
100
|
| `.control/registry/components.yaml` → `logical_components` | `LC` | boundary from `guarded`; boundary + control at `deep` |
|
|
100
|
-
| `.control/registry/decisions.yaml` · `
|
|
101
|
-
| `.
|
|
101
|
+
| `.control/registry/decisions.yaml` · `specs.yaml` · `defects.yaml` · `risks.yaml` · `index.yaml` | Decisions · work · defects · risks · the global `mode` and gate map | every mode |
|
|
102
|
+
| `.how-rendered/blueprint.md` | **The one-page roll-up reviewed at G3** | every mode |
|
|
102
103
|
| `.control/generated/decisions.md` | The flat index of every `DEC-` | every mode |
|
|
103
104
|
| `.control/generated/estimate.md` | The candidate task table | every mode |
|
|
104
105
|
| `.control/generated/rtm` · `status` · `dag` · `components` · `risks` | Traceability and progress | every mode |
|
|
@@ -116,7 +117,7 @@ someone else performs. `../document/corpus-guide.md` holds the binding version o
|
|
|
116
117
|
| `wdi-blueprint` | `.what/<pc>/` § Actor Register + § UC Catalogue + `03-domain/domain-model.md` · `.what/business-rules.md` · `.control/product-glossary.md` · all of `.how/_platform/` except `design-system.md` |
|
|
117
118
|
| `wdi-component` | `.what/<pc>/` slots `02`–`05` · `.how/<pc>/` except `01-ux/` |
|
|
118
119
|
| `wdi-ux` | `EXPERIENCE.md` · `.how/<pc>/01-ux/` · `.how/_platform/design-system.md` |
|
|
119
|
-
| `wdi-build` | `
|
|
120
|
+
| `wdi-build` | `specs.yaml` · `_bmad-output/specs/` · `src/` · `web/` |
|
|
120
121
|
| `wdi-decision` | `.control/decisions/` · `decisions.yaml`, and at apply time whatever `touches` names — through each file's owner |
|
|
121
122
|
| `wdi-question` | `.control/questions/` |
|
|
122
123
|
| `wdi-log` | `.control/meetings/` · `.control/project-non-technical-log.md` |
|
|
@@ -129,14 +130,15 @@ also change things — otherwise there is nothing left to check with.
|
|
|
129
130
|
|
|
130
131
|
## How the units of work line up
|
|
131
132
|
|
|
132
|
-
`FR` is a **promise** and permanent; a
|
|
133
|
-
contract for one
|
|
133
|
+
`FR` is a **promise** and permanent; a spec is a **unit of work** and temporary; `SPEC.md` is the machine
|
|
134
|
+
contract for one spec — written from size `M` up, and at `S` the tickets are the contract; a ticket is one
|
|
135
|
+
vertical slice one builder takes to a green PR.
|
|
134
136
|
|
|
135
|
-
One
|
|
136
|
-
|
|
137
|
-
satisfy part of two `FR`.
|
|
137
|
+
One spec = one parent issue, and a ticket is an **issue**, not a sub-task, because its blocking edges are
|
|
138
|
+
what make the frontier visible in the tracker's own UI. **`FR` is not an issue** — it travels as a label,
|
|
139
|
+
because one `FR` can be delivered by tickets in two specs and one ticket can satisfy part of two `FR`.
|
|
138
140
|
|
|
139
|
-
The binding version of all of this, including why a
|
|
141
|
+
The binding version of all of this, including why a spec MAY cross components and what has to be true
|
|
140
142
|
first, is in `../document/delivery-flow-guide.md`. It is not restated here.
|
|
141
143
|
|
|
142
144
|
## What needs no template, and why
|
|
@@ -148,8 +150,8 @@ Stated so the next completeness audit does not report it again:
|
|
|
148
150
|
| `.control/generated/*` | Script output. Its shape is code, not a template |
|
|
149
151
|
| `.control/reports/<period>.md` | Rendered by `timeline.py` |
|
|
150
152
|
| `.control/project-non-technical-log.md` | States its own entry shape in its own header, and there is exactly one such file |
|
|
151
|
-
| `SPEC.md` ·
|
|
153
|
+
| `SPEC.md` · ticket files | Their shape belongs to `to-spec` and `to-tickets`. WDI owns where they land, not how they read |
|
|
152
154
|
| Registry `*.yaml` | Their shape is the comment block at the head of each file, plus the validator |
|
|
153
155
|
|
|
154
|
-
Everything else in this map has a template in `../document/templates/` —
|
|
156
|
+
Everything else in this map has a template in `../document/templates/` — 26 of them, and every row above is
|
|
155
157
|
covered by one.
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
---
|
|
2
|
+
status: Reference
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Mode × Risk Map — what the two settings do together
|
|
6
|
+
|
|
7
|
+
**Opened when:** a `mode` and a `risk_accepted` have been picked for a component and someone asks
|
|
8
|
+
*"so what actually changes?"* — or the same question before picking.
|
|
9
|
+
|
|
10
|
+
This file **explains**. It does not bind — `../document/*-guide.md` does, and where the two disagree the
|
|
11
|
+
guide wins and the disagreement is a defect to report.
|
|
12
|
+
|
|
13
|
+
`../document/delivery-flow-guide.md` defines each field. `artifact-map.md` lists which files exist at each
|
|
14
|
+
`mode`. Neither shows the two fields **side by side**, and that is the only gap this file fills.
|
|
15
|
+
|
|
16
|
+
## This is not a decision matrix
|
|
17
|
+
|
|
18
|
+
All twelve combinations are legal, and eleven of them need no justification at all. Reading a column MUST
|
|
19
|
+
NOT be used to derive `mode` from `risk_accepted`, or the reverse: the whole reason they are two fields is
|
|
20
|
+
that documents and reviews are two different mitigations, and a component MAY be **thin on purpose and
|
|
21
|
+
reviewed the hardest**. `rationale.md` holds why.
|
|
22
|
+
|
|
23
|
+
What the table below gives is **consequence**, not recommendation. Two things in it are not free, and both
|
|
24
|
+
are named in the guide, not here: `risk_accepted: high` on a component whose `risk_note` names money,
|
|
25
|
+
personal data, an irreversible action, a contractual promise, or an un-rollbackable integration needs a
|
|
26
|
+
named acceptance in `risk_accepted_by` (`high-risk-named`) — and an outside party who will demand the artifacts as a
|
|
27
|
+
deliverable puts the touched component at `mode: deep` **and** `risk_accepted: low`, which is the one cell
|
|
28
|
+
the method assigns rather than offers.
|
|
29
|
+
|
|
30
|
+
## Axis 1 — what moves when only `mode` moves
|
|
31
|
+
|
|
32
|
+
Cumulative; each row contains the one above. Full per-file manifest in `artifact-map.md`.
|
|
33
|
+
|
|
34
|
+
| `mode` | Beyond the blueprint, per component | G4 | `critical` |
|
|
35
|
+
|---|---|---|---|
|
|
36
|
+
| `catalog` | nothing — zero extra files. The SDD stays a skeleton | **skipped entirely** | decides nothing |
|
|
37
|
+
| `outline` | `Decision Summary` · the `LC` list · full flow for at most 3 use cases · local business rules | 20' | decides nothing |
|
|
38
|
+
| `guarded` | + `Failure Behaviour` for every boundary · `Inherited Constraints` · third-party integration documents · boundary `LC` registered | 20' | decides nothing |
|
|
39
|
+
| `deep` | + ABCE robustness analysis · contract spec per endpoint · data dictionary · flow diagrams · state machines · branch scenarios | 30' | **every `critical` UC gets a full flow** |
|
|
40
|
+
|
|
41
|
+
Untouched at every `mode`: the use case list, the API list, the table list, the screen list, the domain
|
|
42
|
+
model, the actor list, the spine, C4 L1–L3, and cross-component business rules. All nine are blueprint
|
|
43
|
+
content, born at G3, which the depth knob does not reach.
|
|
44
|
+
|
|
45
|
+
## Axis 2 — what moves when only `risk_accepted` moves
|
|
46
|
+
|
|
47
|
+
| `risk_accepted` | Lenses on the documents | On the code | `review-trace` trace on the component's docs |
|
|
48
|
+
|---|---|---|---|
|
|
49
|
+
| `low` | structure · prose · **edge-case-hunter** | a **two-reviewer panel is required** | demanded |
|
|
50
|
+
| `medium` | structure · prose · **edge-case-hunter** | — | demanded |
|
|
51
|
+
| `high` | structure · prose | — | not demanded — the risk is already accepted on the record |
|
|
52
|
+
|
|
53
|
+
**The contract sits outside that last column entirely**, and it is the one artifact this field never
|
|
54
|
+
reaches: it always carries `edge-case-hunter`, and `review-trace` always demands `spec_reviewed` on every spec that
|
|
55
|
+
carries tickets — `high` included. A spec is not a component, so `risk_accepted` has no say over it. It is
|
|
56
|
+
what a builder works from, and a branch missed there surfaces as a bug at G5.
|
|
57
|
+
|
|
58
|
+
One trace covers the whole spec, never one per ticket. Where `SPEC.md` exists the trace covers it; at size
|
|
59
|
+
`S` there is none, and the trace covers the **ticket set as one artifact**.
|
|
60
|
+
|
|
61
|
+
## The twelve cells
|
|
62
|
+
|
|
63
|
+
`g4` = the G4 session · `panel` = the two-reviewer code panel · `review-trace` targets assume the file is born.
|
|
64
|
+
|
|
65
|
+
| `mode` + `risk_accepted` | Owner time at G4 | Document review | Code | Component trace on | Also |
|
|
66
|
+
|---|---|---|---|---|---|
|
|
67
|
+
| `catalog` + `low` | none — skipped | structure · prose · edge-case-hunter | **panel** | `SRS` only | The cell the split exists for: thin on purpose, reviewed hardest |
|
|
68
|
+
| `catalog` + `medium` | none — skipped | structure · prose · edge-case-hunter | — | `SRS` only | The cheapest cell that still hunts edge cases |
|
|
69
|
+
| `catalog` + `high` | none — skipped | structure · prose | — | nothing | Nothing in the flow asks what is being staked — only `wdi-init`'s disclosure and `high-risk-named` do |
|
|
70
|
+
| `outline` + `low` | 20' | structure · prose · edge-case-hunter | **panel** | `SRS` · `SDD` after G4 | Flows for 3 use cases, checked hard |
|
|
71
|
+
| `outline` + `medium` | 20' | structure · prose · edge-case-hunter | — | `SRS` · `SDD` after G4 | — |
|
|
72
|
+
| `outline` + `high` | 20' | structure · prose | — | nothing | Flows exist; no lens looks for the branch they miss |
|
|
73
|
+
| `guarded` + `low` | 20' | structure · prose · edge-case-hunter | **panel** | `SRS` · `SDD` after G4 | Boundary answers written **and** hunted. The heaviest cell short of `deep` |
|
|
74
|
+
| `guarded` + `medium` | 20' | structure · prose · edge-case-hunter | — | `SRS` · `SDD` after G4 | — |
|
|
75
|
+
| `guarded` + `high` | 20' | structure · prose | — | nothing | Failure behaviour is written and taken at its word |
|
|
76
|
+
| `deep` + `low` | 30' | structure · prose · edge-case-hunter | **panel** | `SRS` · `SDD` after G4 | The floor an outside deliverable is put at. Not a preference there |
|
|
77
|
+
| `deep` + `medium` | 30' | structure · prose · edge-case-hunter | — | `SRS` · `SDD` after G4 | — |
|
|
78
|
+
| `deep` + `high` | 30' | structure · prose | — | nothing | Depth bought, scrutiny declined. Legal, and worth saying out loud once |
|
|
79
|
+
|
|
80
|
+
**The trace column is scoped to a component's own documents.** The spec's own trace is left out of it
|
|
81
|
+
because it is demanded in **every** cell: `review-trace` asks for `spec_reviewed` carrying `edge-case-hunter` on every
|
|
82
|
+
spec with tickets, whatever `risk_accepted` says. Reading a `nothing` in that column as *"no trace is
|
|
83
|
+
demanded anywhere in this cell"* is the one misreading it invites, and it is wrong.
|
|
84
|
+
|
|
85
|
+
## Before the components exist — G1 and G2
|
|
86
|
+
|
|
87
|
+
The question this section exists to answer: *"at G1 and G2, is every combination treated the same?"*
|
|
88
|
+
|
|
89
|
+
For `risk_accepted`, yes — and not as a policy choice. **The field has no value yet.** It is born per
|
|
90
|
+
component when `wdi-init` intent `component` runs at the **tail of G2**, so nothing before that point can read
|
|
91
|
+
it. One consequence worth knowing: the brief and the PRD are artifacts with no component, so their review is
|
|
92
|
+
`structure · prose` whatever any component is later set to, and no `reviewed:` trace is written on them at all.
|
|
93
|
+
|
|
94
|
+
For `mode`, almost — and the exception is real:
|
|
95
|
+
|
|
96
|
+
| At G1 and G2 | Identical at every setting? |
|
|
97
|
+
|---|---|
|
|
98
|
+
| What the gate decides, its budget (20' · 45'), how often it runs | **yes** |
|
|
99
|
+
| The artifacts: `brief.md` · `_product-brief/addendum.md` · `prd.md` · `_prd/<initiative>/addendum.md` | **yes** — `always` at all four modes |
|
|
100
|
+
| Checklist length | **no** — at `catalog` G1 asks 2 of 7 and G2 asks 3 of 7 |
|
|
101
|
+
|
|
102
|
+
Only the **global** `mode` can be in play there; the per-component one does not exist yet. And among the G2
|
|
103
|
+
questions that stop being required at `catalog` is *"which `FR` touch money, personal data, or the client's
|
|
104
|
+
reputation?"* — which does not open a hole: `wdi-init` intents `mode` and `risk` MUST read the `FR` falling to
|
|
105
|
+
the component and name what is touched before proposing any value. The disclosure moves, it does not vanish.
|
|
106
|
+
|
|
107
|
+
## Where the two fields actually meet
|
|
108
|
+
|
|
109
|
+
Four points, and they are the whole reason this file exists. Everywhere else the fields are independent
|
|
110
|
+
and each row above is just its axis restated.
|
|
111
|
+
|
|
112
|
+
1. **The `SDD` review trace is the one demand that reads both fields.** `review-trace` demands it only when
|
|
113
|
+
`risk_accepted` is `low` or `medium` **and** `mode` is above `catalog` **and** `g4_passed` is set. At
|
|
114
|
+
`catalog` the SDD skeleton is its **finished** form, and a trace on thirteen lines of template comments
|
|
115
|
+
is theater.
|
|
116
|
+
2. **The `SRS` trace reads only risk.** It is demanded at every `mode`, `catalog` included, because the
|
|
117
|
+
SRS carries the Actor Register and the UC Catalogue — G3 content, born whatever the depth.
|
|
118
|
+
3. **The spine's trace is product-wide.** One component at `low` or `medium` anywhere puts
|
|
119
|
+
`ARCHITECTURE-SPINE.md` under `review-trace`, however the other components are set.
|
|
120
|
+
4. **`catalog` removes the gate where risk is spoken about.** G4's first ★ question is *"what is being
|
|
121
|
+
staked in this component — and does `risk_accepted` say so out loud?"* At `catalog` that session does
|
|
122
|
+
not happen, so the disclosure at `wdi-init` intent `risk` and the `risk_note` it writes are the only
|
|
123
|
+
place the answer is recorded. That is a consequence, not an argument for raising `mode`: the same
|
|
124
|
+
answer costs one line in `risk_note` and does not need a document to hold it.
|
|
125
|
+
|
|
126
|
+
Two more mechanics, neither of which reads `risk_accepted`:
|
|
127
|
+
|
|
128
|
+
- **`spec-after-g4`** — from `outline` up, a spec MUST NOT touch a component whose `g4_passed` is unset. At `catalog`
|
|
129
|
+
the check passes by design, because there is no G4 to pass.
|
|
130
|
+
- **G4's second ★ question** — *"which boundary still has no answer for the other side being slow, absent,
|
|
131
|
+
or lying"* — is asked from `guarded` up. It is the question `guarded` exists to buy.
|
|
132
|
+
|
|
133
|
+
## Changing a cell later
|
|
134
|
+
|
|
135
|
+
| Move | Costs | Note |
|
|
136
|
+
|---|---|---|
|
|
137
|
+
| Raising or lowering `mode` | nothing. No justification | Lowering **deletes nothing** — a written file stops being required, and that is all |
|
|
138
|
+
| Raising `mode` on a component whose code already runs | the evidence labels in `sdd-guide.md` | What comes out is an **as-built record**, not a design |
|
|
139
|
+
| Lowering `risk_accepted` toward `low` | a review that now has to actually run | A stale trace MUST be re-earned, never re-dated — except for a wording-only change, which `wdi-review` lets you re-stamp |
|
|
140
|
+
| Raising `risk_accepted` to `high` on a sensitive component | a person and a date in `risk_accepted_by` | `high-risk-named` checks somebody is named, and it discloses rather than vetoes |
|