wdi-method 0.4.5 → 0.5.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/README.md +58 -16
- package/bin/wdi-method.js +152 -60
- package/kit/.constitution/method/README.md +66 -169
- package/kit/.constitution/{constitution.md → method/constitution.md} +10 -56
- package/kit/.constitution/{document → method/document}/architecture-guide.md +1 -1
- package/kit/.constitution/{document → method/document}/corpus-guide.md +2 -2
- 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 +5 -5
- 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/model.md +2 -2
- package/kit/.constitution/{document → method/document}/templates/questions.md +10 -9
- package/kit/.constitution/{document → method/document}/templates/sdd.md +1 -1
- package/kit/.constitution/{document → method/document}/templates/srs.md +2 -2
- 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/{repo-guide.md → method/repo-guide.md} +16 -3
- package/kit/.constitution/{scripts → method/scripts}/inventory.py +102 -100
- package/kit/.constitution/{scripts → method/scripts}/timeline.py +665 -665
- package/kit/.constitution/{scripts → method/scripts}/validate.py +1599 -1579
- 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/{rationale.md → why/rationale.md} +5 -5
- package/kit/.constitution/project/constitution.md +63 -0
- package/kit/assets/bmad-custom/bmad-advanced-elicitation.toml +9 -9
- package/kit/assets/bmad-custom/bmad-architecture.toml +33 -31
- package/kit/assets/bmad-custom/bmad-build-auto.toml +5 -5
- package/kit/assets/bmad-custom/bmad-build.toml +52 -52
- package/kit/assets/bmad-custom/bmad-code-review.toml +13 -12
- package/kit/assets/bmad-custom/bmad-correct-course.toml +20 -19
- package/kit/assets/bmad-custom/bmad-deep-recon.toml +12 -11
- package/kit/assets/bmad-custom/bmad-prd.toml +42 -42
- package/kit/assets/bmad-custom/bmad-product-brief.toml +18 -18
- package/kit/assets/bmad-custom/bmad-retrospective.toml +4 -4
- package/kit/assets/bmad-custom/bmad-spec.toml +16 -15
- package/kit/assets/bmad-custom/bmad-ux.toml +19 -19
- package/kit/assets/bmad-custom/config.toml +3 -3
- package/kit/skills/wdi-blueprint/SKILL.md +3 -3
- 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 +20 -20
- 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 +112 -97
- package/package.json +37 -37
- package/scaffold/.control/product-glossary.md +21 -21
- package/scaffold/.control/project-non-technical-log.md +23 -23
- package/scaffold/.control/questions/answered.md +11 -11
- package/scaffold/.control/questions/assumptions.md +15 -15
- package/scaffold/.control/questions/blocking.md +21 -21
- package/scaffold/.control/questions/external.md +11 -11
- package/scaffold/.control/registry/components.yaml +21 -21
- package/scaffold/.control/registry/defects.yaml +3 -3
- package/scaffold/.control/registry/index.yaml +46 -46
- package/scaffold/.control/registry/requirements.yaml +15 -15
- package/scaffold/.control/registry/risks.yaml +5 -5
- package/scaffold/.control/registry/usecases.yaml +6 -6
- 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/oq.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/prd.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/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/{method-glossary.md → method/method-glossary.md} +0 -0
- /package/kit/.constitution/method/{portability.md → why/portability.md} +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,129 +1,129 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: structure
|
|
3
|
-
scope: codebase
|
|
4
|
-
verified: '{YYYY-MM-DD}' # the day the tree was actually read
|
|
5
|
-
commit: '{sha}' # the commit it was read at — staleness is measured against this
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Codebase Structure
|
|
9
|
-
|
|
10
|
-
<!-- TEMPLATE GUIDE — act on these comments, then delete them.
|
|
11
|
-
|
|
12
|
-
This file is DESCRIPTIVE. It states what the code tree looks like today. It MUST NOT carry
|
|
13
|
-
naming rules (conventions-guide.md), versions (stack-guide.md), or ratified legacy shapes
|
|
14
|
-
(brownfield-guide.md) — reference them instead.
|
|
15
|
-
|
|
16
|
-
Written and refreshed only by `wdi-init` intent `structure`, never by hand. Rules for both maps live in
|
|
17
|
-
.constitution/structure-guide.md.
|
|
18
|
-
|
|
19
|
-
THE SHAPE: annotated trees, not prose. Folders are complete; files are marked ★ inline and only
|
|
20
|
-
when they earn it. A tree that lists every file is unmaintainable, and an unmaintainable map
|
|
21
|
-
stops being read — that is how every source-tree document before this one died.
|
|
22
|
-
|
|
23
|
-
THREE SECTIONS, and the split is by DEPLOYABILITY, not by size or importance:
|
|
24
|
-
Top level every base folder in the repo root
|
|
25
|
-
Container runs or deploys on its own — the same word C4 L2 and components.yaml use
|
|
26
|
-
Library an includable artifact — compiled or imported into something else, never run
|
|
27
|
-
|
|
28
|
-
"Container" is the kit's word, defined in templates/c4.md and carried by every LC's `container`
|
|
29
|
-
field. It MUST NOT be swapped for "application", "service", or "app" here — a synonym for a
|
|
30
|
-
term that already has a glossary entry is drift, and `wdi-reconcile` hunts for it. It does not
|
|
31
|
-
mean a Docker image; packaging is a separate question.
|
|
32
|
-
|
|
33
|
-
A unit that is neither is not a unit; it stays a line in Top level. When a unit stops being
|
|
34
|
-
separately deployable, it MUST move sections rather than keep its old heading. -->
|
|
35
|
-
|
|
36
|
-
## Verified
|
|
37
|
-
|
|
38
|
-
<!-- One line: date, commit SHA, and how the tree was read. If the commit is no longer an ancestor
|
|
39
|
-
of HEAD, this map is stale and MUST be refreshed before a gate reads it. -->
|
|
40
|
-
|
|
41
|
-
## Top level
|
|
42
|
-
|
|
43
|
-
<!-- Every base folder in the repo root, COMPLETE — including the dull ones. An unlisted folder is
|
|
44
|
-
the one people misuse, because nothing told them what it was for. Tag each entry so the two
|
|
45
|
-
sections below are predictable: [container] · [lib] · [docs] · [tooling] · [generated]. One
|
|
46
|
-
line of purpose per entry; no second line. -->
|
|
47
|
-
|
|
48
|
-
```text
|
|
49
|
-
{repo-root}/
|
|
50
|
-
├── {unit}/ # [container] what it is answerable for
|
|
51
|
-
├── {unit}/ # [lib] ...
|
|
52
|
-
└── {folder}/ # [docs] ...
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
## Containers
|
|
56
|
-
|
|
57
|
-
<!-- One subsection per unit that runs or deploys on its own. Repeat the block below verbatim per
|
|
58
|
-
unit; if there is only one, there is still a subsection — a repo grows a second container
|
|
59
|
-
without warning.
|
|
60
|
-
|
|
61
|
-
Heading names MUST match the `container` values used in components.yaml, so an LC's container
|
|
62
|
-
can be checked against this map instead of trusted. A container with no code in this repo MUST
|
|
63
|
-
NOT get a subsection — it belongs to c4-l2-containers.md. A folder that builds more than one
|
|
64
|
-
container MUST say which. -->
|
|
65
|
-
|
|
66
|
-
### {container}
|
|
67
|
-
|
|
68
|
-
<!-- One line: what it is, and how it ships. Then the tree: folder convention first, ★ on the files
|
|
69
|
-
that earn it. Descend only until directories stop carrying distinct roles, and describe a
|
|
70
|
-
repeating shape ONCE with a placeholder such as <feature>/ rather than per instance. -->
|
|
71
|
-
|
|
72
|
-
```text
|
|
73
|
-
{container}/
|
|
74
|
-
├── {entry-file} # ★ ENTRY: what execution actually does first
|
|
75
|
-
├── {folder}/ # convention: what belongs here
|
|
76
|
-
│ └── {file} # ★ why this one is key
|
|
77
|
-
└── {folder}/<feature>/ # the shape every feature repeats
|
|
78
|
-
├── {sub}/ # what goes in it
|
|
79
|
-
└── {sub}/ # ...
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
<!-- One line, only when the unit has one: the authoritative call direction through those folders.
|
|
83
|
-
A builder who gets this wrong writes code that works and is still wrong. Cut if there is none;
|
|
84
|
-
do not invent one to fill the slot. -->
|
|
85
|
-
|
|
86
|
-
**Flow:** {layer} → {layer} → {layer}
|
|
87
|
-
|
|
88
|
-
## Libraries
|
|
89
|
-
|
|
90
|
-
<!-- One subsection per includable artifact — compiled into or imported by something else, never
|
|
91
|
-
deployed on its own. A library is deliberately NOT a container, and MUST NOT appear at C4 L2.
|
|
92
|
-
|
|
93
|
-
Same block shape as a container, minus the entry point: a library that has one is a container
|
|
94
|
-
wearing the wrong label. -->
|
|
95
|
-
|
|
96
|
-
### {library}
|
|
97
|
-
|
|
98
|
-
<!-- One line: what it holds, and who consumes it. Then the annotated tree. -->
|
|
99
|
-
|
|
100
|
-
```text
|
|
101
|
-
{library}/
|
|
102
|
-
├── {folder}/ # convention: what belongs here
|
|
103
|
-
│ └── {file} # ★ why this one is key
|
|
104
|
-
└── {folder}/
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
**Consumed by:** {units}
|
|
108
|
-
|
|
109
|
-
## Generated
|
|
110
|
-
|
|
111
|
-
<!-- Anything not written by hand, with its generator: codegen output, vendored trees, migration
|
|
112
|
-
snapshots. A generated folder edited by hand is a defect, so it MUST be named here even when it
|
|
113
|
-
looks like ordinary source. Cut the section if there is none. -->
|
|
114
|
-
|
|
115
|
-
| Path | Generated by |
|
|
116
|
-
| --- | --- |
|
|
117
|
-
|
|
118
|
-
## Unclaimed
|
|
119
|
-
|
|
120
|
-
<!-- Folders that exist but no one can state a purpose for. These are findings, not layout. Leave
|
|
121
|
-
them here, named, until they are claimed or deleted — inventing a purpose to empty this section
|
|
122
|
-
is the failure mode it exists to catch. Cut the section only when it is genuinely empty. -->
|
|
123
|
-
|
|
124
|
-
---
|
|
125
|
-
|
|
126
|
-
<!-- Keep this legend last, and keep it one line. -->
|
|
127
|
-
|
|
128
|
-
★ = key file: entry point, wiring root, the single place a rule is enforced, or a file that must be
|
|
129
|
-
opened before behaviour in its folder can be changed.
|
|
1
|
+
---
|
|
2
|
+
type: structure
|
|
3
|
+
scope: codebase
|
|
4
|
+
verified: '{YYYY-MM-DD}' # the day the tree was actually read
|
|
5
|
+
commit: '{sha}' # the commit it was read at — staleness is measured against this
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Codebase Structure
|
|
9
|
+
|
|
10
|
+
<!-- TEMPLATE GUIDE — act on these comments, then delete them.
|
|
11
|
+
|
|
12
|
+
This file is DESCRIPTIVE. It states what the code tree looks like today. It MUST NOT carry
|
|
13
|
+
naming rules (conventions-guide.md), versions (stack-guide.md), or ratified legacy shapes
|
|
14
|
+
(brownfield-guide.md) — reference them instead.
|
|
15
|
+
|
|
16
|
+
Written and refreshed only by `wdi-init` intent `structure`, never by hand. Rules for both maps live in
|
|
17
|
+
.constitution/method/structure-guide.md.
|
|
18
|
+
|
|
19
|
+
THE SHAPE: annotated trees, not prose. Folders are complete; files are marked ★ inline and only
|
|
20
|
+
when they earn it. A tree that lists every file is unmaintainable, and an unmaintainable map
|
|
21
|
+
stops being read — that is how every source-tree document before this one died.
|
|
22
|
+
|
|
23
|
+
THREE SECTIONS, and the split is by DEPLOYABILITY, not by size or importance:
|
|
24
|
+
Top level every base folder in the repo root
|
|
25
|
+
Container runs or deploys on its own — the same word C4 L2 and components.yaml use
|
|
26
|
+
Library an includable artifact — compiled or imported into something else, never run
|
|
27
|
+
|
|
28
|
+
"Container" is the kit's word, defined in templates/c4.md and carried by every LC's `container`
|
|
29
|
+
field. It MUST NOT be swapped for "application", "service", or "app" here — a synonym for a
|
|
30
|
+
term that already has a glossary entry is drift, and `wdi-reconcile` hunts for it. It does not
|
|
31
|
+
mean a Docker image; packaging is a separate question.
|
|
32
|
+
|
|
33
|
+
A unit that is neither is not a unit; it stays a line in Top level. When a unit stops being
|
|
34
|
+
separately deployable, it MUST move sections rather than keep its old heading. -->
|
|
35
|
+
|
|
36
|
+
## Verified
|
|
37
|
+
|
|
38
|
+
<!-- One line: date, commit SHA, and how the tree was read. If the commit is no longer an ancestor
|
|
39
|
+
of HEAD, this map is stale and MUST be refreshed before a gate reads it. -->
|
|
40
|
+
|
|
41
|
+
## Top level
|
|
42
|
+
|
|
43
|
+
<!-- Every base folder in the repo root, COMPLETE — including the dull ones. An unlisted folder is
|
|
44
|
+
the one people misuse, because nothing told them what it was for. Tag each entry so the two
|
|
45
|
+
sections below are predictable: [container] · [lib] · [docs] · [tooling] · [generated]. One
|
|
46
|
+
line of purpose per entry; no second line. -->
|
|
47
|
+
|
|
48
|
+
```text
|
|
49
|
+
{repo-root}/
|
|
50
|
+
├── {unit}/ # [container] what it is answerable for
|
|
51
|
+
├── {unit}/ # [lib] ...
|
|
52
|
+
└── {folder}/ # [docs] ...
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Containers
|
|
56
|
+
|
|
57
|
+
<!-- One subsection per unit that runs or deploys on its own. Repeat the block below verbatim per
|
|
58
|
+
unit; if there is only one, there is still a subsection — a repo grows a second container
|
|
59
|
+
without warning.
|
|
60
|
+
|
|
61
|
+
Heading names MUST match the `container` values used in components.yaml, so an LC's container
|
|
62
|
+
can be checked against this map instead of trusted. A container with no code in this repo MUST
|
|
63
|
+
NOT get a subsection — it belongs to c4-l2-containers.md. A folder that builds more than one
|
|
64
|
+
container MUST say which. -->
|
|
65
|
+
|
|
66
|
+
### {container}
|
|
67
|
+
|
|
68
|
+
<!-- One line: what it is, and how it ships. Then the tree: folder convention first, ★ on the files
|
|
69
|
+
that earn it. Descend only until directories stop carrying distinct roles, and describe a
|
|
70
|
+
repeating shape ONCE with a placeholder such as <feature>/ rather than per instance. -->
|
|
71
|
+
|
|
72
|
+
```text
|
|
73
|
+
{container}/
|
|
74
|
+
├── {entry-file} # ★ ENTRY: what execution actually does first
|
|
75
|
+
├── {folder}/ # convention: what belongs here
|
|
76
|
+
│ └── {file} # ★ why this one is key
|
|
77
|
+
└── {folder}/<feature>/ # the shape every feature repeats
|
|
78
|
+
├── {sub}/ # what goes in it
|
|
79
|
+
└── {sub}/ # ...
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
<!-- One line, only when the unit has one: the authoritative call direction through those folders.
|
|
83
|
+
A builder who gets this wrong writes code that works and is still wrong. Cut if there is none;
|
|
84
|
+
do not invent one to fill the slot. -->
|
|
85
|
+
|
|
86
|
+
**Flow:** {layer} → {layer} → {layer}
|
|
87
|
+
|
|
88
|
+
## Libraries
|
|
89
|
+
|
|
90
|
+
<!-- One subsection per includable artifact — compiled into or imported by something else, never
|
|
91
|
+
deployed on its own. A library is deliberately NOT a container, and MUST NOT appear at C4 L2.
|
|
92
|
+
|
|
93
|
+
Same block shape as a container, minus the entry point: a library that has one is a container
|
|
94
|
+
wearing the wrong label. -->
|
|
95
|
+
|
|
96
|
+
### {library}
|
|
97
|
+
|
|
98
|
+
<!-- One line: what it holds, and who consumes it. Then the annotated tree. -->
|
|
99
|
+
|
|
100
|
+
```text
|
|
101
|
+
{library}/
|
|
102
|
+
├── {folder}/ # convention: what belongs here
|
|
103
|
+
│ └── {file} # ★ why this one is key
|
|
104
|
+
└── {folder}/
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Consumed by:** {units}
|
|
108
|
+
|
|
109
|
+
## Generated
|
|
110
|
+
|
|
111
|
+
<!-- Anything not written by hand, with its generator: codegen output, vendored trees, migration
|
|
112
|
+
snapshots. A generated folder edited by hand is a defect, so it MUST be named here even when it
|
|
113
|
+
looks like ordinary source. Cut the section if there is none. -->
|
|
114
|
+
|
|
115
|
+
| Path | Generated by |
|
|
116
|
+
| --- | --- |
|
|
117
|
+
|
|
118
|
+
## Unclaimed
|
|
119
|
+
|
|
120
|
+
<!-- Folders that exist but no one can state a purpose for. These are findings, not layout. Leave
|
|
121
|
+
them here, named, until they are claimed or deleted — inventing a purpose to empty this section
|
|
122
|
+
is the failure mode it exists to catch. Cut the section only when it is genuinely empty. -->
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
<!-- Keep this legend last, and keep it one line. -->
|
|
127
|
+
|
|
128
|
+
★ = key file: entry point, wiring root, the single place a rule is enforced, or a file that must be
|
|
129
|
+
opened before behaviour in its folder can be changed.
|
|
@@ -1,90 +1,90 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: structure
|
|
3
|
-
scope: document
|
|
4
|
-
verified: '{YYYY-MM-DD}' # the day the tree was actually read
|
|
5
|
-
commit: '{sha}' # the commit it was read at — staleness is measured against this
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Document Structure
|
|
9
|
-
|
|
10
|
-
<!-- TEMPLATE GUIDE — act on these comments, then delete them.
|
|
11
|
-
|
|
12
|
-
This file is DESCRIPTIVE. It states which parts of the corpus actually carry content today.
|
|
13
|
-
The layers themselves, the placement test, the naming scheme, and slot numbering all belong to
|
|
14
|
-
corpus-guide.md and MUST NOT be restated here.
|
|
15
|
-
|
|
16
|
-
Written and refreshed only by `wdi-init` intent `structure`, never by hand. Rules for both maps live in
|
|
17
|
-
.constitution/structure-guide.md.
|
|
18
|
-
|
|
19
|
-
Same shape as the codebase map: annotated trees, folders complete, ★ inline on the documents
|
|
20
|
-
that earn it. What differs is the split — the codebase map splits by deployability, this one
|
|
21
|
-
splits by LAYER, because that is the axis a reader is lost on.
|
|
22
|
-
|
|
23
|
-
The five roots are fixed, so the top-level tree is not a discovery. Which sub-folders carry
|
|
24
|
-
content, which Product Component folders exist, and which slots have been split out of a kernel
|
|
25
|
-
ARE, and that is what this map is for. -->
|
|
26
|
-
|
|
27
|
-
## Verified
|
|
28
|
-
|
|
29
|
-
<!-- One line: date, commit SHA, and how the tree was read. If the commit is no longer an ancestor
|
|
30
|
-
of HEAD, this map is stale and MUST be refreshed before a gate reads it. -->
|
|
31
|
-
|
|
32
|
-
## Top level
|
|
33
|
-
|
|
34
|
-
<!-- The five roots, one line each, with the state of each: populated, or still empty. Mark an empty
|
|
35
|
-
root as empty rather than dropping it — a dropped root reads as a root that does not exist. -->
|
|
36
|
-
|
|
37
|
-
```text
|
|
38
|
-
.constitution/ # how we work — {state}
|
|
39
|
-
.control/ # what currently holds — {state}
|
|
40
|
-
.what/ # what was promised — {state}
|
|
41
|
-
.how/ # how it is built — {state}
|
|
42
|
-
_bmad-output/ # work in progress, not curated — {state}
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
## Per layer
|
|
46
|
-
|
|
47
|
-
<!-- One subsection per root that carries content. Annotated tree: sub-folders complete, ★ on the
|
|
48
|
-
single-copy documents a reader must find first. Per-Product-Component folders are NOT expanded
|
|
49
|
-
here — the table below owns them, and expanding both means maintaining both. -->
|
|
50
|
-
|
|
51
|
-
### {layer}
|
|
52
|
-
|
|
53
|
-
```text
|
|
54
|
-
{layer}/
|
|
55
|
-
├── {folder}/ # what belongs here
|
|
56
|
-
│ └── {file} # ★ why this one is key
|
|
57
|
-
└── {folder}/ # {state}
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
## Product Components
|
|
61
|
-
|
|
62
|
-
<!-- One row per PC that actually exists. Both sides are expected: a PC with an SRS and no SDD, or
|
|
63
|
-
the reverse, is drift and MUST be listed under Findings rather than normalised here. List only
|
|
64
|
-
the slots that have been split out of a kernel; empty slots stay unlisted. -->
|
|
65
|
-
|
|
66
|
-
| Product Component | `.what/<pc>/` | `.how/<pc>/` | Slots split out |
|
|
67
|
-
| --- | --- | --- | --- |
|
|
68
|
-
|
|
69
|
-
## Registries and generated
|
|
70
|
-
|
|
71
|
-
<!-- Which registry files carry entries and which are still empty skeletons, and which generated
|
|
72
|
-
tables have been produced. Generated output is never written by hand; naming it here is what
|
|
73
|
-
makes a hand edit visible. -->
|
|
74
|
-
|
|
75
|
-
| File | State |
|
|
76
|
-
| --- | --- |
|
|
77
|
-
|
|
78
|
-
## Findings
|
|
79
|
-
|
|
80
|
-
<!-- Drift this map surfaced while being derived: a PC on one side only, a supplement with no
|
|
81
|
-
citation, a folder outside the five roots, a document whose home contradicts corpus-guide.md.
|
|
82
|
-
Findings are reported, never fixed here — fixing them is `wdi-reconcile` work, or the owning
|
|
83
|
-
skill's.
|
|
84
|
-
Cut the section only when it is genuinely empty. -->
|
|
85
|
-
|
|
86
|
-
---
|
|
87
|
-
|
|
88
|
-
<!-- Keep this legend last, and keep it one line. -->
|
|
89
|
-
|
|
90
|
-
★ = key document: single-copy, referenced from elsewhere, or the first thing a reader must find.
|
|
1
|
+
---
|
|
2
|
+
type: structure
|
|
3
|
+
scope: document
|
|
4
|
+
verified: '{YYYY-MM-DD}' # the day the tree was actually read
|
|
5
|
+
commit: '{sha}' # the commit it was read at — staleness is measured against this
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Document Structure
|
|
9
|
+
|
|
10
|
+
<!-- TEMPLATE GUIDE — act on these comments, then delete them.
|
|
11
|
+
|
|
12
|
+
This file is DESCRIPTIVE. It states which parts of the corpus actually carry content today.
|
|
13
|
+
The layers themselves, the placement test, the naming scheme, and slot numbering all belong to
|
|
14
|
+
corpus-guide.md and MUST NOT be restated here.
|
|
15
|
+
|
|
16
|
+
Written and refreshed only by `wdi-init` intent `structure`, never by hand. Rules for both maps live in
|
|
17
|
+
.constitution/method/structure-guide.md.
|
|
18
|
+
|
|
19
|
+
Same shape as the codebase map: annotated trees, folders complete, ★ inline on the documents
|
|
20
|
+
that earn it. What differs is the split — the codebase map splits by deployability, this one
|
|
21
|
+
splits by LAYER, because that is the axis a reader is lost on.
|
|
22
|
+
|
|
23
|
+
The five roots are fixed, so the top-level tree is not a discovery. Which sub-folders carry
|
|
24
|
+
content, which Product Component folders exist, and which slots have been split out of a kernel
|
|
25
|
+
ARE, and that is what this map is for. -->
|
|
26
|
+
|
|
27
|
+
## Verified
|
|
28
|
+
|
|
29
|
+
<!-- One line: date, commit SHA, and how the tree was read. If the commit is no longer an ancestor
|
|
30
|
+
of HEAD, this map is stale and MUST be refreshed before a gate reads it. -->
|
|
31
|
+
|
|
32
|
+
## Top level
|
|
33
|
+
|
|
34
|
+
<!-- The five roots, one line each, with the state of each: populated, or still empty. Mark an empty
|
|
35
|
+
root as empty rather than dropping it — a dropped root reads as a root that does not exist. -->
|
|
36
|
+
|
|
37
|
+
```text
|
|
38
|
+
.constitution/ # how we work — {state}
|
|
39
|
+
.control/ # what currently holds — {state}
|
|
40
|
+
.what/ # what was promised — {state}
|
|
41
|
+
.how/ # how it is built — {state}
|
|
42
|
+
_bmad-output/ # work in progress, not curated — {state}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Per layer
|
|
46
|
+
|
|
47
|
+
<!-- One subsection per root that carries content. Annotated tree: sub-folders complete, ★ on the
|
|
48
|
+
single-copy documents a reader must find first. Per-Product-Component folders are NOT expanded
|
|
49
|
+
here — the table below owns them, and expanding both means maintaining both. -->
|
|
50
|
+
|
|
51
|
+
### {layer}
|
|
52
|
+
|
|
53
|
+
```text
|
|
54
|
+
{layer}/
|
|
55
|
+
├── {folder}/ # what belongs here
|
|
56
|
+
│ └── {file} # ★ why this one is key
|
|
57
|
+
└── {folder}/ # {state}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Product Components
|
|
61
|
+
|
|
62
|
+
<!-- One row per PC that actually exists. Both sides are expected: a PC with an SRS and no SDD, or
|
|
63
|
+
the reverse, is drift and MUST be listed under Findings rather than normalised here. List only
|
|
64
|
+
the slots that have been split out of a kernel; empty slots stay unlisted. -->
|
|
65
|
+
|
|
66
|
+
| Product Component | `.what/<pc>/` | `.how/<pc>/` | Slots split out |
|
|
67
|
+
| --- | --- | --- | --- |
|
|
68
|
+
|
|
69
|
+
## Registries and generated
|
|
70
|
+
|
|
71
|
+
<!-- Which registry files carry entries and which are still empty skeletons, and which generated
|
|
72
|
+
tables have been produced. Generated output is never written by hand; naming it here is what
|
|
73
|
+
makes a hand edit visible. -->
|
|
74
|
+
|
|
75
|
+
| File | State |
|
|
76
|
+
| --- | --- |
|
|
77
|
+
|
|
78
|
+
## Findings
|
|
79
|
+
|
|
80
|
+
<!-- Drift this map surfaced while being derived: a PC on one side only, a supplement with no
|
|
81
|
+
citation, a folder outside the five roots, a document whose home contradicts corpus-guide.md.
|
|
82
|
+
Findings are reported, never fixed here — fixing them is `wdi-reconcile` work, or the owning
|
|
83
|
+
skill's.
|
|
84
|
+
Cut the section only when it is genuinely empty. -->
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
<!-- Keep this legend last, and keep it one line. -->
|
|
89
|
+
|
|
90
|
+
★ = key document: single-copy, referenced from elsewhere, or the first thing a reader must find.
|
|
@@ -6,7 +6,7 @@ status: Accepted
|
|
|
6
6
|
|
|
7
7
|
**Loaded when:** naming anything — a code identifier, a database field, a file, a folder.
|
|
8
8
|
|
|
9
|
-
Which language a name is written in, and nothing else. Case style →
|
|
9
|
+
Which language a name is written in, and nothing else. Case style → `../project/codebase-conventions-guide.md`;
|
|
10
10
|
legal characters → `structure-guide.md`; the right domain word → `.control/product-glossary.md`.
|
|
11
11
|
|
|
12
12
|
## Code MUST be English
|
|
@@ -71,4 +71,4 @@ and they travel to every repo through the `wdi-method` package.
|
|
|
71
71
|
## A wrong name MUST NOT be fixed inside an unrelated change
|
|
72
72
|
|
|
73
73
|
A rename reaches the schema, the API, and every caller. It gets a change of its own, or a ratified
|
|
74
|
-
row in
|
|
74
|
+
row in `../project/codebase-brownfield-guide.md`. A **new** name MUST NOT copy a wrong neighbour.
|
|
@@ -82,9 +82,22 @@ document.
|
|
|
82
82
|
|
|
83
83
|
## How the method arrives
|
|
84
84
|
|
|
85
|
-
Method files in `.constitution
|
|
86
|
-
|
|
87
|
-
|
|
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
|
+
**Three paths inside `.constitution/` are this product's, not the method's.** Each is seeded once
|
|
89
|
+
when absent and then never written again — an update MUST NOT touch one, and `promote` MUST NOT
|
|
90
|
+
carry one back into the package:
|
|
91
|
+
|
|
92
|
+
| Path | Holds |
|
|
93
|
+
|---|---|
|
|
94
|
+
| `constitution.md` | This product's Articles 1, 2, and 5 |
|
|
95
|
+
| `codebase/*-guide.md` | This product's stack, conventions, and brownfield rules — at **any** `status:`, including `Draft`, which is when they are being written |
|
|
96
|
+
| `project/` | Any rule that binds only this product |
|
|
97
|
+
|
|
98
|
+
The seam is the **path**, never a marked region inside a generic file. `AGENTS.md` uses a marked
|
|
99
|
+
block because it is one file with no alternative; `.constitution/` has fifty-odd, and blocks inside
|
|
100
|
+
them would make every update perform surgery in every file.
|
|
88
101
|
|
|
89
102
|
At **read time** this repo is self-contained: every file the rules need is here, readable with the
|
|
90
103
|
repo alone. At **change time** the method has one published writer — the WDI Method package. Two
|