wdi-method 0.6.30 → 0.6.31

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 (30) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/README.md +3 -0
  3. package/bin/wdi-method.js +121 -14
  4. package/kit/.constitution/method/document/architecture-guide.md +217 -209
  5. package/kit/.constitution/method/document/corpus-guide.md +522 -517
  6. package/kit/.constitution/method/document/decision-guide.md +236 -216
  7. package/kit/.constitution/method/document/delivery-flow-guide.md +20 -0
  8. package/kit/.constitution/method/document/prd-guide.md +245 -245
  9. package/kit/.constitution/method/document/templates/design-system.md +96 -66
  10. package/kit/.constitution/method/document/templates/experience.md +62 -0
  11. package/kit/.constitution/method/document/templates/structure-codebase.md +131 -129
  12. package/kit/.constitution/method/document/templates/ux.md +78 -76
  13. package/kit/.constitution/method/document/ux-guide.md +161 -115
  14. package/kit/.constitution/method/method-glossary.md +3 -0
  15. package/kit/.constitution/method/scripts/validate.py +3310 -3200
  16. package/kit/.constitution/method/structure-guide.md +204 -202
  17. package/kit/.constitution/method/why/artifact-map.md +158 -157
  18. package/kit/skills/wdi-blueprint/SKILL.md +271 -264
  19. package/kit/skills/wdi-component/SKILL.md +179 -174
  20. package/kit/skills/wdi-decision/SKILL.md +206 -203
  21. package/kit/skills/wdi-help/SKILL.md +127 -125
  22. package/kit/skills/wdi-init/SKILL.md +9 -4
  23. package/kit/skills/wdi-problem/SKILL.md +114 -108
  24. package/kit/skills/wdi-product/SKILL.md +167 -162
  25. package/kit/skills/wdi-reconcile/SKILL.md +170 -169
  26. package/kit/skills/wdi-upgrade/SKILL.md +234 -215
  27. package/kit/skills/wdi-ux/SKILL.md +187 -169
  28. package/kit-overlay/AGENTS.md +3 -1
  29. package/package.json +1 -1
  30. package/scaffold/.control/registry/index.yaml +2 -1
@@ -1,125 +1,127 @@
1
- ---
2
- name: wdi-help
3
- description: Check project delivery status, open or pending specs and tickets, current gate progress, and determine what to build or which skill to invoke next. Answers from this project's status registry and five gates.
4
- ---
5
-
6
- # WDI Help
7
-
8
- `bmad-help` cannot answer "where am I" in this project. Its progress detection globs `output-location`
9
- paths resolved from `resolve_config.py`, so it is blind to every class-A artifact this project redirects
10
- into `.what/` and `.how/`. It also lists two required gates — `epics.md` and `sprint-status.yaml` — that
11
- this project's route never produces, and it is the only BMad skill with no `customize.toml`, so none of
12
- that can be corrected.
13
-
14
- This skill replaces it for position and routing. `bmad-help` remains useful for one thing only: questions
15
- about BMad itself.
16
-
17
- ## Inputs
18
-
19
- | Source | What it answers |
20
- |---|---|
21
- | `.control/generated/status.yaml` | Primary machine-readable status: which spec is open, tickets progress, red validators (or `status.md`) |
22
- | `.control/registry/index.yaml` | The global `mode`, and the gate map |
23
- | `.control/registry/components.yaml` | Per-component `mode`, `risk_accepted`, and `g4_passed` |
24
- | `.control/registry/specs.yaml` | Fallback only when status is absent/stale: spec → release, size, and ticket index (MUST query selectively) |
25
- | `.constitution/method/document/delivery-flow-guide.md` | The five gates and their checklists |
26
- | `.constitution/method/why/README.md` | The whole shape, when the caller has never seen the method |
27
-
28
- You MUST read `.control/generated/status.yaml` (or `status.md`) rather than counting files yourself. You
29
- MUST NOT open or inspect `.control/registry/specs.yaml` if the status file is present and answers which
30
- spec is open.
31
-
32
- ## What to answer
33
-
34
- Three things, in this order, and nothing else unless asked:
35
-
36
- 1. **Where the project stands** — the last gate passed, and which gate is next.
37
- 2. **What blocks that gate** — the specific artifact, validator, or blocking question that is not ready.
38
- 3. **Which skill to invoke next** — one skill, named, with its intent, and the reason in a clause.
39
-
40
- Keep it under fifteen lines. A routing answer that needs scrolling has failed at its job.
41
-
42
- ## The one thing that changes the answer
43
-
44
- **Read the component's `mode` before routing to G4.** A component at `mode: catalog` skips G4 entirely —
45
- routing it to `wdi-component` is wrong, and the next step is `wdi-build`. That is the single most common
46
- mis-route in this flow, because every other gate is the same for every component.
47
-
48
- ## Routing by what exists
49
-
50
- | State | Next |
51
- |---|---|
52
- | `wdi-method update` just ran and its summary printed an `upgrade` line | `wdi-upgrade` — **before anything else**. Content is still in the old shape, and every skill below reads the new one |
53
- | `wdi-method update` just ran and printed **no** `upgrade` line | Nothing. The update was mechanical and complete; carry on from wherever the gates say you are |
54
- | `wdi-method install` just ran, first time in this repo | `wdi-init` intent `setup` — the global `mode`, and nothing has started until it is set |
55
- | Someone asks whether to run `/setup-matt-pocock-skills` | **No**, unless they are changing tracker. `install` and `update` seed `docs/agents/` already answered for this method; re-running the interview restores defaults that contradict Article 3 |
56
- | The installer refused, naming engines | Not a skill. `npx skills@latest add mattpocock/skills` — **into this repo**, all six it names; a user-level plugin does not count. Then run the installer again |
57
- | An engine will not invoke, or `engines-invocable` is red | `wdi-init` intent `engines` — `npx skills update` puts the author's `disable-model-invocation` back, and one command strips it out again |
58
- | No registry, or no global `mode` set | `wdi-init` intent `setup` — nothing has started |
59
- | No `.what/_product-brief/brief.md` | `wdi-problem` — G1 has not started |
60
- | A brief exists, and no PRD covers the area in play | `wdi-product` intent `prd` |
61
- | A PRD covers it but the promise has moved | `wdi-product` intent `update` — never a second PRD for the same area |
62
- | Only the **wording** of an `FR` is wrong | Nobody. Whichever skill is at work fixes it directly; putting it behind a gate is how three earlier corrections were dropped |
63
- | A PRD exists and the interface is a large part of what it promises | `wdi-ux` — optional, and it runs **before G2**, which reads its `EXPERIENCE.md`. It needs no Product Component: `design-system.md` lands at once, and the two `<pc>`-scoped halves land when `wdi-init` intent `component` runs |
64
- | A PRD exists, no `product_components` yet | `wdi-init` intent `component` — the slicing is born here, at the tail of G2 |
65
- | Components exist, `mode` or `risk_accepted` unset | `wdi-init` intents `mode` and `risk` — both are the owner's, and G4 cannot be read without them |
66
- | Components exist, no UC catalogue or no spine | `wdi-blueprint` — intent `catalog` first, then `platform` |
67
- | The blueprint is complete and G3 has not been held | The gate. Read `.how-rendered/blueprint.md`, not seven files |
68
- | G3 passed, a component at `outline`/`guarded`/`deep` has no depth | `wdi-component` |
69
- | G3 passed, the component is at `mode: catalog` | `wdi-build` — G4 is skipped by design |
70
- | Depth done and G4 passed for every component the work touches | `wdi-build` — it opens the spec, has the owner run `to-spec` and `to-tickets`, ships each ticket, closes the spec |
71
- | A small fix touching no `FR`, `UC`, `AD-N`, or domain model | Fast Path: the owner runs `/implement` directly. It stops and becomes a spec `S` the moment an `FR` is touched |
72
- | The owner wants every `FR` delivered without being asked in between | `wdi-autopilot` — a preflight first, then one mandate the owner accepts, then a loop that fires it. Route here only when the owner asks for it; it is never the default next step |
73
- | A planning assumption turned out void | `wdi-decision` intent `open` — it proposes, and changes nothing |
74
- | The owner has to decide something and wants the reading done first | `wdi-explain-to-me` — it briefs, and changes nothing; the decision then goes to `wdi-decision` or `wdi-question` |
75
- | An accepted `DEC-` has not reached its documents | `wdi-decision` intent `apply` |
76
- | A bug, a failing test, unexpected behaviour | `wdi-systematic-debugging`, before any fix is proposed |
77
- | Numbers are wanted before the work is committed | `wdi-report` intent `estimate` |
78
- | Closed specs remain in `.scratch/`, or need archival/pruning | `wdi-prune-or-archive` — archives closed spec to `.archive/specs/` or prunes from disk |
79
- | Raw manual-test notes needing triage, review, and spec drafting | `wdi-daily-what-to-build` — classifies notes, drafts spec/tickets via `wdi-build`, gets second opinion |
80
- | Autonomous delivery loop with local runner and peer review | `wdi-daily-autopilot` — composes routine, resolves local runners, launches `/loop` unattended |
81
- | Merged autopilot run needing branch cleanup and physical test checklist | `wdi-daily-what-to-test` — syncs branch, prunes merged worktrees/branches, configures smoke target, provides delta-scoped checklist |
82
- | Cleaning up generated rendered duplicate files from git | Untrack via `git rm -r --cached .what-rendered/ .how-rendered/`, add to `.gitignore`, regenerate via `validate.py --generate` |
83
-
84
- A brief that exists but is thin is still a brief. You MUST NOT route back to `wdi-problem` because a
85
- section reads weakly — route there only when the brief is absent, when a change signal invalidates what
86
- it claims, or when one of its eight required sections is missing outright.
87
-
88
- ## Rules
89
-
90
- - You MUST answer from this project's five gates — G1 Problem · G2 Product · G3 Blueprint · G4 Component ·
91
- G5 Release. BMad's `phase` column MUST NOT be used; it mixes two conventions and names gates this
92
- project does not run.
93
- - When a `wdi-*` wrapper exists for a BMad skill, you MUST name the wrapper, never the skill it wraps. The
94
- wrapper carries the position check and the content checks; routing past it produces an artifact nothing
95
- verifies. Today every BMad skill this method uses has one: `wdi-problem`, `wdi-product`,
96
- `wdi-blueprint`, `wdi-build`, `wdi-decision`, `wdi-review`, `wdi-ux`.
97
- - Only `.control/questions/blocking.md` holds a gate. `external.md` holds go-live and MUST NOT be reported
98
- as blocking a design gate; `assumptions.md` holds nothing.
99
- - You MUST NOT invent progress. If `.control/generated/status.yaml` (or `status.md`) is missing or stale,
100
- say so, query `specs.yaml` selectively, and name `validate.py --generate`.
101
- - You MUST NOT call Read on the entire 1000+ line `.control/registry/specs.yaml` file into context. When
102
- discovering active or open work as a fallback, query `specs.yaml` selectively (e.g. `Grep` for `status:\s*(open|ready-for-dev)`).
103
- - You MUST NOT run broad or recursive searches across `.scratch/` (e.g. searching `*` or `**/*`). When
104
- inspecting candidate open specs or tickets, inspect only the candidate spec's folder using the `spec_folder:`
105
- path resolved from `specs.yaml`.
106
- - You MUST treat `wdi-help` as a fast status and routing skill: if filesystem drift, orphaned folders, or
107
- discrepancies between registry and disk are suspected, route to `wdi-reconcile` rather than conducting
108
- a filesystem audit in this skill.
109
- - You MUST NOT route anyone to `/setup-matt-pocock-skills` to *finish an install*. The installer seeds
110
- `docs/agents/` pre-answered, and that interview's own defaults send every engineering skill looking for a
111
- root `CONTEXT.md` and `docs/adr/` — which Article 3 forbids and `wdi-reconcile` reports. It is for
112
- changing tracker, and nothing else.
113
- - You MUST NOT run other skills on the user's behalf. Name the skill; let them invoke it. The one skill that
114
- runs others is `wdi-autopilot`, and only under a mandate the owner accepted — that is what the mandate is.
115
- - When the next step is blocked by a decision rather than by work, route to `wdi-question` or
116
- `wdi-decision`, not to a producing skill.
117
- - When asked about BMad itself — what a BMad skill does, what it writes, which are deprecated — answer
118
- from `bmad-skill-register.md`, and only fall back to `bmad-help` for module documentation.
119
- - When the caller has never seen this method, point at `.constitution/method/why/README.md` rather than
120
- paraphrasing it here.
121
-
122
- ## When there is no spec open
123
-
124
- Say so plainly, then route by the table above. An artifact a later gate produces MUST NOT be reported as
125
- missing — that is not a gap, it is the plan.
1
+ ---
2
+ name: wdi-help
3
+ description: Check project delivery status, open or pending specs and tickets, current gate progress, and determine what to build or which skill to invoke next. Answers from this project's status registry and five gates.
4
+ ---
5
+
6
+ # WDI Help
7
+
8
+ `bmad-help` cannot answer "where am I" in this project. Its progress detection globs `output-location`
9
+ paths resolved from `resolve_config.py`, so it is blind to every class-A artifact this project redirects
10
+ into `.what/` and `.how/`. It also lists two required gates — `epics.md` and `sprint-status.yaml` — that
11
+ this project's route never produces, and it is the only BMad skill with no `customize.toml`, so none of
12
+ that can be corrected.
13
+
14
+ This skill replaces it for position and routing. `bmad-help` remains useful for one thing only: questions
15
+ about BMad itself.
16
+
17
+ ## Inputs
18
+
19
+ | Source | What it answers |
20
+ |---|---|
21
+ | `.control/generated/status.yaml` | Primary machine-readable status: which spec is open, tickets progress, red validators (or `status.md`) |
22
+ | `.control/wdi-method.yaml` | The installed version, and `upgrade_pending` — what `wdi-upgrade` still owes. Absent means nothing |
23
+ | `.control/registry/index.yaml` | The global `mode`, the gate map, and `gates_passed` |
24
+ | `.control/registry/components.yaml` | Per-component `mode`, `risk_accepted`, and `g4_passed` |
25
+ | `.control/registry/specs.yaml` | Fallback only when status is absent/stale: spec → release, size, and ticket index (MUST query selectively) |
26
+ | `.constitution/method/document/delivery-flow-guide.md` | The five gates and their checklists |
27
+ | `.constitution/method/why/README.md` | The whole shape, when the caller has never seen the method |
28
+
29
+ You MUST read `.control/generated/status.yaml` (or `status.md`) rather than counting files yourself. You
30
+ MUST NOT open or inspect `.control/registry/specs.yaml` if the status file is present and answers which
31
+ spec is open.
32
+
33
+ ## What to answer
34
+
35
+ Three things, in this order, and nothing else unless asked:
36
+
37
+ 1. **Where the project stands** — the last gate passed, and which gate is next.
38
+ 2. **What blocks that gate** — the specific artifact, validator, or blocking question that is not ready.
39
+ 3. **Which skill to invoke next** — one skill, named, with its intent, and the reason in a clause.
40
+
41
+ Keep it under fifteen lines. A routing answer that needs scrolling has failed at its job.
42
+
43
+ ## The one thing that changes the answer
44
+
45
+ **Read the component's `mode` before routing to G4.** A component at `mode: catalog` skips G4 entirely —
46
+ routing it to `wdi-component` is wrong, and the next step is `wdi-build`. That is the single most common
47
+ mis-route in this flow, because every other gate is the same for every component.
48
+
49
+ ## Routing by what exists
50
+
51
+ | State | Next |
52
+ |---|---|
53
+ | `upgrade_pending` is present in `.control/wdi-method.yaml` | `wdi-upgrade` — **before anything else**, however long ago `update` ran. Content is still in the old shape, and every skill below reads the new one. Name the pending items in the answer |
54
+ | `upgrade_pending` is absent | No content is waiting to move. Do NOT guess from the version number: whether an upgrade is owed is a fact about the content, and `update` probed it. It does NOT mean the validators are green — a few `wdi-upgrade` items are found only by the validator, so a red validator is still routed by its own row. A repo updated before this field existed has no record — `npx wdi-method upgrade-check` writes one |
55
+ | `wdi-method install` just ran, first time in this repo | `wdi-init` intent `setup` — the global `mode`, and nothing has started until it is set |
56
+ | Someone asks whether to run `/setup-matt-pocock-skills` | **No**, unless they are changing tracker. `install` and `update` seed `docs/agents/` already answered for this method; re-running the interview restores defaults that contradict Article 3 |
57
+ | The installer refused, naming engines | Not a skill. `npx skills@latest add mattpocock/skills` — **into this repo**, all six it names; a user-level plugin does not count. Then run the installer again |
58
+ | An engine will not invoke, or `engines-invocable` is red | `wdi-init` intent `engines` — `npx skills update` puts the author's `disable-model-invocation` back, and one command strips it out again |
59
+ | No registry, or no global `mode` set | `wdi-init` intent `setup` — nothing has started |
60
+ | No `.what/_product-brief/brief.md` | `wdi-problem` — G1 has not started |
61
+ | A brief exists, and no PRD covers the area in play | `wdi-product` intent `prd` |
62
+ | A PRD covers it but the promise has moved | `wdi-product` intent `update` — never a second PRD for the same area |
63
+ | Only the **wording** of an `FR` is wrong | Nobody. Whichever skill is at work fixes it directly; putting it behind a gate is how three earlier corrections were dropped |
64
+ | A PRD exists and the interface is a large part of what it promises | `wdi-ux` — optional, and it runs **before G2**, which reads its `EXPERIENCE.md`. It needs no Product Component: `design-system.md` and `.what/experience.md` land at once, and the two `<pc>`-scoped halves land when `wdi-init` intent `component` runs |
65
+ | A PRD exists, no `product_components` yet | `wdi-init` intent `component` — the slicing is born here, at the tail of G2 |
66
+ | A gate's work is visibly done but `gates_passed` does not list it — components exist without `G2`, a spine without `G3` | Ask the owner whether that gate passed, and record it only on their answer. The skill that follows reads `gates_passed`, and a gate nobody recorded is a precondition nobody can check |
67
+ | Components exist, `mode` or `risk_accepted` unset | `wdi-init` intents `mode` and `risk` — both are the owner's, and G4 cannot be read without them |
68
+ | Components exist, no UC catalogue or no spine | `wdi-blueprint` — intent `catalog` first, then `platform` |
69
+ | The blueprint is complete and G3 has not been held | The gate. Read `.how-rendered/blueprint.md`, not seven files |
70
+ | G3 passed, a component at `outline`/`guarded`/`deep` has no depth | `wdi-component` |
71
+ | G3 passed, the component is at `mode: catalog` | `wdi-build` — G4 is skipped by design |
72
+ | Depth done and G4 passed for every component the work touches | `wdi-build` — it opens the spec, has the owner run `to-spec` and `to-tickets`, ships each ticket, closes the spec |
73
+ | A small fix touching no `FR`, `UC`, `AD-N`, or domain model | Fast Path: the owner runs `/implement` directly. It stops and becomes a spec `S` the moment an `FR` is touched |
74
+ | The owner wants every `FR` delivered without being asked in between | `wdi-autopilot` — a preflight first, then one mandate the owner accepts, then a loop that fires it. Route here only when the owner asks for it; it is never the default next step |
75
+ | A planning assumption turned out void | `wdi-decision` intent `open` — it proposes, and changes nothing |
76
+ | The owner has to decide something and wants the reading done first | `wdi-explain-to-me` — it briefs, and changes nothing; the decision then goes to `wdi-decision` or `wdi-question` |
77
+ | An accepted `DEC-` has not reached its documents | `wdi-decision` intent `apply` |
78
+ | A bug, a failing test, unexpected behaviour | `wdi-systematic-debugging`, before any fix is proposed |
79
+ | Numbers are wanted before the work is committed | `wdi-report` intent `estimate` |
80
+ | Closed specs remain in `.scratch/`, or need archival/pruning | `wdi-prune-or-archive` — archives closed spec to `.archive/specs/` or prunes from disk |
81
+ | Raw manual-test notes needing triage, review, and spec drafting | `wdi-daily-what-to-build` — classifies notes, drafts spec/tickets via `wdi-build`, gets second opinion |
82
+ | Autonomous delivery loop with local runner and peer review | `wdi-daily-autopilot` — composes routine, resolves local runners, launches `/loop` unattended |
83
+ | Merged autopilot run needing branch cleanup and physical test checklist | `wdi-daily-what-to-test` — syncs branch, prunes merged worktrees/branches, configures smoke target, provides delta-scoped checklist |
84
+ | Cleaning up generated rendered duplicate files from git | Untrack via `git rm -r --cached .what-rendered/ .how-rendered/`, add to `.gitignore`, regenerate via `validate.py --generate` |
85
+
86
+ A brief that exists but is thin is still a brief. You MUST NOT route back to `wdi-problem` because a
87
+ section reads weakly — route there only when the brief is absent, when a change signal invalidates what
88
+ it claims, or when one of its eight required sections is missing outright.
89
+
90
+ ## Rules
91
+
92
+ - You MUST answer from this project's five gates — G1 Problem · G2 Product · G3 Blueprint · G4 Component ·
93
+ G5 Release. BMad's `phase` column MUST NOT be used; it mixes two conventions and names gates this
94
+ project does not run.
95
+ - When a `wdi-*` wrapper exists for a BMad skill, you MUST name the wrapper, never the skill it wraps. The
96
+ wrapper carries the position check and the content checks; routing past it produces an artifact nothing
97
+ verifies. Today every BMad skill this method uses has one: `wdi-problem`, `wdi-product`,
98
+ `wdi-blueprint`, `wdi-build`, `wdi-decision`, `wdi-review`, `wdi-ux`.
99
+ - Only `.control/questions/blocking.md` holds a gate. `external.md` holds go-live and MUST NOT be reported
100
+ as blocking a design gate; `assumptions.md` holds nothing.
101
+ - You MUST NOT invent progress. If `.control/generated/status.yaml` (or `status.md`) is missing or stale,
102
+ say so, query `specs.yaml` selectively, and name `validate.py --generate`.
103
+ - You MUST NOT call Read on the entire 1000+ line `.control/registry/specs.yaml` file into context. When
104
+ discovering active or open work as a fallback, query `specs.yaml` selectively (e.g. `Grep` for `status:\s*(open|ready-for-dev)`).
105
+ - You MUST NOT run broad or recursive searches across `.scratch/` (e.g. searching `*` or `**/*`). When
106
+ inspecting candidate open specs or tickets, inspect only the candidate spec's folder using the `spec_folder:`
107
+ path resolved from `specs.yaml`.
108
+ - You MUST treat `wdi-help` as a fast status and routing skill: if filesystem drift, orphaned folders, or
109
+ discrepancies between registry and disk are suspected, route to `wdi-reconcile` rather than conducting
110
+ a filesystem audit in this skill.
111
+ - You MUST NOT route anyone to `/setup-matt-pocock-skills` to *finish an install*. The installer seeds
112
+ `docs/agents/` pre-answered, and that interview's own defaults send every engineering skill looking for a
113
+ root `CONTEXT.md` and `docs/adr/` — which Article 3 forbids and `wdi-reconcile` reports. It is for
114
+ changing tracker, and nothing else.
115
+ - You MUST NOT run other skills on the user's behalf. Name the skill; let them invoke it. The one skill that
116
+ runs others is `wdi-autopilot`, and only under a mandate the owner accepted — that is what the mandate is.
117
+ - When the next step is blocked by a decision rather than by work, route to `wdi-question` or
118
+ `wdi-decision`, not to a producing skill.
119
+ - When asked about BMad itself — what a BMad skill does, what it writes, which are deprecated — answer
120
+ from `bmad-skill-register.md`, and only fall back to `bmad-help` for module documentation.
121
+ - When the caller has never seen this method, point at `.constitution/method/why/README.md` rather than
122
+ paraphrasing it here.
123
+
124
+ ## When there is no spec open
125
+
126
+ Say so plainly, then route by the table above. An artifact a later gate produces MUST NOT be reported as
127
+ missing — that is not a gap, it is the plan.
@@ -13,7 +13,7 @@ of where things are, a reader that can see this product's code.
13
13
  |---|---|---|---|
14
14
  | `setup` | Guide the global `mode` setting · scaffold the registries that are still empty · **report** the documents already present, read-only · derive the two structure maps · align the engines | before G1 | once per project |
15
15
  | `engines` | Run `npx wdi-method engines --fix`, then report what it changed: the flag stripped from `to-spec` · `to-tickets` · `implement` so `wdi-build` can invoke them, the retired BMad G5 wrappers locked out of model invocation and denied in `.claude/settings.json`, and `docs/agents/` repaired where it still carried upstream's answer | after every `wdi-method install` or `update` | each version jump, and any time `engines-invocable` is red |
16
- | `component` | Propose the slicing from the brief plus every PRD · birth what is accepted: registry row plus `SRS`/`SDD` skeletons · propose `mode`, `risk_accepted`, `risk_note`, `owns` | **G2 passed** | each time a component is born |
16
+ | `component` | Propose the slicing from the brief plus every PRD · birth what is accepted: registry row plus `SRS`/`SDD` skeletons · propose `mode`, `risk_accepted`, `risk_note`, `owns` | **G2 passed** — read from `gates_passed`; missing, ask the owner | each time a component is born |
17
17
  | `mode` | Change `mode` — global in `index.yaml`, or one component in `components.yaml`. Guided | — | any time |
18
18
  | `risk` | Set or review one component's `risk_accepted`, with disclosure of what it touches | the component exists | any time, usually before G4 |
19
19
  | `structure` | Re-derive `.control/structure-codebase.md` and `structure-document.md` from the tree on disk | — | when folders change, and at spec close |
@@ -106,6 +106,10 @@ components is the moment that ends. Landing goes through `wdi-ux` — it owns th
106
106
  skill MAY write them — but it is dispatched from here rather than left for the owner to remember. It is
107
107
  the only deferral left in the flow, and this is where it closes.
108
108
 
109
+ The act is not done until it is verified: `validate.py` MUST show `ux-landed` green before this intent
110
+ reports. Red means a UX run still waits while components exist, or the corpus still cites the run —
111
+ landing that stopped halfway, found now rather than at G3.
112
+
109
113
  **Containers MAY be registered here when they are genuinely already known** — an app, an API, a database
110
114
  the product plainly has. Then a screen `LC` gets its container the moment it is born and there is no debt
111
115
  at all. They MUST NOT be guessed to achieve that: `wdi-blueprint` intent `platform` owns the real answer
@@ -147,9 +151,10 @@ them; it MUST NOT restate them.
147
151
  2. Classify each base folder. For the codebase map the only test is deployability — a **container** runs
148
152
  its own code or stores its own data, a **library** is imported by something else, anything else stays
149
153
  a line in the top-level tree or in a non-unit section. Size and importance MUST NOT decide it.
150
- Container headings MUST be **exactly the `built: true` containers** in `components.yaml`: every
151
- heading is a registered container, and a `built: false` one MUST NOT get a heading because no code of
152
- ours lives in it. The match is one-directional, and reading it both ways makes it unsatisfiable.
154
+ Container headings MUST be **exactly the `built: true` containers without `repo:`** in
155
+ `components.yaml`: every heading is a registered container, a `built: false` one MUST NOT get a
156
+ heading because no code of ours lives in it, and one whose `repo:` names another repository MUST NOT
157
+ get one here because its code map is there. The match is one-directional, and reading it both ways makes it unsatisfiable.
153
158
  3. Draw the convention, not the contents. A shape that repeats MUST be written once with a placeholder.
154
159
  4. Mark key files `★` by the four tests in the guide. Borderline files are left out.
155
160
  5. Write from `templates/structure-codebase.md` and `templates/structure-document.md`. Template comments
@@ -1,108 +1,114 @@
1
- ---
2
- name: wdi-problem
3
- description: Use at G1 Problem — when the product brief is created, updated, or validated. Checks position and preconditions, dispatches bmad-product-brief, then verifies the result against brief-guide.md and the template. Never writes the brief itself.
4
- ---
5
-
6
- # WDI Problem
7
-
8
- G1 decides **what the problem is, whose it is, and why it earns work.** `bmad-product-brief` writes the
9
- brief; this skill decides whether it should run at all, hands it the right intent, and checks what came
10
- back. Both halves matter: the override TOML controls **where** the artifact lands, and nothing in BMad
11
- checks **what is in it**.
12
-
13
- You MUST NOT write or edit `brief.md` yourself. If a check fails, name what is missing and re-dispatch — a
14
- hand-patched brief makes the memlog lie about how it got that way.
15
-
16
- ## Inputs
17
-
18
- | Source | What it answers |
19
- |---|---|
20
- | `.what/_product-brief/brief.md` | Whether a brief already exists, and what intent applies |
21
- | `.constitution/method/document/brief-guide.md` | The rules the result is checked against |
22
- | `.constitution/method/document/templates/brief.md` | The required shape |
23
- | `_bmad-output/brainstorming/` · `forge/` · `planning-artifacts/` | Raw material available to feed in |
24
- | `.control/product-glossary.md` | Terms already fixed, so the brief does not invent competing ones |
25
-
26
- ## Step 1 — Position
27
-
28
- - If `brief.md` exists, the intent is **update** or **validate**, never **create**. A second create would
29
- overwrite the singleton.
30
- - If a spec is open and the ask is a scope change rather than a problem change, this is the wrong skill.
31
- Route to `wdi-decision`, which wraps `bmad-correct-course`.
32
- - If the ask is about one initiative rather than the product, route to `wdi-product`.
33
-
34
- ## Step 2 — Preconditions
35
-
36
- None of these block. Each is a question you MUST put to the owner before dispatching, once.
37
-
38
- | Check | Why it matters |
39
- |---|---|
40
- | Is there raw material worth feeding in? | Exploration output in `_bmad-output/` is invisible to the skill unless it is named |
41
- | Does the claim rest on outside data? | Market size, competitor, stack choice — those want `bmad-deep-recon` first |
42
- | Is the primary user already obvious? | If not, discovery is not finished and the brief will stall at the gate |
43
-
44
- ## Step 3 — Dispatch
45
-
46
- Invoke `bmad-product-brief` with the detected intent. Do not restate the rules to it — they arrive through
47
- `persistent_facts` and `doc_standards` in `_bmad/custom/bmad-product-brief.toml`. Repeating them here would
48
- create a second copy that drifts.
49
-
50
- Name the raw-material files explicitly in the handoff. The skill globs its own output locations, and this
51
- project redirects them.
52
-
53
- ## Step 4 — Land the Goals
54
-
55
- The template's `Goals` section is a pointer: `Goals — see goals.yaml → goals:`. The engine drafts
56
- `BG-N` statements in conversation, but nothing in `bmad-product-brief` writes them anywhere durable —
57
- the returned `brief.md` has no place left to hold them.
58
-
59
- Write each goal discussed as a row in `.control/registry/goals.yaml` → `goals:`, with the next
60
- `id` in sequence and its `statement`. Add a `why:` field only when the goal's justification is not
61
- already carried by `The Problem` or `Why` — most goals need no `why:` at all. This step is what
62
- finishes the brief; a pointer to an empty list is not a finished G1 artifact, and you MUST NOT report
63
- it as one.
64
-
65
- This is landing, not editing `brief.md` — the rule in the header is about the prose document, not the
66
- registry. Registry conversion is part of producing the artifact, the same way it is for a screen
67
- becoming an `LC` row.
68
-
69
- ## Step 5 — Verify
70
-
71
- Check the returned brief against the guide. Report every failure; fix none of them by hand.
72
-
73
- | # | Check | Fails when |
74
- |---|---|---|
75
- | 1 | Home | Anything landed outside `.what/_product-brief/` |
76
- | 2 | Eight required sections present | The template's "drop what does not earn its place" was applied to one of them |
77
- | 3 | Exactly one `primary` in Who This Serves | Zero, or more than one |
78
- | 4 | Goals numbered `BG-N`, landed in the registry, and the brief's own section stays a pointer | A goal's statement was written into the brief instead of, or as well as, the registry row from Step 4 |
79
- | 5 | Success Criteria names exactly one measurable figure, with a timeframe | A mission statement, a mix of signals, or a claim nobody could check without opening the code |
80
- | 6 | Scope Out written as items | Left implicit |
81
- | 7 | No Assumptions or Prerequisites section | Either appeared in the brief instead of being routed through `wdi-question` |
82
- | 8 | Memlog at `.control/memlog/brief.md` | A `.memlog.md` appeared inside `.what/` — `--workspace` was used |
83
- | 9 | No raw material folded in | Research or brainstorming prose copied into the brief instead of cited |
84
- | 10 | No Product Component list | A slicing was written at G1; it belongs to `wdi-init` intent `component`, after G2 |
85
- | 11 | `bmad-review` structure + prose ran | `doc_standards` did not fire |
86
-
87
- Check 8 MUST be fixed immediately rather than reported. A `.memlog.md` inside `.what/` is corpus pollution,
88
- and every later run compounds it.
89
-
90
- ## Rules
91
-
92
- - You MUST NOT land anything from `_bmad-output/` into the corpus beyond the brief itself. Every other
93
- output has its owner in the table in `corpus-guide.md`, and for exploration output the answer is that it
94
- stays put.
95
- - You MUST NOT delete an exploration run folder after feeding it in. The `update` intents re-read the
96
- original inputs.
97
- - You MUST NOT open G1 on a brief that has not been through check 11. Gate time is for deciding.
98
- - A brief concluding the idea is not worth building is a **pass**. You MUST report it as one rather than
99
- offering to rework it.
100
- - Every unresolved `[ASSUMPTION]` MUST be filed through `wdi-question` before the gate opens — into
101
- `assumptions.md` by default, `blocking.md` only through the three tests that file states.
102
- - When the ask is about the Product Component slicing, this is the wrong skill at any point. Before the list
103
- exists it belongs to `wdi-init` intent `component`; after G3 a correction goes through `wdi-decision`.
104
-
105
- ## Output
106
-
107
- A short report: intent dispatched, what the brief now claims in one line, the goal rows landed in Step 4,
108
- and the result of all eleven checks — naming the failures, not summarising them away.
1
+ ---
2
+ name: wdi-problem
3
+ description: Use at G1 Problem — when the product brief is created, updated, or validated. Checks position and preconditions, dispatches bmad-product-brief, then verifies the result against brief-guide.md and the template. Never writes the brief itself.
4
+ ---
5
+
6
+ # WDI Problem
7
+
8
+ G1 decides **what the problem is, whose it is, and why it earns work.** `bmad-product-brief` writes the
9
+ brief; this skill decides whether it should run at all, hands it the right intent, and checks what came
10
+ back. Both halves matter: the override TOML controls **where** the artifact lands, and nothing in BMad
11
+ checks **what is in it**.
12
+
13
+ You MUST NOT write or edit `brief.md` yourself. If a check fails, name what is missing and re-dispatch — a
14
+ hand-patched brief makes the memlog lie about how it got that way.
15
+
16
+ ## Inputs
17
+
18
+ | Source | What it answers |
19
+ |---|---|
20
+ | `.what/_product-brief/brief.md` | Whether a brief already exists, and what intent applies |
21
+ | `.constitution/method/document/brief-guide.md` | The rules the result is checked against |
22
+ | `.constitution/method/document/templates/brief.md` | The required shape |
23
+ | `_bmad-output/brainstorming/` · `forge/` · `planning-artifacts/` | Raw material available to feed in |
24
+ | `.control/product-glossary.md` | Terms already fixed, so the brief does not invent competing ones |
25
+
26
+ ## Step 1 — Position
27
+
28
+ - If `brief.md` exists, the intent is **update** or **validate**, never **create**. A second create would
29
+ overwrite the singleton.
30
+ - If a spec is open and the ask is a scope change rather than a problem change, this is the wrong skill.
31
+ Route to `wdi-decision`, which wraps `bmad-correct-course`.
32
+ - If the ask is about one initiative rather than the product, route to `wdi-product`.
33
+
34
+ ## Step 2 — Preconditions
35
+
36
+ None of these block. Each is a question you MUST put to the owner before dispatching, once.
37
+
38
+ | Check | Why it matters |
39
+ |---|---|
40
+ | Is there raw material worth feeding in? | Exploration output in `_bmad-output/` is invisible to the skill unless it is named |
41
+ | Does the claim rest on outside data? | Market size, competitor, stack choice — those want `bmad-deep-recon` first |
42
+ | Is the primary user already obvious? | If not, discovery is not finished and the brief will stall at the gate |
43
+
44
+ ## Step 3 — Dispatch
45
+
46
+ Invoke `bmad-product-brief` with the detected intent. Do not restate the rules to it — they arrive through
47
+ `persistent_facts` and `doc_standards` in `_bmad/custom/bmad-product-brief.toml`. Repeating them here would
48
+ create a second copy that drifts.
49
+
50
+ Name the raw-material files explicitly in the handoff. The skill globs its own output locations, and this
51
+ project redirects them.
52
+
53
+ ## Step 4 — Land the Goals
54
+
55
+ The template's `Goals` section is a pointer: `Goals — see goals.yaml → goals:`. The engine drafts
56
+ `BG-N` statements in conversation, but nothing in `bmad-product-brief` writes them anywhere durable —
57
+ the returned `brief.md` has no place left to hold them.
58
+
59
+ Write each goal discussed as a row in `.control/registry/goals.yaml` → `goals:`, with the next
60
+ `id` in sequence and its `statement`. Add a `why:` field only when the goal's justification is not
61
+ already carried by `The Problem` or `Why` — most goals need no `why:` at all. This step is what
62
+ finishes the brief; a pointer to an empty list is not a finished G1 artifact, and you MUST NOT report
63
+ it as one.
64
+
65
+ This is landing, not editing `brief.md` — the rule in the header is about the prose document, not the
66
+ registry. Registry conversion is part of producing the artifact, the same way it is for a screen
67
+ becoming an `LC` row.
68
+
69
+ ## Step 5 — Verify
70
+
71
+ Check the returned brief against the guide. Report every failure; fix none of them by hand.
72
+
73
+ | # | Check | Fails when |
74
+ |---|---|---|
75
+ | 1 | Home | Anything landed outside `.what/_product-brief/` |
76
+ | 2 | Eight required sections present | The template's "drop what does not earn its place" was applied to one of them |
77
+ | 3 | Exactly one `primary` in Who This Serves | Zero, or more than one |
78
+ | 4 | Goals numbered `BG-N`, landed in the registry, and the brief's own section stays a pointer | A goal's statement was written into the brief instead of, or as well as, the registry row from Step 4 |
79
+ | 5 | Success Criteria names exactly one measurable figure, with a timeframe | A mission statement, a mix of signals, or a claim nobody could check without opening the code |
80
+ | 6 | Scope Out written as items | Left implicit |
81
+ | 7 | No Assumptions or Prerequisites section | Either appeared in the brief instead of being routed through `wdi-question` |
82
+ | 8 | Memlog at `.control/memlog/brief.md` | A `.memlog.md` appeared inside `.what/` — `--workspace` was used |
83
+ | 9 | No raw material folded in | Research or brainstorming prose copied into the brief instead of cited |
84
+ | 10 | No Product Component list | A slicing was written at G1; it belongs to `wdi-init` intent `component`, after G2 |
85
+ | 11 | `bmad-review` structure + prose ran | `doc_standards` did not fire |
86
+
87
+ Check 8 MUST be fixed immediately rather than reported. A `.memlog.md` inside `.what/` is corpus pollution,
88
+ and every later run compounds it.
89
+
90
+ ## Rules
91
+
92
+ - You MUST NOT land anything from `_bmad-output/` into the corpus beyond the brief itself. Every other
93
+ output has its owner in the table in `corpus-guide.md`, and for exploration output the answer is that it
94
+ stays put.
95
+ - You MUST NOT delete an exploration run folder after feeding it in. The `update` intents re-read the
96
+ original inputs.
97
+ - You MUST NOT open G1 on a brief that has not been through check 11. Gate time is for deciding.
98
+ - A brief concluding the idea is not worth building is a **pass**. You MUST report it as one rather than
99
+ offering to rework it.
100
+ - Every unresolved `[ASSUMPTION]` MUST be filed through `wdi-question` before the gate opens — into
101
+ `assumptions.md` by default, `blocking.md` only through the three tests that file states.
102
+ - When the ask is about the Product Component slicing, this is the wrong skill at any point. Before the list
103
+ exists it belongs to `wdi-init` intent `component`; after G3 a correction goes through `wdi-decision`.
104
+
105
+ ## Step 6 — Record the gate
106
+
107
+ Ask the owner whether G1 passed. Write `G1` into `gates_passed` only on their explicit *yes* —
108
+ `delivery-flow-guide.md` § *Recording a gate that passed*.
109
+
110
+ ## Output
111
+
112
+ A short report: intent dispatched, what the brief now claims in one line, the goal rows landed in Step 4,
113
+ and the result of all eleven checks — naming the failures, not summarising them away — and whether G1
114
+ was recorded.