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.
Files changed (87) hide show
  1. package/README.md +271 -252
  2. package/bin/wdi-method.js +1221 -1030
  3. package/kit/.constitution/method/README.md +73 -169
  4. package/kit/.constitution/{constitution.md → method/constitution.md} +10 -56
  5. package/kit/.constitution/{document → method/document}/architecture-guide.md +209 -209
  6. package/kit/.constitution/{document → method/document}/corpus-guide.md +4 -4
  7. package/kit/.constitution/{document → method/document}/delivery-flow-guide.md +338 -338
  8. package/kit/.constitution/{document → method/document}/sdd-guide.md +1 -1
  9. package/kit/.constitution/{document → method/document}/templates/cross-cutting.md +2 -2
  10. package/kit/.constitution/{document → method/document}/templates/design-system.md +67 -67
  11. package/kit/.constitution/{document → method/document}/templates/inventory.md +69 -69
  12. package/kit/.constitution/{document → method/document}/templates/sdd.md +1 -1
  13. package/kit/.constitution/{document → method/document}/templates/structure-codebase.md +129 -129
  14. package/kit/.constitution/{document → method/document}/templates/structure-document.md +90 -90
  15. package/kit/.constitution/{language-guide.md → method/language-guide.md} +2 -2
  16. package/kit/.constitution/{method-glossary.md → method/method-glossary.md} +169 -169
  17. package/kit/.constitution/{repo-guide.md → method/repo-guide.md} +120 -97
  18. package/kit/.constitution/method/scripts/__pycache__/validate.cpython-314.pyc +0 -0
  19. package/kit/.constitution/{scripts → method/scripts}/timeline.py +2 -2
  20. package/kit/.constitution/{scripts → method/scripts}/validate.py +1648 -1581
  21. package/kit/.constitution/{structure-guide.md → method/structure-guide.md} +3 -3
  22. package/kit/.constitution/method/why/README.md +169 -0
  23. package/kit/.constitution/method/{artifact-map.md → why/artifact-map.md} +5 -5
  24. package/kit/.constitution/method/{portability.md → why/portability.md} +6 -6
  25. package/kit/.constitution/method/{rationale.md → why/rationale.md} +5 -5
  26. package/kit/.constitution/project/README.md +68 -68
  27. package/kit/.constitution/project/constitution.md +64 -0
  28. package/kit/assets/bmad-custom/bmad-advanced-elicitation.toml +15 -15
  29. package/kit/assets/bmad-custom/bmad-architecture.toml +33 -33
  30. package/kit/assets/bmad-custom/bmad-code-review.toml +13 -13
  31. package/kit/assets/bmad-custom/bmad-correct-course.toml +28 -28
  32. package/kit/assets/bmad-custom/bmad-prd.toml +42 -42
  33. package/kit/assets/bmad-custom/bmad-product-brief.toml +34 -34
  34. package/kit/assets/bmad-custom/bmad-retrospective.toml +9 -9
  35. package/kit/assets/bmad-custom/bmad-spec.toml +16 -16
  36. package/kit/assets/bmad-custom/bmad-ux.toml +19 -19
  37. package/kit/skills/wdi-blueprint/SKILL.md +203 -203
  38. package/kit/skills/wdi-build/SKILL.md +244 -244
  39. package/kit/skills/wdi-component/SKILL.md +1 -1
  40. package/kit/skills/wdi-help/SKILL.md +98 -98
  41. package/kit/skills/wdi-init/SKILL.md +1 -1
  42. package/kit/skills/wdi-problem/SKILL.md +90 -90
  43. package/kit/skills/wdi-product/SKILL.md +127 -127
  44. package/kit/skills/wdi-reconcile/SKILL.md +2 -2
  45. package/kit/skills/wdi-report/SKILL.md +205 -205
  46. package/kit/skills/wdi-systematic-debugging/SKILL.md +193 -193
  47. package/kit/skills/wdi-ux/SKILL.md +145 -145
  48. package/kit-overlay/AGENTS.md +215 -212
  49. package/kit-overlay/README.md +24 -17
  50. package/kit-overlay/constitution.md +10 -56
  51. package/kit-overlay/portability.md +6 -6
  52. package/kit-overlay/repo-guide.md +120 -97
  53. package/package.json +4 -2
  54. package/scaffold/.control/questions/blocking.md +1 -1
  55. package/kit/.constitution/README.md +0 -66
  56. /package/kit/.constitution/{document → method/document}/bmad-guide.md +0 -0
  57. /package/kit/.constitution/{document → method/document}/bmad-skill-register.md +0 -0
  58. /package/kit/.constitution/{document → method/document}/brief-guide.md +0 -0
  59. /package/kit/.constitution/{document → method/document}/decision-guide.md +0 -0
  60. /package/kit/.constitution/{document → method/document}/prd-guide.md +0 -0
  61. /package/kit/.constitution/{document → method/document}/srs-guide.md +0 -0
  62. /package/kit/.constitution/{document → method/document}/templates/addendum.md +0 -0
  63. /package/kit/.constitution/{document → method/document}/templates/architecture-spine.md +0 -0
  64. /package/kit/.constitution/{document → method/document}/templates/brief.md +0 -0
  65. /package/kit/.constitution/{document → method/document}/templates/c4.md +0 -0
  66. /package/kit/.constitution/{document → method/document}/templates/contract.md +0 -0
  67. /package/kit/.constitution/{document → method/document}/templates/decision.md +0 -0
  68. /package/kit/.constitution/{document → method/document}/templates/flow.md +0 -0
  69. /package/kit/.constitution/{document → method/document}/templates/integration.md +0 -0
  70. /package/kit/.constitution/{document → method/document}/templates/lc.md +0 -0
  71. /package/kit/.constitution/{document → method/document}/templates/lifecycle.md +0 -0
  72. /package/kit/.constitution/{document → method/document}/templates/meeting.md +0 -0
  73. /package/kit/.constitution/{document → method/document}/templates/model.md +0 -0
  74. /package/kit/.constitution/{document → method/document}/templates/oq.md +0 -0
  75. /package/kit/.constitution/{document → method/document}/templates/prd.md +0 -0
  76. /package/kit/.constitution/{document → method/document}/templates/questions.md +0 -0
  77. /package/kit/.constitution/{document → method/document}/templates/rtr.md +0 -0
  78. /package/kit/.constitution/{document → method/document}/templates/rules.md +0 -0
  79. /package/kit/.constitution/{document → method/document}/templates/scn.md +0 -0
  80. /package/kit/.constitution/{document → method/document}/templates/srs.md +0 -0
  81. /package/kit/.constitution/{document → method/document}/templates/uc.md +0 -0
  82. /package/kit/.constitution/{document → method/document}/templates/ux.md +0 -0
  83. /package/kit/.constitution/{document → method/document}/ux-guide.md +0 -0
  84. /package/kit/.constitution/{scripts → method/scripts}/inventory.py +0 -0
  85. /package/kit/.constitution/{codebase/brownfield-guide.md → project/codebase-brownfield-guide.md} +0 -0
  86. /package/kit/.constitution/{codebase/conventions-guide.md → project/codebase-conventions-guide.md} +0 -0
  87. /package/kit/.constitution/{codebase/stack-guide.md → project/codebase-stack-guide.md} +0 -0
@@ -1,90 +1,90 @@
1
- ---
2
- type: structure
3
- scope: document
4
- verified: '{YYYY-MM-DD}' # the day the tree was actually read
5
- commit: '{sha}' # the commit it was read at — staleness is measured against this
6
- ---
7
-
8
- # Document Structure
9
-
10
- <!-- TEMPLATE GUIDE — act on these comments, then delete them.
11
-
12
- This file is DESCRIPTIVE. It states which parts of the corpus actually carry content today.
13
- The layers themselves, the placement test, the naming scheme, and slot numbering all belong to
14
- corpus-guide.md and MUST NOT be restated here.
15
-
16
- Written and refreshed only by `wdi-init` intent `structure`, never by hand. Rules for both maps live in
17
- .constitution/structure-guide.md.
18
-
19
- Same shape as the codebase map: annotated trees, folders complete, ★ inline on the documents
20
- that earn it. What differs is the split — the codebase map splits by deployability, this one
21
- splits by LAYER, because that is the axis a reader is lost on.
22
-
23
- The five roots are fixed, so the top-level tree is not a discovery. Which sub-folders carry
24
- content, which Product Component folders exist, and which slots have been split out of a kernel
25
- ARE, and that is what this map is for. -->
26
-
27
- ## Verified
28
-
29
- <!-- One line: date, commit SHA, and how the tree was read. If the commit is no longer an ancestor
30
- of HEAD, this map is stale and MUST be refreshed before a gate reads it. -->
31
-
32
- ## Top level
33
-
34
- <!-- The five roots, one line each, with the state of each: populated, or still empty. Mark an empty
35
- root as empty rather than dropping it — a dropped root reads as a root that does not exist. -->
36
-
37
- ```text
38
- .constitution/ # how we work — {state}
39
- .control/ # what currently holds — {state}
40
- .what/ # what was promised — {state}
41
- .how/ # how it is built — {state}
42
- _bmad-output/ # work in progress, not curated — {state}
43
- ```
44
-
45
- ## Per layer
46
-
47
- <!-- One subsection per root that carries content. Annotated tree: sub-folders complete, ★ on the
48
- single-copy documents a reader must find first. Per-Product-Component folders are NOT expanded
49
- here — the table below owns them, and expanding both means maintaining both. -->
50
-
51
- ### {layer}
52
-
53
- ```text
54
- {layer}/
55
- ├── {folder}/ # what belongs here
56
- │ └── {file} # ★ why this one is key
57
- └── {folder}/ # {state}
58
- ```
59
-
60
- ## Product Components
61
-
62
- <!-- One row per PC that actually exists. Both sides are expected: a PC with an SRS and no SDD, or
63
- the reverse, is drift and MUST be listed under Findings rather than normalised here. List only
64
- the slots that have been split out of a kernel; empty slots stay unlisted. -->
65
-
66
- | Product Component | `.what/<pc>/` | `.how/<pc>/` | Slots split out |
67
- | --- | --- | --- | --- |
68
-
69
- ## Registries and generated
70
-
71
- <!-- Which registry files carry entries and which are still empty skeletons, and which generated
72
- tables have been produced. Generated output is never written by hand; naming it here is what
73
- makes a hand edit visible. -->
74
-
75
- | File | State |
76
- | --- | --- |
77
-
78
- ## Findings
79
-
80
- <!-- Drift this map surfaced while being derived: a PC on one side only, a supplement with no
81
- citation, a folder outside the five roots, a document whose home contradicts corpus-guide.md.
82
- Findings are reported, never fixed here — fixing them is `wdi-reconcile` work, or the owning
83
- skill's.
84
- Cut the section only when it is genuinely empty. -->
85
-
86
- ---
87
-
88
- <!-- Keep this legend last, and keep it one line. -->
89
-
90
- ★ = key document: single-copy, referenced from elsewhere, or the first thing a reader must find.
1
+ ---
2
+ type: structure
3
+ scope: document
4
+ verified: '{YYYY-MM-DD}' # the day the tree was actually read
5
+ commit: '{sha}' # the commit it was read at — staleness is measured against this
6
+ ---
7
+
8
+ # Document Structure
9
+
10
+ <!-- TEMPLATE GUIDE — act on these comments, then delete them.
11
+
12
+ This file is DESCRIPTIVE. It states which parts of the corpus actually carry content today.
13
+ The layers themselves, the placement test, the naming scheme, and slot numbering all belong to
14
+ corpus-guide.md and MUST NOT be restated here.
15
+
16
+ Written and refreshed only by `wdi-init` intent `structure`, never by hand. Rules for both maps live in
17
+ .constitution/method/structure-guide.md.
18
+
19
+ Same shape as the codebase map: annotated trees, folders complete, ★ inline on the documents
20
+ that earn it. What differs is the split — the codebase map splits by deployability, this one
21
+ splits by LAYER, because that is the axis a reader is lost on.
22
+
23
+ The five roots are fixed, so the top-level tree is not a discovery. Which sub-folders carry
24
+ content, which Product Component folders exist, and which slots have been split out of a kernel
25
+ ARE, and that is what this map is for. -->
26
+
27
+ ## Verified
28
+
29
+ <!-- One line: date, commit SHA, and how the tree was read. If the commit is no longer an ancestor
30
+ of HEAD, this map is stale and MUST be refreshed before a gate reads it. -->
31
+
32
+ ## Top level
33
+
34
+ <!-- The five roots, one line each, with the state of each: populated, or still empty. Mark an empty
35
+ root as empty rather than dropping it — a dropped root reads as a root that does not exist. -->
36
+
37
+ ```text
38
+ .constitution/ # how we work — {state}
39
+ .control/ # what currently holds — {state}
40
+ .what/ # what was promised — {state}
41
+ .how/ # how it is built — {state}
42
+ _bmad-output/ # work in progress, not curated — {state}
43
+ ```
44
+
45
+ ## Per layer
46
+
47
+ <!-- One subsection per root that carries content. Annotated tree: sub-folders complete, ★ on the
48
+ single-copy documents a reader must find first. Per-Product-Component folders are NOT expanded
49
+ here — the table below owns them, and expanding both means maintaining both. -->
50
+
51
+ ### {layer}
52
+
53
+ ```text
54
+ {layer}/
55
+ ├── {folder}/ # what belongs here
56
+ │ └── {file} # ★ why this one is key
57
+ └── {folder}/ # {state}
58
+ ```
59
+
60
+ ## Product Components
61
+
62
+ <!-- One row per PC that actually exists. Both sides are expected: a PC with an SRS and no SDD, or
63
+ the reverse, is drift and MUST be listed under Findings rather than normalised here. List only
64
+ the slots that have been split out of a kernel; empty slots stay unlisted. -->
65
+
66
+ | Product Component | `.what/<pc>/` | `.how/<pc>/` | Slots split out |
67
+ | --- | --- | --- | --- |
68
+
69
+ ## Registries and generated
70
+
71
+ <!-- Which registry files carry entries and which are still empty skeletons, and which generated
72
+ tables have been produced. Generated output is never written by hand; naming it here is what
73
+ makes a hand edit visible. -->
74
+
75
+ | File | State |
76
+ | --- | --- |
77
+
78
+ ## Findings
79
+
80
+ <!-- Drift this map surfaced while being derived: a PC on one side only, a supplement with no
81
+ citation, a folder outside the five roots, a document whose home contradicts corpus-guide.md.
82
+ Findings are reported, never fixed here — fixing them is `wdi-reconcile` work, or the owning
83
+ skill's.
84
+ Cut the section only when it is genuinely empty. -->
85
+
86
+ ---
87
+
88
+ <!-- Keep this legend last, and keep it one line. -->
89
+
90
+ ★ = key document: single-copy, referenced from elsewhere, or the first thing a reader must find.
@@ -6,7 +6,7 @@ status: Accepted
6
6
 
7
7
  **Loaded when:** naming anything — a code identifier, a database field, a file, a folder.
8
8
 
9
- Which language a name is written in, and nothing else. Case style → `codebase/conventions-guide.md`;
9
+ Which language a name is written in, and nothing else. Case style → `../project/codebase-conventions-guide.md`;
10
10
  legal characters → `structure-guide.md`; the right domain word → `.control/product-glossary.md`.
11
11
 
12
12
  ## Code MUST be English
@@ -71,4 +71,4 @@ and they travel to every repo through the `wdi-method` package.
71
71
  ## A wrong name MUST NOT be fixed inside an unrelated change
72
72
 
73
73
  A rename reaches the schema, the API, and every caller. It gets a change of its own, or a ratified
74
- row in `codebase/brownfield-guide.md`. A **new** name MUST NOT copy a wrong neighbour.
74
+ row in `../project/codebase-brownfield-guide.md`. A **new** name MUST NOT copy a wrong neighbour.
@@ -1,169 +1,169 @@
1
- ---
2
- status: Accepted
3
- ---
4
-
5
- # Method Glossary
6
-
7
- **Loaded when:** a method term is unclear, and before coining a new one.
8
-
9
- The words this method uses for **itself**. What the product is about belongs to
10
- `.control/product-glossary.md` instead. A term defined here MUST NOT be redefined there, and the
11
- reverse holds too. The test: would this term still apply on a different product? Yes → here.
12
-
13
- ## Layers
14
-
15
- | Term | Means |
16
- |---|---|
17
- | **Corpus** | The four layers below. `_bmad-output/` is not part of it |
18
- | **`.constitution/`** | How we work. Rules. Rarely changes |
19
- | **`.control/`** | What currently holds and what has been decided. Facts. Changes often. Equals `{project_knowledge}` |
20
- | **`.what/`** | What was promised |
21
- | **`.how/`** | How it is built |
22
- | **Workspace** | `_bmad-output/` — work in progress, committed but not curated |
23
- | **Placement test** | Is this file still true after its wave has passed? Yes → corpus. No → workspace |
24
-
25
- ## Units
26
-
27
- | Term | Means |
28
- |---|---|
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
- | **Logical Component** (LC) | One addressable unit of build. Registered in `components.yaml` with `type` · `container` · `owner` · `area` |
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 — V25 checks all three |
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
- | **`_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
- | **Library** | An includable artifact — compiled into or imported by something else, never run on its own. Not a container |
36
- | **Slot** | A numbered sub-folder of a PC. `.what/<pc>/` 02–05 is reading order; `.how/<pc>/` 01–06 is ABCE classification. The two numberings do **not** mean the same thing |
37
- | **Kernel** | The `SRS-<pc>.md` or `SDD-<pc>.md` file itself. Content SHOULD stay in it until it grows past roughly 400 lines — a suggestion, not a threshold |
38
-
39
- A PC is not a container: a container runs, a PC is a domain. One container holds several PCs, and
40
- one PC may appear in more than one container. Because they cross, neither list implies the other, and
41
- the crossing MUST be written down rather than inferred — that is the PC × container matrix at C4 L2,
42
- rendered from each PC's `containers:`.
43
-
44
- ## Flow
45
-
46
- There is no "stage". The five gates are the only flow vocabulary, and the word **area** is not used at all —
47
- there is only Product Component.
48
-
49
- | Term | Means |
50
- |---|---|
51
- | **Gate** | One of five decision points: G1 Problem · G2 Product · G3 Blueprint · G4 Component · G5 Release. Named after what is decided there, not after the work before it |
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
- | **`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
- | **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
- | **Wave** | One unit of delivered work. Opens at G4 or G5, closes at G5, recorded in `waves.yaml` |
56
- | **Release** | What a PRD promises. One release MAY span several waves; the relation is data, never inferred from numbering |
57
- | **Wave size** | `S` ≤3 stories 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` |
58
- | **Fast Path** | A fix that skips all gates: ≤1 story, no FR/UC/`AD-N`/domain-model change, no money, personal data, or third-party integration |
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
-
61
- ## Artifacts
62
-
63
- | Term | Means |
64
- |---|---|
65
- | **Brief** | One problem, one user, one measure. Singleton, spans releases |
66
- | **PRD** | What is promised for **one initiative**, across every release it touches. FR and NFR numbered from the registry |
67
- | **SRS** | Per PC: what the system must do. `.what/` — slices space, while the PRD slices initiative. It **exists at every `mode`**, carrying the actor list and the use case catalogue |
68
- | **SDD** | Per PC: how it is built. `.how/`. At `mode: catalog` it is a skeleton, and that is a finished state |
69
- | **Inventory** | One of three living registers at product level — tables, endpoints, screens. Written as a plan when there is no code, **derived** from code once there is |
70
- | **Architecture spine** | `ARCHITECTURE-SPINE.md` — invariants as `AD-N`, each carrying Binds · Prevents · Rule. It constrains; it does not describe |
71
- | **C4** | L1 system context · L2 containers · L3 components, one file per container. L1+L2 together are what other methods call the HLD |
72
- | **`DESIGN.md`** | UX per PC, in `.how/<pc>/01-ux/` |
73
- | **`EXPERIENCE.md`** | The user-facing journey, in `.what/<pc>/04-usecases/` |
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 machine contract for **one wave**. A projection of `.what/` + `.how/`, and MUST NOT contain anything new. Not read by humans |
76
- | **Story** | One unit of build. Status is read from its own frontmatter, never copied elsewhere |
77
- | **Structure map** | `.control/structure-codebase.md` and `structure-document.md` — where things actually are today |
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
-
80
- ## Identifiers
81
-
82
- | Code | For |
83
- |---|---|
84
- | `BG-` · `FR-` · `NFR-` · `UJ-` | Business goal · functional requirement · non-functional requirement · user journey |
85
- | `UC-` | Use case |
86
- | `AD-` | An invariant in the architecture spine |
87
- | `DEC-` | A decision |
88
- | `LC-` | A Logical Component |
89
- | `OQ-` | An open question |
90
- | `RTR-` | An archived retrospective, in `.control/reports/` |
91
- | `CAP-` | A capability — the planning unit |
92
- | `NT-` | A non-technical fact |
93
- | `BUG-` · `HOT-` | A defect · a hotfix |
94
- | `V1`–`V25` | Validators. `V10` fell and its number is not reused |
95
-
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 → story → test`.
98
-
99
- `ADR-` is **retired**. It was renamed to `DEC-` on 2026-08-18 with the numbers unchanged, so `ADR-004`
100
- inside a document frozen before that date is an alias for `DEC-004`, and those documents MUST NOT be
101
- rewritten for the prefix.
102
-
103
- ## Registry and generated
104
-
105
- | Term | Means |
106
- |---|---|
107
- | **Registry** | `.control/registry/` — the source of truth for IDs and plans. Written through `wdi-*` skills |
108
- | **Generated** | `.control/generated/` — derived from the registry. Written by the generator only, by hand **never** |
109
- | **RTM** | Requirements traceability matrix. Generated, never hand-maintained |
110
- | **Validator** | A script that answers what can be counted. It does not replace a gate checklist, which answers what must be judged |
111
-
112
- ## BMad terms
113
-
114
- BMad terms live in a WDI glossary because WDI runs on BMad. Each is defined **as WDI uses it**;
115
- where BMad's own meaning is wider, the narrower one here wins.
116
-
117
- | Term | Means |
118
- |---|---|
119
- | **Stories mode** | The route this method uses: SRS + SDD + PRD → `SPEC.md` + `stories.yaml` → build |
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
- | **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 wave closes. What is not promoted dies with the folder |
123
- | **`persistent_facts`** | Files a skill always reads. Routing alone does not achieve this |
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
- | **`{project_knowledge}`** | The config variable pointing at `.control/` |
126
- | **`_bmad/custom/`** | Where every BMad override lives. `.claude/skills/bmad-*/customize.toml` MUST NOT be edited — it is overwritten on update |
127
-
128
- ## Retired — MUST NOT be used as current
129
-
130
- | Retired | Instead |
131
- |---|---|
132
- | `ADR-` | `DEC-` — same numbers, new prefix |
133
- | `ANX-`, and the annex concept | Nothing. Zero annexes were ever born |
134
- | `SCP-` | A `DEC-` of `type: course-correction` |
135
- | `layer:` on a decision | `touches:`, filled from what actually changed |
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` | The stories route: `SPEC.md` + `stories.yaml`, status in story frontmatter |
138
- | Validator `V10` | Nothing. Its number is not reused |
139
- | `bmad-help` as the answer to "where am I" | `wdi-help` |
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 `method/README.md`. `method/rationale.md` says which absorbed which, and why |
141
- | An Indonesian synonym for a `mode` value — *ringkas*, *terjaga*, *katalog* as prose | The English value, used as written: `catalog` · `outline` · `guarded` · `deep` |
142
-
143
- ## Synonyms that MUST NOT be coined
144
-
145
- A synonym for a term that already has an entry is drift, and `wdi-reconcile` hunts for it.
146
-
147
- | Do not say | Say | Because |
148
- |---|---|---|
149
- | application · app · service, for a deployable | **container** | The term is already defined at C4 L2 and carried by every LC |
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
- | 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 V12 resolves against that name |
153
- | epic · sprint, for a batch of work | **wave** | Both belong to the sprint route this method dropped |
154
- | area, for a domain slice | **Product Component** | The word "area" is not used anywhere in this method |
155
- | 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
- | profile · tier · level, for document depth | **`mode`** | One knob, four values, and no matrix behind it |
157
- | feature, for a domain slice | **Product Component** | A feature is a promise; a PC is a folder pair with an owner |
158
- | requirements document | **PRD** or **SRS** | They cut different axes — time versus space — and merging the names merges the documents |
159
-
160
- ## Rules
161
-
162
- - A new method term MUST be added here in the same pass it first appears, not defined where it is
163
- used. Adding one is a change to the **method itself** — `wdi-blueprint` MAY propose it and MUST NOT
164
- write it, because a method term binds every project the method is installed in.
165
- - One term MUST NOT have two entries. Two meanings mean two terms.
166
- - A domain term MUST go to `.control/product-glossary.md` instead. If it is unclear which, ask whether the
167
- term would survive being applied to a different product: yes → here, no → there.
168
- - Common technical terms stay in English when the industry name is the one that matches the code,
169
- the error message, or the reader's expectation.
1
+ ---
2
+ status: Accepted
3
+ ---
4
+
5
+ # Method Glossary
6
+
7
+ **Loaded when:** a method term is unclear, and before coining a new one.
8
+
9
+ The words this method uses for **itself**. What the product is about belongs to
10
+ `.control/product-glossary.md` instead. A term defined here MUST NOT be redefined there, and the
11
+ reverse holds too. The test: would this term still apply on a different product? Yes → here.
12
+
13
+ ## Layers
14
+
15
+ | Term | Means |
16
+ |---|---|
17
+ | **Corpus** | The four layers below. `_bmad-output/` is not part of it |
18
+ | **`.constitution/`** | How we work. Rules. Rarely changes |
19
+ | **`.control/`** | What currently holds and what has been decided. Facts. Changes often. Equals `{project_knowledge}` |
20
+ | **`.what/`** | What was promised |
21
+ | **`.how/`** | How it is built |
22
+ | **Workspace** | `_bmad-output/` — work in progress, committed but not curated |
23
+ | **Placement test** | Is this file still true after its wave has passed? Yes → corpus. No → workspace |
24
+
25
+ ## Units
26
+
27
+ | Term | Means |
28
+ |---|---|
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
+ | **Logical Component** (LC) | One addressable unit of build. Registered in `components.yaml` with `type` · `container` · `owner` · `area` |
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 — V25 checks all three |
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
+ | **`_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
+ | **Library** | An includable artifact — compiled into or imported by something else, never run on its own. Not a container |
36
+ | **Slot** | A numbered sub-folder of a PC. `.what/<pc>/` 02–05 is reading order; `.how/<pc>/` 01–06 is ABCE classification. The two numberings do **not** mean the same thing |
37
+ | **Kernel** | The `SRS-<pc>.md` or `SDD-<pc>.md` file itself. Content SHOULD stay in it until it grows past roughly 400 lines — a suggestion, not a threshold |
38
+
39
+ A PC is not a container: a container runs, a PC is a domain. One container holds several PCs, and
40
+ one PC may appear in more than one container. Because they cross, neither list implies the other, and
41
+ the crossing MUST be written down rather than inferred — that is the PC × container matrix at C4 L2,
42
+ rendered from each PC's `containers:`.
43
+
44
+ ## Flow
45
+
46
+ There is no "stage". The five gates are the only flow vocabulary, and the word **area** is not used at all —
47
+ there is only Product Component.
48
+
49
+ | Term | Means |
50
+ |---|---|
51
+ | **Gate** | One of five decision points: G1 Problem · G2 Product · G3 Blueprint · G4 Component · G5 Release. Named after what is decided there, not after the work before it |
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
+ | **`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
+ | **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
+ | **Wave** | One unit of delivered work. Opens at G4 or G5, closes at G5, recorded in `waves.yaml` |
56
+ | **Release** | What a PRD promises. One release MAY span several waves; the relation is data, never inferred from numbering |
57
+ | **Wave size** | `S` ≤3 stories 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` |
58
+ | **Fast Path** | A fix that skips all gates: ≤1 story, no FR/UC/`AD-N`/domain-model change, no money, personal data, or third-party integration |
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
+
61
+ ## Artifacts
62
+
63
+ | Term | Means |
64
+ |---|---|
65
+ | **Brief** | One problem, one user, one measure. Singleton, spans releases |
66
+ | **PRD** | What is promised for **one initiative**, across every release it touches. FR and NFR numbered from the registry |
67
+ | **SRS** | Per PC: what the system must do. `.what/` — slices space, while the PRD slices initiative. It **exists at every `mode`**, carrying the actor list and the use case catalogue |
68
+ | **SDD** | Per PC: how it is built. `.how/`. At `mode: catalog` it is a skeleton, and that is a finished state |
69
+ | **Inventory** | One of three living registers at product level — tables, endpoints, screens. Written as a plan when there is no code, **derived** from code once there is |
70
+ | **Architecture spine** | `ARCHITECTURE-SPINE.md` — invariants as `AD-N`, each carrying Binds · Prevents · Rule. It constrains; it does not describe |
71
+ | **C4** | L1 system context · L2 containers · L3 components, one file per container. L1+L2 together are what other methods call the HLD |
72
+ | **`DESIGN.md`** | UX per PC, in `.how/<pc>/01-ux/` |
73
+ | **`EXPERIENCE.md`** | The user-facing journey, in `.what/<pc>/04-usecases/` |
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 machine contract for **one wave**. A projection of `.what/` + `.how/`, and MUST NOT contain anything new. Not read by humans |
76
+ | **Story** | One unit of build. Status is read from its own frontmatter, never copied elsewhere |
77
+ | **Structure map** | `.control/structure-codebase.md` and `structure-document.md` — where things actually are today |
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
+
80
+ ## Identifiers
81
+
82
+ | Code | For |
83
+ |---|---|
84
+ | `BG-` · `FR-` · `NFR-` · `UJ-` | Business goal · functional requirement · non-functional requirement · user journey |
85
+ | `UC-` | Use case |
86
+ | `AD-` | An invariant in the architecture spine |
87
+ | `DEC-` | A decision |
88
+ | `LC-` | A Logical Component |
89
+ | `OQ-` | An open question |
90
+ | `RTR-` | An archived retrospective, in `.control/reports/` |
91
+ | `CAP-` | A capability — the planning unit |
92
+ | `NT-` | A non-technical fact |
93
+ | `BUG-` · `HOT-` | A defect · a hotfix |
94
+ | `V1`–`V25` | Validators. `V10` fell and its number is not reused |
95
+
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 → story → test`.
98
+
99
+ `ADR-` is **retired**. It was renamed to `DEC-` on 2026-08-18 with the numbers unchanged, so `ADR-004`
100
+ inside a document frozen before that date is an alias for `DEC-004`, and those documents MUST NOT be
101
+ rewritten for the prefix.
102
+
103
+ ## Registry and generated
104
+
105
+ | Term | Means |
106
+ |---|---|
107
+ | **Registry** | `.control/registry/` — the source of truth for IDs and plans. Written through `wdi-*` skills |
108
+ | **Generated** | `.control/generated/` — derived from the registry. Written by the generator only, by hand **never** |
109
+ | **RTM** | Requirements traceability matrix. Generated, never hand-maintained |
110
+ | **Validator** | A script that answers what can be counted. It does not replace a gate checklist, which answers what must be judged |
111
+
112
+ ## BMad terms
113
+
114
+ BMad terms live in a WDI glossary because WDI runs on BMad. Each is defined **as WDI uses it**;
115
+ where BMad's own meaning is wider, the narrower one here wins.
116
+
117
+ | Term | Means |
118
+ |---|---|
119
+ | **Stories mode** | The route this method uses: SRS + SDD + PRD → `SPEC.md` + `stories.yaml` → build |
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
+ | **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 wave closes. What is not promoted dies with the folder |
123
+ | **`persistent_facts`** | Files a skill always reads. Routing alone does not achieve this |
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
+ | **`{project_knowledge}`** | The config variable pointing at `.control/` |
126
+ | **`_bmad/custom/`** | Where every BMad override lives. `.claude/skills/bmad-*/customize.toml` MUST NOT be edited — it is overwritten on update |
127
+
128
+ ## Retired — MUST NOT be used as current
129
+
130
+ | Retired | Instead |
131
+ |---|---|
132
+ | `ADR-` | `DEC-` — same numbers, new prefix |
133
+ | `ANX-`, and the annex concept | Nothing. Zero annexes were ever born |
134
+ | `SCP-` | A `DEC-` of `type: course-correction` |
135
+ | `layer:` on a decision | `touches:`, filled from what actually changed |
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` | The stories route: `SPEC.md` + `stories.yaml`, status in story frontmatter |
138
+ | Validator `V10` | Nothing. Its number is not reused |
139
+ | `bmad-help` as the answer to "where am I" | `wdi-help` |
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 |
141
+ | An Indonesian synonym for a `mode` value — *ringkas*, *terjaga*, *katalog* as prose | The English value, used as written: `catalog` · `outline` · `guarded` · `deep` |
142
+
143
+ ## Synonyms that MUST NOT be coined
144
+
145
+ A synonym for a term that already has an entry is drift, and `wdi-reconcile` hunts for it.
146
+
147
+ | Do not say | Say | Because |
148
+ |---|---|---|
149
+ | application · app · service, for a deployable | **container** | The term is already defined at C4 L2 and carried by every LC |
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
+ | 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 V12 resolves against that name |
153
+ | epic · sprint, for a batch of work | **wave** | Both belong to the sprint route this method dropped |
154
+ | area, for a domain slice | **Product Component** | The word "area" is not used anywhere in this method |
155
+ | 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
+ | profile · tier · level, for document depth | **`mode`** | One knob, four values, and no matrix behind it |
157
+ | feature, for a domain slice | **Product Component** | A feature is a promise; a PC is a folder pair with an owner |
158
+ | requirements document | **PRD** or **SRS** | They cut different axes — time versus space — and merging the names merges the documents |
159
+
160
+ ## Rules
161
+
162
+ - A new method term MUST be added here in the same pass it first appears, not defined where it is
163
+ used. Adding one is a change to the **method itself** — `wdi-blueprint` MAY propose it and MUST NOT
164
+ write it, because a method term binds every project the method is installed in.
165
+ - One term MUST NOT have two entries. Two meanings mean two terms.
166
+ - A domain term MUST go to `.control/product-glossary.md` instead. If it is unclear which, ask whether the
167
+ term would survive being applied to a different product: yes → here, no → there.
168
+ - Common technical terms stay in English when the industry name is the one that matches the code,
169
+ the error message, or the reader's expectation.