wdi-method 0.6.1 → 0.6.4
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/README.md +58 -7
- package/bin/wdi-method.js +144 -0
- package/kit/.constitution/method/README.md +1 -1
- package/kit/.constitution/method/document/decision-guide.md +208 -199
- package/kit/.constitution/method/document/delivery-flow-guide.md +412 -409
- package/kit/.constitution/method/document/templates/decision.md +6 -1
- package/kit/.constitution/method/method-glossary.md +183 -182
- package/kit/.constitution/method/scripts/validate.py +102 -2
- package/kit/.constitution/method/why/README.md +2 -1
- package/kit/.constitution/method/why/portability.md +98 -98
- package/kit/skills/wdi-autopilot/SKILL.md +375 -0
- package/kit/skills/wdi-build/SKILL.md +371 -357
- package/kit/skills/wdi-decision/SKILL.md +197 -187
- package/kit/skills/wdi-help/SKILL.md +110 -100
- package/kit/skills/wdi-question/SKILL.md +176 -170
- package/kit/skills/wdi-upgrade/SKILL.md +8 -0
- package/kit-overlay/AGENTS.md +227 -217
- package/kit-overlay/README.md +1 -1
- package/kit-overlay/portability.md +98 -98
- package/package.json +1 -1
- package/scaffold/docs/agents/domain.md +36 -0
- package/scaffold/docs/agents/issue-tracker.md +43 -0
|
@@ -1,98 +1,98 @@
|
|
|
1
|
-
---
|
|
2
|
-
status: Reference
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Portability — what is method, what is product
|
|
6
|
-
|
|
7
|
-
**Opened when:** carrying a method change into the WDI Method package, or installing
|
|
8
|
-
the method in a product repo.
|
|
9
|
-
|
|
10
|
-
This file **explains**. It does not bind. Installing is the act, and that act lives in
|
|
11
|
-
the WDI Method package README plus `wdi-method` (`install` · `update` · `promote` ·
|
|
12
|
-
`verify`). Where this file and that README disagree, the README wins and the
|
|
13
|
-
disagreement is a defect.
|
|
14
|
-
|
|
15
|
-
It exists so that "promote the method, leave the product" is not a fresh re-reading of
|
|
16
|
-
fifty files every time.
|
|
17
|
-
|
|
18
|
-
## The seam
|
|
19
|
-
|
|
20
|
-
Most of `.constitution/` is portable as it stands. A handful name **this product**, and in most of
|
|
21
|
-
them only an *example* does — not a rule.
|
|
22
|
-
|
|
23
|
-
| File | What is this product's | What to do when carrying it |
|
|
24
|
-
|---|---|---|
|
|
25
|
-
| `../../project/constitution.md` | Articles 1, 2, and 5 | **Rewrite 2 and 5.** Article 1 cites `index.yaml` `product.name`. Articles 3, 4, 6, 7 are NOT here — they are the method's, in `../constitution.md`, and `update` replaces them. `promote` never touches this file: the room is skipped, so the package's copy is a seed and nothing more |
|
|
26
|
-
| `../document/architecture-guide.md` | Seed examples of stack and tree shape | Re-point the examples. Every rule around them travels |
|
|
27
|
-
| `../document/corpus-guide.md` | Worked examples of `_platform` ownership | Re-point the examples. **Keep both kinds**: they teach the trap better than the rule alone |
|
|
28
|
-
| `templates/design-system.md` | The pointer to wherever this project keeps its tokens | Re-point at that project's token file |
|
|
29
|
-
| `templates/oq.md` | One example of a bad question title | Cosmetic |
|
|
30
|
-
|
|
31
|
-
Everything else — the five gates, the two fields, the
|
|
32
|
-
`inventory.py`, `../method-glossary.md`, and the three files beside this one — carries without edit.
|
|
33
|
-
|
|
34
|
-
One half-exception, and it is by design: `inventory.py` is the generic engine and carries whole, but
|
|
35
|
-
it reads no code itself. The three readers live in `../../project/inventory-readers.py`, which ships
|
|
36
|
-
as a skeleton and belongs to the product. A new project runs `wdi-init` intent `readers` once and
|
|
37
|
-
rewrites that file, nothing else. No example ships, deliberately — an example is a guess about a
|
|
38
|
-
stack nobody here has seen.
|
|
39
|
-
|
|
40
|
-
## What does NOT travel
|
|
41
|
-
|
|
42
|
-
| Stays behind | Why |
|
|
43
|
-
|---|---|
|
|
44
|
-
| `.control/` | This product's state. A new project scaffolds its own through `wdi-init` intent `setup`, or receives empty stubs on first `install` |
|
|
45
|
-
| `.what/` · `.how/` | This product's promises and build |
|
|
46
|
-
| `.constitution/project/codebase-*-guide.md` | Written by the **project**, not the method. They ship as empty `Draft` stubs |
|
|
47
|
-
| `.constitution/project/inventory-readers.py` | How THIS product's code is read. Seeded as a SKELETON — no patterns and no stack. `wdi-init` intent `readers` writes it against the repo in front of it |
|
|
48
|
-
| `_bmad-output/` | Run workspace |
|
|
49
|
-
| The `bmad-*` skills themselves | BMad's, installed by BMad. Only `_bmad/custom/*.toml` is ours |
|
|
50
|
-
|
|
51
|
-
## What travels beside `.constitution/`
|
|
52
|
-
|
|
53
|
-
The method is not `.constitution/` alone. Three sets move together, and carrying one without the
|
|
54
|
-
others leaves a method that cannot run:
|
|
55
|
-
|
|
56
|
-
| Set | Note |
|
|
57
|
-
|---|---|
|
|
58
|
-
| `.constitution/` | Minus the product articles; `promote` / `install` handle the seam |
|
|
59
|
-
| `.claude/skills/wdi-*/` (and `.agents/skills/wdi-*/` when those agents are selected) | Every wrapper. A wrapper without its guide, or a guide without its wrapper, is half a method |
|
|
60
|
-
| `_bmad/custom/*.toml` | The one most likely to be forgotten. `*.user.toml` stays behind |
|
|
61
|
-
| `AGENTS.md` | The routing table is the method; from `## Code` down is the product. `install` / `update` MUST NOT overwrite an existing `AGENTS.md` |
|
|
62
|
-
|
|
63
|
-
## Two directions
|
|
64
|
-
|
|
65
|
-
```
|
|
66
|
-
a product repo with a newer working copy of the method
|
|
67
|
-
--promote-->
|
|
68
|
-
WDI Method (this package)
|
|
69
|
-
--install / update-->
|
|
70
|
-
product repos
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
- **Promote** copies the method *up* once it has settled in a working copy.
|
|
74
|
-
- **Install / update** copies that snapshot *out* to a repo that consumes it.
|
|
75
|
-
- Do not run `update` against a repo you are about to promote from — that would overwrite the newer copy.
|
|
76
|
-
- There is no SHA lock and no per-file increment. The snapshot is the unit. The package version on npm / GitHub is the name of that snapshot.
|
|
77
|
-
|
|
78
|
-
## Installing in a fresh repo
|
|
79
|
-
|
|
80
|
-
BMad first (`npx bmad-method install`), then WDI Method. There is no numbered install runbook:
|
|
81
|
-
the steps that a runbook used to carry are now `wdi-init` intent `setup`. The order the acts come in:
|
|
82
|
-
|
|
83
|
-
1. `npx bmad-method install` in the product repo.
|
|
84
|
-
2. `npx wdi-method install` (optionally `--agents …`).
|
|
85
|
-
3. Set `product.name` in `.control/registry/index.yaml`. Rewrite `../../project/constitution.md` Articles 2 and 5.
|
|
86
|
-
4. Merge the method routing into `AGENTS.md` if that file already existed.
|
|
87
|
-
5. Run `wdi-init` intent `setup`.
|
|
88
|
-
6. Sort what already existed. A file that is already the artifact one slot asks for goes into that
|
|
89
|
-
slot through the skill that owns it; everything else goes to `_bmad-output/prior-knowledge/`.
|
|
90
|
-
`corpus-guide.md` owns that test.
|
|
91
|
-
7. Then G1 — which confirms `product.name` and writes the brief under that name.
|
|
92
|
-
|
|
93
|
-
**Two things a fresh install MUST NOT do:**
|
|
94
|
-
|
|
95
|
-
- Set `mode` and `risk_accepted` before the components exist. They are per-component fields, and the
|
|
96
|
-
components are born at the tail of G2.
|
|
97
|
-
- Fill `.control/generated/` by hand. It is script output, and a hand-written table there is the one
|
|
98
|
-
lie no validator catches.
|
|
1
|
+
---
|
|
2
|
+
status: Reference
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Portability — what is method, what is product
|
|
6
|
+
|
|
7
|
+
**Opened when:** carrying a method change into the WDI Method package, or installing
|
|
8
|
+
the method in a product repo.
|
|
9
|
+
|
|
10
|
+
This file **explains**. It does not bind. Installing is the act, and that act lives in
|
|
11
|
+
the WDI Method package README plus `wdi-method` (`install` · `update` · `promote` ·
|
|
12
|
+
`verify`). Where this file and that README disagree, the README wins and the
|
|
13
|
+
disagreement is a defect.
|
|
14
|
+
|
|
15
|
+
It exists so that "promote the method, leave the product" is not a fresh re-reading of
|
|
16
|
+
fifty files every time.
|
|
17
|
+
|
|
18
|
+
## The seam
|
|
19
|
+
|
|
20
|
+
Most of `.constitution/` is portable as it stands. A handful name **this product**, and in most of
|
|
21
|
+
them only an *example* does — not a rule.
|
|
22
|
+
|
|
23
|
+
| File | What is this product's | What to do when carrying it |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| `../../project/constitution.md` | Articles 1, 2, and 5 | **Rewrite 2 and 5.** Article 1 cites `index.yaml` `product.name`. Articles 3, 4, 6, 7 are NOT here — they are the method's, in `../constitution.md`, and `update` replaces them. `promote` never touches this file: the room is skipped, so the package's copy is a seed and nothing more |
|
|
26
|
+
| `../document/architecture-guide.md` | Seed examples of stack and tree shape | Re-point the examples. Every rule around them travels |
|
|
27
|
+
| `../document/corpus-guide.md` | Worked examples of `_platform` ownership | Re-point the examples. **Keep both kinds**: they teach the trap better than the rule alone |
|
|
28
|
+
| `templates/design-system.md` | The pointer to wherever this project keeps its tokens | Re-point at that project's token file |
|
|
29
|
+
| `templates/oq.md` | One example of a bad question title | Cosmetic |
|
|
30
|
+
|
|
31
|
+
Everything else — the five gates, the two fields, the eighteen skills, the templates, `validate.py`,
|
|
32
|
+
`inventory.py`, `../method-glossary.md`, and the three files beside this one — carries without edit.
|
|
33
|
+
|
|
34
|
+
One half-exception, and it is by design: `inventory.py` is the generic engine and carries whole, but
|
|
35
|
+
it reads no code itself. The three readers live in `../../project/inventory-readers.py`, which ships
|
|
36
|
+
as a skeleton and belongs to the product. A new project runs `wdi-init` intent `readers` once and
|
|
37
|
+
rewrites that file, nothing else. No example ships, deliberately — an example is a guess about a
|
|
38
|
+
stack nobody here has seen.
|
|
39
|
+
|
|
40
|
+
## What does NOT travel
|
|
41
|
+
|
|
42
|
+
| Stays behind | Why |
|
|
43
|
+
|---|---|
|
|
44
|
+
| `.control/` | This product's state. A new project scaffolds its own through `wdi-init` intent `setup`, or receives empty stubs on first `install` |
|
|
45
|
+
| `.what/` · `.how/` | This product's promises and build |
|
|
46
|
+
| `.constitution/project/codebase-*-guide.md` | Written by the **project**, not the method. They ship as empty `Draft` stubs |
|
|
47
|
+
| `.constitution/project/inventory-readers.py` | How THIS product's code is read. Seeded as a SKELETON — no patterns and no stack. `wdi-init` intent `readers` writes it against the repo in front of it |
|
|
48
|
+
| `_bmad-output/` | Run workspace |
|
|
49
|
+
| The `bmad-*` skills themselves | BMad's, installed by BMad. Only `_bmad/custom/*.toml` is ours |
|
|
50
|
+
|
|
51
|
+
## What travels beside `.constitution/`
|
|
52
|
+
|
|
53
|
+
The method is not `.constitution/` alone. Three sets move together, and carrying one without the
|
|
54
|
+
others leaves a method that cannot run:
|
|
55
|
+
|
|
56
|
+
| Set | Note |
|
|
57
|
+
|---|---|
|
|
58
|
+
| `.constitution/` | Minus the product articles; `promote` / `install` handle the seam |
|
|
59
|
+
| `.claude/skills/wdi-*/` (and `.agents/skills/wdi-*/` when those agents are selected) | Every wrapper. A wrapper without its guide, or a guide without its wrapper, is half a method |
|
|
60
|
+
| `_bmad/custom/*.toml` | The one most likely to be forgotten. `*.user.toml` stays behind |
|
|
61
|
+
| `AGENTS.md` | The routing table is the method; from `## Code` down is the product. `install` / `update` MUST NOT overwrite an existing `AGENTS.md` |
|
|
62
|
+
|
|
63
|
+
## Two directions
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
a product repo with a newer working copy of the method
|
|
67
|
+
--promote-->
|
|
68
|
+
WDI Method (this package)
|
|
69
|
+
--install / update-->
|
|
70
|
+
product repos
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
- **Promote** copies the method *up* once it has settled in a working copy.
|
|
74
|
+
- **Install / update** copies that snapshot *out* to a repo that consumes it.
|
|
75
|
+
- Do not run `update` against a repo you are about to promote from — that would overwrite the newer copy.
|
|
76
|
+
- There is no SHA lock and no per-file increment. The snapshot is the unit. The package version on npm / GitHub is the name of that snapshot.
|
|
77
|
+
|
|
78
|
+
## Installing in a fresh repo
|
|
79
|
+
|
|
80
|
+
BMad first (`npx bmad-method install`), then WDI Method. There is no numbered install runbook:
|
|
81
|
+
the steps that a runbook used to carry are now `wdi-init` intent `setup`. The order the acts come in:
|
|
82
|
+
|
|
83
|
+
1. `npx bmad-method install` in the product repo.
|
|
84
|
+
2. `npx wdi-method install` (optionally `--agents …`).
|
|
85
|
+
3. Set `product.name` in `.control/registry/index.yaml`. Rewrite `../../project/constitution.md` Articles 2 and 5.
|
|
86
|
+
4. Merge the method routing into `AGENTS.md` if that file already existed.
|
|
87
|
+
5. Run `wdi-init` intent `setup`.
|
|
88
|
+
6. Sort what already existed. A file that is already the artifact one slot asks for goes into that
|
|
89
|
+
slot through the skill that owns it; everything else goes to `_bmad-output/prior-knowledge/`.
|
|
90
|
+
`corpus-guide.md` owns that test.
|
|
91
|
+
7. Then G1 — which confirms `product.name` and writes the brief under that name.
|
|
92
|
+
|
|
93
|
+
**Two things a fresh install MUST NOT do:**
|
|
94
|
+
|
|
95
|
+
- Set `mode` and `risk_accepted` before the components exist. They are per-component fields, and the
|
|
96
|
+
components are born at the tail of G2.
|
|
97
|
+
- Fill `.control/generated/` by hand. It is script output, and a hand-written table there is the one
|
|
98
|
+
lie no validator catches.
|
package/package.json
CHANGED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Domain Docs
|
|
2
|
+
|
|
3
|
+
How the engineering skills should consume this repo's domain documentation when exploring the codebase.
|
|
4
|
+
|
|
5
|
+
**This repo does not use `CONTEXT.md`, `CONTEXT-MAP.md`, or `docs/adr/`, and none of them MUST be
|
|
6
|
+
created.** WDI Method already owns every home they would occupy, and a second home for the same fact is
|
|
7
|
+
drift rather than tidiness. `.constitution/method/constitution.md` Article 3 states it outright: this
|
|
8
|
+
method has no `docs/` layer for corpus or rules, and `wdi-reconcile` reports a root `CONTEXT.md` or a
|
|
9
|
+
`docs/adr/` as a finding against that article.
|
|
10
|
+
|
|
11
|
+
This file is seeded by `wdi-method` so the answer is right from the first install. `/setup-matt-pocock-skills`
|
|
12
|
+
would otherwise write its own default here — one that points at exactly the two paths above — and every
|
|
13
|
+
repo that ran it has had to hand-correct this file afterwards.
|
|
14
|
+
|
|
15
|
+
## Where each thing actually lives
|
|
16
|
+
|
|
17
|
+
| Looking for | Read |
|
|
18
|
+
|---|---|
|
|
19
|
+
| What a domain term means | `.control/product-glossary.md` |
|
|
20
|
+
| What is promised — a capability, an `FR`, a use case, a business rule | `.what/` |
|
|
21
|
+
| How it is built — the spine, C4, an inventory, an SDD, a contract | `.how/` |
|
|
22
|
+
| Why it is like this — a decision worth remembering | `.control/decisions/`, indexed by the generated decision table under `.control/generated/` |
|
|
23
|
+
| An architectural invariant | an `AD-N` in the architecture spine, under `.how/_platform/` |
|
|
24
|
+
| Which contexts exist and what each owns | `.control/registry/components.yaml` |
|
|
25
|
+
| Where code lives | `.control/structure-codebase.md` |
|
|
26
|
+
| Where documents live | `.control/structure-document.md` |
|
|
27
|
+
|
|
28
|
+
`AGENTS.md` § *The thing in your hand → its folder* is the short version of this table and is the
|
|
29
|
+
authority. Where this file and `AGENTS.md` disagree, `AGENTS.md` wins.
|
|
30
|
+
|
|
31
|
+
## A decision is a `DEC-`, never an ADR
|
|
32
|
+
|
|
33
|
+
`decision-guide.md` owns the shape, the one test that decides whether a decision is recorded at all, and
|
|
34
|
+
the `draft → accepted → applied` ladder. An ADR file under `docs/adr/` MUST NOT be written in its place:
|
|
35
|
+
the numbering is global and lives in `.control/registry/decisions.yaml`, and a decision recorded outside
|
|
36
|
+
it is invisible to `refs-resolve`, to the RTM, and to the generated decision table.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Issue tracker
|
|
2
|
+
|
|
3
|
+
Where issues live for this repo, and what `to-spec`, `to-tickets`, and `triage` read and write.
|
|
4
|
+
|
|
5
|
+
This file is seeded by `wdi-method`. It is the product's from here on: change the tracker whenever you
|
|
6
|
+
like, but keep the three invariants below, because `wdi-build` and the validators read them.
|
|
7
|
+
|
|
8
|
+
## Two places, and they are not the same place
|
|
9
|
+
|
|
10
|
+
| | Owned by | Lives at |
|
|
11
|
+
|---|---|---|
|
|
12
|
+
| **A spec's tickets** — the work behind an `FR` | `wdi-build`, at G5 | `{spec_folder}/issues/<NN>-<slug>.md`, `spec_folder` from `.control/registry/specs.yaml` |
|
|
13
|
+
| **Ad hoc work** — a quick bug report, a small idea, engineering-skill scratch | this file's convention | `.scratch/<slug>/` |
|
|
14
|
+
|
|
15
|
+
`.scratch/` MUST NOT become a second place to plan a feature that already has an `FR`. The moment ad hoc
|
|
16
|
+
work turns out to touch an `FR`, it stops and becomes a spec through `wdi-build` — the Fast Path rule in
|
|
17
|
+
`delivery-flow-guide.md` owns that boundary.
|
|
18
|
+
|
|
19
|
+
## The three invariants
|
|
20
|
+
|
|
21
|
+
Whatever tracker this repo uses — local markdown, GitHub, GitLab, Jira — these MUST hold:
|
|
22
|
+
|
|
23
|
+
1. **One parent per spec, one issue per ticket.** A ticket is an issue, never a sub-task: only an issue
|
|
24
|
+
carries native blocking edges, and the frontier is read from them.
|
|
25
|
+
2. **Status lives on the ticket itself and nowhere else.** A `**Status:**` line near the top of the
|
|
26
|
+
ticket file, or `status:` in its frontmatter. `ticket-status-one-home` reads it there, and copying it
|
|
27
|
+
into `specs.yaml` is what that validator exists to refuse.
|
|
28
|
+
3. **Every ticket names what it `satisfies`** — the `UC` or `FR` behind it. Without it the chain
|
|
29
|
+
`FR → UC → ticket → test` breaks and the RTM cannot say which promise went green.
|
|
30
|
+
|
|
31
|
+
## Conventions — local markdown
|
|
32
|
+
|
|
33
|
+
- One effort per directory: `.scratch/<slug>/`
|
|
34
|
+
- One file per ticket at `.scratch/<slug>/issues/<NN>-<slug>.md`, numbered from `01`, never a single
|
|
35
|
+
combined file
|
|
36
|
+
- Blocking edges as a `Blocked by: NN, NN` line near the top
|
|
37
|
+
- Comments append at the bottom under a `## Comments` heading
|
|
38
|
+
|
|
39
|
+
## Switching to a real tracker
|
|
40
|
+
|
|
41
|
+
Re-run `/setup-matt-pocock-skills` and pick it, then keep the three invariants above. The mapping WDI
|
|
42
|
+
Method expects is in `delivery-flow-guide.md` § *Mapping to a tracker*: parent issue is the spec, issue is
|
|
43
|
+
the ticket, Fix Version is the release, and the `CAP`/`FR` travel as labels.
|