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
|
@@ -1,77 +1,76 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: ux
|
|
3
|
-
component: '{pc}'
|
|
4
|
-
document: design # design (.how/<pc>/01-ux/) · experience (.what/<pc>/04-usecases/)
|
|
5
|
-
created: '{YYYY-MM-DD}'
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
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
|
-
ones a designer would rather not think about. -->
|
|
1
|
+
---
|
|
2
|
+
type: ux
|
|
3
|
+
component: '{pc}'
|
|
4
|
+
document: design # design (.how/<pc>/01-ux/) · experience (.what/<pc>/04-usecases/)
|
|
5
|
+
created: '{YYYY-MM-DD}'
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# {DESIGN | EXPERIENCE} — {Product Component}
|
|
9
|
+
|
|
10
|
+
<!-- TEMPLATE GUIDE — act on these comments, then delete them.
|
|
11
|
+
|
|
12
|
+
bmad-ux produces TWO documents, and they fall in two different layers. This template covers
|
|
13
|
+
both; set `document` and keep only that half.
|
|
14
|
+
|
|
15
|
+
DESIGN.md → .how/<pc>/01-ux/ visual: tokens, components, layout
|
|
16
|
+
EXPERIENCE.md → .what/<pc>/04-usecases/ behaviour: IA, states, journeys, accessibility
|
|
17
|
+
|
|
18
|
+
Keeping them in one file — as most projects do — makes a button-colour change and a flow change
|
|
19
|
+
look equally weighty. They are not.
|
|
20
|
+
|
|
21
|
+
Neither lands by itself. bmad-ux writes to _bmad-output/ux/ and wdi-ux lands it. Base
|
|
22
|
+
tokens and shared elements do NOT stay per-component; they go to
|
|
23
|
+
.how/_platform/design-system.md. -->
|
|
24
|
+
|
|
25
|
+
## DESIGN — visual
|
|
26
|
+
|
|
27
|
+
<!-- Keep only when document: design. -->
|
|
28
|
+
|
|
29
|
+
### Tokens
|
|
30
|
+
|
|
31
|
+
<!-- What is component-specific. Anything reusable MUST be promoted to design-system.md instead —
|
|
32
|
+
a token defined twice is a token that will diverge. -->
|
|
33
|
+
|
|
34
|
+
### Screens
|
|
35
|
+
|
|
36
|
+
<!-- One row per screen. Each MUST be registered as an LC of type ui-screen in components.yaml —
|
|
37
|
+
wdi-ux does this in the same act as landing the screen, and `lc-registered` checks it at spec close. -->
|
|
38
|
+
|
|
39
|
+
| Screen | LC | Purpose |
|
|
40
|
+
| --- | --- | --- |
|
|
41
|
+
|
|
42
|
+
### Layout and states
|
|
43
|
+
|
|
44
|
+
<!-- Per screen: the states it can be in — empty, loading, error, populated. The empty and error
|
|
45
|
+
states are the ones that get skipped and the ones users hit first. -->
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## EXPERIENCE — behaviour
|
|
50
|
+
|
|
51
|
+
<!-- Keep only when document: experience. This half is WHAT, not HOW: it says what the user can do
|
|
52
|
+
and what the system answers, in human language, with no visual detail. -->
|
|
53
|
+
|
|
54
|
+
### Information architecture
|
|
55
|
+
|
|
56
|
+
<!-- Top-level surfaces and how someone moves between them. -->
|
|
57
|
+
|
|
58
|
+
### Journeys
|
|
59
|
+
|
|
60
|
+
<!-- Reference UJ-N from the PRD rather than restating them; add only what the PRD left implicit —
|
|
61
|
+
screen order, entry state, what tells the user the value landed. -->
|
|
62
|
+
|
|
63
|
+
### Behaviour per surface
|
|
64
|
+
|
|
65
|
+
| Surface | User can | System answers |
|
|
66
|
+
| --- | --- | --- |
|
|
67
|
+
|
|
68
|
+
### Accessibility
|
|
69
|
+
|
|
70
|
+
<!-- What MUST hold: contrast, focus order, target size, screen-reader labelling, motion. State the
|
|
71
|
+
standard being met, not the intention to meet one. -->
|
|
72
|
+
|
|
73
|
+
### Edge cases
|
|
74
|
+
|
|
75
|
+
<!-- Real failure moments and what the user does next. One per row; the ones worth writing are the
|
|
76
|
+
ones a designer would rather not think about. -->
|
|
@@ -1,99 +1,115 @@
|
|
|
1
|
-
---
|
|
2
|
-
status: Accepted
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# UX Guide
|
|
6
|
-
|
|
7
|
-
**Loaded when:** running `bmad-ux`, or placing its output
|
|
8
|
-
|
|
9
|
-
`bmad-ux` produces two documents that belong to **two different layers**. That split is the whole
|
|
10
|
-
reason this guide exists: everything else follows from getting it right.
|
|
11
|
-
|
|
12
|
-
## Two outputs, two layers
|
|
13
|
-
|
|
14
|
-
| Output | Home | Layer | Answers |
|
|
15
|
-
|---|---|---|---|
|
|
16
|
-
| `EXPERIENCE.md` | `.what/<pc>/04-usecases/` | Promise | What the user experiences, and what they can get done |
|
|
17
|
-
| `DESIGN.md` | `.how/<pc>/01-ux/` | Build | Screens, states, components, and how they are put together |
|
|
18
|
-
|
|
19
|
-
The test is the usual one. If a sentence would still be true after a full redesign, it is experience
|
|
20
|
-
and belongs in `.what/`. If it names a layout, a component, or a token, it is design.
|
|
21
|
-
|
|
22
|
-
Getting this backwards is expensive in a specific way: a `DESIGN.md` filed under `.what/` makes the
|
|
23
|
-
promise layer freeze around one visual solution, and every later redesign then reads as a broken
|
|
24
|
-
promise.
|
|
25
|
-
|
|
26
|
-
## The landing zone
|
|
27
|
-
|
|
28
|
-
`bmad-ux` is a **class B** skill: it writes to a neutral landing zone at `_bmad-output/ux/`, and
|
|
29
|
-
`wdi-ux` — which is what dispatched it — lands the output from there.
|
|
30
|
-
|
|
31
|
-
- Output MUST land in `_bmad-output/ux/` first. A UX run MUST NOT write directly into `.what/` or
|
|
32
|
-
`.how/`.
|
|
33
|
-
- Landing MUST go through `wdi-ux`, which owns `.what/<pc>/04-usecases/` and `.how/<pc>/01-ux/`. No
|
|
34
|
-
other skill MAY land these files.
|
|
35
|
-
- Nothing is placed until the run is finalised. Half-placed UX output is worse than unplaced output,
|
|
36
|
-
because it looks distributed.
|
|
37
|
-
- A run
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
|
|
1
|
+
---
|
|
2
|
+
status: Accepted
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# UX Guide
|
|
6
|
+
|
|
7
|
+
**Loaded when:** running `bmad-ux`, or placing its output
|
|
8
|
+
|
|
9
|
+
`bmad-ux` produces two documents that belong to **two different layers**. That split is the whole
|
|
10
|
+
reason this guide exists: everything else follows from getting it right.
|
|
11
|
+
|
|
12
|
+
## Two outputs, two layers
|
|
13
|
+
|
|
14
|
+
| Output | Home | Layer | Answers |
|
|
15
|
+
|---|---|---|---|
|
|
16
|
+
| `EXPERIENCE.md` | `.what/<pc>/04-usecases/` | Promise | What the user experiences, and what they can get done |
|
|
17
|
+
| `DESIGN.md` | `.how/<pc>/01-ux/` | Build | Screens, states, components, and how they are put together |
|
|
18
|
+
|
|
19
|
+
The test is the usual one. If a sentence would still be true after a full redesign, it is experience
|
|
20
|
+
and belongs in `.what/`. If it names a layout, a component, or a token, it is design.
|
|
21
|
+
|
|
22
|
+
Getting this backwards is expensive in a specific way: a `DESIGN.md` filed under `.what/` makes the
|
|
23
|
+
promise layer freeze around one visual solution, and every later redesign then reads as a broken
|
|
24
|
+
promise.
|
|
25
|
+
|
|
26
|
+
## The landing zone
|
|
27
|
+
|
|
28
|
+
`bmad-ux` is a **class B** skill: it writes to a neutral landing zone at `_bmad-output/ux/`, and
|
|
29
|
+
`wdi-ux` — which is what dispatched it — lands the output from there.
|
|
30
|
+
|
|
31
|
+
- Output MUST land in `_bmad-output/ux/` first. A UX run MUST NOT write directly into `.what/` or
|
|
32
|
+
`.how/`.
|
|
33
|
+
- Landing MUST go through `wdi-ux`, which owns `.what/<pc>/04-usecases/` and `.how/<pc>/01-ux/`. No
|
|
34
|
+
other skill MAY land these files.
|
|
35
|
+
- Nothing is placed until the run is finalised. Half-placed UX output is worse than unplaced output,
|
|
36
|
+
because it looks distributed.
|
|
37
|
+
- **A run MUST NOT wait for a `<pc>`, and MUST NOT be blocked on one.** The order is PRD → UX → **G2**
|
|
38
|
+
→ components, and it is forced: G2 reads `EXPERIENCE.md` (below), while `wdi-init` intent `component`
|
|
39
|
+
requires G2 passed. Making a run wait for components closes that into a cycle nothing can open.
|
|
40
|
+
- **`design-system.md` lands at G2**, immediately. It crosses components by definition and its path has
|
|
41
|
+
no `<pc>` in it.
|
|
42
|
+
- **`EXPERIENCE.md` and `DESIGN.md` wait, and only because their paths contain `<pc>`.** That is the one
|
|
43
|
+
remaining deferral in the flow, and it is not the owner's to remember: `wdi-init` intent `component`
|
|
44
|
+
lands them in the same act as birthing the components.
|
|
45
|
+
- **A container is not required to land UX.** `.how/<pc>/01-ux/` has no container in its path; only a
|
|
46
|
+
screen's `LC` row needs one, and that row is registered with `container:` empty and filled at G3 by
|
|
47
|
+
`wdi-blueprint` intent `platform`, in the same act that registers the containers. `container-built` stays silent on
|
|
48
|
+
an empty container until the `LC`'s Product Component lists one — the answer is demanded when it
|
|
49
|
+
exists, not when it is thinnest.
|
|
50
|
+
|
|
51
|
+
`doc_standards` on `bmad-ux` runs `bmad-review` over both documents **at finalize** — that is, before
|
|
52
|
+
`wdi-ux` lands them. Reviewing afterwards would mean reviewing two files that no longer sit together.
|
|
53
|
+
|
|
54
|
+
## Registry consequences
|
|
55
|
+
|
|
56
|
+
Placement is not finished when the files have moved.
|
|
57
|
+
|
|
58
|
+
- **Every screen in `DESIGN.md` MUST be registered as an `LC` of type `ui-screen`** in
|
|
59
|
+
`.control/registry/components.yaml`, with its `container`. A screen that exists in the design and not
|
|
60
|
+
in the registry is a change nothing will trace, and `lc-registered` catches it **at spec close**.
|
|
61
|
+
- A composite that is reused across screens is an `LC` of type `ui-composite`, not a screen.
|
|
62
|
+
- Tokens and base components — colour, type scale, spacing, buttons, inputs — MUST go to
|
|
63
|
+
`.how/_platform/design-system.md`, not into any one component's `01-ux/`. They cross Product
|
|
64
|
+
Components by definition.
|
|
65
|
+
|
|
66
|
+
Registry conversion is part of placement, not a follow-up.
|
|
67
|
+
|
|
68
|
+
## Vocabulary
|
|
69
|
+
|
|
70
|
+
Every user-facing noun in either document MUST use `.control/product-glossary.md` verbatim **where an
|
|
71
|
+
entry exists**. A new domain noun introduced by a UX run MUST be routed to `wdi-question` and listed in
|
|
72
|
+
the run's report.
|
|
73
|
+
|
|
74
|
+
**It MUST NOT be added to the glossary in the same pass, because it cannot be.** The glossary belongs to
|
|
75
|
+
`wdi-blueprint` intent `catalog`, which needs Product Components, which need G2 passed — and this run is
|
|
76
|
+
what G2 reads. The rule used to say "added in the same pass" and was unsatisfiable at the only moment it
|
|
77
|
+
applied; a UX run failing that check was reporting the method, not the product. `wdi-blueprint` writes
|
|
78
|
+
the entries at G3 and closes those questions there.
|
|
79
|
+
|
|
80
|
+
This is where vocabulary drift usually enters the corpus: UX writes the words the user actually sees,
|
|
81
|
+
and those words are the ones that stick. When the SRS says `Anggota` and the screen says `Pengguna`,
|
|
82
|
+
the screen wins in practice and the corpus starts lying.
|
|
83
|
+
|
|
84
|
+
## What UX does not decide
|
|
85
|
+
|
|
86
|
+
- **Requirements.** A UX run that discovers a needed capability has found an `FR`, and it MUST go to
|
|
87
|
+
the PRD through `wdi-product` intent `update` before it is designed.
|
|
88
|
+
- **Behaviour.** How the system responds belongs to `SRS-<pc>.md`. `EXPERIENCE.md` says what the user
|
|
89
|
+
perceives, not what the system does internally.
|
|
90
|
+
- **Architecture.** A UX need that forces a technology choice MUST become a `DEC-`, not a note in
|
|
91
|
+
`DESIGN.md`.
|
|
92
|
+
|
|
93
|
+
## Passing G2
|
|
94
|
+
|
|
95
|
+
`DESIGN.md` is an **attachment** at G2, not the document being read. What the Product Owner actually
|
|
96
|
+
reads is `prd.md` and `EXPERIENCE.md` — and G2 gets 45 minutes, twice any other gate, precisely
|
|
97
|
+
because it decides two things: what is built, and how it feels to use.
|
|
98
|
+
|
|
99
|
+
The gate question that catches a weak `EXPERIENCE.md` is checklist item 4: *can I retell the main UX
|
|
100
|
+
flow in five sentences without opening the document?* An experience that cannot be retold has not
|
|
101
|
+
been decided, only drawn.
|
|
102
|
+
|
|
103
|
+
Every `[ASSUMPTION]` left in either document at finalize MUST be registered through `wdi-question`
|
|
104
|
+
before the gate opens.
|
|
105
|
+
|
|
106
|
+
## Rules
|
|
107
|
+
|
|
108
|
+
- You MUST NOT edit content while placing it. If the content needs changing to fit its new home, that
|
|
109
|
+
is a UX revision, and it goes back through `bmad-ux`.
|
|
110
|
+
- `EXPERIENCE.md` MUST reference use cases by ID where the chain matters. A journey that maps to no
|
|
111
|
+
`UC` is either a missing use case or a promise nobody made.
|
|
112
|
+
- Durable UX decisions — why a pattern was chosen, what was rejected — belong in a `DEC-` or in the
|
|
113
|
+
run's addendum, not as prose inside `DESIGN.md`.
|
|
114
|
+
- The UX run folder in `_bmad-output/ux/` MUST NOT be deleted after placement. Intent *update* reads
|
|
115
|
+
it again.
|
|
@@ -55,7 +55,7 @@ Nothing else about language is a setting, and a skill MUST NOT ask:
|
|
|
55
55
|
- **Code identifiers, database columns, config keys** — §Code MUST be English, above.
|
|
56
56
|
|
|
57
57
|
**A corpus written before these settings existed MUST NOT be migrated for them.** The readers accept
|
|
58
|
-
both languages — `validate.py` matches `yes|ya`, and
|
|
58
|
+
both languages — `validate.py` matches `yes|ya`, and `high-risk-named`'s keyword set is the union of both — so an
|
|
59
59
|
existing document keeps working and a new one is written in the chosen language. Rewriting a hundred
|
|
60
60
|
documents so a regex looks tidier is a cost with no buyer.
|
|
61
61
|
|
|
@@ -20,7 +20,7 @@ reverse holds too. The test: would this term still apply on a different product?
|
|
|
20
20
|
| **`.what/`** | What was promised |
|
|
21
21
|
| **`.how/`** | How it is built |
|
|
22
22
|
| **Workspace** | `_bmad-output/` — work in progress, committed but not curated |
|
|
23
|
-
| **Placement test** | Is this file still true after its
|
|
23
|
+
| **Placement test** | Is this file still true after its spec has passed? Yes → corpus. No → workspace |
|
|
24
24
|
|
|
25
25
|
## Units
|
|
26
26
|
|
|
@@ -29,7 +29,7 @@ reverse holds too. The test: would this term still apply on a different product?
|
|
|
29
29
|
| **Product Component** (PC) | A domain slice — the box at C4 L3. Lives in `.what/<pc>/` and `.how/<pc>/`, and its `containers:` says where it runs |
|
|
30
30
|
| **Logical Component** (LC) | One addressable unit of build. Registered in `components.yaml` with `type` · `container` · `owner` · `area` |
|
|
31
31
|
| **Container** | Something that **runs its own code or stores its own data** and can be replaced without rebuilding another one. The C4 L2 term, and the value of an LC's `container` field. Two questions decide it and both MUST be yes — `architecture-guide.md` owns the test. Shipping two containers in one release does **not** merge them |
|
|
32
|
-
| **`built`** | A container's one boolean. `true` when we write what is inside it, `false` when we deploy someone else's implementation. It decides whether the container gets an L3, an `LC`, and a heading in the codebase map —
|
|
32
|
+
| **`built`** | A container's one boolean. `true` when we write what is inside it, `false` when we deploy someone else's implementation. It decides whether the container gets an L3, an `LC`, and a heading in the codebase map — `container-built` checks all three |
|
|
33
33
|
| **External system** | Something the product talks to whose **runtime we do not deploy**. It belongs at C4 L1, and MUST NOT be a container, an `LC`'s `container`, or a heading in the codebase map. What we lean on it for lives in `cross-cutting.md` or an integration contract |
|
|
34
34
|
| **`_platform`** | **Not a component.** The home for what belongs to no Product Component: the spine, the C4 set, `cross-cutting.md`, the three inventories, and whatever it **owns**. A legitimate value in every position that asks which component owns something — `platform_owns`, an inventory row, an `LC`. Four kinds today: data · endpoint · job · screen. It carries no `mode`, no `risk_accepted`, and no G4 |
|
|
35
35
|
| **Library** | An includable artifact — compiled into or imported by something else, never run on its own. Not a container |
|
|
@@ -52,10 +52,10 @@ there is only Product Component.
|
|
|
52
52
|
| **`mode`** | The one knob for **document depth**, and nothing else. `catalog` · `outline` · `guarded` · `deep`, default `catalog`. Two scopes — global in `index.yaml`, per component in `components.yaml`, and the per-component one wins. **No third scope** |
|
|
53
53
|
| **`risk_accepted`** | The one field for **review intensity**, and nothing else. `low` · `medium` · `high`. It MUST NOT be derived from `mode`, nor `mode` from it |
|
|
54
54
|
| **Blueprint** | The whole-product portrait decided once at G3: one line per use case, table, endpoint, and screen, plus entities, actors, the spine, C4, and cross-component rules. It names a **gate and a skill**, never a document or a folder |
|
|
55
|
-
| **
|
|
56
|
-
| **Release** | What a PRD promises. One release MAY span several
|
|
57
|
-
| **
|
|
58
|
-
| **Fast Path** | A fix that skips all gates: ≤1
|
|
55
|
+
| **Spec** | One unit of delivered work: the tickets that reach one outcome. Opens at G4 or G5, closes at G5, recorded in `specs.yaml`. Its document is `SPEC.md`, **optional at size `S`** — one term, one entry, and the document is named after the unit the way a `DEC-` file is named after its decision |
|
|
56
|
+
| **Release** | What a PRD promises. One release MAY span several specs; the relation is data, never inferred from numbering |
|
|
57
|
+
| **Spec size** | `S` ≤3 tickets no new FR · `M` 4–12 · `L` >12 or a new container. MAY be raised mid-flight, MUST NOT be lowered. It does **not** choose which gates are active — that is `mode`. It decides two things: whether G4 and G5 merge into one session (`S`), and whether `SPEC.md` is written at all (`M` and up) |
|
|
58
|
+
| **Fast Path** | A fix that skips all gates: ≤1 ticket, no FR/UC/`AD-N`/domain-model change, no money, personal data, or third-party integration |
|
|
59
59
|
| **Step** | One of the five points inside `wdi-build`'s ship pipeline — plan · build · panel · publish · CI. It is **not** a gate and not a stage, and the word MUST NOT be used for anything at gate altitude |
|
|
60
60
|
|
|
61
61
|
## Artifacts
|
|
@@ -72,8 +72,8 @@ there is only Product Component.
|
|
|
72
72
|
| **`DESIGN.md`** | UX per PC, in `.how/<pc>/01-ux/` |
|
|
73
73
|
| **`EXPERIENCE.md`** | The user-facing journey, in `.what/<pc>/04-usecases/` |
|
|
74
74
|
| **`DEC-`** | One decision worth remembering, numbered globally. Lives in `.control/decisions/`. Recording is **not mandatory**; it freezes at `applied`, not at `accepted` |
|
|
75
|
-
| **SPEC** | The
|
|
76
|
-
| **
|
|
75
|
+
| **SPEC** | The document of **one spec**: a projection of `.what/` + `.how/` that MUST NOT contain anything new. Not read by humans, and **not written at size `S`** — there the tickets are the contract |
|
|
76
|
+
| **Ticket** | One unit of build: a tracer-bullet vertical slice, complete through every layer, verifiable on its own, sized to one fresh context window. Carries the tickets that **block** it. Status is read from the ticket itself, never copied elsewhere |
|
|
77
77
|
| **Structure map** | `.control/structure-codebase.md` and `structure-document.md` — where things actually are today |
|
|
78
78
|
| **Memlog** | The record of *why* while an artifact was written. Never copied into a document; a source when writing a `DEC-`. It is a **run log**, and it MUST NOT be searched as an index of decisions — `.control/generated/decisions.md` is that |
|
|
79
79
|
|
|
@@ -87,14 +87,14 @@ there is only Product Component.
|
|
|
87
87
|
| `DEC-` | A decision |
|
|
88
88
|
| `LC-` | A Logical Component |
|
|
89
89
|
| `OQ-` | An open question |
|
|
90
|
-
| `RTR-` |
|
|
90
|
+
| `RTR-` | **Retired.** It was an archived retrospective in `.control/reports/`; the retrospective step and `V19` went together. A frozen `RTR-` file stays where it is |
|
|
91
91
|
| `CAP-` | A capability — the planning unit |
|
|
92
92
|
| `NT-` | A non-technical fact |
|
|
93
93
|
| `BUG-` · `HOT-` | A defect · a hotfix |
|
|
94
|
-
| `
|
|
94
|
+
| `goal-has-fr`–`container-built` | Validators. `V10` fell and its number is not reused |
|
|
95
95
|
|
|
96
96
|
IDs are allocated **globally** and never restart per document, per component, or per release. The chain
|
|
97
|
-
that must hold end to end: `BG → FR → UC →
|
|
97
|
+
that must hold end to end: `BG → FR → UC → ticket → test`.
|
|
98
98
|
|
|
99
99
|
`ADR-` is **retired**. It was renamed to `DEC-` on 2026-08-18 with the numbers unchanged, so `ADR-004`
|
|
100
100
|
inside a document frozen before that date is an alias for `DEC-004`, and those documents MUST NOT be
|
|
@@ -116,10 +116,10 @@ where BMad's own meaning is wider, the narrower one here wins.
|
|
|
116
116
|
|
|
117
117
|
| Term | Means |
|
|
118
118
|
|---|---|
|
|
119
|
-
| **Stories mode** |
|
|
119
|
+
| **Stories mode** | **Retired.** It was BMad's route — `SPEC.md` + `stories.yaml` produced by `bmad-spec`. The engine layer below G5 no longer runs it; `bmad-guide.md` says what replaced it |
|
|
120
120
|
| **Skill class** | `A` living document, straight to the corpus · `B` living but wrongly granular, lands neutral then is placed · `C` spent after its work · `D` no artifact |
|
|
121
121
|
| **Companion** | A side file a BMad skill produces next to its main output. The lasting ones are promoted by the distillation table |
|
|
122
|
-
| **Distillation** | Promoting what is durable out of `_bmad-output/` before a
|
|
122
|
+
| **Distillation** | Promoting what is durable out of `_bmad-output/` before a spec closes. What is not promoted dies with the folder |
|
|
123
123
|
| **`persistent_facts`** | Files a skill always reads. Routing alone does not achieve this |
|
|
124
124
|
| **`doc_standards`** | Rule files a skill checks its output against. Facts MUST NOT be installed here, and neither MUST anything at `status: Reference` |
|
|
125
125
|
| **`{project_knowledge}`** | The config variable pointing at `.control/` |
|
|
@@ -134,7 +134,7 @@ where BMad's own meaning is wider, the narrower one here wins.
|
|
|
134
134
|
| `SCP-` | A `DEC-` of `type: course-correction` |
|
|
135
135
|
| `layer:` on a decision | `touches:`, filled from what actually changed |
|
|
136
136
|
| "Stage 1"…"Stage 5" as flow vocabulary | The five gates |
|
|
137
|
-
| `epics.md` · `sprint-status.yaml` · `bmad-sprint-planning` · `bmad-create-epics-and-stories` |
|
|
137
|
+
| `epics.md` · `sprint-status.yaml` · `bmad-sprint-planning` · `bmad-create-epics-and-stories` · `stories.yaml` | Tickets, each carrying its own status and its blocking edges |
|
|
138
138
|
| Validator `V10` | Nothing. Its number is not reused |
|
|
139
139
|
| `bmad-help` as the answer to "where am I" | `wdi-help` |
|
|
140
140
|
| The skills `wdi-analysis` · `wdi-architecture` · `wdi-design` · `wdi-glossary` · `wdi-structure` · `wdi-apply` · `wdi-correct-course` · `wdi-wave` · `wdi-ship-story` · `wdi-product-brief` · `wdi-meeting` · `wdi-project-log` | The fifteen in `why/README.md`. `why/rationale.md` says which absorbed which, and why |
|
|
@@ -149,14 +149,27 @@ A synonym for a term that already has an entry is drift, and `wdi-reconcile` hun
|
|
|
149
149
|
| application · app · service, for a deployable | **container** | The term is already defined at C4 L2 and carried by every LC |
|
|
150
150
|
| infrastructure · third-party · dependency, for something inside the boundary | **container** with `built: false` | Calling it something else is how a container ends up with no row, no owner, and no NFR |
|
|
151
151
|
| container, for something whose runtime we do not deploy | **external system** | It has no `built`, no L3, and no heading. Registering it as a container promises a section of the codebase map that will never exist |
|
|
152
|
-
| module · package, for a unit of build | **Logical Component** | `components.yaml` names it, and
|
|
153
|
-
| epic · sprint, for a batch of work | **
|
|
152
|
+
| module · package, for a unit of build | **Logical Component** | `components.yaml` names it, and `lc-registered` resolves against that name |
|
|
153
|
+
| epic · sprint, for a batch of work | **spec** | Both belong to the sprint route this method dropped |
|
|
154
|
+
| **wave**, for a unit of delivered work | **spec** | Retired when the engine layer below G5 changed. See the retired-alias rule below |
|
|
155
|
+
| **story**, for a unit of build | **ticket** | Same retirement. A ticket is a vertical slice that blocks and is blocked; a story was a row in a file BMad owned |
|
|
154
156
|
| area, for a domain slice | **Product Component** | The word "area" is not used anywhere in this method |
|
|
155
157
|
| platform, for a Product Component | **`_platform`**, and only for what is not one | Registering `_platform` as a PC gives it a `mode`, an SRS, and a G4 it has no use for |
|
|
156
158
|
| profile · tier · level, for document depth | **`mode`** | One knob, four values, and no matrix behind it |
|
|
157
159
|
| feature, for a domain slice | **Product Component** | A feature is a promise; a PC is a folder pair with an owner |
|
|
158
160
|
| requirements document | **PRD** or **SRS** | They cut different axes — time versus space — and merging the names merges the documents |
|
|
159
161
|
|
|
162
|
+
## Retired terms keep their frozen documents
|
|
163
|
+
|
|
164
|
+
`wave` and `story` are **retired aliases** of `spec` and `ticket`. A `wave` or a `story` appearing in a
|
|
165
|
+
document frozen before the change — a closed `DEC-`, an `RTR-`, minutes, `why/rationale.md`'s record of what
|
|
166
|
+
happened — reads as its replacement, and those documents **MUST NOT be rewritten for the term.** This is the
|
|
167
|
+
same rule Article 6 already applies to `ADR-NNN` → `DEC-NNN`, and for the same reason: a frozen record that
|
|
168
|
+
cites a name is evidence, and rewriting evidence to tidy a vocabulary destroys the thing that made it useful.
|
|
169
|
+
|
|
170
|
+
What MUST use the new term: every `Accepted` guide, every skill, every registry, and anything written from
|
|
171
|
+
here on.
|
|
172
|
+
|
|
160
173
|
## Rules
|
|
161
174
|
|
|
162
175
|
- A new method term MUST be added here in the same pass it first appears, not defined where it is
|