wdi-method 0.4.6 → 0.5.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.
Files changed (84) hide show
  1. package/README.md +264 -252
  2. package/bin/wdi-method.js +1121 -1030
  3. package/kit/.constitution/method/README.md +66 -169
  4. package/kit/.constitution/{constitution.md → method/constitution.md} +10 -56
  5. package/kit/.constitution/{document → method/document}/architecture-guide.md +1 -1
  6. package/kit/.constitution/{document → method/document}/corpus-guide.md +2 -2
  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 +1 -1
  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/{repo-guide.md → method/repo-guide.md} +16 -3
  17. package/kit/.constitution/{scripts → method/scripts}/timeline.py +2 -2
  18. package/kit/.constitution/{scripts → method/scripts}/validate.py +1599 -1581
  19. package/kit/.constitution/{structure-guide.md → method/structure-guide.md} +3 -3
  20. package/kit/.constitution/method/why/README.md +169 -0
  21. package/kit/.constitution/method/{artifact-map.md → why/artifact-map.md} +5 -5
  22. package/kit/.constitution/method/{rationale.md → why/rationale.md} +5 -5
  23. package/kit/.constitution/project/constitution.md +63 -0
  24. package/kit/assets/bmad-custom/bmad-advanced-elicitation.toml +15 -15
  25. package/kit/assets/bmad-custom/bmad-architecture.toml +33 -33
  26. package/kit/assets/bmad-custom/bmad-code-review.toml +13 -13
  27. package/kit/assets/bmad-custom/bmad-correct-course.toml +28 -28
  28. package/kit/assets/bmad-custom/bmad-prd.toml +42 -42
  29. package/kit/assets/bmad-custom/bmad-product-brief.toml +34 -34
  30. package/kit/assets/bmad-custom/bmad-retrospective.toml +9 -9
  31. package/kit/assets/bmad-custom/bmad-spec.toml +16 -16
  32. package/kit/assets/bmad-custom/bmad-ux.toml +19 -19
  33. package/kit/skills/wdi-blueprint/SKILL.md +3 -3
  34. package/kit/skills/wdi-build/SKILL.md +244 -244
  35. package/kit/skills/wdi-component/SKILL.md +1 -1
  36. package/kit/skills/wdi-help/SKILL.md +98 -98
  37. package/kit/skills/wdi-init/SKILL.md +1 -1
  38. package/kit/skills/wdi-problem/SKILL.md +90 -90
  39. package/kit/skills/wdi-product/SKILL.md +127 -127
  40. package/kit/skills/wdi-reconcile/SKILL.md +2 -2
  41. package/kit/skills/wdi-report/SKILL.md +205 -205
  42. package/kit/skills/wdi-systematic-debugging/SKILL.md +193 -193
  43. package/kit/skills/wdi-ux/SKILL.md +145 -145
  44. package/kit-overlay/AGENTS.md +20 -20
  45. package/kit-overlay/README.md +24 -17
  46. package/kit-overlay/constitution.md +10 -56
  47. package/kit-overlay/portability.md +6 -6
  48. package/kit-overlay/repo-guide.md +112 -97
  49. package/package.json +37 -37
  50. package/kit/.constitution/README.md +0 -66
  51. /package/kit/.constitution/{document → method/document}/bmad-guide.md +0 -0
  52. /package/kit/.constitution/{document → method/document}/bmad-skill-register.md +0 -0
  53. /package/kit/.constitution/{document → method/document}/brief-guide.md +0 -0
  54. /package/kit/.constitution/{document → method/document}/decision-guide.md +0 -0
  55. /package/kit/.constitution/{document → method/document}/prd-guide.md +0 -0
  56. /package/kit/.constitution/{document → method/document}/srs-guide.md +0 -0
  57. /package/kit/.constitution/{document → method/document}/templates/addendum.md +0 -0
  58. /package/kit/.constitution/{document → method/document}/templates/architecture-spine.md +0 -0
  59. /package/kit/.constitution/{document → method/document}/templates/brief.md +0 -0
  60. /package/kit/.constitution/{document → method/document}/templates/c4.md +0 -0
  61. /package/kit/.constitution/{document → method/document}/templates/contract.md +0 -0
  62. /package/kit/.constitution/{document → method/document}/templates/decision.md +0 -0
  63. /package/kit/.constitution/{document → method/document}/templates/flow.md +0 -0
  64. /package/kit/.constitution/{document → method/document}/templates/integration.md +0 -0
  65. /package/kit/.constitution/{document → method/document}/templates/lc.md +0 -0
  66. /package/kit/.constitution/{document → method/document}/templates/lifecycle.md +0 -0
  67. /package/kit/.constitution/{document → method/document}/templates/meeting.md +0 -0
  68. /package/kit/.constitution/{document → method/document}/templates/model.md +0 -0
  69. /package/kit/.constitution/{document → method/document}/templates/oq.md +0 -0
  70. /package/kit/.constitution/{document → method/document}/templates/prd.md +0 -0
  71. /package/kit/.constitution/{document → method/document}/templates/questions.md +0 -0
  72. /package/kit/.constitution/{document → method/document}/templates/rtr.md +0 -0
  73. /package/kit/.constitution/{document → method/document}/templates/rules.md +0 -0
  74. /package/kit/.constitution/{document → method/document}/templates/scn.md +0 -0
  75. /package/kit/.constitution/{document → method/document}/templates/srs.md +0 -0
  76. /package/kit/.constitution/{document → method/document}/templates/uc.md +0 -0
  77. /package/kit/.constitution/{document → method/document}/templates/ux.md +0 -0
  78. /package/kit/.constitution/{document → method/document}/ux-guide.md +0 -0
  79. /package/kit/.constitution/{method-glossary.md → method/method-glossary.md} +0 -0
  80. /package/kit/.constitution/{scripts → method/scripts}/inventory.py +0 -0
  81. /package/kit/.constitution/method/{portability.md → why/portability.md} +0 -0
  82. /package/kit/.constitution/{codebase/brownfield-guide.md → project/codebase-brownfield-guide.md} +0 -0
  83. /package/kit/.constitution/{codebase/conventions-guide.md → project/codebase-conventions-guide.md} +0 -0
  84. /package/kit/.constitution/{codebase/stack-guide.md → project/codebase-stack-guide.md} +0 -0
@@ -37,9 +37,9 @@ This is the whole reason the maps can exist without colliding with the guides al
37
37
  |---|---|
38
38
  | Where does this live, and what is already there? | **structure map** |
39
39
  | Which layer owns it, and what is it named? | `document/corpus-guide.md` |
40
- | How is code named, and which patterns apply? | `codebase/conventions-guide.md` |
41
- | What is it built with, and on which version? | `codebase/stack-guide.md` |
42
- | Which legacy shapes are ratified rather than fixed? | `codebase/brownfield-guide.md` |
40
+ | How is code named, and which patterns apply? | `../project/codebase-conventions-guide.md` |
41
+ | What is it built with, and on which version? | `../project/codebase-stack-guide.md` |
42
+ | Which legacy shapes are ratified rather than fixed? | `../project/codebase-brownfield-guide.md` |
43
43
 
44
44
  - A structure map MUST NOT restate a naming rule, a layer rule, or a version. It MUST reference the
45
45
  guide that owns it.
@@ -0,0 +1,169 @@
1
+ ---
2
+ status: Reference
3
+ ---
4
+
5
+ # The WDI Method — orientation
6
+
7
+ **Opened when:** you have never seen this method before, or you have and want the shape back in one reading.
8
+
9
+ This file **explains**. It does not bind — `../document/*-guide.md` does, and where the two disagree the guide
10
+ wins and the disagreement is a defect to report.
11
+
12
+ Five minutes. Three files in this folder: this one for orientation, `artifact-map.md` for *"where does this
13
+ file go"*, `rationale.md` for *"why is it like this"* — open that one before changing a rule, so you know
14
+ what you are about to break.
15
+
16
+ ## What the method is
17
+
18
+ Two methods joined. **WDI** owns the flow, the gates, and the artifacts nobody else writes. **BMad** owns
19
+ the writing skills where it has one. Every BMad skill is invoked through a WDI wrapper, never directly: the
20
+ wrapper is what checks position, verifies the result against the guide, and lands the memlog.
21
+
22
+ The whole thing rests on one sentence:
23
+
24
+ > Owner time is spent at five points. Between them, the agents work alone.
25
+
26
+ ## Five gates
27
+
28
+ A gate is named for **what is decided there**, never for the work before it.
29
+
30
+ | Gate | Decides | How often | Budget |
31
+ |---|---|---|---|
32
+ | **G1 Problem** | What the problem is, whose it is, why it earns work | once | 20' |
33
+ | **G2 Product** | What is built, and how it feels to use | once per PRD | 45' |
34
+ | **G3 Blueprint** | The whole portrait: which use cases, their entities, tables, endpoints, screens, and the invariants binding them | once per **product** | 45' |
35
+ | **G4 Component** | How one Product Component is built, and what the choice costs | once per **component** | 20–30' |
36
+ | **G5 Release** | Whether it is done and proven | once per wave | 10' |
37
+
38
+ **Only G4 changes shape.** The other four are always the same, whatever the settings — and that is what lets
39
+ the whole system be held in one head.
40
+
41
+ ## Two settings, and they control different things
42
+
43
+ | Setting | Where | Controls |
44
+ |---|---|---|
45
+ | `mode` | globally in `index.yaml`, per component in `components.yaml` | **Document depth**, and only that |
46
+ | `risk_accepted` | per component | **Review intensity**, and only that |
47
+
48
+ `mode` takes `catalog` · `outline` · `guarded` · `deep`, and the default is `catalog`. A component at
49
+ `catalog` **skips G4 entirely** — its control moved to G3, where its use cases, tables, endpoints, screens,
50
+ domain model, and C4 were all approved.
51
+
52
+ `risk_accepted` takes `low` · `medium` · `high`, and its direction reads off the name: `high` means *"I
53
+ accept a lot of risk here"*, so its review is the lightest.
54
+
55
+ Keeping them apart is what lets one component be **thin on purpose and reviewed the hardest**. Why that
56
+ matters is in `rationale.md`; what each value demands is in `../document/delivery-flow-guide.md`.
57
+
58
+ ## The run, first time through
59
+
60
+ | # | Step | Run | Gate |
61
+ |---|---|---|---|
62
+ | 0 | Set up | `wdi-init` intent `setup` — registry scaffolded, global `mode` set, existing documents reported, structure maps derived | — |
63
+ | 1 | Discovery and brief | `wdi-problem` | **G1** |
64
+ | 2 | PRD, one per initiative | `wdi-product` intent `prd` | **G2** |
65
+ | 2b | UX — only when the interface is a large part of the promise | `wdi-ux` | with G2 |
66
+ | 3 | Birth the components, set `mode` and `risk_accepted` | `wdi-init` intent `component` | — (tail of G2) |
67
+ | 4 | Blueprint | `wdi-blueprint` intent `catalog`, then `platform` | **G3** |
68
+ | 5 | One component's depth | `wdi-component` — as deep as its `mode`; **skipped at `catalog`** | **G4** |
69
+ | 6 | Build | `wdi-build` — opens the wave, runs `bmad-spec`, ships each story, closes the wave | **G5** |
70
+
71
+ After step 6 the next component enters at **step 5**, not at the beginning. Steps 0–4 happen once in the
72
+ life of the product.
73
+
74
+ `SPEC.md` and story files are **not read by humans**. The human review surface stops at the PRD, `.what/`,
75
+ and `.how/`.
76
+
77
+ ## The run, every time after
78
+
79
+ | Situation | Run |
80
+ |---|---|
81
+ | The next component is being taken on | `wdi-init` intent `mode` or `risk` if either needs changing → `wdi-component` → **G4** → `wdi-build` → **G5** |
82
+ | That component is at `mode: catalog` | straight to `wdi-build`. G4 is skipped |
83
+ | A promise changes where a PRD already exists | `wdi-product` intent `update` — never a second PRD for the same area |
84
+ | A new initiative with a different reader | `wdi-product` intent `prd` → `wdi-init` intent `component` if it births components |
85
+ | A small fix touching no `FR`, `UC`, `AD-N`, or domain model | Fast Path: `bmad-build` directly. It **stops and becomes a wave `S`** the moment an `FR` is touched |
86
+ | A bug, a failing test, unexpected behaviour | `wdi-systematic-debugging`, **before** any fix is proposed |
87
+ | A planning assumption turned out void | `wdi-decision` — it wraps `bmad-correct-course`, proposes, and changes nothing itself |
88
+ | An estimate or a task list is needed | `wdi-report` intent `estimate` |
89
+ | You do not know where you are | `wdi-help` |
90
+
91
+ ## Fifteen skills
92
+
93
+ Named for the **gate they serve**, so *"which skill do I run"* is answered by *"which gate am I at"*.
94
+
95
+ **Moment-bound** — running them outside their point is wrong:
96
+
97
+ | Skill | Its moment |
98
+ |---|---|
99
+ | `wdi-init` intent `setup` | before G1, once per project |
100
+ | `wdi-problem` | G1 |
101
+ | `wdi-product` | G2 |
102
+ | `wdi-init` intent `component` | tail of G2, and whenever a new PRD births a component |
103
+ | `wdi-blueprint` | G3 |
104
+ | `wdi-component` | G4 |
105
+ | `wdi-build` | G5, one wave per run |
106
+
107
+ **Anytime** — run the moment the trigger appears, without waiting for a gate:
108
+
109
+ | Skill | Its trigger |
110
+ |---|---|
111
+ | `wdi-decision` | A decision worth remembering · a void assumption · an accepted decision to carry into documents |
112
+ | `wdi-question` | Something that cannot be decided now |
113
+ | `wdi-log` | A meeting finished, or a non-technical fact now binds |
114
+ | `wdi-help` | "Where am I, what next" |
115
+ | `wdi-reconcile` | Any time. Read-only — it reports, it never edits |
116
+ | `wdi-review` | Over any document, any time |
117
+ | `wdi-systematic-debugging` | A bug, a failed test, a failed build, unexpected behaviour |
118
+ | `wdi-report` | An estimate at the start · progress periodically · before a client update |
119
+ | `wdi-init` intents `mode` · `risk` · `structure` | Any time |
120
+ | `wdi-ux` | Any time after a PRD exists, if UX is being used |
121
+
122
+ ## Who writes what — WDI and BMad
123
+
124
+ | Artifact | Written by | Wrapped in |
125
+ |---|---|---|
126
+ | Product brief | `bmad-product-brief` | `wdi-problem` |
127
+ | PRD | `bmad-prd` | `wdi-product` |
128
+ | UX | `bmad-ux` | `wdi-ux` |
129
+ | Spine + C4 | `bmad-architecture` | `wdi-blueprint` |
130
+ | **UC catalogue · actors · entities · business rules** | **nothing in BMad** | `wdi-blueprint` writes it itself |
131
+ | **SRS and all of `.what/<pc>/`** | **nothing in BMad** | `wdi-component` writes it itself |
132
+ | **SDD and all of `.how/<pc>/`** | **nothing in BMad** | `wdi-component` writes it itself |
133
+ | `SPEC.md` + stories | `bmad-spec` | `wdi-build` |
134
+ | Code | `bmad-build` · `bmad-build-auto` | `wdi-build` |
135
+ | Retrospective | `bmad-retrospective` | `wdi-build` |
136
+ | Document review | `bmad-review` | `wdi-review` |
137
+ | Course correction | `bmad-correct-course` | `wdi-decision` |
138
+
139
+ **The bold rows are why this method exists.** BMad stops at the promise and starts again at the mechanism,
140
+ and every behaviour in between had no author. Three consequences stick to those artifacts and are handled
141
+ deliberately: no `doc_standards` fires a review, no memlog is born on its own, and no template enforces
142
+ itself.
143
+
144
+ ## Where things live
145
+
146
+ | The thing in your hand | Its folder |
147
+ |---|---|
148
+ | How we work — a rule, a guide, a template | `.constitution/` |
149
+ | What currently holds — a decision, a question, a registry, a map | `.control/` |
150
+ | What is promised — the brief, a PRD, a use case, a business rule | `.what/` |
151
+ | How it is built — the spine, C4, an inventory, an SDD, a contract | `.how/` |
152
+ | A skill run's working output | `_bmad-output/` |
153
+ | Scratch that empties when the task closes | `.work/` |
154
+ | The application | `src/` · `web/` |
155
+
156
+ The test that settles anything ambiguous: **is this file still correct after its wave has passed?** Yes →
157
+ the corpus. No → `_bmad-output/`. In doubt, `../document/corpus-guide.md`.
158
+
159
+ ## Model choice
160
+
161
+ | Point | Model |
162
+ |---|---|
163
+ | Decisions — proposing a slicing, wording a `DEC-`, preparing a gate | `opus@high` |
164
+ | Writing, derivation, a review-fix pass | `sonnet@high` |
165
+ | Code review panel | Two different CLI families, and never the family that wrote the code |
166
+
167
+ In a derivation pass, quality comes from the input rather than the model. Running a "find the gap" lens with
168
+ the most careful model produces the most gaps, and each one becomes an open question — a cost nobody sees
169
+ until the question list has stopped being readable.
@@ -6,11 +6,11 @@ status: Reference
6
6
 
7
7
  **Opened when:** someone asks *"where does this file go"*, or *"does this document exist at my `mode`"*.
8
8
 
9
- This file **explains**. It does not bind — `document/*-guide.md` does, and where the two disagree the guide
9
+ This file **explains**. It does not bind — `../document/*-guide.md` does, and where the two disagree the guide
10
10
  wins and the disagreement is a defect to report.
11
11
 
12
12
  It answers three questions and nothing else: which files exist at each `mode`, who owns each one, and how
13
- the units of work line up. The **rules** about depth live in `document/delivery-flow-guide.md`; what is
13
+ the units of work line up. The **rules** about depth live in `../document/delivery-flow-guide.md`; what is
14
14
  here is the map.
15
15
 
16
16
  ## The one thing to read first
@@ -106,7 +106,7 @@ Repealed: `_platform/architecture/` (one file does not earn a folder) and `<pc>/
106
106
  ## Who owns each file
107
107
 
108
108
  A skill lands the output of the layer it owns, and landing is part of producing it — never a follow-up
109
- someone else performs. `document/corpus-guide.md` holds the binding version of this table.
109
+ someone else performs. `../document/corpus-guide.md` holds the binding version of this table.
110
110
 
111
111
  | Owner | Writes |
112
112
  |---|---|
@@ -137,7 +137,7 @@ Task** — it travels as a label, because one `FR` can be delivered by stories i
137
137
  satisfy part of two `FR`.
138
138
 
139
139
  The binding version of all of this, including why a wave MAY cross components and what has to be true
140
- first, is in `document/delivery-flow-guide.md`. It is not restated here.
140
+ first, is in `../document/delivery-flow-guide.md`. It is not restated here.
141
141
 
142
142
  ## What needs no template, and why
143
143
 
@@ -151,5 +151,5 @@ Stated so the next completeness audit does not report it again:
151
151
  | `SPEC.md` · story files | They belong to `bmad-spec`. WDI does not write their shape, and MUST NOT |
152
152
  | Registry `*.yaml` | Their shape is the comment block at the head of each file, plus the validator |
153
153
 
154
- Everything else in this map has a template in `document/templates/` — 27 of them, and every row above is
154
+ Everything else in this map has a template in `../document/templates/` — 27 of them, and every row above is
155
155
  covered by one.
@@ -6,7 +6,7 @@ status: Reference
6
6
 
7
7
  **Opened when:** you are about to change a rule and need to know what you would break.
8
8
 
9
- This file **explains**. It does not bind — `document/*-guide.md` does, and where the two disagree the guide
9
+ This file **explains**. It does not bind — `../document/*-guide.md` does, and where the two disagree the guide
10
10
  wins and the disagreement is a defect to report. **A rule MUST NOT be born here.** If this file notices a
11
11
  rule that should exist, it says so as a finding and the rule is written in its guide.
12
12
 
@@ -18,11 +18,11 @@ not finished. Six complaints, their causes, and where each is answered now:
18
18
 
19
19
  | Complaint | Cause | Answered in |
20
20
  |---|---|---|
21
- | Open questions in floods — ids reached `OQ-146`; one review produced 200 findings, then another produced 90 | Three rules combined into a generator: the `edge-case-hunter` lens mandatory over a whole SRS at once; no route for *"take the assumption, record it, continue"*; no budget and no severity class | `document/decision-guide.md`, `.control/questions/` |
22
- | Ceremony drift into the PRD; three corrections ended "reported but not fixed" | Correcting a *sentence* of an `FR` was treated as changing its *promise* — both had to go through the PRD skill | `document/prd-guide.md` |
21
+ | Open questions in floods — ids reached `OQ-146`; one review produced 200 findings, then another produced 90 | Three rules combined into a generator: the `edge-case-hunter` lens mandatory over a whole SRS at once; no route for *"take the assumption, record it, continue"*; no budget and no severity class | `../document/decision-guide.md`, `.control/questions/` |
22
+ | Ceremony drift into the PRD; three corrections ended "reported but not fixed" | Correcting a *sentence* of an `FR` was treated as changing its *promise* — both had to go through the PRD skill | `../document/prd-guide.md` |
23
23
  | Gates failing repeatedly over unanswered questions | No rule said that only a **blocking** question holds a gate | `.control/questions/blocking.md` |
24
- | The spine had to be updated every story | Invariants and inventories were mixed, and the tax was paid before the story, when the information was thinnest | `document/architecture-guide.md` |
25
- | A large PRD made `.what` over-think — 41 of 56 use cases marked `critical` (73%) | Not the PRD's length. The stage's scope was the whole corpus at once, plus a `critical` definition with two elastic criteria that passed everything | `document/delivery-flow-guide.md` |
24
+ | The spine had to be updated every story | Invariants and inventories were mixed, and the tax was paid before the story, when the information was thinnest | `../document/architecture-guide.md` |
25
+ | A large PRD made `.what` over-think — 41 of 56 use cases marked `critical` (73%) | Not the PRD's length. The stage's scope was the whole corpus at once, plus a `critical` definition with two elastic criteria that passed everything | `../document/delivery-flow-guide.md` |
26
26
  | Too slow for a small-to-medium application | A composite of the five above | all of it |
27
27
 
28
28
  One cause was **not** the method: **model choice.** A "find the gap" lens with no upper bound, run by the
@@ -0,0 +1,63 @@
1
+ ---
2
+ status: Accepted
3
+ ---
4
+
5
+ # Constitution — {product}
6
+
7
+ Articles 1, 2, and 5. They are **yours**: seeded once at install, never overwritten by `update`, and
8
+ never carried into the package by `promote`. Rewrite Articles 2 and 5 for the product this repo is;
9
+ Article 1 needs no edit — it cites `product.name` in `.control/registry/index.yaml`.
10
+
11
+ The method's own articles — 3 Layers, 4 Lifecycle, 6 Decisions, 7 Non-technical facts — live in
12
+ [`../method/constitution.md`](../method/constitution.md) and are replaced on every update. The
13
+ numbering is shared across the two files and has gaps in each.
14
+
15
+ An agent working here MUST be able to act on the contents of this repo alone.
16
+
17
+ ## Article 1 — Scope
18
+
19
+ This repo covers the product named at `product.name` in
20
+ `.control/registry/index.yaml`. One product, one repo. A second product MUST
21
+ get a repo of its own.
22
+
23
+ `product.client` in the same file names the client if there is one, and stays
24
+ empty if there is not. The product brief at G1 uses `product.name` as its
25
+ title. Neither this file nor the brief is a second source of the name.
26
+
27
+ An agent working here MUST NOT demand that sibling organisation repositories
28
+ be open in the same session.
29
+
30
+ ## Article 2 — Content boundary, `.work/`, and cross-repo references
31
+
32
+ All three are governed by [`../method/repo-guide.md`](../method/repo-guide.md). Its rules MUST NOT be
33
+ repeated here — one rule, one place.
34
+
35
+ What is particular to this repo, and therefore lives here:
36
+
37
+ - Name any extra boundary this product has (a public-repo rule, a ban on `3p.md`,
38
+ a `.work/` resting state). If there is none, delete this bullet list and the
39
+ sentence above it.
40
+ - `3p.md` MUST NOT be created in a product repo. Operational engagement memory
41
+ lives outside.
42
+
43
+ ## Article 5 — The method arrives from WDI Method
44
+
45
+ This is the **consumer** article. Use it in every product repo.
46
+
47
+ `.constitution/` guides and templates (except this file's Articles 1, 2, and 5,
48
+ `codebase/*-guide.md`, and any extra file this repo added), the `wdi-*` skills,
49
+ and `_bmad/custom/*.toml` arrive from the public WDI Method package via
50
+ `npx wdi-method install` / `update`.
51
+
52
+ - A method file MUST NOT be invented or patched here to improve the method. If a
53
+ rule is wrong, it is fixed in the WDI Method package, then brought here with
54
+ `update`.
55
+ - `wdi-method update` MUST overwrite method files and MUST NOT touch `.what/`,
56
+ `.how/`, `.control/` product state, this file's Articles 1–2 and 5,
57
+ `codebase/*-guide.md` once `Accepted`, extra constitution files this repo
58
+ added, or `_bmad/custom/*.user.toml`.
59
+ - A rule particular to this repo MUST be written out in full in this file or a
60
+ sibling, and MUST NOT be replaced by a pointer into another repository.
61
+
62
+ A prefix in `.claude/skills/` names the **method**, not the owner: `bmad-*` is
63
+ BMad's, `wdi-*` is this method's.
@@ -1,15 +1,15 @@
1
- # This skill has no `persistent_facts` key, so house rules cannot be injected through the usual
2
- # path. `preferences` is the equivalent lever: literal sentences a reviewer follows every
3
- # session.
4
- #
5
- # Only a house rule that changes HOW a critique lands belongs here — the full method stays in
6
- # .constitution/document/delivery-flow-guide.md.
7
-
8
- [workflow]
9
-
10
- preferences = [
11
- "Honor AGENTS.md and .constitution/document/ as the rules currently in force in this repo.",
12
- "Judge a G1-G4 artifact chiefly by its Decision Summary: one page, business language, no jargon that lacks a Glossary entry. A summary that cannot be read in full within its gate's time budget is the finding itself.",
13
- "There are only five normative words — MUST, MUST NOT, SHOULD, SHOULD NOT, MAY — in English and uppercase; the surrounding prose follows the product's chosen `doc_language`. Flag as a defect: any other imperative marker in any language, a translated method term, or an invented equivalent for a technical term the industry writes in English.",
14
- "Pushback MUST name the decision actually at stake and its cost if wrong, not merely grade the writing.",
15
- ]
1
+ # This skill has no `persistent_facts` key, so house rules cannot be injected through the usual
2
+ # path. `preferences` is the equivalent lever: literal sentences a reviewer follows every
3
+ # session.
4
+ #
5
+ # Only a house rule that changes HOW a critique lands belongs here — the full method stays in
6
+ # .constitution/method/document/delivery-flow-guide.md.
7
+
8
+ [workflow]
9
+
10
+ preferences = [
11
+ "Honor AGENTS.md and .constitution/method/document/ as the rules currently in force in this repo.",
12
+ "Judge a G1-G4 artifact chiefly by its Decision Summary: one page, business language, no jargon that lacks a Glossary entry. A summary that cannot be read in full within its gate's time budget is the finding itself.",
13
+ "There are only five normative words — MUST, MUST NOT, SHOULD, SHOULD NOT, MAY — in English and uppercase; the surrounding prose follows the product's chosen `doc_language`. Flag as a defect: any other imperative marker in any language, a translated method term, or an invented equivalent for a technical term the industry writes in English.",
14
+ "Pushback MUST name the decision actually at stake and its cost if wrong, not merely grade the writing.",
15
+ ]
@@ -1,33 +1,33 @@
1
- # Class A — initiative altitude only.
2
- # The spine holds the invariants that keep separately built units from diverging.
3
- # Structure (stack, tree, data shapes) is treated as a seed, not a contract.
4
- #
5
- # Order binds: the spine comes first, and bmad-spec reads it as a companion — never the other
6
- # way round.
7
-
8
- [workflow]
9
-
10
- spine_template = "{project-root}/.constitution/document/templates/architecture-spine.md"
11
- spine_output_path = "{project-root}/.how/_platform"
12
- run_folder_pattern = "architecture"
13
-
14
- # architecture-guide.md MUST NOT be installed as doc_standards, even though that is the usual
15
- # place for a document guide. This skill deliberately excludes the spine from doc_standards —
16
- # its own default customize.toml says "never to the spine", and SKILL.md step 5 repeats it:
17
- # "apply {workflow.doc_standards} polish to that prose only, never to the spine".
18
- # Installed there, the AD-N rule would only polish the deck and C4 — documents that carry no
19
- # AD-N — while the spine itself gets written with no guide at all. So it is installed as a
20
- # persistent fact, held from activation, rather than as end-of-run polish.
21
- #
22
- # doc_standards is deliberately left empty. BMad's own default
23
- # `skill:bmad-review lenses=structure,prose` still applies to rendering, and this array appends —
24
- # emptying it does not remove the default.
25
- #
26
- # The consequence is that the spine gets no automatic review. `bmad-review` on it MUST be called
27
- # manually before G4 — see the "Who calls bmad-review" table in 05-gates.md.
28
-
29
- persistent_facts = [
30
- "file:{project-root}/.constitution/document/architecture-guide.md",
31
- "file:{project-root}/.constitution/document/decision-guide.md",
32
- "Every memlog.py call MUST use --path {project-root}/.control/memlog/spine.md. --workspace MUST NOT be used.",
33
- ]
1
+ # Class A — initiative altitude only.
2
+ # The spine holds the invariants that keep separately built units from diverging.
3
+ # Structure (stack, tree, data shapes) is treated as a seed, not a contract.
4
+ #
5
+ # Order binds: the spine comes first, and bmad-spec reads it as a companion — never the other
6
+ # way round.
7
+
8
+ [workflow]
9
+
10
+ spine_template = "{project-root}/.constitution/method/document/templates/architecture-spine.md"
11
+ spine_output_path = "{project-root}/.how/_platform"
12
+ run_folder_pattern = "architecture"
13
+
14
+ # architecture-guide.md MUST NOT be installed as doc_standards, even though that is the usual
15
+ # place for a document guide. This skill deliberately excludes the spine from doc_standards —
16
+ # its own default customize.toml says "never to the spine", and SKILL.md step 5 repeats it:
17
+ # "apply {workflow.doc_standards} polish to that prose only, never to the spine".
18
+ # Installed there, the AD-N rule would only polish the deck and C4 — documents that carry no
19
+ # AD-N — while the spine itself gets written with no guide at all. So it is installed as a
20
+ # persistent fact, held from activation, rather than as end-of-run polish.
21
+ #
22
+ # doc_standards is deliberately left empty. BMad's own default
23
+ # `skill:bmad-review lenses=structure,prose` still applies to rendering, and this array appends —
24
+ # emptying it does not remove the default.
25
+ #
26
+ # The consequence is that the spine gets no automatic review. `bmad-review` on it MUST be called
27
+ # manually before G4 — see the "Who calls bmad-review" table in 05-gates.md.
28
+
29
+ persistent_facts = [
30
+ "file:{project-root}/.constitution/method/document/architecture-guide.md",
31
+ "file:{project-root}/.constitution/method/document/decision-guide.md",
32
+ "Every memlog.py call MUST use --path {project-root}/.control/memlog/spine.md. --workspace MUST NOT be used.",
33
+ ]
@@ -1,13 +1,13 @@
1
- # Review Panel: two reviewers from two different CLI families, and neither may come from the
2
- # family that ran the implementation.
3
- #
4
- # WARNING: the adversarial and edge-case lenses here are read from the bundled copy of
5
- # review-prompts/, NOT from the bmad-review skill. An override on bmad-review will not be visible
6
- # on this path.
7
-
8
- [workflow]
9
-
10
- persistent_facts = [
11
- "file:{project-root}/.constitution/codebase/conventions-guide.md",
12
- "A finding that repeats across stories MUST be recorded through bmad-project-context intent record, not fixed silently every time it recurs.",
13
- ]
1
+ # Review Panel: two reviewers from two different CLI families, and neither may come from the
2
+ # family that ran the implementation.
3
+ #
4
+ # WARNING: the adversarial and edge-case lenses here are read from the bundled copy of
5
+ # review-prompts/, NOT from the bmad-review skill. An override on bmad-review will not be visible
6
+ # on this path.
7
+
8
+ [workflow]
9
+
10
+ persistent_facts = [
11
+ "file:{project-root}/.constitution/project/codebase-conventions-guide.md",
12
+ "A finding that repeats across stories MUST be recorded through bmad-project-context intent record, not fixed silently every time it recurs.",
13
+ ]
@@ -1,28 +1,28 @@
1
- # Class B — no path knob at all.
2
- #
3
- # bmad-correct-course's own default customize.toml only opens activation_steps, persistent_facts,
4
- # and on_complete. There is no *_output_path, so its proposal still lands at
5
- # _bmad-output/planning-artifacts/sprint-change-proposal-{date}.md and MUST be landed again by
6
- # wdi-decision as a `DEC-` of type course-correction. The `SCP-` code and the
7
- # .control/supplements/ folder have ALREADY BEEN RETIRED — a course correction is a decision, and
8
- # there is no second code naming the same thing.
9
- #
10
- # The main danger is not the path but this skill's habit of editing directly: its default is
11
- # "direct updates to epics, stories, or PRD sections". In this repo that MUST NOT happen —
12
- # document changes go through wdi-decision intent `apply`, and wave content through wdi-build.
13
- # That is why the prohibition is installed as a persistent fact, held from activation, rather than
14
- # as end-of-run polish.
15
-
16
- [workflow]
17
-
18
- persistent_facts = [
19
- "file:{project-root}/.constitution/document/delivery-flow-guide.md",
20
- "file:{project-root}/.constitution/document/corpus-guide.md",
21
- "This skill MUST NOT write or edit anything in {project-root}/.what/ or {project-root}/.how/. Its output is a proposal; document changes are made by wdi-decision intent `apply` once the `DEC-` is accepted, and wave content by wdi-build.",
22
- "epics.md and sprint-status.yaml are NOT used in this repo — we run the stories route. Neither MUST be read as a source, and neither MUST be created.",
23
- "The impact scan MUST cover .what/_prd/, .what/<pc>/, .how/_platform/, .how/<pc>/, SPEC.md, .control/registry/waves.yaml, and the story files. .what/<pc>/ is unknown to this skill entirely, and without this it goes stale silently.",
24
- "Every plan change that is expensive to reverse MUST become a `DEC-` through wdi-decision, not a paragraph inside the proposal. A course correction is itself one `DEC-` of type course-correction.",
25
- "A correction that voids more than 30% of a wave's stories MUST NOT be handled as a patch. Say so, and let the wave be re-cut through wdi-build.",
26
- ]
27
-
28
- on_complete = "Hand the landing to wdi-decision: the whole proposal becomes one `DEC-` of type course-correction, and its run folder MUST NOT be deleted. MUST NOT land itself, MUST NOT edit .what/ or .how/."
1
+ # Class B — no path knob at all.
2
+ #
3
+ # bmad-correct-course's own default customize.toml only opens activation_steps, persistent_facts,
4
+ # and on_complete. There is no *_output_path, so its proposal still lands at
5
+ # _bmad-output/planning-artifacts/sprint-change-proposal-{date}.md and MUST be landed again by
6
+ # wdi-decision as a `DEC-` of type course-correction. The `SCP-` code and the
7
+ # .control/supplements/ folder have ALREADY BEEN RETIRED — a course correction is a decision, and
8
+ # there is no second code naming the same thing.
9
+ #
10
+ # The main danger is not the path but this skill's habit of editing directly: its default is
11
+ # "direct updates to epics, stories, or PRD sections". In this repo that MUST NOT happen —
12
+ # document changes go through wdi-decision intent `apply`, and wave content through wdi-build.
13
+ # That is why the prohibition is installed as a persistent fact, held from activation, rather than
14
+ # as end-of-run polish.
15
+
16
+ [workflow]
17
+
18
+ persistent_facts = [
19
+ "file:{project-root}/.constitution/method/document/delivery-flow-guide.md",
20
+ "file:{project-root}/.constitution/method/document/corpus-guide.md",
21
+ "This skill MUST NOT write or edit anything in {project-root}/.what/ or {project-root}/.how/. Its output is a proposal; document changes are made by wdi-decision intent `apply` once the `DEC-` is accepted, and wave content by wdi-build.",
22
+ "epics.md and sprint-status.yaml are NOT used in this repo — we run the stories route. Neither MUST be read as a source, and neither MUST be created.",
23
+ "The impact scan MUST cover .what/_prd/, .what/<pc>/, .how/_platform/, .how/<pc>/, SPEC.md, .control/registry/waves.yaml, and the story files. .what/<pc>/ is unknown to this skill entirely, and without this it goes stale silently.",
24
+ "Every plan change that is expensive to reverse MUST become a `DEC-` through wdi-decision, not a paragraph inside the proposal. A course correction is itself one `DEC-` of type course-correction.",
25
+ "A correction that voids more than 30% of a wave's stories MUST NOT be handled as a patch. Say so, and let the wave be re-cut through wdi-build.",
26
+ ]
27
+
28
+ on_complete = "Hand the landing to wdi-decision: the whole proposal becomes one `DEC-` of type course-correction, and its run folder MUST NOT be deleted. MUST NOT land itself, MUST NOT edit .what/ or .how/."
@@ -1,42 +1,42 @@
1
- # Class A — writes straight into the corpus.
2
- #
3
- # One PRD per **initiative / functional area**, not per release. It is a living document:
4
- # a behaviour change goes through intent Update on the same PRD, never a new one.
5
- # A release is carried by the registry through target_release, not by the folder name.
6
- #
7
- # run_folder_pattern MUST be filled with the initiative slug and MUST NOT use {date}.
8
- # When a new initiative opens, TWO lines MUST change together:
9
- # 1. run_folder_pattern -> the next initiative's slug
10
- # 2. --path .../prd-<slug>.md -> the next initiative's memlog
11
- # Changing only one produces a new PRD stuck to the old memlog.
12
- #
13
- # The default value below is deliberately unusable as-is — it MUST be replaced at runbook
14
- # step 4. A PRD landing in a folder literally named FILL-initiative-slug is the sign that step
15
- # was skipped.
16
-
17
- [workflow]
18
-
19
- prd_template = "{project-root}/.constitution/document/templates/prd.md"
20
- prd_output_path = "{project-root}/.what/_prd"
21
- run_folder_pattern = "FILL-initiative-slug"
22
-
23
- doc_standards = ["file:{project-root}/.constitution/document/prd-guide.md"]
24
-
25
- # The facts below deliberately repeat part of prd-guide.md. The reason is timing: doc_standards
26
- # only activates at the Polish step, while Create-versus-Update intent detection happens at
27
- # activation. prd-guide.md remains authoritative; where the two disagree, the guide wins and the
28
- # line here MUST be fixed.
29
- persistent_facts = [
30
- "file:{project-root}/.control/registry/requirements.yaml",
31
- "file:{project-root}/.constitution/document/prd-guide.md",
32
-
33
- "FR-N, NFR-N, UJ-N, and CAP-N MUST be allocated from requirements.yaml and MUST NOT restart from 1. The next initiative's PRD continues the previous PRD's sequence — the sequence is global, one product, one sequence.",
34
-
35
- "This PRD is a living document. A behaviour change, a closely related feature addition, or a promise correction MUST go through intent Update on the same PRD. A new PRD MUST NOT be created just because the release changed; it is created only when the functional area is genuinely different and reads badly if merged.",
36
-
37
- "Every intent Update run MUST add exactly one row to the PRD's Revision History table: the date, what changed in language an outside reader understands, and why. That table is for the reader; the memlog is for the audit. Neither MUST substitute for the other.",
38
-
39
- "A release MUST NOT be stated through the PRD's folder name or its title. It is carried by the target_release field in requirements.yaml and waves.yaml. Naming a release number inside the PRD's prose MAY be done as context, but the registry remains what binds.",
40
-
41
- "Every memlog.py call — init, append, set, and the read on resume or intent Update — MUST use --path {project-root}/.control/memlog/prd-FILL-initiative-slug.md. The slug MUST match run_folder_pattern above, and both lines MUST change together when the initiative changes. --workspace MUST NOT be used.",
42
- ]
1
+ # Class A — writes straight into the corpus.
2
+ #
3
+ # One PRD per **initiative / functional area**, not per release. It is a living document:
4
+ # a behaviour change goes through intent Update on the same PRD, never a new one.
5
+ # A release is carried by the registry through target_release, not by the folder name.
6
+ #
7
+ # run_folder_pattern MUST be filled with the initiative slug and MUST NOT use {date}.
8
+ # When a new initiative opens, TWO lines MUST change together:
9
+ # 1. run_folder_pattern -> the next initiative's slug
10
+ # 2. --path .../prd-<slug>.md -> the next initiative's memlog
11
+ # Changing only one produces a new PRD stuck to the old memlog.
12
+ #
13
+ # The default value below is deliberately unusable as-is — it MUST be replaced at runbook
14
+ # step 4. A PRD landing in a folder literally named FILL-initiative-slug is the sign that step
15
+ # was skipped.
16
+
17
+ [workflow]
18
+
19
+ prd_template = "{project-root}/.constitution/method/document/templates/prd.md"
20
+ prd_output_path = "{project-root}/.what/_prd"
21
+ run_folder_pattern = "FILL-initiative-slug"
22
+
23
+ doc_standards = ["file:{project-root}/.constitution/method/document/prd-guide.md"]
24
+
25
+ # The facts below deliberately repeat part of prd-guide.md. The reason is timing: doc_standards
26
+ # only activates at the Polish step, while Create-versus-Update intent detection happens at
27
+ # activation. prd-guide.md remains authoritative; where the two disagree, the guide wins and the
28
+ # line here MUST be fixed.
29
+ persistent_facts = [
30
+ "file:{project-root}/.control/registry/requirements.yaml",
31
+ "file:{project-root}/.constitution/method/document/prd-guide.md",
32
+
33
+ "FR-N, NFR-N, UJ-N, and CAP-N MUST be allocated from requirements.yaml and MUST NOT restart from 1. The next initiative's PRD continues the previous PRD's sequence — the sequence is global, one product, one sequence.",
34
+
35
+ "This PRD is a living document. A behaviour change, a closely related feature addition, or a promise correction MUST go through intent Update on the same PRD. A new PRD MUST NOT be created just because the release changed; it is created only when the functional area is genuinely different and reads badly if merged.",
36
+
37
+ "Every intent Update run MUST add exactly one row to the PRD's Revision History table: the date, what changed in language an outside reader understands, and why. That table is for the reader; the memlog is for the audit. Neither MUST substitute for the other.",
38
+
39
+ "A release MUST NOT be stated through the PRD's folder name or its title. It is carried by the target_release field in requirements.yaml and waves.yaml. Naming a release number inside the PRD's prose MAY be done as context, but the registry remains what binds.",
40
+
41
+ "Every memlog.py call — init, append, set, and the read on resume or intent Update — MUST use --path {project-root}/.control/memlog/prd-FILL-initiative-slug.md. The slug MUST match run_folder_pattern above, and both lines MUST change together when the initiative changes. --workspace MUST NOT be used.",
42
+ ]