wdi-method 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +203 -0
- package/bin/wdi-method.js +906 -0
- package/kit/.constitution/README.md +66 -0
- package/kit/.constitution/codebase/brownfield-guide.md +18 -0
- package/kit/.constitution/codebase/conventions-guide.md +18 -0
- package/kit/.constitution/codebase/stack-guide.md +18 -0
- package/kit/.constitution/constitution.md +135 -0
- package/kit/.constitution/document/architecture-guide.md +209 -0
- package/kit/.constitution/document/bmad-guide.md +151 -0
- package/kit/.constitution/document/bmad-skill-register.md +71 -0
- package/kit/.constitution/document/brief-guide.md +94 -0
- package/kit/.constitution/document/corpus-guide.md +341 -0
- package/kit/.constitution/document/decision-guide.md +134 -0
- package/kit/.constitution/document/delivery-flow-guide.md +338 -0
- package/kit/.constitution/document/prd-guide.md +202 -0
- package/kit/.constitution/document/sdd-guide.md +206 -0
- package/kit/.constitution/document/srs-guide.md +147 -0
- package/kit/.constitution/document/templates/addendum.md +71 -0
- package/kit/.constitution/document/templates/architecture-spine.md +100 -0
- package/kit/.constitution/document/templates/brief.md +110 -0
- package/kit/.constitution/document/templates/c4.md +77 -0
- package/kit/.constitution/document/templates/contract.md +52 -0
- package/kit/.constitution/document/templates/cross-cutting.md +80 -0
- package/kit/.constitution/document/templates/decision.md +64 -0
- package/kit/.constitution/document/templates/design-system.md +67 -0
- package/kit/.constitution/document/templates/flow.md +51 -0
- package/kit/.constitution/document/templates/integration.md +69 -0
- package/kit/.constitution/document/templates/inventory.md +69 -0
- package/kit/.constitution/document/templates/lc.md +47 -0
- package/kit/.constitution/document/templates/lifecycle.md +52 -0
- package/kit/.constitution/document/templates/meeting.md +47 -0
- package/kit/.constitution/document/templates/model.md +55 -0
- package/kit/.constitution/document/templates/oq.md +45 -0
- package/kit/.constitution/document/templates/prd.md +226 -0
- package/kit/.constitution/document/templates/questions.md +75 -0
- package/kit/.constitution/document/templates/rtr.md +61 -0
- package/kit/.constitution/document/templates/rules.md +47 -0
- package/kit/.constitution/document/templates/scn.md +40 -0
- package/kit/.constitution/document/templates/sdd.md +146 -0
- package/kit/.constitution/document/templates/srs.md +149 -0
- package/kit/.constitution/document/templates/structure-codebase.md +129 -0
- package/kit/.constitution/document/templates/structure-document.md +90 -0
- package/kit/.constitution/document/templates/uc.md +69 -0
- package/kit/.constitution/document/templates/ux.md +77 -0
- package/kit/.constitution/document/ux-guide.md +99 -0
- package/kit/.constitution/language-guide.md +69 -0
- package/kit/.constitution/method/README.md +169 -0
- package/kit/.constitution/method/artifact-map.md +155 -0
- package/kit/.constitution/method/portability.md +91 -0
- package/kit/.constitution/method/rationale.md +246 -0
- package/kit/.constitution/method-glossary.md +169 -0
- package/kit/.constitution/project/README.md +68 -0
- package/kit/.constitution/repo-guide.md +97 -0
- package/kit/.constitution/scripts/inventory.py +527 -0
- package/kit/.constitution/scripts/timeline.py +665 -0
- package/kit/.constitution/scripts/validate.py +1579 -0
- package/kit/.constitution/structure-guide.md +202 -0
- package/kit/assets/bmad-custom/bmad-advanced-elicitation.toml +15 -0
- package/kit/assets/bmad-custom/bmad-architecture.toml +31 -0
- package/kit/assets/bmad-custom/bmad-build-auto.toml +10 -0
- package/kit/assets/bmad-custom/bmad-build.toml +52 -0
- package/kit/assets/bmad-custom/bmad-code-review.toml +12 -0
- package/kit/assets/bmad-custom/bmad-correct-course.toml +27 -0
- package/kit/assets/bmad-custom/bmad-deep-recon.toml +11 -0
- package/kit/assets/bmad-custom/bmad-prd.toml +42 -0
- package/kit/assets/bmad-custom/bmad-product-brief.toml +34 -0
- package/kit/assets/bmad-custom/bmad-retrospective.toml +9 -0
- package/kit/assets/bmad-custom/bmad-spec.toml +15 -0
- package/kit/assets/bmad-custom/bmad-ux.toml +19 -0
- package/kit/assets/bmad-custom/config.toml +6 -0
- package/kit/skills/wdi-blueprint/SKILL.md +203 -0
- package/kit/skills/wdi-build/SKILL.md +244 -0
- package/kit/skills/wdi-component/SKILL.md +172 -0
- package/kit/skills/wdi-decision/.gitkeep +0 -0
- package/kit/skills/wdi-decision/SKILL.md +183 -0
- package/kit/skills/wdi-help/.gitkeep +0 -0
- package/kit/skills/wdi-help/SKILL.md +98 -0
- package/kit/skills/wdi-init/SKILL.md +149 -0
- package/kit/skills/wdi-log/SKILL.md +107 -0
- package/kit/skills/wdi-problem/SKILL.md +90 -0
- package/kit/skills/wdi-product/SKILL.md +127 -0
- package/kit/skills/wdi-question/.gitkeep +0 -0
- package/kit/skills/wdi-question/SKILL.md +88 -0
- package/kit/skills/wdi-reconcile/.gitkeep +0 -0
- package/kit/skills/wdi-reconcile/SKILL.md +146 -0
- package/kit/skills/wdi-report/SKILL.md +205 -0
- package/kit/skills/wdi-review/SKILL.md +118 -0
- package/kit/skills/wdi-systematic-debugging/SKILL.md +193 -0
- package/kit/skills/wdi-systematic-debugging/references/condition-based-waiting.md +115 -0
- package/kit/skills/wdi-systematic-debugging/references/defense-in-depth.md +122 -0
- package/kit/skills/wdi-systematic-debugging/references/find-polluter.sh +72 -0
- package/kit/skills/wdi-systematic-debugging/references/root-cause-tracing.md +169 -0
- package/kit/skills/wdi-ux/SKILL.md +145 -0
- package/kit-overlay/AGENTS.md +196 -0
- package/kit-overlay/README.md +66 -0
- package/kit-overlay/constitution.md +135 -0
- package/kit-overlay/portability.md +91 -0
- package/kit-overlay/repo-guide.md +97 -0
- package/lib/agents-block.mjs +52 -0
- package/lib/identity.mjs +65 -0
- package/package.json +37 -0
- package/scaffold/.control/decisions/.gitkeep +0 -0
- package/scaffold/.control/generated/.gitkeep +2 -0
- package/scaffold/.control/meetings/.gitkeep +0 -0
- package/scaffold/.control/memlog/.gitkeep +0 -0
- package/scaffold/.control/product-glossary.md +21 -0
- package/scaffold/.control/project-non-technical-log.md +23 -0
- package/scaffold/.control/questions/answered.md +11 -0
- package/scaffold/.control/questions/assumptions.md +15 -0
- package/scaffold/.control/questions/blocking.md +21 -0
- package/scaffold/.control/questions/external.md +11 -0
- package/scaffold/.control/registry/components.yaml +21 -0
- package/scaffold/.control/registry/decisions.yaml +6 -0
- package/scaffold/.control/registry/defects.yaml +3 -0
- package/scaffold/.control/registry/index.yaml +46 -0
- package/scaffold/.control/registry/requirements.yaml +15 -0
- package/scaffold/.control/registry/risks.yaml +5 -0
- package/scaffold/.control/registry/usecases.yaml +6 -0
- package/scaffold/.control/registry/waves.yaml +5 -0
- package/scaffold/.control/structure-codebase.md +19 -0
- package/scaffold/.control/structure-document.md +25 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Wira Digital Indonesia
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
# WDI Method
|
|
2
|
+
|
|
3
|
+
Metode pengiriman perangkat lunak WDI. Membungkus BMad; tidak menggantikannya.
|
|
4
|
+
|
|
5
|
+
WDI software delivery method. It wraps BMad; it does not replace it.
|
|
6
|
+
|
|
7
|
+
This repository is **public**. It MUST NOT contain a client name, a product name, or a
|
|
8
|
+
link to any other private repository. Product identity lives in the consuming repo, at
|
|
9
|
+
`.control/registry/index.yaml` (`product.name`, optional `product.client`), filled at G1.
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
BMad first, then WDI Method. The wrappers call BMad skills; without BMad they cannot run.
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
cd /path/to/your/product-repo
|
|
17
|
+
npx bmad-method install
|
|
18
|
+
npx github:wiradigitalid/wdi-method
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Tanpa subcommand, installer membuka **TUI**: cek BMad, deteksi install vs update, tanya nama
|
|
22
|
+
produk / klien, pilih agen, tampilkan folder yang akan ditulis, lalu langkah sesudahnya.
|
|
23
|
+
|
|
24
|
+
Folder korpus (`.constitution` `.control` `.what` `.how` `.work`) **bukan** opsi — namanya
|
|
25
|
+
identitas metode. Yang dipilih di TUI adalah repo tujuan dan agennya.
|
|
26
|
+
|
|
27
|
+
Non-interactive (CI):
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npx github:wiradigitalid/wdi-method install --yes --agents cursor,claude --product "Nama Produk"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Update
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npx github:wiradigitalid/wdi-method update
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Update overwrites method files. It MUST NOT touch `.what/`, `.how/`, filled `.control/` state,
|
|
40
|
+
existing `constitution.md` Articles 1–2 and 5, `codebase/*-guide.md` once `Accepted`, extra
|
|
41
|
+
constitution files this repo added, or `_bmad/custom/*.user.toml`.
|
|
42
|
+
|
|
43
|
+
`AGENTS.md` has a marked method block (`<!-- BEGIN:wdi-method -->` … `<!-- END:wdi-method -->`).
|
|
44
|
+
Update replaces **that block only** — including how to install and update. Product sections
|
|
45
|
+
outside it (`## Code`, extra boundaries) stay. A file without the markers gets the block
|
|
46
|
+
injected before `## Code`; existing product prose above `## Language` is kept.
|
|
47
|
+
|
|
48
|
+
A stamp is written to `.control/wdi-method.yaml` (`wdi_method`, `bmad_method` if detectable).
|
|
49
|
+
It is a trace, not a lockfile.
|
|
50
|
+
|
|
51
|
+
## Agents
|
|
52
|
+
|
|
53
|
+
`--agents` chooses **where skills are copied**, not a different method. Default: all.
|
|
54
|
+
|
|
55
|
+
| Flag | Writes |
|
|
56
|
+
|---|---|
|
|
57
|
+
| `claude` | `.claude/skills/wdi-*`, `CLAUDE.md` |
|
|
58
|
+
| `cursor` | `.agents/skills/wdi-*`, `.cursorrules` |
|
|
59
|
+
| `codex` | `AGENTS.md` |
|
|
60
|
+
| `antigravity` | `.agents/skills/wdi-*`, `.agents/AGENTS.md` |
|
|
61
|
+
|
|
62
|
+
`AGENTS.md` is created on first install if missing. On update, only the marked method block
|
|
63
|
+
is replaced.
|
|
64
|
+
|
|
65
|
+
## What travels, what does not
|
|
66
|
+
|
|
67
|
+
| Travels (the method) | Stays in the product repo |
|
|
68
|
+
|---|---|
|
|
69
|
+
| `.constitution/` guides, templates, scripts, `method/` | `.control/` `.what/` `.how/` `_bmad-output/` `.work/` |
|
|
70
|
+
| fifteen `wdi-*` skills | `constitution.md` that already exists (Articles 1, 2, 5) |
|
|
71
|
+
| `_bmad/custom/*.toml` | `codebase/*-guide.md` once `Accepted` |
|
|
72
|
+
| | **`.constitution/project/`** — the product's custom room |
|
|
73
|
+
| | `_bmad/custom/*.user.toml` |
|
|
74
|
+
|
|
75
|
+
`.control/` empty stubs are written only when that folder is absent.
|
|
76
|
+
|
|
77
|
+
## `.constitution/project/` — the custom room
|
|
78
|
+
|
|
79
|
+
Everything else in `.constitution/` belongs to the method and is **overwritten** on update. This one
|
|
80
|
+
folder is not: `install` seeds it, `update` never writes over a file that exists in it, and `promote`
|
|
81
|
+
**skips it entirely** — so a rule that names a client cannot reach this public repository.
|
|
82
|
+
|
|
83
|
+
| Goes there | Does not, and where it goes |
|
|
84
|
+
|---|---|
|
|
85
|
+
| A review policy a client requires | product / client name → `index.yaml` `product:` |
|
|
86
|
+
| A process rule that came from a contract | code conventions → `codebase/*-guide.md` |
|
|
87
|
+
| A policy that differs from the method default | scope, method ownership → `constitution.md` Art. 1, 2, 5 |
|
|
88
|
+
| A prohibition specific to this domain | agent instructions → `AGENTS.md`, outside the marked block |
|
|
89
|
+
|
|
90
|
+
**A generic rule MUST NOT be moved there.** If it holds in any project it belongs to the package — fix
|
|
91
|
+
it there and `promote`. Using the room to bypass the package is how a method stops being generic with
|
|
92
|
+
nobody deciding it, and **an empty room is a valid state**: filling it so it gets used is the very
|
|
93
|
+
failure this rule prevents.
|
|
94
|
+
|
|
95
|
+
Required frontmatter, checked by `V27` in `validate.py`:
|
|
96
|
+
|
|
97
|
+
```yaml
|
|
98
|
+
scope: project # exactly this
|
|
99
|
+
purpose: "" # one line: what this rule protects
|
|
100
|
+
overrides: null # optional: the kit file it narrows or contradicts
|
|
101
|
+
decision: null # REQUIRED when `overrides:` is set — the DEC- that decided it
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
A file there MAY narrow or add with none of the last two. To **contradict** a generic rule it MUST name
|
|
105
|
+
it in `overrides:` and carry `decision:`; a method that can be contradicted without a decision stops
|
|
106
|
+
being trustworthy in the next repo.
|
|
107
|
+
|
|
108
|
+
**Whole files, not marked blocks.** `AGENTS.md` uses a marked block because it is *one* file.
|
|
109
|
+
`.constitution/` has fifty-odd, and blocks inside them would make `update` perform surgery in each —
|
|
110
|
+
one broken marker and either the product's rule is erased or the generic rule freezes forever.
|
|
111
|
+
|
|
112
|
+
The room's own `README.md` is authored in the package and `promote` never carries it home. Edit it if
|
|
113
|
+
you like; the edit will not survive the next install elsewhere, so **your rules MUST be other files.**
|
|
114
|
+
|
|
115
|
+
## Product name — one room, filled at G1
|
|
116
|
+
|
|
117
|
+
`.control/registry/index.yaml`:
|
|
118
|
+
|
|
119
|
+
```yaml
|
|
120
|
+
product:
|
|
121
|
+
name: "{product}" # set at G1; the brief title uses this value
|
|
122
|
+
client: "" # empty when there is no client
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
The brief at `.what/_product-brief/brief.md` uses that name. `constitution.md` Article 1 cites
|
|
126
|
+
the field. Neither document is a second source of the name.
|
|
127
|
+
|
|
128
|
+
## Language — two settings, and nothing else is a choice
|
|
129
|
+
|
|
130
|
+
The TUI asks two questions; `install`/`update` write the answers to `.control/registry/index.yaml`:
|
|
131
|
+
|
|
132
|
+
```yaml
|
|
133
|
+
policy:
|
|
134
|
+
doc_language: en # prose of working documents in .what/ .how/ .control/
|
|
135
|
+
doc_filename_language: en # the slug part of a document filename
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Non-interactive: `--doc-language <en|id> --doc-filename-language <en|id>`.
|
|
139
|
+
|
|
140
|
+
**A setting that already exists is kept**, and the run says so. A language somebody already chose is
|
|
141
|
+
not the installer's to change behind their back.
|
|
142
|
+
|
|
143
|
+
Always English, and a skill MUST NOT ask about them:
|
|
144
|
+
|
|
145
|
+
| | |
|
|
146
|
+
|---|---|
|
|
147
|
+
| Method terminology | `DEC` `SRS` `SDD` `UC` `FR` `AD`, the gate names, `mode` and `risk_accepted` values |
|
|
148
|
+
| Document code prefixes | `UC-` `DEC-` `SRS-` — only the slug after them follows the setting |
|
|
149
|
+
| Machine-facing markers | `[NEEDS CONFIRMATION]` `[MISSING]` `[ASSUMED]` `[PARTIAL]`, `yes`/`no` |
|
|
150
|
+
| Code identifiers, DB columns, config keys | `language-guide.md` owns this |
|
|
151
|
+
|
|
152
|
+
**A corpus written before these settings existed is not migrated for them.** `validate.py` accepts both
|
|
153
|
+
languages — `yes|ya`, and V23's keyword set is the union of both — so existing documents keep working
|
|
154
|
+
and only new writing follows the setting.
|
|
155
|
+
|
|
156
|
+
## Gitignore (optional)
|
|
157
|
+
|
|
158
|
+
This package does not require method files to be committed or ignored. Each product repo decides.
|
|
159
|
+
BMad does not mandate it either. A repo that ignores the payload reinstalls with `update`.
|
|
160
|
+
|
|
161
|
+
Example, if you choose not to commit skills:
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
.claude/skills/wdi-*/
|
|
165
|
+
.agents/skills/wdi-*/
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Do not ignore all of `.constitution/` — Articles 1, 2, 5 and extra product files belong to the
|
|
169
|
+
product and MUST stay tracked.
|
|
170
|
+
|
|
171
|
+
## Carrying a method change into this package
|
|
172
|
+
|
|
173
|
+
The published source is this repository. A product repo that still holds a newer working copy
|
|
174
|
+
of the method MUST promote it here before the change is treated as published.
|
|
175
|
+
|
|
176
|
+
From a checkout of this repo:
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
npx wdi-method promote /path/to/the/product-repo
|
|
180
|
+
npm test
|
|
181
|
+
git commit && git push
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
`promote` copies the portable method, replaces product-named files with `kit-overlay/`, and
|
|
185
|
+
scrubs initiative slugs to the placeholder `ISI-slug-inisiatif`.
|
|
186
|
+
|
|
187
|
+
Do not run `update` against a repo you are about to promote from — that would overwrite the
|
|
188
|
+
newer working copy.
|
|
189
|
+
|
|
190
|
+
A product name, a client name, or a link to another private repository MUST NOT land in this
|
|
191
|
+
tree. If the cleanliness test fails, fix the overlay or the source, never weaken the test.
|
|
192
|
+
|
|
193
|
+
## Commands
|
|
194
|
+
|
|
195
|
+
| Command | Direction |
|
|
196
|
+
|---|---|
|
|
197
|
+
| `(no command)` | interactive TUI |
|
|
198
|
+
| `install [dir]` | this package → product repo (first time) |
|
|
199
|
+
| `update [dir]` | this package → product repo (again) |
|
|
200
|
+
| `verify [dir]` | list missing method files |
|
|
201
|
+
| `promote <dir>` | product repo → this package (maintainers) |
|
|
202
|
+
|
|
203
|
+
`install` and `update` share one copy path. `install` seeds empty `.control/` if it is missing.
|