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
package/kit-overlay/AGENTS.md
CHANGED
|
@@ -1,212 +1,215 @@
|
|
|
1
|
-
# Agent Rules — {product}
|
|
2
|
-
|
|
3
|
-
<!-- BEGIN:wdi-method -->
|
|
4
|
-
This repo uses **WDI Method**. It wraps BMad; it does not replace it. This marked
|
|
5
|
-
block is owned by the WDI Method package and is **replaced on every update**.
|
|
6
|
-
Product rules belong **outside** it (extra boundaries, `## Code`, stack notes).
|
|
7
|
-
A fact written inside this block will be overwritten.
|
|
8
|
-
|
|
9
|
-
Product identity lives in `.control/registry/index.yaml` (`product.name`, optional
|
|
10
|
-
`product.client`). G1 confirms it. This file MUST NOT become a second source of the name.
|
|
11
|
-
|
|
12
|
-
## Install and update
|
|
13
|
-
|
|
14
|
-
BMad first, then WDI Method. In the product repo:
|
|
15
|
-
|
|
16
|
-
```bash
|
|
17
|
-
npx bmad-method install
|
|
18
|
-
npx wdi-method
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
No subcommand opens the installer TUI. It detects an existing install and offers
|
|
22
|
-
**update**. Non-interactive:
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
npx wdi-method install --yes
|
|
26
|
-
npx wdi-method update --yes
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
BMad: https://github.com/bmad-code-org/BMAD-METHOD
|
|
30
|
-
WDI Method: https://github.com/wiradigitalid/wdi-method
|
|
31
|
-
|
|
32
|
-
A method file MUST NOT be invented here. If a rule is wrong, fix it in the WDI
|
|
33
|
-
Method package, then update.
|
|
34
|
-
|
|
35
|
-
This file is loaded every session; everything else is loaded **lazily**, only when
|
|
36
|
-
the task matches.
|
|
37
|
-
|
|
38
|
-
## Language
|
|
39
|
-
|
|
40
|
-
**Two settings decide this, and they live in `.control/registry/index.yaml` under `policy:`.** Both are
|
|
41
|
-
free text and both default to English:
|
|
42
|
-
|
|
43
|
-
| Setting | Governs |
|
|
44
|
-
|---|---|
|
|
45
|
-
| `doc_language` | The prose of working documents in `.what/` · `.how/` · `.control/` |
|
|
46
|
-
| `doc_filename_language` | The slug part of a document filename |
|
|
47
|
-
|
|
48
|
-
Read those two before writing a document. A technical term the industry writes in English MUST be left in
|
|
49
|
-
English whatever the setting says — an equivalent MUST NOT be invented for it.
|
|
50
|
-
|
|
51
|
-
**These files are always English, whatever the settings say:** `AGENTS.md`, `CLAUDE.md`, and everything
|
|
52
|
-
under `.constitution/`. They are agent instructions, and they travel to every repo through the
|
|
53
|
-
`wdi-method` package. The one exception is `.constitution/project/`, which is this product's own room.
|
|
54
|
-
|
|
55
|
-
**Always English and never a setting**, because a script matches them:
|
|
56
|
-
|
|
57
|
-
- method terminology — `DEC` `SRS` `SDD` `UC` `FR` `AD`, the gate names, the values of `mode` and
|
|
58
|
-
`risk_accepted`
|
|
59
|
-
- document code prefixes — `UC-` `DEC-` `SRS-`; only the slug after them follows `doc_filename_language`
|
|
60
|
-
- markers — `[NEEDS CONFIRMATION]` `[MISSING]` `[ASSUMED]` `[PARTIAL]`, and `yes`/`no` in a `critical`
|
|
61
|
-
column
|
|
62
|
-
- registry values — `mode: catalog`, `status: applied`, `risk_accepted: low`. Used as written in prose
|
|
63
|
-
too: one thing, one name
|
|
64
|
-
- code identifiers, database columns, config keys — `language-guide.md` owns these
|
|
65
|
-
|
|
66
|
-
**A corpus written before these settings existed MUST NOT be migrated for them.** The readers accept more
|
|
67
|
-
than one language, so existing documents keep working and only new writing follows the setting.
|
|
68
|
-
|
|
69
|
-
## The thing in your hand → its folder
|
|
70
|
-
|
|
71
|
-
Read this instead of reasoning about what `.what/` and `.how/` mean.
|
|
72
|
-
|
|
73
|
-
| The thing in your hand | Its folder |
|
|
74
|
-
|---|---|
|
|
75
|
-
| A rule, a guide, a template — how we work | `.constitution/` |
|
|
76
|
-
| A rule that binds **only this product** | `.constitution/project/` — `update` never writes over it, `promote` never publishes it |
|
|
77
|
-
| The explanation of a rule, never a rule itself | `.constitution/method/` |
|
|
78
|
-
| A decision, an open question, a registry, a structure map, minutes | `.control/` |
|
|
79
|
-
| The brief, a PRD, a use case, a business rule — what is promised | `.what/` |
|
|
80
|
-
| The spine, C4, an inventory, an SDD, a contract — how it is built | `.how/` |
|
|
81
|
-
| A skill run's working output, and documents that predate the method | `_bmad-output/` |
|
|
82
|
-
| Scratch that empties when the task closes | `.work/` |
|
|
83
|
-
| The application | named under `## Code` below |
|
|
84
|
-
|
|
85
|
-
## Layer boundaries
|
|
86
|
-
|
|
87
|
-
| Layer | Answers | MUST NOT hold |
|
|
88
|
-
|---|---|---|
|
|
89
|
-
| `.constitution/` | How we work | State, decisions, product content |
|
|
90
|
-
| `.control/` | What currently holds and what has been decided | Rules |
|
|
91
|
-
| `.what/` | What is promised | Solution shape — tables, endpoints, technology |
|
|
92
|
-
| `.how/` | How it is built | Promises to the user |
|
|
93
|
-
| `_bmad-output/` | Work in progress; committed, not curated | Anything still correct after its wave has passed |
|
|
94
|
-
| `.work/` | Scratch; emptied when a task closes | Secrets, commercial figures, anything meant as authority |
|
|
95
|
-
|
|
96
|
-
The placement test: **is this file still correct after its wave has passed?** Yes → the corpus. No →
|
|
97
|
-
`_bmad-output/`. In doubt → `document/corpus-guide.md`.
|
|
98
|
-
|
|
99
|
-
The method does not use a `docs/` layer for corpus or rules. A leftover `docs/` folder is inventory
|
|
100
|
-
to sort, not a second home.
|
|
101
|
-
|
|
102
|
-
## Depth and review intensity — two fields, never merged
|
|
103
|
-
|
|
104
|
-
| Field | Where | Controls |
|
|
105
|
-
|---|---|---|
|
|
106
|
-
| `mode` | `index.yaml` globally, `components.yaml` per component | **Document depth**, and only that. `catalog` · `outline` · `guarded` · `deep`; default `catalog` |
|
|
107
|
-
| `risk_accepted` | `components.yaml` per component | **Review intensity**, and only that. `low` · `medium` · `high` |
|
|
108
|
-
|
|
109
|
-
Per-component `mode` wins over global, and there is no third scope — `mode` MUST NOT be overridden per
|
|
110
|
-
wave or per `SPEC.md`. A component at `mode: catalog` **skips G4 entirely**. Neither field MUST be
|
|
111
|
-
derived from the other: one component MAY be thin on purpose and reviewed the hardest.
|
|
112
|
-
`document/delivery-flow-guide.md` owns both; `method/rationale.md` says why they are separate.
|
|
113
|
-
|
|
114
|
-
## The five gates and the fifteen skills
|
|
115
|
-
|
|
116
|
-
| Gate | Decides | Skill |
|
|
117
|
-
|---|---|---|
|
|
118
|
-
| **G1 Problem** | What the problem is, whose it is, why it earns work | `wdi-problem` |
|
|
119
|
-
| **G2 Product** | What is built, and how it feels to use | `wdi-product` · optional `wdi-ux` |
|
|
120
|
-
| **G3 Blueprint** | The whole portrait, once per product | `wdi-blueprint` |
|
|
121
|
-
| **G4 Component** | How one component is built — **skipped at `catalog`** | `wdi-component` |
|
|
122
|
-
| **G5 Release** | Whether it is done and proven | `wdi-build` |
|
|
123
|
-
|
|
124
|
-
Before G1 and at the tail of G2: `wdi-init`, five intents — `setup` · `component` · `mode` · `risk` ·
|
|
125
|
-
`structure`.
|
|
126
|
-
|
|
127
|
-
Any time: `wdi-decision` · `wdi-question` · `wdi-log` · `wdi-help` · `wdi-reconcile` · `wdi-review` ·
|
|
128
|
-
`wdi-report` · `wdi-systematic-debugging`.
|
|
129
|
-
|
|
130
|
-
**No BMad skill is invoked directly.** Each has a wrapper, and the wrapper is what checks position,
|
|
131
|
-
verifies the result, and lands the memlog.
|
|
132
|
-
|
|
133
|
-
## What MUST NOT be done
|
|
134
|
-
|
|
135
|
-
- A method file MUST NOT be invented or patched here to improve the method. If a rule is wrong, it is
|
|
136
|
-
fixed in the WDI Method package, then brought here with `npx wdi-method update`.
|
|
137
|
-
- A file in `_bmad-output/prior-knowledge/` MUST NOT be copied into `.what/` or `.how/`. It enters
|
|
138
|
-
the corpus only through the skill that owns the slot.
|
|
139
|
-
- `.control/generated/` MUST NOT be written by hand — it is the output of `validate.py` and
|
|
140
|
-
`timeline.py`.
|
|
141
|
-
- The two structure maps in `.control/` MUST NOT be edited by hand — `wdi-init` intent `structure`
|
|
142
|
-
re-derives them.
|
|
143
|
-
- A `DEC-` with status `applied` MUST NOT be edited, except to record its supersession — status moves
|
|
144
|
-
to `superseded` and names its replacement. A change of mind produces a new `DEC-`.
|
|
145
|
-
- A file in `.constitution/method/` MUST NOT be cited as the reason to reject a change. It is
|
|
146
|
-
`status: Reference` — it explains, it does not bind, and where it disagrees with a guide the guide
|
|
147
|
-
wins and the disagreement is a defect.
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
|
159
|
-
|
|
|
160
|
-
|
|
|
161
|
-
| Unsure
|
|
162
|
-
| Unsure
|
|
163
|
-
| Unsure
|
|
164
|
-
|
|
|
165
|
-
|
|
|
166
|
-
|
|
|
167
|
-
|
|
|
168
|
-
|
|
|
169
|
-
|
|
|
170
|
-
| Writing or reviewing a
|
|
171
|
-
| Writing or reviewing
|
|
172
|
-
| Writing or reviewing
|
|
173
|
-
| Writing or reviewing an
|
|
174
|
-
| Writing
|
|
175
|
-
|
|
|
176
|
-
|
|
|
177
|
-
|
|
|
178
|
-
| Looking for where
|
|
179
|
-
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
as
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
MUST
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
1
|
+
# Agent Rules — {product}
|
|
2
|
+
|
|
3
|
+
<!-- BEGIN:wdi-method -->
|
|
4
|
+
This repo uses **WDI Method**. It wraps BMad; it does not replace it. This marked
|
|
5
|
+
block is owned by the WDI Method package and is **replaced on every update**.
|
|
6
|
+
Product rules belong **outside** it (extra boundaries, `## Code`, stack notes).
|
|
7
|
+
A fact written inside this block will be overwritten.
|
|
8
|
+
|
|
9
|
+
Product identity lives in `.control/registry/index.yaml` (`product.name`, optional
|
|
10
|
+
`product.client`). G1 confirms it. This file MUST NOT become a second source of the name.
|
|
11
|
+
|
|
12
|
+
## Install and update
|
|
13
|
+
|
|
14
|
+
BMad first, then WDI Method. In the product repo:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npx bmad-method install
|
|
18
|
+
npx wdi-method
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
No subcommand opens the installer TUI. It detects an existing install and offers
|
|
22
|
+
**update**. Non-interactive:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npx wdi-method install --yes
|
|
26
|
+
npx wdi-method update --yes
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
BMad: https://github.com/bmad-code-org/BMAD-METHOD
|
|
30
|
+
WDI Method: https://github.com/wiradigitalid/wdi-method
|
|
31
|
+
|
|
32
|
+
A method file MUST NOT be invented here. If a rule is wrong, fix it in the WDI
|
|
33
|
+
Method package, then update.
|
|
34
|
+
|
|
35
|
+
This file is loaded every session; everything else is loaded **lazily**, only when
|
|
36
|
+
the task matches.
|
|
37
|
+
|
|
38
|
+
## Language
|
|
39
|
+
|
|
40
|
+
**Two settings decide this, and they live in `.control/registry/index.yaml` under `policy:`.** Both are
|
|
41
|
+
free text and both default to English:
|
|
42
|
+
|
|
43
|
+
| Setting | Governs |
|
|
44
|
+
|---|---|
|
|
45
|
+
| `doc_language` | The prose of working documents in `.what/` · `.how/` · `.control/` |
|
|
46
|
+
| `doc_filename_language` | The slug part of a document filename |
|
|
47
|
+
|
|
48
|
+
Read those two before writing a document. A technical term the industry writes in English MUST be left in
|
|
49
|
+
English whatever the setting says — an equivalent MUST NOT be invented for it.
|
|
50
|
+
|
|
51
|
+
**These files are always English, whatever the settings say:** `AGENTS.md`, `CLAUDE.md`, and everything
|
|
52
|
+
under `.constitution/`. They are agent instructions, and they travel to every repo through the
|
|
53
|
+
`wdi-method` package. The one exception is `.constitution/project/`, which is this product's own room.
|
|
54
|
+
|
|
55
|
+
**Always English and never a setting**, because a script matches them:
|
|
56
|
+
|
|
57
|
+
- method terminology — `DEC` `SRS` `SDD` `UC` `FR` `AD`, the gate names, the values of `mode` and
|
|
58
|
+
`risk_accepted`
|
|
59
|
+
- document code prefixes — `UC-` `DEC-` `SRS-`; only the slug after them follows `doc_filename_language`
|
|
60
|
+
- markers — `[NEEDS CONFIRMATION]` `[MISSING]` `[ASSUMED]` `[PARTIAL]`, and `yes`/`no` in a `critical`
|
|
61
|
+
column
|
|
62
|
+
- registry values — `mode: catalog`, `status: applied`, `risk_accepted: low`. Used as written in prose
|
|
63
|
+
too: one thing, one name
|
|
64
|
+
- code identifiers, database columns, config keys — `language-guide.md` owns these
|
|
65
|
+
|
|
66
|
+
**A corpus written before these settings existed MUST NOT be migrated for them.** The readers accept more
|
|
67
|
+
than one language, so existing documents keep working and only new writing follows the setting.
|
|
68
|
+
|
|
69
|
+
## The thing in your hand → its folder
|
|
70
|
+
|
|
71
|
+
Read this instead of reasoning about what `.what/` and `.how/` mean.
|
|
72
|
+
|
|
73
|
+
| The thing in your hand | Its folder |
|
|
74
|
+
|---|---|
|
|
75
|
+
| A rule, a guide, a template — how we work | `.constitution/method/` — **overwritten in full by `update`** |
|
|
76
|
+
| A rule that binds **only this product** | `.constitution/project/` — `update` never writes over it, `promote` never publishes it |
|
|
77
|
+
| The explanation of a rule, never a rule itself | `.constitution/method/why/` |
|
|
78
|
+
| A decision, an open question, a registry, a structure map, minutes | `.control/` |
|
|
79
|
+
| The brief, a PRD, a use case, a business rule — what is promised | `.what/` |
|
|
80
|
+
| The spine, C4, an inventory, an SDD, a contract — how it is built | `.how/` |
|
|
81
|
+
| A skill run's working output, and documents that predate the method | `_bmad-output/` |
|
|
82
|
+
| Scratch that empties when the task closes | `.work/` |
|
|
83
|
+
| The application | named under `## Code` below |
|
|
84
|
+
|
|
85
|
+
## Layer boundaries
|
|
86
|
+
|
|
87
|
+
| Layer | Answers | MUST NOT hold |
|
|
88
|
+
|---|---|---|
|
|
89
|
+
| `.constitution/` | How we work | State, decisions, product content |
|
|
90
|
+
| `.control/` | What currently holds and what has been decided | Rules |
|
|
91
|
+
| `.what/` | What is promised | Solution shape — tables, endpoints, technology |
|
|
92
|
+
| `.how/` | How it is built | Promises to the user |
|
|
93
|
+
| `_bmad-output/` | Work in progress; committed, not curated | Anything still correct after its wave has passed |
|
|
94
|
+
| `.work/` | Scratch; emptied when a task closes | Secrets, commercial figures, anything meant as authority |
|
|
95
|
+
|
|
96
|
+
The placement test: **is this file still correct after its wave has passed?** Yes → the corpus. No →
|
|
97
|
+
`_bmad-output/`. In doubt → `document/corpus-guide.md`.
|
|
98
|
+
|
|
99
|
+
The method does not use a `docs/` layer for corpus or rules. A leftover `docs/` folder is inventory
|
|
100
|
+
to sort, not a second home.
|
|
101
|
+
|
|
102
|
+
## Depth and review intensity — two fields, never merged
|
|
103
|
+
|
|
104
|
+
| Field | Where | Controls |
|
|
105
|
+
|---|---|---|
|
|
106
|
+
| `mode` | `index.yaml` globally, `components.yaml` per component | **Document depth**, and only that. `catalog` · `outline` · `guarded` · `deep`; default `catalog` |
|
|
107
|
+
| `risk_accepted` | `components.yaml` per component | **Review intensity**, and only that. `low` · `medium` · `high` |
|
|
108
|
+
|
|
109
|
+
Per-component `mode` wins over global, and there is no third scope — `mode` MUST NOT be overridden per
|
|
110
|
+
wave or per `SPEC.md`. A component at `mode: catalog` **skips G4 entirely**. Neither field MUST be
|
|
111
|
+
derived from the other: one component MAY be thin on purpose and reviewed the hardest.
|
|
112
|
+
`document/delivery-flow-guide.md` owns both; `method/rationale.md` says why they are separate.
|
|
113
|
+
|
|
114
|
+
## The five gates and the fifteen skills
|
|
115
|
+
|
|
116
|
+
| Gate | Decides | Skill |
|
|
117
|
+
|---|---|---|
|
|
118
|
+
| **G1 Problem** | What the problem is, whose it is, why it earns work | `wdi-problem` |
|
|
119
|
+
| **G2 Product** | What is built, and how it feels to use | `wdi-product` · optional `wdi-ux` |
|
|
120
|
+
| **G3 Blueprint** | The whole portrait, once per product | `wdi-blueprint` |
|
|
121
|
+
| **G4 Component** | How one component is built — **skipped at `catalog`** | `wdi-component` |
|
|
122
|
+
| **G5 Release** | Whether it is done and proven | `wdi-build` |
|
|
123
|
+
|
|
124
|
+
Before G1 and at the tail of G2: `wdi-init`, five intents — `setup` · `component` · `mode` · `risk` ·
|
|
125
|
+
`structure`.
|
|
126
|
+
|
|
127
|
+
Any time: `wdi-decision` · `wdi-question` · `wdi-log` · `wdi-help` · `wdi-reconcile` · `wdi-review` ·
|
|
128
|
+
`wdi-report` · `wdi-systematic-debugging`.
|
|
129
|
+
|
|
130
|
+
**No BMad skill is invoked directly.** Each has a wrapper, and the wrapper is what checks position,
|
|
131
|
+
verifies the result, and lands the memlog.
|
|
132
|
+
|
|
133
|
+
## What MUST NOT be done
|
|
134
|
+
|
|
135
|
+
- A method file MUST NOT be invented or patched here to improve the method. If a rule is wrong, it is
|
|
136
|
+
fixed in the WDI Method package, then brought here with `npx wdi-method update`.
|
|
137
|
+
- A file in `_bmad-output/prior-knowledge/` MUST NOT be copied into `.what/` or `.how/`. It enters
|
|
138
|
+
the corpus only through the skill that owns the slot.
|
|
139
|
+
- `.control/generated/` MUST NOT be written by hand — it is the output of `validate.py` and
|
|
140
|
+
`timeline.py`.
|
|
141
|
+
- The two structure maps in `.control/` MUST NOT be edited by hand — `wdi-init` intent `structure`
|
|
142
|
+
re-derives them.
|
|
143
|
+
- A `DEC-` with status `applied` MUST NOT be edited, except to record its supersession — status moves
|
|
144
|
+
to `superseded` and names its replacement. A change of mind produces a new `DEC-`.
|
|
145
|
+
- A file in `.constitution/method/why/` MUST NOT be cited as the reason to reject a change. It is
|
|
146
|
+
`status: Reference` — it explains, it does not bind, and where it disagrees with a guide the guide
|
|
147
|
+
wins and the disagreement is a defect. This covers `why/` ONLY: a guide in
|
|
148
|
+
`.constitution/method/document/` is `status: Accepted` and it binds.
|
|
149
|
+
- More than the component's `mode` demands MUST NOT be written. Exceeding the depth the owner set is
|
|
150
|
+
not diligence.
|
|
151
|
+
- `.claude/skills/bmad-*/customize.toml` MUST NOT be edited — it is overwritten on every BMad update;
|
|
152
|
+
customise through `_bmad/custom/`.
|
|
153
|
+
|
|
154
|
+
## Routing — load a guide when the task matches
|
|
155
|
+
|
|
156
|
+
| Task | Load |
|
|
157
|
+
|---|---|
|
|
158
|
+
| Wanting the whole method in five minutes | `.constitution/method/why/README.md` |
|
|
159
|
+
| About to change a rule, and needing to know what breaks | `.constitution/method/why/rationale.md` |
|
|
160
|
+
| Asking whether a document exists at this `mode`, or where a file goes | `.constitution/method/why/artifact-map.md` |
|
|
161
|
+
| Unsure whether a file may exist in this repo | `.constitution/method/repo-guide.md` |
|
|
162
|
+
| Unsure where a file lives | `.constitution/method/document/corpus-guide.md` |
|
|
163
|
+
| Unsure what a method term means | `.constitution/method/method-glossary.md` |
|
|
164
|
+
| Unsure about a domain term | `.control/product-glossary.md` |
|
|
165
|
+
| Looking for a non-technical fact — a domain, an account, a legal entity, a locked date | `.control/project-non-technical-log.md` |
|
|
166
|
+
| Naming anything — a code identifier, a file, a database column | `.constitution/method/language-guide.md` |
|
|
167
|
+
| Asking "which gate now, what next" | `.constitution/method/document/delivery-flow-guide.md` · skill `wdi-help` |
|
|
168
|
+
| Setting or changing `mode` or `risk_accepted` | `.constitution/method/document/delivery-flow-guide.md` · skill `wdi-init` |
|
|
169
|
+
| Invoking a BMad skill | `.constitution/method/document/bmad-guide.md` · `document/bmad-skill-register.md` |
|
|
170
|
+
| Writing or reviewing a product brief | `.constitution/method/document/brief-guide.md` |
|
|
171
|
+
| Writing or reviewing a PRD | `.constitution/method/document/prd-guide.md` |
|
|
172
|
+
| Writing or reviewing UX | `.constitution/method/document/ux-guide.md` |
|
|
173
|
+
| Writing or reviewing an SRS | `.constitution/method/document/srs-guide.md` |
|
|
174
|
+
| Writing or reviewing an SDD | `.constitution/method/document/sdd-guide.md` |
|
|
175
|
+
| Writing the spine, an `AD-N`, C4, or one of the three inventories | `.constitution/method/document/architecture-guide.md` |
|
|
176
|
+
| Opening, accepting, or applying a `DEC-` | `.constitution/method/document/decision-guide.md` |
|
|
177
|
+
| Writing or reading a structure map | `.constitution/method/structure-guide.md` |
|
|
178
|
+
| Looking for where code lives, or placing new code | `.control/structure-codebase.md` |
|
|
179
|
+
| Looking for where a document lives | `.control/structure-document.md` |
|
|
180
|
+
| Writing or reviewing code | `.constitution/project/codebase-stack-guide.md` · `codebase-conventions-guide.md` · `codebase-brownfield-guide.md` |
|
|
181
|
+
|
|
182
|
+
All three `.constitution/project/codebase-*-guide.md` start as `status: Draft`. While they are, their contents MAY be read
|
|
183
|
+
as guidance but MUST NOT be used to reject a change.
|
|
184
|
+
|
|
185
|
+
The two structure maps MUST NOT be installed as `doc_standards` — they are facts, not standards. Nor
|
|
186
|
+
MUST anything in `.constitution/method/why/`; `status: Reference` forbids it. A guide in
|
|
187
|
+
`.constitution/method/document/` MAY be installed that way, and several already are — see
|
|
188
|
+
`_bmad/custom/bmad-prd.toml`.
|
|
189
|
+
|
|
190
|
+
## Bugs, decisions, questions
|
|
191
|
+
|
|
192
|
+
- A bug, a failing test, or unexpected behaviour → skill `wdi-systematic-debugging`, **before** any
|
|
193
|
+
fix is proposed.
|
|
194
|
+
- A decision worth remembering → skill `wdi-decision` → `.control/decisions/`. Recording is **not
|
|
195
|
+
mandatory**: if the answer to *why is it like this* is readable from the code, it MUST NOT be
|
|
196
|
+
recorded. One case is mandatory — contradicting an `AD-N`.
|
|
197
|
+
- Something that cannot be decided now → skill `wdi-question` → `.control/questions/`. The default
|
|
198
|
+
class is `assumptions.md`, not `blocking.md`; filing something as blocking "to be safe" is the
|
|
199
|
+
habit that produced unreadable question lists.
|
|
200
|
+
- A non-technical fact that constrains the build → skill `wdi-log` intent `fact` →
|
|
201
|
+
`.control/project-non-technical-log.md`.
|
|
202
|
+
|
|
203
|
+
## Method policy
|
|
204
|
+
|
|
205
|
+
- A skill MUST NOT be invoked automatically. Name the one that fits and wait for the owner's
|
|
206
|
+
go-ahead — this holds even when the skill's own description says it must be used. Reading a
|
|
207
|
+
skill as reference is fine.
|
|
208
|
+
- `.work/` is not production code. It MUST NOT be imported by the application, and MUST be
|
|
209
|
+
excluded when searching for code.
|
|
210
|
+
<!-- END:wdi-method -->
|
|
211
|
+
|
|
212
|
+
## Code
|
|
213
|
+
|
|
214
|
+
Rewrite this section for the product. Stack, how to run tests, and known pitfalls belong here.
|
|
215
|
+
`wdi-init` intent `structure` derives `.control/structure-codebase.md`; do not duplicate that map.
|
package/kit-overlay/README.md
CHANGED
|
@@ -2,31 +2,37 @@
|
|
|
2
2
|
status: Reference
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
# `.constitution/` — index
|
|
5
|
+
# `.constitution/method/` — index
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
`.constitution/` holds **exactly two folders**, and the folder is what says who owns a file:
|
|
8
|
+
|
|
9
|
+
| Folder | Owner | `update` | `promote` |
|
|
10
|
+
|---|---|---|---|
|
|
11
|
+
| `method/` — you are in it | the method | **overwritten** in full | carries it into the package |
|
|
12
|
+
| [`../project/`](../project/) | this product | **never touched** — seeded once when absent | never carries it, so your rules cannot be published |
|
|
13
|
+
|
|
14
|
+
Load [`constitution.md`](constitution.md) and [`../project/constitution.md`](../project/constitution.md)
|
|
15
|
+
before acting: Articles 3, 4, 6, 7 are here, Articles 1, 2, 5 are yours. Guides are loaded **lazily** —
|
|
16
|
+
only when the task matches, and every guide states when on its own **Loaded when:** line.
|
|
11
17
|
|
|
12
18
|
Every file here carries a `status:` — Article 4 owns the five values. Only `Accepted` binds;
|
|
13
19
|
`Reference` explains and MUST NOT be cited to reject a change. A template carries no status of its
|
|
14
20
|
own, because its frontmatter belongs to the artifact it produces.
|
|
15
21
|
|
|
16
|
-
A file this product
|
|
17
|
-
|
|
18
|
-
|
|
22
|
+
**A file this product adds MUST go in [`../project/`](../project/), not here** — anything in `method/`
|
|
23
|
+
is replaced on the next update, without warning, because that is what `method/` means. This index is
|
|
24
|
+
overwritten too.
|
|
19
25
|
|
|
20
|
-
## `
|
|
26
|
+
## `why/` — the explanation, `status: Reference`
|
|
21
27
|
|
|
22
28
|
Never a rule. When it disagrees with a guide, the guide wins and the disagreement is a defect.
|
|
23
29
|
|
|
24
30
|
| File | Opened when |
|
|
25
31
|
|---|---|
|
|
26
|
-
| [`
|
|
27
|
-
| [`
|
|
28
|
-
| [`
|
|
29
|
-
| [`
|
|
32
|
+
| [`why/README.md`](why/README.md) | You want the whole shape in five minutes — five gates, two settings, fifteen skills, WDI ↔ BMad |
|
|
33
|
+
| [`why/artifact-map.md`](why/artifact-map.md) | "Where does this file go", or "does this document exist at my `mode`" |
|
|
34
|
+
| [`why/rationale.md`](why/rationale.md) | Before changing a rule, to know what you would break |
|
|
35
|
+
| [`why/portability.md`](why/portability.md) | Which files are the method and which are the product; how promote and install move them |
|
|
30
36
|
|
|
31
37
|
## Cross-domain
|
|
32
38
|
|
|
@@ -51,12 +57,13 @@ Never a rule. When it disagrees with a guide, the guide wins and the disagreemen
|
|
|
51
57
|
| [`decision-guide.md`](document/decision-guide.md) | `DEC-`: the one test for recording at all, shape, global numbering, the `draft → accepted → applied` ladder, supersession |
|
|
52
58
|
| [`templates/`](document/templates/) | Templates, one per kind of document; they MUST be copied, and MUST NOT be reproduced from memory |
|
|
53
59
|
|
|
54
|
-
##
|
|
60
|
+
## Code rules — in the room, not here
|
|
55
61
|
|
|
56
|
-
All three are written by the **
|
|
57
|
-
|
|
62
|
+
All three are written by the **product**, so they live in [`../project/`](../project/) and no update
|
|
63
|
+
touches them at any `status:`. While `Draft`, their contents MAY be read as guidance but MUST NOT be
|
|
64
|
+
used to reject a change.
|
|
58
65
|
|
|
59
|
-
[`stack-guide.md`](codebase
|
|
66
|
+
[`stack-guide.md`](../project/codebase-stack-guide.md) · [`conventions-guide.md`](../project/codebase-conventions-guide.md) · [`brownfield-guide.md`](../project/codebase-brownfield-guide.md)
|
|
60
67
|
|
|
61
68
|
## `scripts/`
|
|
62
69
|
|
|
@@ -2,39 +2,15 @@
|
|
|
2
2
|
status: Accepted
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
# Constitution —
|
|
5
|
+
# Constitution — the method's articles
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Articles 3, 4, 6, and 7 are the method and travel unchanged.
|
|
7
|
+
Articles 3, 4, 6, and 7. They are the **method's** and arrive from the WDI Method package —
|
|
8
|
+
`update` overwrites this file, so it MUST NOT be edited here.
|
|
10
9
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
This repo covers the product named at `product.name` in
|
|
16
|
-
`.control/registry/index.yaml`. One product, one repo. A second product MUST
|
|
17
|
-
get a repo of its own.
|
|
18
|
-
|
|
19
|
-
`product.client` in the same file names the client if there is one, and stays
|
|
20
|
-
empty if there is not. The product brief at G1 uses `product.name` as its
|
|
21
|
-
title. Neither this file nor the brief is a second source of the name.
|
|
22
|
-
|
|
23
|
-
An agent working here MUST NOT demand that sibling organisation repositories
|
|
24
|
-
be open in the same session.
|
|
25
|
-
|
|
26
|
-
## Article 2 — Content boundary, `.work/`, and cross-repo references
|
|
27
|
-
|
|
28
|
-
All three are governed by [`repo-guide.md`](repo-guide.md). Its rules MUST NOT be
|
|
29
|
-
repeated here — one rule, one place.
|
|
30
|
-
|
|
31
|
-
What is particular to this repo, and therefore lives here:
|
|
32
|
-
|
|
33
|
-
- Name any extra boundary this product has (a public-repo rule, a ban on `3p.md`,
|
|
34
|
-
a `.work/` resting state). If there is none, delete this bullet list and the
|
|
35
|
-
sentence above it.
|
|
36
|
-
- `3p.md` MUST NOT be created in a product repo. Operational engagement memory
|
|
37
|
-
lives outside.
|
|
10
|
+
This product's own articles — 1 Scope, 2 Content boundary, 5 Method ownership — live in
|
|
11
|
+
[`../project/constitution.md`](../project/constitution.md), which `update` never touches. The
|
|
12
|
+
numbering is shared across the two files and has gaps in each; the numbers are **not** reassigned,
|
|
13
|
+
because a frozen record that cites one MUST NOT be rewritten.
|
|
38
14
|
|
|
39
15
|
## Article 3 — Layers
|
|
40
16
|
|
|
@@ -43,13 +19,13 @@ The repo layout is governed by `corpus-guide.md` and mapped by
|
|
|
43
19
|
|
|
44
20
|
| Path | Role |
|
|
45
21
|
|---|---|
|
|
46
|
-
| `.constitution/` | Rules — how we work. `method/` holds the non-binding explanation of
|
|
22
|
+
| `.constitution/` | Rules — how we work. Exactly two folders: `method/` is the method's and is overwritten by `update`, `project/` is this product's and is never touched. `method/why/` holds the non-binding explanation of the rules |
|
|
47
23
|
| `.control/` | Control — what currently holds and what has been decided |
|
|
48
24
|
| `.what/` | What is promised |
|
|
49
25
|
| `.how/` | How it is built |
|
|
50
26
|
| `_bmad-output/` | Run workspace; committed, not curated |
|
|
51
27
|
| `.work/` | Scratch; committed, emptied when a task closes |
|
|
52
|
-
| *(application roots)* | Application code —
|
|
28
|
+
| *(application roots)* | Application code — named and mapped in `.control/structure-codebase.md` |
|
|
53
29
|
|
|
54
30
|
The method does not use a `docs/` layer for corpus or rules. A leftover `docs/`
|
|
55
31
|
folder is inventory to sort, not a second home.
|
|
@@ -73,33 +49,11 @@ so a status there would land in the artifact and mean something else entirely.
|
|
|
73
49
|
A missing header anywhere else is a **finding**, not an implicit anything.
|
|
74
50
|
|
|
75
51
|
`Reference` exists so that the *explanation* of a rule can live beside the rule without competing with it —
|
|
76
|
-
`method/` holds four such files. Where a `Reference` file and an `Accepted` one disagree, the `Accepted`
|
|
52
|
+
`method/why/` holds four such files. Where a `Reference` file and an `Accepted` one disagree, the `Accepted`
|
|
77
53
|
one wins, and the disagreement MUST be reported as a defect rather than resolved by preferring whichever was
|
|
78
54
|
opened first. A rule MUST NOT be born in a `Reference` file; when one is noticed there, it is stated as a
|
|
79
55
|
finding and written in the guide that owns it.
|
|
80
56
|
|
|
81
|
-
## Article 5 — The method arrives from WDI Method
|
|
82
|
-
|
|
83
|
-
This is the **consumer** article. Use it in every product repo.
|
|
84
|
-
|
|
85
|
-
`.constitution/` guides and templates (except this file's Articles 1, 2, and 5,
|
|
86
|
-
`codebase/*-guide.md`, and any extra file this repo added), the `wdi-*` skills,
|
|
87
|
-
and `_bmad/custom/*.toml` arrive from the public WDI Method package via
|
|
88
|
-
`npx wdi-method install` / `update`.
|
|
89
|
-
|
|
90
|
-
- A method file MUST NOT be invented or patched here to improve the method. If a
|
|
91
|
-
rule is wrong, it is fixed in the WDI Method package, then brought here with
|
|
92
|
-
`update`.
|
|
93
|
-
- `wdi-method update` MUST overwrite method files and MUST NOT touch `.what/`,
|
|
94
|
-
`.how/`, `.control/` product state, this file's Articles 1–2 and 5,
|
|
95
|
-
`codebase/*-guide.md` once `Accepted`, extra constitution files this repo
|
|
96
|
-
added, or `_bmad/custom/*.user.toml`.
|
|
97
|
-
- A rule particular to this repo MUST be written out in full in this file or a
|
|
98
|
-
sibling, and MUST NOT be replaced by a pointer into another repository.
|
|
99
|
-
|
|
100
|
-
A prefix in `.claude/skills/` names the **method**, not the owner: `bmad-*` is
|
|
101
|
-
BMad's, `wdi-*` is this method's.
|
|
102
|
-
|
|
103
57
|
## Article 6 — Decisions
|
|
104
58
|
|
|
105
59
|
A decision worth remembering is a `DEC-NNN`. Its shape, the one test that decides whether it is
|