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.
- package/CHANGELOG.md +68 -0
- package/README.md +3 -0
- package/bin/wdi-method.js +121 -14
- package/kit/.constitution/method/document/architecture-guide.md +217 -209
- package/kit/.constitution/method/document/corpus-guide.md +522 -517
- package/kit/.constitution/method/document/decision-guide.md +236 -216
- package/kit/.constitution/method/document/delivery-flow-guide.md +20 -0
- package/kit/.constitution/method/document/prd-guide.md +245 -245
- package/kit/.constitution/method/document/templates/design-system.md +96 -66
- package/kit/.constitution/method/document/templates/experience.md +62 -0
- package/kit/.constitution/method/document/templates/structure-codebase.md +131 -129
- package/kit/.constitution/method/document/templates/ux.md +78 -76
- package/kit/.constitution/method/document/ux-guide.md +161 -115
- package/kit/.constitution/method/method-glossary.md +3 -0
- package/kit/.constitution/method/scripts/validate.py +3310 -3200
- package/kit/.constitution/method/structure-guide.md +204 -202
- package/kit/.constitution/method/why/artifact-map.md +158 -157
- package/kit/skills/wdi-blueprint/SKILL.md +271 -264
- package/kit/skills/wdi-component/SKILL.md +179 -174
- package/kit/skills/wdi-decision/SKILL.md +206 -203
- package/kit/skills/wdi-help/SKILL.md +127 -125
- package/kit/skills/wdi-init/SKILL.md +9 -4
- package/kit/skills/wdi-problem/SKILL.md +114 -108
- package/kit/skills/wdi-product/SKILL.md +167 -162
- package/kit/skills/wdi-reconcile/SKILL.md +170 -169
- package/kit/skills/wdi-upgrade/SKILL.md +234 -215
- package/kit/skills/wdi-ux/SKILL.md +187 -169
- package/kit-overlay/AGENTS.md +3 -1
- package/package.json +1 -1
- 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/
|
|
23
|
-
| `.control/registry/
|
|
24
|
-
| `.control/registry/
|
|
25
|
-
| `.
|
|
26
|
-
| `.constitution/method/
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
MUST
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
| `wdi-method
|
|
54
|
-
| `
|
|
55
|
-
|
|
|
56
|
-
|
|
|
57
|
-
|
|
|
58
|
-
|
|
|
59
|
-
| No
|
|
60
|
-
|
|
|
61
|
-
| A PRD covers
|
|
62
|
-
|
|
|
63
|
-
|
|
|
64
|
-
| A PRD exists
|
|
65
|
-
|
|
|
66
|
-
|
|
|
67
|
-
|
|
|
68
|
-
|
|
|
69
|
-
|
|
|
70
|
-
|
|
|
71
|
-
|
|
|
72
|
-
|
|
|
73
|
-
| A
|
|
74
|
-
| The owner
|
|
75
|
-
|
|
|
76
|
-
|
|
|
77
|
-
|
|
|
78
|
-
|
|
|
79
|
-
|
|
|
80
|
-
|
|
|
81
|
-
|
|
|
82
|
-
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
-
|
|
100
|
-
|
|
101
|
-
- You MUST NOT
|
|
102
|
-
|
|
103
|
-
- You MUST NOT
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
-
|
|
116
|
-
`wdi-
|
|
117
|
-
- When
|
|
118
|
-
|
|
119
|
-
- When
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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
|
|
151
|
-
heading is a registered container,
|
|
152
|
-
ours lives in it
|
|
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
|
-
##
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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.
|