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
@@ -1,127 +1,127 @@
1
- ---
2
- name: wdi-product
3
- description: Use at G2 Product — when a PRD is created or an existing promise changes. Two intents, prd and update. Checks position, dispatches bmad-prd, verifies the result against prd-guide.md, and lands the memlog. Never writes the PRD itself.
4
- ---
5
-
6
- # WDI Product
7
-
8
- G2 decides **what is built, and how it feels to use.** `bmad-prd` writes the PRD.
9
-
10
- This wrapper exists because `bmad-prd` was the only writer of a primary artifact in this method with no WDI
11
- wrapper at all — so nothing checked its position, nothing verified its result against the guide, and nothing
12
- landed its memlog where the next run would read it. Those three gaps were paid for at G2 every time.
13
-
14
- You MUST NOT write or edit `prd.md` yourself. If a check fails, name what is missing and re-dispatch.
15
-
16
- | Intent | When |
17
- |---|---|
18
- | `prd` | A functional area a reader would not think to look for in an existing PRD |
19
- | `update` | Anything else — the default, and by a wide margin |
20
-
21
- ## Inputs
22
-
23
- | Source | What it answers |
24
- |---|---|
25
- | `.what/_product-brief/brief.md` | The problem, the primary user, the boundary the PRD MUST respect |
26
- | `.what/_prd/*/prd.md` | Which initiatives already have a PRD, and what each already promises |
27
- | `.control/registry/requirements.yaml` | The next `CAP`/`FR`/`NFR`/`UJ` ids, allocated globally |
28
- | `.control/decisions/` | `applied` decisions the PRD MUST already reflect |
29
- | `.constitution/document/prd-guide.md` | The rules the result is checked against |
30
- | `.control/product-glossary.md` | Terms already fixed |
31
-
32
- ## Step 1 — Position, and `update` is the default
33
-
34
- The decision this skill exists for. The test is the **reader**, not the calendar:
35
-
36
- > Would someone looking for this promise open an existing document?
37
-
38
- Yes → `update`, however large the change. No → `prd`. A PRD MUST NOT be split because it grew long, and a
39
- release is never a reason on its own. `prd-guide.md` owns the full table.
40
-
41
- Three asks that are not this skill:
42
-
43
- | Ask | Route |
44
- |---|---|
45
- | The problem itself has changed | `wdi-problem` — a re-cut plan under a wrong problem is wasted work |
46
- | Only the **wording** of an `FR` is wrong, while the promise is the same | The skill already at work fixes it directly. See below |
47
- | A planning assumption turned out to be void | `wdi-decision`, which wraps `bmad-correct-course` |
48
-
49
- ## Step 2 — Wording is not a promise
50
-
51
- The split that ended three corrections in "reported but not fixed". `prd-guide.md` owns it; what this skill
52
- owns is refusing to run for the wrong half.
53
-
54
- | What changed | Who does it |
55
- |---|---|
56
- | A wrong cross-reference, a retired term, a word inconsistent with an `applied` decision — **the promise is the same** | Whichever skill is already at work. Memlog records it; **one** Revision History row per pass, never one per correction |
57
- | Scope, the proof of done, an `FR` retired or born | This skill, intent `update` |
58
-
59
- You MUST NOT accept a wording correction as an `update` run. Doing so puts a trivial fix behind a gate, and
60
- that is exactly how the three earlier ones were dropped.
61
-
62
- ## Step 3 — Dispatch
63
-
64
- Invoke `bmad-prd` with the detected intent, scoped to **one initiative**. Do not restate the rules to it —
65
- they arrive through `persistent_facts` and `doc_standards` in `_bmad/custom/bmad-prd.toml`.
66
-
67
- Name the brief and, for `update`, the existing PRD and every `applied` decision that reaches it. The skill
68
- globs its own default locations, which this project redirects.
69
-
70
- ## Step 4 — Verify
71
-
72
- | # | Check | Fails when |
73
- |---|---|---|
74
- | 1 | Home | Anything outside `.what/_prd/<initiative>/`, or a folder still named `ISI-slug-inisiatif` |
75
- | 2 | Ids allocated from the registry | `FR-1` restarted, or an id invented in prose |
76
- | 3 | Every `FR` names its `capability`; every `NFR` names its `goal` | V15 has nothing to check |
77
- | 4 | Every `FR` has **exactly one** proof of done, in business language | Zero, or a second technical restatement beside it |
78
- | 5 | Every `NFR` names `enforced_by` | An `NFR` nothing enforces is decoration (V5) |
79
- | 6 | Cross-Cutting NFRs and Constraints both present | An absent section reads as "not checked" |
80
- | 7 | No solution shape | A framework, a table, or a transport named in `prd.md` rather than in `addendum.md` |
81
- | 8 | One Revision History row for this run, written for someone not in the room | Zero rows, several rows, or a row that says "Updated §4.2" |
82
- | 9 | Memlog at `.control/memlog/prd-<slug>.md`, slug matching the folder | A `.memlog.md` appeared inside `.what/` — `--workspace` was used |
83
- | 10 | `bmad-review` ran through `doc_standards` on `prd.md` and `addendum.md` | It did not fire |
84
-
85
- Check 9 MUST be fixed immediately rather than reported. V16 rejects a memlog inside the corpus.
86
-
87
- ## Step 5 — `owns:`, and the collision it prevents
88
-
89
- A new or changed `FR` that claims write authority over a domain entity MUST be checked against `owns:` in
90
- `components.yaml`. An entity has exactly one owning Product Component; an `FR` from another PRD that needs to
91
- change it MUST point at the owner's `FR` rather than promising to write it itself. V21 checks this, and the
92
- collision has already happened once for real.
93
-
94
- Report a collision. You MUST NOT resolve it by widening one PRD's claim.
95
-
96
- ## Step 6 — Impact
97
-
98
- A changed promise changes what other documents can still claim. Check, and **report** — never edit.
99
-
100
- | Found | Where it goes |
101
- |---|---|
102
- | A `UC` realising an `FR` whose promise moved | `wdi-component` intent `behaviour`, or `wdi-blueprint` when the catalogue line itself changes |
103
- | A blueprint inventory row with nothing promising it any more | `wdi-blueprint` |
104
- | A contradiction with an `applied` decision | `wdi-decision` — a new `DEC-`, never an edit to one already applied |
105
- | A component born by this initiative | `wdi-init` intent `component` |
106
-
107
- Then run the change-control matrix in `delivery-flow-guide.md` and **report** which gates reopen. You MUST
108
- NOT reopen one yourself.
109
-
110
- ## Rules
111
-
112
- - You MUST NOT write a second PRD for an area that already has one. The reader test decides, and its answer
113
- is `update` far more often than it feels.
114
- - You MUST NOT open G2 on a PRD that has not been through check 10. Gate time is for deciding, not
115
- proofreading.
116
- - The gate reads `prd.md` and `EXPERIENCE.md` together. A PRD that passes while the experience side is
117
- missing has answered half of what G2 decides.
118
- - Every unresolved `[ASSUMPTION]` MUST be filed through `wdi-question` before the gate opens.
119
- - You MUST NOT raise `status:`. Status is a stage; the `reviewed:` block is an event, and `wdi-review` writes
120
- it.
121
- - When the PRD cannot promise what was asked, say so and stop. Route to `wdi-problem`; do not quietly narrow
122
- the ask.
123
-
124
- ## Output
125
-
126
- Intent dispatched · what the promise now is in one line · the result of all ten checks naming the failures ·
127
- the `owns:` check · impact found and where it was routed · the gates the matrix names · open questions filed.
1
+ ---
2
+ name: wdi-product
3
+ description: Use at G2 Product — when a PRD is created or an existing promise changes. Two intents, prd and update. Checks position, dispatches bmad-prd, verifies the result against prd-guide.md, and lands the memlog. Never writes the PRD itself.
4
+ ---
5
+
6
+ # WDI Product
7
+
8
+ G2 decides **what is built, and how it feels to use.** `bmad-prd` writes the PRD.
9
+
10
+ This wrapper exists because `bmad-prd` was the only writer of a primary artifact in this method with no WDI
11
+ wrapper at all — so nothing checked its position, nothing verified its result against the guide, and nothing
12
+ landed its memlog where the next run would read it. Those three gaps were paid for at G2 every time.
13
+
14
+ You MUST NOT write or edit `prd.md` yourself. If a check fails, name what is missing and re-dispatch.
15
+
16
+ | Intent | When |
17
+ |---|---|
18
+ | `prd` | A functional area a reader would not think to look for in an existing PRD |
19
+ | `update` | Anything else — the default, and by a wide margin |
20
+
21
+ ## Inputs
22
+
23
+ | Source | What it answers |
24
+ |---|---|
25
+ | `.what/_product-brief/brief.md` | The problem, the primary user, the boundary the PRD MUST respect |
26
+ | `.what/_prd/*/prd.md` | Which initiatives already have a PRD, and what each already promises |
27
+ | `.control/registry/requirements.yaml` | The next `CAP`/`FR`/`NFR`/`UJ` ids, allocated globally |
28
+ | `.control/decisions/` | `applied` decisions the PRD MUST already reflect |
29
+ | `.constitution/method/document/prd-guide.md` | The rules the result is checked against |
30
+ | `.control/product-glossary.md` | Terms already fixed |
31
+
32
+ ## Step 1 — Position, and `update` is the default
33
+
34
+ The decision this skill exists for. The test is the **reader**, not the calendar:
35
+
36
+ > Would someone looking for this promise open an existing document?
37
+
38
+ Yes → `update`, however large the change. No → `prd`. A PRD MUST NOT be split because it grew long, and a
39
+ release is never a reason on its own. `prd-guide.md` owns the full table.
40
+
41
+ Three asks that are not this skill:
42
+
43
+ | Ask | Route |
44
+ |---|---|
45
+ | The problem itself has changed | `wdi-problem` — a re-cut plan under a wrong problem is wasted work |
46
+ | Only the **wording** of an `FR` is wrong, while the promise is the same | The skill already at work fixes it directly. See below |
47
+ | A planning assumption turned out to be void | `wdi-decision`, which wraps `bmad-correct-course` |
48
+
49
+ ## Step 2 — Wording is not a promise
50
+
51
+ The split that ended three corrections in "reported but not fixed". `prd-guide.md` owns it; what this skill
52
+ owns is refusing to run for the wrong half.
53
+
54
+ | What changed | Who does it |
55
+ |---|---|
56
+ | A wrong cross-reference, a retired term, a word inconsistent with an `applied` decision — **the promise is the same** | Whichever skill is already at work. Memlog records it; **one** Revision History row per pass, never one per correction |
57
+ | Scope, the proof of done, an `FR` retired or born | This skill, intent `update` |
58
+
59
+ You MUST NOT accept a wording correction as an `update` run. Doing so puts a trivial fix behind a gate, and
60
+ that is exactly how the three earlier ones were dropped.
61
+
62
+ ## Step 3 — Dispatch
63
+
64
+ Invoke `bmad-prd` with the detected intent, scoped to **one initiative**. Do not restate the rules to it —
65
+ they arrive through `persistent_facts` and `doc_standards` in `_bmad/custom/bmad-prd.toml`.
66
+
67
+ Name the brief and, for `update`, the existing PRD and every `applied` decision that reaches it. The skill
68
+ globs its own default locations, which this project redirects.
69
+
70
+ ## Step 4 — Verify
71
+
72
+ | # | Check | Fails when |
73
+ |---|---|---|
74
+ | 1 | Home | Anything outside `.what/_prd/<initiative>/`, or a folder still named `ISI-slug-inisiatif` |
75
+ | 2 | Ids allocated from the registry | `FR-1` restarted, or an id invented in prose |
76
+ | 3 | Every `FR` names its `capability`; every `NFR` names its `goal` | V15 has nothing to check |
77
+ | 4 | Every `FR` has **exactly one** proof of done, in business language | Zero, or a second technical restatement beside it |
78
+ | 5 | Every `NFR` names `enforced_by` | An `NFR` nothing enforces is decoration (V5) |
79
+ | 6 | Cross-Cutting NFRs and Constraints both present | An absent section reads as "not checked" |
80
+ | 7 | No solution shape | A framework, a table, or a transport named in `prd.md` rather than in `addendum.md` |
81
+ | 8 | One Revision History row for this run, written for someone not in the room | Zero rows, several rows, or a row that says "Updated §4.2" |
82
+ | 9 | Memlog at `.control/memlog/prd-<slug>.md`, slug matching the folder | A `.memlog.md` appeared inside `.what/` — `--workspace` was used |
83
+ | 10 | `bmad-review` ran through `doc_standards` on `prd.md` and `addendum.md` | It did not fire |
84
+
85
+ Check 9 MUST be fixed immediately rather than reported. V16 rejects a memlog inside the corpus.
86
+
87
+ ## Step 5 — `owns:`, and the collision it prevents
88
+
89
+ A new or changed `FR` that claims write authority over a domain entity MUST be checked against `owns:` in
90
+ `components.yaml`. An entity has exactly one owning Product Component; an `FR` from another PRD that needs to
91
+ change it MUST point at the owner's `FR` rather than promising to write it itself. V21 checks this, and the
92
+ collision has already happened once for real.
93
+
94
+ Report a collision. You MUST NOT resolve it by widening one PRD's claim.
95
+
96
+ ## Step 6 — Impact
97
+
98
+ A changed promise changes what other documents can still claim. Check, and **report** — never edit.
99
+
100
+ | Found | Where it goes |
101
+ |---|---|
102
+ | A `UC` realising an `FR` whose promise moved | `wdi-component` intent `behaviour`, or `wdi-blueprint` when the catalogue line itself changes |
103
+ | A blueprint inventory row with nothing promising it any more | `wdi-blueprint` |
104
+ | A contradiction with an `applied` decision | `wdi-decision` — a new `DEC-`, never an edit to one already applied |
105
+ | A component born by this initiative | `wdi-init` intent `component` |
106
+
107
+ Then run the change-control matrix in `delivery-flow-guide.md` and **report** which gates reopen. You MUST
108
+ NOT reopen one yourself.
109
+
110
+ ## Rules
111
+
112
+ - You MUST NOT write a second PRD for an area that already has one. The reader test decides, and its answer
113
+ is `update` far more often than it feels.
114
+ - You MUST NOT open G2 on a PRD that has not been through check 10. Gate time is for deciding, not
115
+ proofreading.
116
+ - The gate reads `prd.md` and `EXPERIENCE.md` together. A PRD that passes while the experience side is
117
+ missing has answered half of what G2 decides.
118
+ - Every unresolved `[ASSUMPTION]` MUST be filed through `wdi-question` before the gate opens.
119
+ - You MUST NOT raise `status:`. Status is a stage; the `reviewed:` block is an event, and `wdi-review` writes
120
+ it.
121
+ - When the PRD cannot promise what was asked, say so and stop. Route to `wdi-problem`; do not quietly narrow
122
+ the ask.
123
+
124
+ ## Output
125
+
126
+ Intent dispatched · what the promise now is in one line · the result of all ten checks naming the failures ·
127
+ the `owns:` check · impact found and where it was routed · the gates the matrix names · open questions filed.
@@ -40,7 +40,7 @@ in one line before checking, and say what it excluded.
40
40
 
41
41
  ## Step 2 — Run the validators first
42
42
 
43
- Run `uv run .constitution/scripts/validate.py`, and `uv run .constitution/scripts/inventory.py` when code
43
+ Run `uv run .constitution/method/scripts/validate.py`, and `uv run .constitution/method/scripts/inventory.py` when code
44
44
  exists. V1–V24 answer everything that can be **counted**, and you MUST NOT re-derive by reading what they
45
45
  already report. Carry their findings as they came, then spend the reading on what no validator can see.
46
46
 
@@ -82,7 +82,7 @@ governs it, and the four failures worth looking for are the ones no ID chain rec
82
82
 
83
83
  You MUST NOT invent a rule to fail an artifact against. Every finding here MUST quote the guide it comes
84
84
  from. A file at `status: Draft` MAY be read as guidance but MUST NOT be used to reject anything — that
85
- holds for all three `codebase/*-guide.md` — and a file at `status: Reference` MUST NOT be cited to reject
85
+ holds for all three `.constitution/project/codebase-*-guide.md` — and a file at `status: Reference` MUST NOT be cited to reject
86
86
  anything at all.
87
87
 
88
88
  ### What the Evidence check is, and what it is not