wdi-method 0.5.13 → 0.6.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 (87) hide show
  1. package/README.md +436 -271
  2. package/bin/wdi-method.js +198 -5
  3. package/kit/.constitution/method/README.md +76 -75
  4. package/kit/.constitution/method/constitution.md +2 -1
  5. package/kit/.constitution/method/document/architecture-guide.md +10 -10
  6. package/kit/.constitution/method/document/bmad-guide.md +50 -16
  7. package/kit/.constitution/method/document/bmad-skill-register.md +74 -71
  8. package/kit/.constitution/method/document/brief-guide.md +42 -11
  9. package/kit/.constitution/method/document/corpus-guide.md +146 -11
  10. package/kit/.constitution/method/document/decision-guide.md +199 -134
  11. package/kit/.constitution/method/document/delivery-flow-guide.md +154 -83
  12. package/kit/.constitution/method/document/prd-guide.md +63 -20
  13. package/kit/.constitution/method/document/sdd-guide.md +5 -4
  14. package/kit/.constitution/method/document/srs-guide.md +150 -147
  15. package/kit/.constitution/method/document/templates/addendum.md +70 -71
  16. package/kit/.constitution/method/document/templates/architecture-spine.md +6 -4
  17. package/kit/.constitution/method/document/templates/brief.md +132 -110
  18. package/kit/.constitution/method/document/templates/c4.md +11 -11
  19. package/kit/.constitution/method/document/templates/contract.md +51 -52
  20. package/kit/.constitution/method/document/templates/cross-cutting.md +1 -2
  21. package/kit/.constitution/method/document/templates/design-system.md +0 -1
  22. package/kit/.constitution/method/document/templates/integration.md +68 -69
  23. package/kit/.constitution/method/document/templates/inventory.md +0 -1
  24. package/kit/.constitution/method/document/templates/lc.md +49 -47
  25. package/kit/.constitution/method/document/templates/lifecycle.md +51 -52
  26. package/kit/.constitution/method/document/templates/model.md +68 -55
  27. package/kit/.constitution/method/document/templates/oq.md +45 -45
  28. package/kit/.constitution/method/document/templates/prd.md +244 -226
  29. package/kit/.constitution/method/document/templates/questions.md +100 -76
  30. package/kit/.constitution/method/document/templates/rules.md +46 -47
  31. package/kit/.constitution/method/document/templates/sdd.md +26 -11
  32. package/kit/.constitution/method/document/templates/srs.md +46 -25
  33. package/kit/.constitution/method/document/templates/uc.md +1 -1
  34. package/kit/.constitution/method/document/templates/ux.md +76 -77
  35. package/kit/.constitution/method/document/ux-guide.md +115 -99
  36. package/kit/.constitution/method/language-guide.md +1 -1
  37. package/kit/.constitution/method/method-glossary.md +29 -16
  38. package/kit/.constitution/method/scripts/timeline.py +663 -665
  39. package/kit/.constitution/method/scripts/validate.py +1143 -362
  40. package/kit/.constitution/method/structure-guide.md +3 -3
  41. package/kit/.constitution/method/why/README.md +184 -169
  42. package/kit/.constitution/method/why/artifact-map.md +15 -13
  43. package/kit/.constitution/method/why/mode-risk-map.md +140 -0
  44. package/kit/.constitution/method/why/portability.md +1 -1
  45. package/kit/.constitution/method/why/rationale.md +12 -5
  46. package/kit/.constitution/project/README.md +2 -2
  47. package/kit/.constitution/project/codebase-brownfield-guide.md +18 -18
  48. package/kit/.constitution/project/codebase-conventions-guide.md +18 -18
  49. package/kit/.constitution/project/codebase-stack-guide.md +18 -18
  50. package/kit/assets/bmad-custom/bmad-architecture.toml +1 -1
  51. package/kit/assets/bmad-custom/bmad-correct-course.toml +5 -5
  52. package/kit/assets/bmad-custom/bmad-prd.toml +9 -3
  53. package/kit/assets/bmad-custom/bmad-product-brief.toml +6 -2
  54. package/kit/skills/wdi-blueprint/SKILL.md +71 -10
  55. package/kit/skills/wdi-build/SKILL.md +233 -122
  56. package/kit/skills/wdi-component/SKILL.md +8 -6
  57. package/kit/skills/wdi-decision/SKILL.md +187 -183
  58. package/kit/skills/wdi-help/SKILL.md +8 -7
  59. package/kit/skills/wdi-init/SKILL.md +20 -6
  60. package/kit/skills/wdi-problem/SKILL.md +31 -13
  61. package/kit/skills/wdi-product/SKILL.md +30 -17
  62. package/kit/skills/wdi-question/SKILL.md +170 -88
  63. package/kit/skills/wdi-reconcile/SKILL.md +33 -10
  64. package/kit/skills/wdi-report/SKILL.md +77 -25
  65. package/kit/skills/wdi-review/SKILL.md +201 -118
  66. package/kit/skills/wdi-systematic-debugging/SKILL.md +7 -7
  67. package/kit/skills/wdi-upgrade/SKILL.md +179 -0
  68. package/kit/skills/wdi-ux/SKILL.md +35 -11
  69. package/kit-overlay/AGENTS.md +2 -2
  70. package/kit-overlay/README.md +76 -75
  71. package/kit-overlay/constitution.md +2 -1
  72. package/kit-overlay/portability.md +1 -1
  73. package/package.json +43 -43
  74. package/scaffold/.control/product-glossary.md +1 -1
  75. package/scaffold/.control/registry/goals.yaml +25 -0
  76. package/scaffold/.control/registry/index.yaml +5 -5
  77. package/scaffold/.control/registry/specs.yaml +5 -0
  78. package/scaffold/.control/structure-codebase.md +19 -19
  79. package/scaffold/.control/structure-document.md +25 -25
  80. package/kit/.constitution/method/document/templates/rtr.md +0 -61
  81. package/kit/assets/bmad-custom/bmad-build-auto.toml +0 -10
  82. package/kit/assets/bmad-custom/bmad-build.toml +0 -52
  83. package/kit/assets/bmad-custom/bmad-code-review.toml +0 -13
  84. package/kit/assets/bmad-custom/bmad-retrospective.toml +0 -9
  85. package/kit/assets/bmad-custom/bmad-spec.toml +0 -16
  86. package/scaffold/.control/registry/requirements.yaml +0 -15
  87. package/scaffold/.control/registry/waves.yaml +0 -5
@@ -1,47 +1,49 @@
1
- ---
2
- type: lc
3
- id: LC-{NNN} # allocated from .control/registry/components.yaml
4
- name: '{name}'
5
- lc_type: service # ui-screen · ui-composite · ui-element · gateway · service · job · store
6
- container: '{container}' # the runnable/deployable unit it lives in
7
- component: '{pc}' # the Product Component it belongs to
8
- owner: '{team or person}'
9
- area: '{area}'
10
- created: '{YYYY-MM-DD}'
11
- ---
12
-
13
- # LC-{NNN} — {name}
14
-
15
- <!-- TEMPLATE GUIDE act on these comments, then delete them.
16
-
17
- A Logical Component is ONE addressable unit of build. It is not a Product Component: a PC is a
18
- domain slice and the box at C4 L3; an LC is something you can point at and change.
19
-
20
- `lc_type` decides where this prose lives, and the mapping is not negotiable:
21
- ui-screen · ui-composite → .how/<pc>/01-ux/
22
- ui-element → .how/_platform/design-system.md
23
- gateway → .how/<pc>/02-contracts/ or 03-integrations/
24
- service · job → .how/<pc>/04-components/
25
- store → .how/<pc>/05-model/
26
-
27
- An LC MUST be registered by the time its wave CLOSES — V12 checks that
28
- every `touches` entry resolves. -->
29
-
30
- ## Responsibility
31
-
32
- <!-- One paragraph. What this unit is answerable for. If it needs "and" more than once, it is
33
- probably two units. -->
34
-
35
- ## Depends on
36
-
37
- <!-- Other LC ids, and the direction. Dependency direction is a rule carried by the spine, not a
38
- preference — a dependency pointing the wrong way is a conflict to surface, not to document. -->
39
-
40
- ## Interface
41
-
42
- <!-- What it exposes to the rest of the system. For a gateway this points at the contract in
43
- 02-contracts/ rather than restating it. -->
44
-
45
- ## Notes
46
-
47
- <!-- Anything a builder cannot read off the code. Cut if there is nothing. -->
1
+ ---
2
+ type: lc
3
+ id: LC-{NNN} # allocated from .control/registry/components.yaml
4
+ name: '{name}'
5
+ lc_type: service # ui-screen · ui-composite · ui-element · gateway · service · job · store
6
+ container: '{container}' # the runnable/deployable unit it lives in. EMPTY is legal only for a
7
+ # screen born at G2 before containers exist; G3 fills it. `container-built` demands it as
8
+ # soon as this LC's Product Component lists containers
9
+ component: '{pc}' # the Product Component it belongs to
10
+ owner: '{team or person}'
11
+ area: '{area}'
12
+ created: '{YYYY-MM-DD}'
13
+ ---
14
+
15
+ # LC-{NNN}{name}
16
+
17
+ <!-- TEMPLATE GUIDE act on these comments, then delete them.
18
+
19
+ A Logical Component is ONE addressable unit of build. It is not a Product Component: a PC is a
20
+ domain slice and the box at C4 L3; an LC is something you can point at and change.
21
+
22
+ `lc_type` decides where this prose lives, and the mapping is not negotiable:
23
+ ui-screen · ui-composite → .how/<pc>/01-ux/
24
+ ui-element → .how/_platform/design-system.md
25
+ gateway → .how/<pc>/02-contracts/ or 03-integrations/
26
+ service · job → .how/<pc>/04-components/
27
+ store → .how/<pc>/05-model/
28
+
29
+ An LC MUST be registered by the time its spec CLOSES — `lc-registered` checks that
30
+ every `touches` entry resolves. -->
31
+
32
+ ## Responsibility
33
+
34
+ <!-- One paragraph. What this unit is answerable for. If it needs "and" more than once, it is
35
+ probably two units. -->
36
+
37
+ ## Depends on
38
+
39
+ <!-- Other LC ids, and the direction. Dependency direction is a rule carried by the spine, not a
40
+ preference — a dependency pointing the wrong way is a conflict to surface, not to document. -->
41
+
42
+ ## Interface
43
+
44
+ <!-- What it exposes to the rest of the system. For a gateway this points at the contract in
45
+ 02-contracts/ rather than restating it. -->
46
+
47
+ ## Notes
48
+
49
+ <!-- Anything a builder cannot read off the code. Cut if there is nothing. -->
@@ -1,52 +1,51 @@
1
- ---
2
- type: lifecycle
3
- component: '{pc}'
4
- status: draft # draft · reviewed · locked · superseded
5
- created: '{YYYY-MM-DD}'
6
- updated: '{YYYY-MM-DD}'
7
- entities: [] # the domain entities whose lifecycles this file carries
8
- ---
9
-
10
- # State Lifecycle — {Product Component}
11
-
12
- <!-- TEMPLATE GUIDE — act on these comments, then delete them.
13
-
14
- Home: .what/<pc>/03-domain/state-machines.md. Written at G4, at mode: deep ONLY. Below deep it
15
- MUST NOT be written to fill a slot.
16
-
17
- One section per entity that has more than one state. An entity with a single state has no
18
- lifecycle and MUST NOT get a section.
19
-
20
- WHY THIS HAS ITS OWN TEMPLATE: a transition table does not resemble an ERD, so it cannot be
21
- lodged inside model.md. What it needs stated who may move a thing, and what makes a state
22
- terminal — has no column in an entity diagram.
23
-
24
- THIS IS BEHAVIOUR, NOT SCHEMA. The state VALUES are English, because they are enum values and
25
- language-guide.md governs that. Their LABELS what a user reads are not written here; they
26
- belong to the screen. A value rendered straight to the screen is the known pitfall this repo
27
- already records.
28
-
29
- G3 asks whether there is a state that can be entered but not left. This file is where that is
30
- answered, and an unreachable or inescapable state is a FINDING, not a documented fact. -->
31
-
32
- ## {Entity}
33
-
34
- **States:** `{value}` · `{value}` · `{value}`
35
- **Initial:** `{value}` — and what creates it
36
- **Terminal:** `{value}` · `{value}` — and why nothing leaves them
37
-
38
- | From | To | Trigger | Who may | Guard | Side effect |
39
- | --- | --- | --- | --- | --- | --- |
40
-
41
- <!-- `Who may` names an actor from the SRS Actor Register, or `System` for an automatic transition.
42
- `Guard` is the business rule that has to hold cite the BR- id rather than restating it.
43
- `Side effect` is what else changes; a transition with an invisible side effect is the one that
44
- surprises someone while the code is being written.
45
-
46
- Every state in the list above MUST appear at least once as a `To`, except the initial one, and
47
- at least once as a `From`, except a terminal one. That is the check, and it is mechanical. -->
48
-
49
- ### What is deliberately not modelled
50
-
51
- <!-- A state someone will look for and not find, and why. A schema value nothing uses — say so:
52
- until the schema is cleaned, it has no label, no transition, and no meaning. -->
1
+ ---
2
+ type: lifecycle
3
+ component: '{pc}'
4
+ status: draft # draft · reviewed · locked · superseded
5
+ created: '{YYYY-MM-DD}'
6
+ entities: [] # the domain entities whose lifecycles this file carries
7
+ ---
8
+
9
+ # State Lifecycle — {Product Component}
10
+
11
+ <!-- TEMPLATE GUIDE — act on these comments, then delete them.
12
+
13
+ Home: .what/<pc>/03-domain/state-machines.md. Written at G4, at mode: deep ONLY. Below deep it
14
+ MUST NOT be written to fill a slot.
15
+
16
+ One section per entity that has more than one state. An entity with a single state has no
17
+ lifecycle and MUST NOT get a section.
18
+
19
+ WHY THIS HAS ITS OWN TEMPLATE: a transition table does not resemble an ERD, so it cannot be
20
+ lodged inside model.md. What it needs stated who may move a thing, and what makes a state
21
+ terminalhas no column in an entity diagram.
22
+
23
+ THIS IS BEHAVIOUR, NOT SCHEMA. The state VALUES are English, because they are enum values and
24
+ language-guide.md governs that. Their LABELS what a user reads are not written here; they
25
+ belong to the screen. A value rendered straight to the screen is the known pitfall this repo
26
+ already records.
27
+
28
+ G3 asks whether there is a state that can be entered but not left. This file is where that is
29
+ answered, and an unreachable or inescapable state is a FINDING, not a documented fact. -->
30
+
31
+ ## {Entity}
32
+
33
+ **States:** `{value}` · `{value}` · `{value}`
34
+ **Initial:** `{value}` and what creates it
35
+ **Terminal:** `{value}` · `{value}` — and why nothing leaves them
36
+
37
+ | From | To | Trigger | Who may | Guard | Side effect |
38
+ | --- | --- | --- | --- | --- | --- |
39
+
40
+ <!-- `Who may` names an actor from the SRS Actor Register, or `System` for an automatic transition.
41
+ `Guard` is the business rule that has to hold cite the BR- id rather than restating it.
42
+ `Side effect` is what else changes; a transition with an invisible side effect is the one that
43
+ surprises someone while the code is being written.
44
+
45
+ Every state in the list above MUST appear at least once as a `To`, except the initial one, and
46
+ at least once as a `From`, except a terminal one. That is the check, and it is mechanical. -->
47
+
48
+ ### What is deliberately not modelled
49
+
50
+ <!-- A state someone will look for and not find, and why. A schema value nothing uses — say so:
51
+ until the schema is cleaned, it has no label, no transition, and no meaning. -->
@@ -1,55 +1,68 @@
1
- ---
2
- type: model
3
- component: '{pc}'
4
- layer: physical # conceptual (.what/<pc>/03-domain/) · physical (.how/<pc>/05-model/)
5
- created: '{YYYY-MM-DD}'
6
- updated: '{YYYY-MM-DD}'
7
- ---
8
-
9
- # Model — {name}
10
-
11
- <!-- TEMPLATE GUIDE — act on these comments, then delete them.
12
-
13
- THE LAYER RULE, and it is the one most often broken:
14
-
15
- conceptual .what/<pc>/03-domain/ things, their relationships, their cardinality, and the
16
- states they move through. Column types MUST NOT appear. This is what the
17
- Product Owner can read.
18
-
19
- physical — .how/<pc>/05-model/ — tables, columns, types, indexes, constraints, migrations.
20
-
21
- Set `layer` in the frontmatter and keep to it. A conceptual model with `VARCHAR(255)` in it has
22
- already become a physical one, and the Product Owner has quietly lost the ability to review
23
- the domain. -->
24
-
25
- ## Entities
26
-
27
- <!-- One row per thing. For a conceptual model the description is what it IS to the business, not
28
- how it is stored. -->
29
-
30
- | Entity | What it is | Identified by |
31
- | --- | --- | --- |
32
-
33
- ## Relationships
34
-
35
- <!-- Direction and cardinality. State them as sentences a person would say: "one member has zero
36
- or one sponsor". -->
37
-
38
- ## State Lifecycle
39
-
40
- <!-- For entities that change status: which states exist, what triggers each transition, and who is
41
- allowed to trigger it. G3 asks whether any state can be entered but not left — that question is
42
- answered here or not at all. Cut this section for entities that never change status. -->
43
-
44
- | From | To | Trigger | Who may |
45
- | --- | --- | --- | --- |
46
-
47
- ## Invariants
48
-
49
- <!-- What MUST always be true regardless of path taken. These usually become BR- entries and
50
- database constraints at the same time; state them once here and reference from both. -->
51
-
52
- ## Physical notes
53
-
54
- <!-- ONLY when layer: physical. Indexes, partitioning, retention, migration ordering. Cut entirely
55
- for a conceptual model. -->
1
+ ---
2
+ type: model
3
+ component: '{pc}'
4
+ layer: physical # conceptual (.what/<pc>/03-domain/) · physical (.how/<pc>/05-model/)
5
+ created: '{YYYY-MM-DD}'
6
+ ---
7
+
8
+ # Model — {name}
9
+
10
+ <!-- TEMPLATE GUIDE — act on these comments, then delete them.
11
+
12
+ THE LAYER RULE, and it is the one most often broken:
13
+
14
+ conceptual — .what/<pc>/03-domain/ — things, their relationships, their cardinality, and the
15
+ states they move through. Column types MUST NOT appear. This is what the
16
+ Product Owner can read.
17
+
18
+ physical — .how/<pc>/05-model/ — tables, columns, types, indexes, constraints, migrations.
19
+
20
+ Set `layer` in the frontmatter and keep to it. A conceptual model with `VARCHAR(255)` in it has
21
+ already become a physical one, and the Product Owner has quietly lost the ability to review
22
+ the domain. -->
23
+
24
+ ## Entities
25
+
26
+ <!-- One row per thing. For a conceptual model the description is what it IS to the business, not
27
+ how it is stored.
28
+
29
+ `Code name` closes the loop this table used to leave open. The conceptual model is written for
30
+ the Product Owner, so its Entity column carries the word the BUSINESS uses — which is not always
31
+ the identifier code must use. Naming both, in one row, is what stops an agent inventing a third
32
+ word. `../language-guide.md` owns which language the code name is written in, and the one
33
+ exception for an Indonesian administrative or legal noun.
34
+
35
+ `Never called` is the synonym that was rejected, kept on purpose. A term resolved silently comes
36
+ back: the losing word is still in somebody's head, in an old document, and in the client's
37
+ email. Naming it here is what makes reintroducing it a finding instead of a habit. Leave the
38
+ cell empty when no synonym ever competed — an invented one is noise.
39
+
40
+ Every row's definition MUST live in `.control/product-glossary.md`, not here. This table points;
41
+ the glossary defines. -->
42
+
43
+ | Entity | What it is | Identified by | Code name | Never called |
44
+ | --- | --- | --- | --- | --- |
45
+
46
+ ## Relationships
47
+
48
+ <!-- Direction and cardinality. State them as sentences a person would say: "one member has zero
49
+ or one sponsor". -->
50
+
51
+ ## State Lifecycle
52
+
53
+ <!-- For entities that change status: which states exist, what triggers each transition, and who is
54
+ allowed to trigger it. G3 asks whether any state can be entered but not left — that question is
55
+ answered here or not at all. Cut this section for entities that never change status. -->
56
+
57
+ | From | To | Trigger | Who may |
58
+ | --- | --- | --- | --- |
59
+
60
+ ## Invariants
61
+
62
+ <!-- What MUST always be true regardless of path taken. These usually become BR- entries and
63
+ database constraints at the same time; state them once here and reference from both. -->
64
+
65
+ ## Physical notes
66
+
67
+ <!-- ONLY when layer: physical. Indexes, partitioning, retention, migration ordering. Cut entirely
68
+ for a conceptual model. -->
@@ -1,45 +1,45 @@
1
- ---
2
- type: oq
3
- id: OQ-{n}
4
- component: '{pc}' # or `_platform`
5
- blocks: [] # gate, FR, UC, or story ids — empty means it blocks nothing
6
- owner: '{who can answer}'
7
- by_when: '{gate or date}'
8
- status: open # open · answered
9
- created: '{YYYY-MM-DD}'
10
- ---
11
-
12
- # OQ-{n} — {the question, as one answerable sentence}
13
-
14
- <!-- TEMPLATE GUIDE — act on these comments, then delete them.
15
-
16
- Most open questions need only a line in one of the four lists in .control/questions/. This file
17
- exists for the
18
- few whose discussion outgrows one line; the list then keeps a one-line pointer here.
19
-
20
- The title MUST be answerable. "How should referrals work?" is a topic, not a question. -->
21
-
22
- ## Why it is open
23
-
24
- <!-- What makes this undecidable right now — missing information, a stakeholder who has not
25
- answered, a dependency that has not landed. -->
26
-
27
- ## What it blocks
28
-
29
- <!-- Concretely. If it blocks nothing, say so — a question that blocks nothing MAY still be
30
- registered, but mixing blockers with curiosities makes the list useless exactly when it
31
- matters. -->
32
-
33
- ## Options considered
34
-
35
- <!-- Only if any exist. A proposed answer for the owner to confirm is useful; recording it as
36
- settled is not. -->
37
-
38
- ## Answer
39
-
40
- <!-- Filled when it closes, WITH the date and who answered. The entry is closed in place and MUST
41
- NOT be deleted — the record of what was once uncertain is what stops it being reopened in three
42
- months.
43
-
44
- If the answer amounts to a decision that is expensive to reverse, closing here is not enough:
45
- route it to wdi-decision so a DEC- carries what was chosen and what it cost. -->
1
+ ---
2
+ type: oq
3
+ id: OQ-{n}
4
+ component: '{pc}' # or `_platform`
5
+ blocks: [] # gate, FR, UC, or ticket ids — empty means it blocks nothing
6
+ owner: '{who can answer}'
7
+ by_when: '{gate or date}'
8
+ status: open # open · answered
9
+ created: '{YYYY-MM-DD}'
10
+ ---
11
+
12
+ # OQ-{n} — {the question, as one answerable sentence}
13
+
14
+ <!-- TEMPLATE GUIDE — act on these comments, then delete them.
15
+
16
+ Most open questions need only a line in one of the four lists in .control/questions/. This file
17
+ exists for the
18
+ few whose discussion outgrows one line; the list then keeps a one-line pointer here.
19
+
20
+ The title MUST be answerable. "How should referrals work?" is a topic, not a question. -->
21
+
22
+ ## Why it is open
23
+
24
+ <!-- What makes this undecidable right now — missing information, a stakeholder who has not
25
+ answered, a dependency that has not landed. -->
26
+
27
+ ## What it blocks
28
+
29
+ <!-- Concretely. If it blocks nothing, say so — a question that blocks nothing MAY still be
30
+ registered, but mixing blockers with curiosities makes the list useless exactly when it
31
+ matters. -->
32
+
33
+ ## Options considered
34
+
35
+ <!-- Only if any exist. A proposed answer for the owner to confirm is useful; recording it as
36
+ settled is not. -->
37
+
38
+ ## Answer
39
+
40
+ <!-- Filled when it closes, WITH the date and who answered. The entry is closed in place and MUST
41
+ NOT be deleted — the record of what was once uncertain is what stops it being reopened in three
42
+ months.
43
+
44
+ If the answer amounts to a decision that is expensive to reverse, closing here is not enough:
45
+ route it to wdi-decision so a DEC- carries what was chosen and what it cost. -->