wdi-method 0.4.6 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +271 -252
- package/bin/wdi-method.js +1221 -1030
- package/kit/.constitution/method/README.md +73 -169
- package/kit/.constitution/{constitution.md → method/constitution.md} +10 -56
- package/kit/.constitution/{document → method/document}/architecture-guide.md +209 -209
- package/kit/.constitution/{document → method/document}/corpus-guide.md +4 -4
- package/kit/.constitution/{document → method/document}/delivery-flow-guide.md +338 -338
- package/kit/.constitution/{document → method/document}/sdd-guide.md +1 -1
- package/kit/.constitution/{document → method/document}/templates/cross-cutting.md +2 -2
- package/kit/.constitution/{document → method/document}/templates/design-system.md +67 -67
- package/kit/.constitution/{document → method/document}/templates/inventory.md +69 -69
- package/kit/.constitution/{document → method/document}/templates/sdd.md +1 -1
- package/kit/.constitution/{document → method/document}/templates/structure-codebase.md +129 -129
- package/kit/.constitution/{document → method/document}/templates/structure-document.md +90 -90
- package/kit/.constitution/{language-guide.md → method/language-guide.md} +2 -2
- package/kit/.constitution/{method-glossary.md → method/method-glossary.md} +169 -169
- package/kit/.constitution/{repo-guide.md → method/repo-guide.md} +120 -97
- package/kit/.constitution/method/scripts/__pycache__/validate.cpython-314.pyc +0 -0
- package/kit/.constitution/{scripts → method/scripts}/timeline.py +2 -2
- package/kit/.constitution/{scripts → method/scripts}/validate.py +1648 -1581
- package/kit/.constitution/{structure-guide.md → method/structure-guide.md} +3 -3
- package/kit/.constitution/method/why/README.md +169 -0
- package/kit/.constitution/method/{artifact-map.md → why/artifact-map.md} +5 -5
- package/kit/.constitution/method/{portability.md → why/portability.md} +6 -6
- package/kit/.constitution/method/{rationale.md → why/rationale.md} +5 -5
- package/kit/.constitution/project/README.md +68 -68
- package/kit/.constitution/project/constitution.md +64 -0
- package/kit/assets/bmad-custom/bmad-advanced-elicitation.toml +15 -15
- package/kit/assets/bmad-custom/bmad-architecture.toml +33 -33
- package/kit/assets/bmad-custom/bmad-code-review.toml +13 -13
- package/kit/assets/bmad-custom/bmad-correct-course.toml +28 -28
- package/kit/assets/bmad-custom/bmad-prd.toml +42 -42
- package/kit/assets/bmad-custom/bmad-product-brief.toml +34 -34
- package/kit/assets/bmad-custom/bmad-retrospective.toml +9 -9
- package/kit/assets/bmad-custom/bmad-spec.toml +16 -16
- package/kit/assets/bmad-custom/bmad-ux.toml +19 -19
- package/kit/skills/wdi-blueprint/SKILL.md +203 -203
- package/kit/skills/wdi-build/SKILL.md +244 -244
- package/kit/skills/wdi-component/SKILL.md +1 -1
- package/kit/skills/wdi-help/SKILL.md +98 -98
- package/kit/skills/wdi-init/SKILL.md +1 -1
- package/kit/skills/wdi-problem/SKILL.md +90 -90
- package/kit/skills/wdi-product/SKILL.md +127 -127
- package/kit/skills/wdi-reconcile/SKILL.md +2 -2
- package/kit/skills/wdi-report/SKILL.md +205 -205
- package/kit/skills/wdi-systematic-debugging/SKILL.md +193 -193
- package/kit/skills/wdi-ux/SKILL.md +145 -145
- package/kit-overlay/AGENTS.md +215 -212
- package/kit-overlay/README.md +24 -17
- package/kit-overlay/constitution.md +10 -56
- package/kit-overlay/portability.md +6 -6
- package/kit-overlay/repo-guide.md +120 -97
- package/package.json +4 -2
- package/scaffold/.control/questions/blocking.md +1 -1
- package/kit/.constitution/README.md +0 -66
- /package/kit/.constitution/{document → method/document}/bmad-guide.md +0 -0
- /package/kit/.constitution/{document → method/document}/bmad-skill-register.md +0 -0
- /package/kit/.constitution/{document → method/document}/brief-guide.md +0 -0
- /package/kit/.constitution/{document → method/document}/decision-guide.md +0 -0
- /package/kit/.constitution/{document → method/document}/prd-guide.md +0 -0
- /package/kit/.constitution/{document → method/document}/srs-guide.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/addendum.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/architecture-spine.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/brief.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/c4.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/contract.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/decision.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/flow.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/integration.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/lc.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/lifecycle.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/meeting.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/model.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/oq.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/prd.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/questions.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/rtr.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/rules.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/scn.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/srs.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/uc.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/ux.md +0 -0
- /package/kit/.constitution/{document → method/document}/ux-guide.md +0 -0
- /package/kit/.constitution/{scripts → method/scripts}/inventory.py +0 -0
- /package/kit/.constitution/{codebase/brownfield-guide.md → project/codebase-brownfield-guide.md} +0 -0
- /package/kit/.constitution/{codebase/conventions-guide.md → project/codebase-conventions-guide.md} +0 -0
- /package/kit/.constitution/{codebase/stack-guide.md → project/codebase-stack-guide.md} +0 -0
|
@@ -88,7 +88,7 @@ Flows **into and out of** each boundary MUST be stated, not just the boundary. A
|
|
|
88
88
|
direction of call is a name, not a design.
|
|
89
89
|
|
|
90
90
|
Flow diagrams in `06-flows/` are written only for a flow touching money, irreversible state, or a third
|
|
91
|
-
party. The lane order is the project's to fix, once, in
|
|
91
|
+
party. The lane order is the project's to fix, once, in `../../project/codebase-conventions-guide.md`. **The `No-op` lane
|
|
92
92
|
rule is repealed** — it was a heavy convention for a folder that had never carried a file, and it belongs to
|
|
93
93
|
how a diagram is drawn rather than to what binds.
|
|
94
94
|
|
|
@@ -44,7 +44,7 @@ updated: '{YYYY-MM-DD}'
|
|
|
44
44
|
| Code | HTTP | Means | Caller should |
|
|
45
45
|
| --- | --- | --- | --- |
|
|
46
46
|
|
|
47
|
-
##
|
|
47
|
+
## Platform-owned
|
|
48
48
|
|
|
49
49
|
<!-- REQUIRED as soon as anything is owned by `_platform` — a `platform_owns` entity, an inventory row,
|
|
50
50
|
an LC. V21 checks it.
|
|
@@ -72,7 +72,7 @@ updated: '{YYYY-MM-DD}'
|
|
|
72
72
|
idempotency key convention · logging fields · rate-limit response shape.
|
|
73
73
|
|
|
74
74
|
Each MUST state where it is enforced. An agreement nothing enforces is a preference, and
|
|
75
|
-
preferences belong in codebase
|
|
75
|
+
preferences belong in ../../../project/codebase-conventions-guide.md where nothing has to justify itself. -->
|
|
76
76
|
|
|
77
77
|
### {agreement}
|
|
78
78
|
|
|
@@ -1,67 +1,67 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: design-system
|
|
3
|
-
scope: _platform
|
|
4
|
-
status: draft # draft · reviewed · locked · superseded
|
|
5
|
-
created: '{YYYY-MM-DD}'
|
|
6
|
-
updated: '{YYYY-MM-DD}'
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Design System — {product}
|
|
10
|
-
|
|
11
|
-
<!-- TEMPLATE GUIDE — act on these comments, then delete them.
|
|
12
|
-
|
|
13
|
-
Home: .how/_platform/design-system.md. Written by wdi-ux, and it is the ONE file in _platform/
|
|
14
|
-
that wdi-blueprint does not own. Optional, like the rest of UX: it exists when the interface is
|
|
15
|
-
a substantial part of what the PRD promises.
|
|
16
|
-
|
|
17
|
-
WHY IT IS NOT IN A COMPONENT: tokens and base elements cross Product Components by definition. A
|
|
18
|
-
colour scale living in one component's 01-ux/ is a colour scale the other six will each redefine.
|
|
19
|
-
|
|
20
|
-
WHY ux.md DOES NOT SERVE IT: ux.md is the shape of DESIGN.md and EXPERIENCE.md, which are per
|
|
21
|
-
component. This is the third file, at product level, and it had no template at all.
|
|
22
|
-
|
|
23
|
-
THE CODE IS THE SSOT FOR VALUES. Where this repo's web side states a token in tokens.css, this
|
|
24
|
-
file MUST reference it rather than repeat the value. Two homes for one hex code is two hex codes
|
|
25
|
-
within a month. Read web/README.md before writing anything here — it is the authority for the
|
|
26
|
-
web side, and it MUST NOT be contradicted from this file.
|
|
27
|
-
|
|
28
|
-
Token and element NAMES are English: they are machine-facing keys, per language-guide.md. -->
|
|
29
|
-
|
|
30
|
-
## Where the values actually live
|
|
31
|
-
|
|
32
|
-
<!-- One line per source of truth — the stylesheet, the config, the generated file — with its path.
|
|
33
|
-
This section is what stops the rest of the document becoming a stale copy. -->
|
|
34
|
-
|
|
35
|
-
## Tokens
|
|
36
|
-
|
|
37
|
-
<!-- One table per scale. Name, what it is for, and where it resolves. NOT the raw value, unless this
|
|
38
|
-
file is genuinely the only place it exists. -->
|
|
39
|
-
|
|
40
|
-
| Token | For | Resolves in |
|
|
41
|
-
| --- | --- | --- |
|
|
42
|
-
|
|
43
|
-
## Base elements
|
|
44
|
-
|
|
45
|
-
<!-- The LC type `ui-element`, registered in components.yaml. One row each: what it is, its states,
|
|
46
|
-
and where its implementation lives. A composite reused across screens is `ui-composite` and
|
|
47
|
-
belongs in .how/<pc>/01-ux/, not here. -->
|
|
48
|
-
|
|
49
|
-
| Element | States it MUST support | Implementation |
|
|
50
|
-
| --- | --- | --- |
|
|
51
|
-
|
|
52
|
-
<!-- Every element MUST state its empty, loading, error, and disabled states where they apply. The
|
|
53
|
-
populated state is the one that always gets designed; the others are the ones that ship broken. -->
|
|
54
|
-
|
|
55
|
-
## Rules that bind every screen
|
|
56
|
-
|
|
57
|
-
<!-- Only what a screen cannot legitimately override. Each MUST state what it prevents — a rule with
|
|
58
|
-
no failure behind it is a preference, and preferences go to codebase
|
|
59
|
-
|
|
60
|
-
A rule here that also holds for non-UI code is an AD-N and belongs in the spine instead. -->
|
|
61
|
-
|
|
62
|
-
| Rule | Prevents |
|
|
63
|
-
| --- | --- |
|
|
64
|
-
|
|
65
|
-
## What this system deliberately does not cover
|
|
66
|
-
|
|
67
|
-
<!-- Where a component is free to choose for itself. Absent, every local choice reads as a violation. -->
|
|
1
|
+
---
|
|
2
|
+
type: design-system
|
|
3
|
+
scope: _platform
|
|
4
|
+
status: draft # draft · reviewed · locked · superseded
|
|
5
|
+
created: '{YYYY-MM-DD}'
|
|
6
|
+
updated: '{YYYY-MM-DD}'
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Design System — {product}
|
|
10
|
+
|
|
11
|
+
<!-- TEMPLATE GUIDE — act on these comments, then delete them.
|
|
12
|
+
|
|
13
|
+
Home: .how/_platform/design-system.md. Written by wdi-ux, and it is the ONE file in _platform/
|
|
14
|
+
that wdi-blueprint does not own. Optional, like the rest of UX: it exists when the interface is
|
|
15
|
+
a substantial part of what the PRD promises.
|
|
16
|
+
|
|
17
|
+
WHY IT IS NOT IN A COMPONENT: tokens and base elements cross Product Components by definition. A
|
|
18
|
+
colour scale living in one component's 01-ux/ is a colour scale the other six will each redefine.
|
|
19
|
+
|
|
20
|
+
WHY ux.md DOES NOT SERVE IT: ux.md is the shape of DESIGN.md and EXPERIENCE.md, which are per
|
|
21
|
+
component. This is the third file, at product level, and it had no template at all.
|
|
22
|
+
|
|
23
|
+
THE CODE IS THE SSOT FOR VALUES. Where this repo's web side states a token in tokens.css, this
|
|
24
|
+
file MUST reference it rather than repeat the value. Two homes for one hex code is two hex codes
|
|
25
|
+
within a month. Read web/README.md before writing anything here — it is the authority for the
|
|
26
|
+
web side, and it MUST NOT be contradicted from this file.
|
|
27
|
+
|
|
28
|
+
Token and element NAMES are English: they are machine-facing keys, per language-guide.md. -->
|
|
29
|
+
|
|
30
|
+
## Where the values actually live
|
|
31
|
+
|
|
32
|
+
<!-- One line per source of truth — the stylesheet, the config, the generated file — with its path.
|
|
33
|
+
This section is what stops the rest of the document becoming a stale copy. -->
|
|
34
|
+
|
|
35
|
+
## Tokens
|
|
36
|
+
|
|
37
|
+
<!-- One table per scale. Name, what it is for, and where it resolves. NOT the raw value, unless this
|
|
38
|
+
file is genuinely the only place it exists. -->
|
|
39
|
+
|
|
40
|
+
| Token | For | Resolves in |
|
|
41
|
+
| --- | --- | --- |
|
|
42
|
+
|
|
43
|
+
## Base elements
|
|
44
|
+
|
|
45
|
+
<!-- The LC type `ui-element`, registered in components.yaml. One row each: what it is, its states,
|
|
46
|
+
and where its implementation lives. A composite reused across screens is `ui-composite` and
|
|
47
|
+
belongs in .how/<pc>/01-ux/, not here. -->
|
|
48
|
+
|
|
49
|
+
| Element | States it MUST support | Implementation |
|
|
50
|
+
| --- | --- | --- |
|
|
51
|
+
|
|
52
|
+
<!-- Every element MUST state its empty, loading, error, and disabled states where they apply. The
|
|
53
|
+
populated state is the one that always gets designed; the others are the ones that ship broken. -->
|
|
54
|
+
|
|
55
|
+
## Rules that bind every screen
|
|
56
|
+
|
|
57
|
+
<!-- Only what a screen cannot legitimately override. Each MUST state what it prevents — a rule with
|
|
58
|
+
no failure behind it is a preference, and preferences go to ../../../project/codebase-conventions-guide.md.
|
|
59
|
+
|
|
60
|
+
A rule here that also holds for non-UI code is an AD-N and belongs in the spine instead. -->
|
|
61
|
+
|
|
62
|
+
| Rule | Prevents |
|
|
63
|
+
| --- | --- |
|
|
64
|
+
|
|
65
|
+
## What this system deliberately does not cover
|
|
66
|
+
|
|
67
|
+
<!-- Where a component is free to choose for itself. Absent, every local choice reads as a violation. -->
|
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: inventory
|
|
3
|
-
kind: db # db · api · screen · endpoint — decides the row shape below
|
|
4
|
-
scope: _platform # `_platform` for the three product-level inventories; `{pc}` for kind: endpoint
|
|
5
|
-
status: draft # draft · reviewed · locked · superseded
|
|
6
|
-
created: '{YYYY-MM-DD}'
|
|
7
|
-
updated: '{YYYY-MM-DD}'
|
|
8
|
-
derived_from: plan # plan · code — see the TEMPLATE GUIDE
|
|
9
|
-
verified: '' # commit SHA the derivation was read at; required when derived_from: code
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# Inventory — {tables | endpoints | screens | endpoints of {pc}}
|
|
13
|
-
|
|
14
|
-
<!-- TEMPLATE GUIDE — act on these comments, then delete them.
|
|
15
|
-
|
|
16
|
-
ONE template, four kinds. Only the row shape differs; the rules are the same for all four.
|
|
17
|
-
|
|
18
|
-
kind: db -> .how/_platform/inventory-db.md
|
|
19
|
-
kind: api -> .how/_platform/inventory-api.md
|
|
20
|
-
kind: screen -> .how/_platform/inventory-screen.md
|
|
21
|
-
kind: endpoint-> .how/<pc>/02-contracts/00-inventory.md, at mode: deep only
|
|
22
|
-
|
|
23
|
-
The first three are BLUEPRINT output, born at G3 by wdi-blueprint intent `platform`. They exist
|
|
24
|
-
at every `mode`, including catalog, and they are what makes catalog usable at all: the use case
|
|
25
|
-
list plus these three plus C4 is the whole record a builder gets there.
|
|
26
|
-
|
|
27
|
-
THE NUMBER IS STABLE. A new row takes the next `No`, never a renumber. Renumbering renames every
|
|
28
|
-
file after it and breaks every link pointing at them. A removed row keeps its number and its
|
|
29
|
-
status becomes `removed`; the number MUST NOT be reused.
|
|
30
|
-
|
|
31
|
-
TWO WAYS THIS FILE COMES TO EXIST, and derived_from says which:
|
|
32
|
-
plan no code yet. Written as intent — the tables, endpoints, or screens planned. Nothing can
|
|
33
|
-
be derived, because there is no source.
|
|
34
|
-
code code exists. Derived by .constitution/scripts/inventory.py — migrations for tables,
|
|
35
|
-
route registration for endpoints, pages for screens — and THEN compared with the plan.
|
|
36
|
-
The difference is a FINDING, reported. It MUST NOT be patched into agreement by hand.
|
|
37
|
-
|
|
38
|
-
MUST NOT be assembled from a README, from a route name that looks plausible, or from memory. -->
|
|
39
|
-
|
|
40
|
-
## Rows
|
|
41
|
-
|
|
42
|
-
<!-- kind: db -->
|
|
43
|
-
|
|
44
|
-
| No | Table | Owning component | What it holds | Key columns | Status |
|
|
45
|
-
| --- | --- | --- | --- | --- | --- |
|
|
46
|
-
|
|
47
|
-
<!-- kind: api — keep this block and delete the others
|
|
48
|
-
| No | Method | Path | Owning component | Description | Status |
|
|
49
|
-
| --- | --- | --- | --- | --- | --- |
|
|
50
|
-
-->
|
|
51
|
-
|
|
52
|
-
<!-- kind: screen
|
|
53
|
-
| No | Screen | Route | Owning component | Actor | UC served |
|
|
54
|
-
| --- | --- | --- | --- | --- | --- |
|
|
55
|
-
-->
|
|
56
|
-
|
|
57
|
-
<!-- kind: endpoint
|
|
58
|
-
| No | Method | Path | Spec file | Status |
|
|
59
|
-
| --- | --- | --- | --- | --- |
|
|
60
|
-
-->
|
|
61
|
-
|
|
62
|
-
<!-- Status values: draft · published · deprecated · removed. A row with no status reads as
|
|
63
|
-
published, which is the one reading that is never safe. -->
|
|
64
|
-
|
|
65
|
-
## Findings
|
|
66
|
-
|
|
67
|
-
<!-- Only when derived_from: code. Each difference between the plan and what the code actually does,
|
|
68
|
-
one line each, with which side is being reported — not which side was changed. Nothing here is
|
|
69
|
-
resolved by editing the other side; a finding routes to the skill that owns it. -->
|
|
1
|
+
---
|
|
2
|
+
type: inventory
|
|
3
|
+
kind: db # db · api · screen · endpoint — decides the row shape below
|
|
4
|
+
scope: _platform # `_platform` for the three product-level inventories; `{pc}` for kind: endpoint
|
|
5
|
+
status: draft # draft · reviewed · locked · superseded
|
|
6
|
+
created: '{YYYY-MM-DD}'
|
|
7
|
+
updated: '{YYYY-MM-DD}'
|
|
8
|
+
derived_from: plan # plan · code — see the TEMPLATE GUIDE
|
|
9
|
+
verified: '' # commit SHA the derivation was read at; required when derived_from: code
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Inventory — {tables | endpoints | screens | endpoints of {pc}}
|
|
13
|
+
|
|
14
|
+
<!-- TEMPLATE GUIDE — act on these comments, then delete them.
|
|
15
|
+
|
|
16
|
+
ONE template, four kinds. Only the row shape differs; the rules are the same for all four.
|
|
17
|
+
|
|
18
|
+
kind: db -> .how/_platform/inventory-db.md
|
|
19
|
+
kind: api -> .how/_platform/inventory-api.md
|
|
20
|
+
kind: screen -> .how/_platform/inventory-screen.md
|
|
21
|
+
kind: endpoint-> .how/<pc>/02-contracts/00-inventory.md, at mode: deep only
|
|
22
|
+
|
|
23
|
+
The first three are BLUEPRINT output, born at G3 by wdi-blueprint intent `platform`. They exist
|
|
24
|
+
at every `mode`, including catalog, and they are what makes catalog usable at all: the use case
|
|
25
|
+
list plus these three plus C4 is the whole record a builder gets there.
|
|
26
|
+
|
|
27
|
+
THE NUMBER IS STABLE. A new row takes the next `No`, never a renumber. Renumbering renames every
|
|
28
|
+
file after it and breaks every link pointing at them. A removed row keeps its number and its
|
|
29
|
+
status becomes `removed`; the number MUST NOT be reused.
|
|
30
|
+
|
|
31
|
+
TWO WAYS THIS FILE COMES TO EXIST, and derived_from says which:
|
|
32
|
+
plan no code yet. Written as intent — the tables, endpoints, or screens planned. Nothing can
|
|
33
|
+
be derived, because there is no source.
|
|
34
|
+
code code exists. Derived by .constitution/method/scripts/inventory.py — migrations for tables,
|
|
35
|
+
route registration for endpoints, pages for screens — and THEN compared with the plan.
|
|
36
|
+
The difference is a FINDING, reported. It MUST NOT be patched into agreement by hand.
|
|
37
|
+
|
|
38
|
+
MUST NOT be assembled from a README, from a route name that looks plausible, or from memory. -->
|
|
39
|
+
|
|
40
|
+
## Rows
|
|
41
|
+
|
|
42
|
+
<!-- kind: db -->
|
|
43
|
+
|
|
44
|
+
| No | Table | Owning component | What it holds | Key columns | Status |
|
|
45
|
+
| --- | --- | --- | --- | --- | --- |
|
|
46
|
+
|
|
47
|
+
<!-- kind: api — keep this block and delete the others
|
|
48
|
+
| No | Method | Path | Owning component | Description | Status |
|
|
49
|
+
| --- | --- | --- | --- | --- | --- |
|
|
50
|
+
-->
|
|
51
|
+
|
|
52
|
+
<!-- kind: screen
|
|
53
|
+
| No | Screen | Route | Owning component | Actor | UC served |
|
|
54
|
+
| --- | --- | --- | --- | --- | --- |
|
|
55
|
+
-->
|
|
56
|
+
|
|
57
|
+
<!-- kind: endpoint
|
|
58
|
+
| No | Method | Path | Spec file | Status |
|
|
59
|
+
| --- | --- | --- | --- | --- |
|
|
60
|
+
-->
|
|
61
|
+
|
|
62
|
+
<!-- Status values: draft · published · deprecated · removed. A row with no status reads as
|
|
63
|
+
published, which is the one reading that is never safe. -->
|
|
64
|
+
|
|
65
|
+
## Findings
|
|
66
|
+
|
|
67
|
+
<!-- Only when derived_from: code. Each difference between the plan and what the code actually does,
|
|
68
|
+
one line each, with which side is being reported — not which side was changed. Nothing here is
|
|
69
|
+
resolved by editing the other side; a finding routes to the skill that owns it. -->
|
|
@@ -137,7 +137,7 @@ reviewed: # V13. Diisi hanya setelah bmad-review benar-benar dija
|
|
|
137
137
|
alone does not say what a column means. LC type store
|
|
138
138
|
06-flows/ [deep]. Sequence diagrams ONLY for flows involving money, irreversible state, or
|
|
139
139
|
a third party. Lane order is fixed once for the project in
|
|
140
|
-
codebase
|
|
140
|
+
../../../project/codebase-conventions-guide.md; the No-op lane rule is REPEALED
|
|
141
141
|
|
|
142
142
|
supplements/ is REPEALED along with the ANX- concept it existed for. -->
|
|
143
143
|
|
|
@@ -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.
|