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.
Files changed (122) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +203 -0
  3. package/bin/wdi-method.js +906 -0
  4. package/kit/.constitution/README.md +66 -0
  5. package/kit/.constitution/codebase/brownfield-guide.md +18 -0
  6. package/kit/.constitution/codebase/conventions-guide.md +18 -0
  7. package/kit/.constitution/codebase/stack-guide.md +18 -0
  8. package/kit/.constitution/constitution.md +135 -0
  9. package/kit/.constitution/document/architecture-guide.md +209 -0
  10. package/kit/.constitution/document/bmad-guide.md +151 -0
  11. package/kit/.constitution/document/bmad-skill-register.md +71 -0
  12. package/kit/.constitution/document/brief-guide.md +94 -0
  13. package/kit/.constitution/document/corpus-guide.md +341 -0
  14. package/kit/.constitution/document/decision-guide.md +134 -0
  15. package/kit/.constitution/document/delivery-flow-guide.md +338 -0
  16. package/kit/.constitution/document/prd-guide.md +202 -0
  17. package/kit/.constitution/document/sdd-guide.md +206 -0
  18. package/kit/.constitution/document/srs-guide.md +147 -0
  19. package/kit/.constitution/document/templates/addendum.md +71 -0
  20. package/kit/.constitution/document/templates/architecture-spine.md +100 -0
  21. package/kit/.constitution/document/templates/brief.md +110 -0
  22. package/kit/.constitution/document/templates/c4.md +77 -0
  23. package/kit/.constitution/document/templates/contract.md +52 -0
  24. package/kit/.constitution/document/templates/cross-cutting.md +80 -0
  25. package/kit/.constitution/document/templates/decision.md +64 -0
  26. package/kit/.constitution/document/templates/design-system.md +67 -0
  27. package/kit/.constitution/document/templates/flow.md +51 -0
  28. package/kit/.constitution/document/templates/integration.md +69 -0
  29. package/kit/.constitution/document/templates/inventory.md +69 -0
  30. package/kit/.constitution/document/templates/lc.md +47 -0
  31. package/kit/.constitution/document/templates/lifecycle.md +52 -0
  32. package/kit/.constitution/document/templates/meeting.md +47 -0
  33. package/kit/.constitution/document/templates/model.md +55 -0
  34. package/kit/.constitution/document/templates/oq.md +45 -0
  35. package/kit/.constitution/document/templates/prd.md +226 -0
  36. package/kit/.constitution/document/templates/questions.md +75 -0
  37. package/kit/.constitution/document/templates/rtr.md +61 -0
  38. package/kit/.constitution/document/templates/rules.md +47 -0
  39. package/kit/.constitution/document/templates/scn.md +40 -0
  40. package/kit/.constitution/document/templates/sdd.md +146 -0
  41. package/kit/.constitution/document/templates/srs.md +149 -0
  42. package/kit/.constitution/document/templates/structure-codebase.md +129 -0
  43. package/kit/.constitution/document/templates/structure-document.md +90 -0
  44. package/kit/.constitution/document/templates/uc.md +69 -0
  45. package/kit/.constitution/document/templates/ux.md +77 -0
  46. package/kit/.constitution/document/ux-guide.md +99 -0
  47. package/kit/.constitution/language-guide.md +69 -0
  48. package/kit/.constitution/method/README.md +169 -0
  49. package/kit/.constitution/method/artifact-map.md +155 -0
  50. package/kit/.constitution/method/portability.md +91 -0
  51. package/kit/.constitution/method/rationale.md +246 -0
  52. package/kit/.constitution/method-glossary.md +169 -0
  53. package/kit/.constitution/project/README.md +68 -0
  54. package/kit/.constitution/repo-guide.md +97 -0
  55. package/kit/.constitution/scripts/inventory.py +527 -0
  56. package/kit/.constitution/scripts/timeline.py +665 -0
  57. package/kit/.constitution/scripts/validate.py +1579 -0
  58. package/kit/.constitution/structure-guide.md +202 -0
  59. package/kit/assets/bmad-custom/bmad-advanced-elicitation.toml +15 -0
  60. package/kit/assets/bmad-custom/bmad-architecture.toml +31 -0
  61. package/kit/assets/bmad-custom/bmad-build-auto.toml +10 -0
  62. package/kit/assets/bmad-custom/bmad-build.toml +52 -0
  63. package/kit/assets/bmad-custom/bmad-code-review.toml +12 -0
  64. package/kit/assets/bmad-custom/bmad-correct-course.toml +27 -0
  65. package/kit/assets/bmad-custom/bmad-deep-recon.toml +11 -0
  66. package/kit/assets/bmad-custom/bmad-prd.toml +42 -0
  67. package/kit/assets/bmad-custom/bmad-product-brief.toml +34 -0
  68. package/kit/assets/bmad-custom/bmad-retrospective.toml +9 -0
  69. package/kit/assets/bmad-custom/bmad-spec.toml +15 -0
  70. package/kit/assets/bmad-custom/bmad-ux.toml +19 -0
  71. package/kit/assets/bmad-custom/config.toml +6 -0
  72. package/kit/skills/wdi-blueprint/SKILL.md +203 -0
  73. package/kit/skills/wdi-build/SKILL.md +244 -0
  74. package/kit/skills/wdi-component/SKILL.md +172 -0
  75. package/kit/skills/wdi-decision/.gitkeep +0 -0
  76. package/kit/skills/wdi-decision/SKILL.md +183 -0
  77. package/kit/skills/wdi-help/.gitkeep +0 -0
  78. package/kit/skills/wdi-help/SKILL.md +98 -0
  79. package/kit/skills/wdi-init/SKILL.md +149 -0
  80. package/kit/skills/wdi-log/SKILL.md +107 -0
  81. package/kit/skills/wdi-problem/SKILL.md +90 -0
  82. package/kit/skills/wdi-product/SKILL.md +127 -0
  83. package/kit/skills/wdi-question/.gitkeep +0 -0
  84. package/kit/skills/wdi-question/SKILL.md +88 -0
  85. package/kit/skills/wdi-reconcile/.gitkeep +0 -0
  86. package/kit/skills/wdi-reconcile/SKILL.md +146 -0
  87. package/kit/skills/wdi-report/SKILL.md +205 -0
  88. package/kit/skills/wdi-review/SKILL.md +118 -0
  89. package/kit/skills/wdi-systematic-debugging/SKILL.md +193 -0
  90. package/kit/skills/wdi-systematic-debugging/references/condition-based-waiting.md +115 -0
  91. package/kit/skills/wdi-systematic-debugging/references/defense-in-depth.md +122 -0
  92. package/kit/skills/wdi-systematic-debugging/references/find-polluter.sh +72 -0
  93. package/kit/skills/wdi-systematic-debugging/references/root-cause-tracing.md +169 -0
  94. package/kit/skills/wdi-ux/SKILL.md +145 -0
  95. package/kit-overlay/AGENTS.md +196 -0
  96. package/kit-overlay/README.md +66 -0
  97. package/kit-overlay/constitution.md +135 -0
  98. package/kit-overlay/portability.md +91 -0
  99. package/kit-overlay/repo-guide.md +97 -0
  100. package/lib/agents-block.mjs +52 -0
  101. package/lib/identity.mjs +65 -0
  102. package/package.json +37 -0
  103. package/scaffold/.control/decisions/.gitkeep +0 -0
  104. package/scaffold/.control/generated/.gitkeep +2 -0
  105. package/scaffold/.control/meetings/.gitkeep +0 -0
  106. package/scaffold/.control/memlog/.gitkeep +0 -0
  107. package/scaffold/.control/product-glossary.md +21 -0
  108. package/scaffold/.control/project-non-technical-log.md +23 -0
  109. package/scaffold/.control/questions/answered.md +11 -0
  110. package/scaffold/.control/questions/assumptions.md +15 -0
  111. package/scaffold/.control/questions/blocking.md +21 -0
  112. package/scaffold/.control/questions/external.md +11 -0
  113. package/scaffold/.control/registry/components.yaml +21 -0
  114. package/scaffold/.control/registry/decisions.yaml +6 -0
  115. package/scaffold/.control/registry/defects.yaml +3 -0
  116. package/scaffold/.control/registry/index.yaml +46 -0
  117. package/scaffold/.control/registry/requirements.yaml +15 -0
  118. package/scaffold/.control/registry/risks.yaml +5 -0
  119. package/scaffold/.control/registry/usecases.yaml +6 -0
  120. package/scaffold/.control/registry/waves.yaml +5 -0
  121. package/scaffold/.control/structure-codebase.md +19 -0
  122. 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.