wdi-method 0.4.6 → 0.5.2
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 +271 -252
- package/bin/wdi-method.js +1221 -1030
- package/kit/.constitution/method/README.md +73 -169
- package/kit/.constitution/{constitution.md → method/constitution.md} +10 -56
- package/kit/.constitution/{document → method/document}/architecture-guide.md +209 -209
- package/kit/.constitution/{document → method/document}/corpus-guide.md +4 -4
- package/kit/.constitution/{document → method/document}/delivery-flow-guide.md +338 -338
- package/kit/.constitution/{document → method/document}/sdd-guide.md +1 -1
- package/kit/.constitution/{document → method/document}/templates/cross-cutting.md +2 -2
- package/kit/.constitution/{document → method/document}/templates/design-system.md +67 -67
- package/kit/.constitution/{document → method/document}/templates/inventory.md +69 -69
- package/kit/.constitution/{document → method/document}/templates/sdd.md +1 -1
- package/kit/.constitution/{document → method/document}/templates/structure-codebase.md +129 -129
- package/kit/.constitution/{document → method/document}/templates/structure-document.md +90 -90
- package/kit/.constitution/{language-guide.md → method/language-guide.md} +2 -2
- package/kit/.constitution/{method-glossary.md → method/method-glossary.md} +169 -169
- package/kit/.constitution/{repo-guide.md → method/repo-guide.md} +120 -97
- package/kit/.constitution/method/scripts/__pycache__/validate.cpython-314.pyc +0 -0
- package/kit/.constitution/{scripts → method/scripts}/timeline.py +2 -2
- package/kit/.constitution/{scripts → method/scripts}/validate.py +1648 -1581
- package/kit/.constitution/{structure-guide.md → method/structure-guide.md} +3 -3
- package/kit/.constitution/method/why/README.md +169 -0
- package/kit/.constitution/method/{artifact-map.md → why/artifact-map.md} +5 -5
- package/kit/.constitution/method/{portability.md → why/portability.md} +6 -6
- package/kit/.constitution/method/{rationale.md → why/rationale.md} +5 -5
- package/kit/.constitution/project/README.md +68 -68
- package/kit/.constitution/project/constitution.md +64 -0
- package/kit/assets/bmad-custom/bmad-advanced-elicitation.toml +15 -15
- package/kit/assets/bmad-custom/bmad-architecture.toml +33 -33
- package/kit/assets/bmad-custom/bmad-code-review.toml +13 -13
- package/kit/assets/bmad-custom/bmad-correct-course.toml +28 -28
- package/kit/assets/bmad-custom/bmad-prd.toml +42 -42
- package/kit/assets/bmad-custom/bmad-product-brief.toml +34 -34
- package/kit/assets/bmad-custom/bmad-retrospective.toml +9 -9
- package/kit/assets/bmad-custom/bmad-spec.toml +16 -16
- package/kit/assets/bmad-custom/bmad-ux.toml +19 -19
- package/kit/skills/wdi-blueprint/SKILL.md +203 -203
- package/kit/skills/wdi-build/SKILL.md +244 -244
- package/kit/skills/wdi-component/SKILL.md +1 -1
- package/kit/skills/wdi-help/SKILL.md +98 -98
- package/kit/skills/wdi-init/SKILL.md +1 -1
- package/kit/skills/wdi-problem/SKILL.md +90 -90
- package/kit/skills/wdi-product/SKILL.md +127 -127
- package/kit/skills/wdi-reconcile/SKILL.md +2 -2
- package/kit/skills/wdi-report/SKILL.md +205 -205
- package/kit/skills/wdi-systematic-debugging/SKILL.md +193 -193
- package/kit/skills/wdi-ux/SKILL.md +145 -145
- package/kit-overlay/AGENTS.md +215 -212
- package/kit-overlay/README.md +24 -17
- package/kit-overlay/constitution.md +10 -56
- package/kit-overlay/portability.md +6 -6
- package/kit-overlay/repo-guide.md +120 -97
- package/package.json +4 -2
- package/scaffold/.control/questions/blocking.md +1 -1
- package/kit/.constitution/README.md +0 -66
- /package/kit/.constitution/{document → method/document}/bmad-guide.md +0 -0
- /package/kit/.constitution/{document → method/document}/bmad-skill-register.md +0 -0
- /package/kit/.constitution/{document → method/document}/brief-guide.md +0 -0
- /package/kit/.constitution/{document → method/document}/decision-guide.md +0 -0
- /package/kit/.constitution/{document → method/document}/prd-guide.md +0 -0
- /package/kit/.constitution/{document → method/document}/srs-guide.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/addendum.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/architecture-spine.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/brief.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/c4.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/contract.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/decision.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/flow.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/integration.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/lc.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/lifecycle.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/meeting.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/model.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/oq.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/prd.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/questions.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/rtr.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/rules.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/scn.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/srs.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/uc.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/ux.md +0 -0
- /package/kit/.constitution/{document → method/document}/ux-guide.md +0 -0
- /package/kit/.constitution/{scripts → method/scripts}/inventory.py +0 -0
- /package/kit/.constitution/{codebase/brownfield-guide.md → project/codebase-brownfield-guide.md} +0 -0
- /package/kit/.constitution/{codebase/conventions-guide.md → project/codebase-conventions-guide.md} +0 -0
- /package/kit/.constitution/{codebase/stack-guide.md → project/codebase-stack-guide.md} +0 -0
|
@@ -1,97 +1,120 @@
|
|
|
1
|
-
---
|
|
2
|
-
status: Accepted
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Repo Guide
|
|
6
|
-
|
|
7
|
-
**Loaded when:** adding a file that is neither code nor corpus, or unsure whether something may be
|
|
8
|
-
kept in this repo
|
|
9
|
-
|
|
10
|
-
Every other guide answers *where in the corpus does this go*. This one answers the question that
|
|
11
|
-
comes before it: **does it belong in this repository at all?**
|
|
12
|
-
|
|
13
|
-
## What this repository is
|
|
14
|
-
|
|
15
|
-
One product, built for one owner. It holds what is needed to build and run that product, and
|
|
16
|
-
nothing that merely relates to it commercially or organisationally.
|
|
17
|
-
|
|
18
|
-
| MAY be here | MUST NOT be here |
|
|
19
|
-
|---|---|
|
|
20
|
-
| Application code, configuration, migrations, tests | Proposals, contracts, meeting notes with the client |
|
|
21
|
-
| The corpus — `.constitution/` `.control/` `.what/` `.how/` | Contract values, pricing strategy, margins, rate cards |
|
|
22
|
-
| Technical documentation, ADR, diagrams | Real customer data, production credentials, tokens |
|
|
23
|
-
| Synthetic seed data | Anything whose leak would harm a bargaining position |
|
|
24
|
-
| Built deliverables | An archive of commercial documents |
|
|
25
|
-
|
|
26
|
-
The test is not "is it secret". It is **what changes when this file changes** — a commitment, or how
|
|
27
|
-
the thing is built. Only the second belongs here.
|
|
28
|
-
|
|
29
|
-
## Two failure modes, and why the second is worse
|
|
30
|
-
|
|
31
|
-
The obvious one is a credential in a commit. It is loud, it is caught, and it has a known remedy.
|
|
32
|
-
|
|
33
|
-
The quiet one is a **commercial fact restated as a technical one** — a limit that exists because of
|
|
34
|
-
what was negotiated, written into an ADR as though it were an engineering constraint. It survives
|
|
35
|
-
every scan, it is never noticed as a leak, and it teaches the next reader that the boundary is
|
|
36
|
-
soft.
|
|
37
|
-
|
|
38
|
-
When a technical decision genuinely follows from a commercial one, the ADR MUST state the technical
|
|
39
|
-
fact and MUST NOT state the commercial one. *"Retention is 90 days"* is a technical fact.
|
|
40
|
-
*"Retention is 90 days because the client would not pay for more"* is a commercial one wearing a
|
|
41
|
-
technical coat.
|
|
42
|
-
|
|
43
|
-
## `.work/` — scratch that is committed
|
|
44
|
-
|
|
45
|
-
`.work/` holds work in progress that has no home yet: notes while reading an unfamiliar system,
|
|
46
|
-
drafts, exploratory output, a working paper for a change spanning several sessions.
|
|
47
|
-
|
|
48
|
-
It is **committed**, so that a session picked up on another machine finds it, and so a reviewer can
|
|
49
|
-
see what a change was actually reasoning about.
|
|
50
|
-
|
|
51
|
-
It is **ephemeral**, and the two together are what make its rules matter:
|
|
52
|
-
|
|
53
|
-
- Any durable outcome MUST be moved out before the task closes — to the corpus if it is truth, to
|
|
54
|
-
`_bmad-output/` if it is a run's byproduct.
|
|
55
|
-
- Obsolete scratch MUST be deleted when its task closes. `.work/` that only grows stops being
|
|
56
|
-
scratch and becomes a second, unindexed corpus that nobody trusts and nobody deletes.
|
|
57
|
-
- Secrets and commercial figures MUST NOT be written here. Being scratch is not an exemption; it is
|
|
58
|
-
the reason people assume it is one.
|
|
59
|
-
- Nothing MUST be read from `.work/` as authority. If something there is right, it belongs
|
|
60
|
-
somewhere with an owner.
|
|
61
|
-
|
|
62
|
-
`.work/` MUST NOT be confused with `_bmad-output/`. That folder holds the output of skill runs, is
|
|
63
|
-
never curated, and is cited by path. `.work/` holds what a human or agent wrote by hand while
|
|
64
|
-
working, and is meant to empty out.
|
|
65
|
-
|
|
66
|
-
## Referring to things outside this repository
|
|
67
|
-
|
|
68
|
-
Engagement context — who the client is, what was agreed, what is due — lives elsewhere. This repo
|
|
69
|
-
MUST work without it. An agent MUST be able to act on the rules stated here without opening any
|
|
70
|
-
other repository.
|
|
71
|
-
|
|
72
|
-
When an artifact genuinely needs external context:
|
|
73
|
-
|
|
74
|
-
- MUST state the technical fact locally, in full.
|
|
75
|
-
- MAY name the external source by **repository and path**, as provenance.
|
|
76
|
-
- MUST NOT paste the external content in, and MUST NOT replace a technical statement with a pointer
|
|
77
|
-
to a commercial document.
|
|
78
|
-
|
|
79
|
-
A pointer where a specification should be is the failure this rule exists to stop: the reader who
|
|
80
|
-
cannot open that path is left with nothing, and the reader who can is reading the wrong kind of
|
|
81
|
-
document.
|
|
82
|
-
|
|
83
|
-
## How the method arrives
|
|
84
|
-
|
|
85
|
-
Method files in `.constitution
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
1
|
+
---
|
|
2
|
+
status: Accepted
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Repo Guide
|
|
6
|
+
|
|
7
|
+
**Loaded when:** adding a file that is neither code nor corpus, or unsure whether something may be
|
|
8
|
+
kept in this repo
|
|
9
|
+
|
|
10
|
+
Every other guide answers *where in the corpus does this go*. This one answers the question that
|
|
11
|
+
comes before it: **does it belong in this repository at all?**
|
|
12
|
+
|
|
13
|
+
## What this repository is
|
|
14
|
+
|
|
15
|
+
One product, built for one owner. It holds what is needed to build and run that product, and
|
|
16
|
+
nothing that merely relates to it commercially or organisationally.
|
|
17
|
+
|
|
18
|
+
| MAY be here | MUST NOT be here |
|
|
19
|
+
|---|---|
|
|
20
|
+
| Application code, configuration, migrations, tests | Proposals, contracts, meeting notes with the client |
|
|
21
|
+
| The corpus — `.constitution/` `.control/` `.what/` `.how/` | Contract values, pricing strategy, margins, rate cards |
|
|
22
|
+
| Technical documentation, ADR, diagrams | Real customer data, production credentials, tokens |
|
|
23
|
+
| Synthetic seed data | Anything whose leak would harm a bargaining position |
|
|
24
|
+
| Built deliverables | An archive of commercial documents |
|
|
25
|
+
|
|
26
|
+
The test is not "is it secret". It is **what changes when this file changes** — a commitment, or how
|
|
27
|
+
the thing is built. Only the second belongs here.
|
|
28
|
+
|
|
29
|
+
## Two failure modes, and why the second is worse
|
|
30
|
+
|
|
31
|
+
The obvious one is a credential in a commit. It is loud, it is caught, and it has a known remedy.
|
|
32
|
+
|
|
33
|
+
The quiet one is a **commercial fact restated as a technical one** — a limit that exists because of
|
|
34
|
+
what was negotiated, written into an ADR as though it were an engineering constraint. It survives
|
|
35
|
+
every scan, it is never noticed as a leak, and it teaches the next reader that the boundary is
|
|
36
|
+
soft.
|
|
37
|
+
|
|
38
|
+
When a technical decision genuinely follows from a commercial one, the ADR MUST state the technical
|
|
39
|
+
fact and MUST NOT state the commercial one. *"Retention is 90 days"* is a technical fact.
|
|
40
|
+
*"Retention is 90 days because the client would not pay for more"* is a commercial one wearing a
|
|
41
|
+
technical coat.
|
|
42
|
+
|
|
43
|
+
## `.work/` — scratch that is committed
|
|
44
|
+
|
|
45
|
+
`.work/` holds work in progress that has no home yet: notes while reading an unfamiliar system,
|
|
46
|
+
drafts, exploratory output, a working paper for a change spanning several sessions.
|
|
47
|
+
|
|
48
|
+
It is **committed**, so that a session picked up on another machine finds it, and so a reviewer can
|
|
49
|
+
see what a change was actually reasoning about.
|
|
50
|
+
|
|
51
|
+
It is **ephemeral**, and the two together are what make its rules matter:
|
|
52
|
+
|
|
53
|
+
- Any durable outcome MUST be moved out before the task closes — to the corpus if it is truth, to
|
|
54
|
+
`_bmad-output/` if it is a run's byproduct.
|
|
55
|
+
- Obsolete scratch MUST be deleted when its task closes. `.work/` that only grows stops being
|
|
56
|
+
scratch and becomes a second, unindexed corpus that nobody trusts and nobody deletes.
|
|
57
|
+
- Secrets and commercial figures MUST NOT be written here. Being scratch is not an exemption; it is
|
|
58
|
+
the reason people assume it is one.
|
|
59
|
+
- Nothing MUST be read from `.work/` as authority. If something there is right, it belongs
|
|
60
|
+
somewhere with an owner.
|
|
61
|
+
|
|
62
|
+
`.work/` MUST NOT be confused with `_bmad-output/`. That folder holds the output of skill runs, is
|
|
63
|
+
never curated, and is cited by path. `.work/` holds what a human or agent wrote by hand while
|
|
64
|
+
working, and is meant to empty out.
|
|
65
|
+
|
|
66
|
+
## Referring to things outside this repository
|
|
67
|
+
|
|
68
|
+
Engagement context — who the client is, what was agreed, what is due — lives elsewhere. This repo
|
|
69
|
+
MUST work without it. An agent MUST be able to act on the rules stated here without opening any
|
|
70
|
+
other repository.
|
|
71
|
+
|
|
72
|
+
When an artifact genuinely needs external context:
|
|
73
|
+
|
|
74
|
+
- MUST state the technical fact locally, in full.
|
|
75
|
+
- MAY name the external source by **repository and path**, as provenance.
|
|
76
|
+
- MUST NOT paste the external content in, and MUST NOT replace a technical statement with a pointer
|
|
77
|
+
to a commercial document.
|
|
78
|
+
|
|
79
|
+
A pointer where a specification should be is the failure this rule exists to stop: the reader who
|
|
80
|
+
cannot open that path is left with nothing, and the reader who can is reading the wrong kind of
|
|
81
|
+
document.
|
|
82
|
+
|
|
83
|
+
## How the method arrives
|
|
84
|
+
|
|
85
|
+
Method files in `.constitution/`, the `wdi-*` skills, and `_bmad/custom/*.toml` arrive from the
|
|
86
|
+
public WDI Method package via `npx wdi-method install` / `update`.
|
|
87
|
+
|
|
88
|
+
`.constitution/` holds **exactly two folders**, and which one a file is in decides who owns it:
|
|
89
|
+
|
|
90
|
+
| Folder | Owner | On `update` | On `promote` |
|
|
91
|
+
|---|---|---|---|
|
|
92
|
+
| `method/` | the method | **overwritten** in full | carried into the package |
|
|
93
|
+
| `project/` | this product | **never touched** — seeded once when absent | **never carried**, so a product's rules cannot be published |
|
|
94
|
+
|
|
95
|
+
Everything in the room is yours: `project/constitution.md` (Articles 1, 2, 5),
|
|
96
|
+
`project/codebase-*-guide.md` (stack, conventions, brownfield — protected at **any** `status:`,
|
|
97
|
+
including `Draft`, which is when they are actually written), and any rule file you add.
|
|
98
|
+
|
|
99
|
+
**A file this product adds belongs in `project/`.** `.constitution/` holds two folders and nothing
|
|
100
|
+
else the method knows about, so a loose `.md` at its root is in a state no rule describes: `update`
|
|
101
|
+
leaves it (it is not the method's) and no guide names it. Migration deliberately does NOT move one —
|
|
102
|
+
it may already be pointed at by its current path from `AGENTS.md` or an editor rule the installer
|
|
103
|
+
cannot see — so it prints the filename and leaves the choice to you. Either move it into `project/`
|
|
104
|
+
and fix those pointers, or name it from Article 2 so the next reader knows why it is there. Leaving
|
|
105
|
+
it unnamed is the only wrong answer.
|
|
106
|
+
|
|
107
|
+
The seam is the **folder**, never a marked region inside a generic file. `AGENTS.md` uses a marked
|
|
108
|
+
block because it is one file with no alternative; `.constitution/` has fifty-odd, and blocks inside
|
|
109
|
+
them would make every update perform surgery in every file. Prose has no merge algebra — only a path
|
|
110
|
+
can say, unambiguously, whose a file is.
|
|
111
|
+
|
|
112
|
+
At **read time** this repo is self-contained: every file the rules need is here, readable with the
|
|
113
|
+
repo alone. At **change time** the method has one published writer — the WDI Method package. Two
|
|
114
|
+
rules follow:
|
|
115
|
+
|
|
116
|
+
- A method file MUST NOT be invented or patched here to improve the method. If a rule is wrong, it
|
|
117
|
+
is fixed in the WDI Method package, then brought here with `update`.
|
|
118
|
+
- A rule particular to this repo MUST be written out in full, and MUST NOT be replaced by a pointer
|
|
119
|
+
into another repository.
|
|
120
|
+
|
|
@@ -419,7 +419,7 @@ def gantt(timeline: dict) -> str:
|
|
|
419
419
|
return "\n".join(lines) + "\n"
|
|
420
420
|
|
|
421
421
|
|
|
422
|
-
HEADER = ("> Generated by `.constitution/scripts/timeline.py --generate`. "
|
|
422
|
+
HEADER = ("> Generated by `.constitution/method/scripts/timeline.py --generate`. "
|
|
423
423
|
"MUST NOT be hand-edited.\n")
|
|
424
424
|
|
|
425
425
|
|
|
@@ -570,7 +570,7 @@ def publish(c: Corpus, report: dict, kind: str, asof: dt.date) -> tuple[Path, st
|
|
|
570
570
|
"since": report["since"],
|
|
571
571
|
"sha": report["sha"],
|
|
572
572
|
"promise_progress": report["promise_progress"],
|
|
573
|
-
"generated_by": ".constitution/scripts/timeline.py",
|
|
573
|
+
"generated_by": ".constitution/method/scripts/timeline.py",
|
|
574
574
|
})
|
|
575
575
|
path.write_text(f"---\n{front}---\n\n{render_report(report, f'Report {name}')}{NOTE}",
|
|
576
576
|
encoding="utf-8")
|