wdi-method 0.6.30 → 0.6.31

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 (30) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/README.md +3 -0
  3. package/bin/wdi-method.js +121 -14
  4. package/kit/.constitution/method/document/architecture-guide.md +217 -209
  5. package/kit/.constitution/method/document/corpus-guide.md +522 -517
  6. package/kit/.constitution/method/document/decision-guide.md +236 -216
  7. package/kit/.constitution/method/document/delivery-flow-guide.md +20 -0
  8. package/kit/.constitution/method/document/prd-guide.md +245 -245
  9. package/kit/.constitution/method/document/templates/design-system.md +96 -66
  10. package/kit/.constitution/method/document/templates/experience.md +62 -0
  11. package/kit/.constitution/method/document/templates/structure-codebase.md +131 -129
  12. package/kit/.constitution/method/document/templates/ux.md +78 -76
  13. package/kit/.constitution/method/document/ux-guide.md +161 -115
  14. package/kit/.constitution/method/method-glossary.md +3 -0
  15. package/kit/.constitution/method/scripts/validate.py +3310 -3200
  16. package/kit/.constitution/method/structure-guide.md +204 -202
  17. package/kit/.constitution/method/why/artifact-map.md +158 -157
  18. package/kit/skills/wdi-blueprint/SKILL.md +271 -264
  19. package/kit/skills/wdi-component/SKILL.md +179 -174
  20. package/kit/skills/wdi-decision/SKILL.md +206 -203
  21. package/kit/skills/wdi-help/SKILL.md +127 -125
  22. package/kit/skills/wdi-init/SKILL.md +9 -4
  23. package/kit/skills/wdi-problem/SKILL.md +114 -108
  24. package/kit/skills/wdi-product/SKILL.md +167 -162
  25. package/kit/skills/wdi-reconcile/SKILL.md +170 -169
  26. package/kit/skills/wdi-upgrade/SKILL.md +234 -215
  27. package/kit/skills/wdi-ux/SKILL.md +187 -169
  28. package/kit-overlay/AGENTS.md +3 -1
  29. package/package.json +1 -1
  30. package/scaffold/.control/registry/index.yaml +2 -1
@@ -1,157 +1,158 @@
1
- ---
2
- status: Reference
3
- ---
4
-
5
- # Artifact Map — what exists, where, and who owns it
6
-
7
- **Opened when:** someone asks *"where does this file go"*, or *"does this document exist at my `mode`"*.
8
-
9
- This file **explains**. It does not bind — `../document/*-guide.md` does, and where the two disagree the guide
10
- wins and the disagreement is a defect to report.
11
-
12
- It answers three questions and nothing else: which files exist at each `mode`, who owns each one, and how
13
- the units of work line up. The **rules** about depth live in `../document/delivery-flow-guide.md`; what is
14
- here is the map. What `mode` and `risk_accepted` do **together**, cell by cell, is in `mode-risk-map.md`.
15
-
16
- ## The one thing to read first
17
-
18
- Nine things exist at **every** `mode`, including `catalog`, because they belong to the blueprint at G3 and
19
- the depth knob does not reach the blueprint:
20
-
21
- > the use case list · the API list · the table list with its key columns · the screen list · the domain
22
- > model · the actor list · the spine `AD-N` · C4 L1 + L2 + L3 · cross-component business rules
23
-
24
- That is why nobody needs a fifth mode. The request behind wanting one is almost always *"I need at minimum
25
- the use cases, the API, and the database"* — and all three are already in `catalog`.
26
-
27
- ## What each mode gives you, cumulatively
28
-
29
- | `mode` | What you hold |
30
- |---|---|
31
- | `catalog` | The nine above. **Zero extra files per component** |
32
- | `outline` | + `Decision Summary` · the `LC` list per component · full flows for at most 3 use cases · local business rules |
33
- | `guarded` | + `Failure Behaviour` for every boundary · `Inherited Constraints` · third-party integration documents · boundary `LC` registered |
34
- | `deep` | + ABCE robustness analysis · five-lane contract spec per endpoint · data dictionary per column · flow diagrams · state machines · branch scenarios · every `critical` use case gets a full flow |
35
-
36
- Marks used below: **always** = present at all four modes, born at G1, G2, or G3 · ✓ = written at that mode
37
- · skeleton = the file exists carrying headings and frontmatter · — = not written at all.
38
-
39
- ## `.what/`
40
-
41
- | File | Holds | Born | `catalog` | `outline` | `guarded` | `deep` |
42
- |---|---|---|---|---|---|---|
43
- | `_product-brief/brief.md` | Problem, users, measure of success, non-goals | G1 | always | always | always | always |
44
- | `_product-brief/addendum.md` | Depth that does not fit the brief's narrative | G1 | always | always | always | always |
45
- | `_prd/<initiative>/prd.md` | `CAP` · `FR` · `NFR` · `UJ` · one proof of done per `FR` | G2 | always | always | always | always |
46
- | `_prd/<initiative>/addendum.md` | Rejected alternatives, option matrices, sizing | G2 | always | always | always | always |
47
- | `<pc>/04-usecases/EXPERIENCE.md` | The user-facing journey | G2, optional | optional | optional | optional | optional |
48
- | `business-rules.md` | `BR-N` binding more than one component | G3 | always | always | always | always |
49
- | **`<pc>/SRS-<pc>.md`** | § Actor Register · **§ UC Catalogue — this is the use case list** · Constraints · Non-Goals · Prerequisite · Assumptions/Risks/TBC | G3 | **always** | always | always | always |
50
- | `<pc>/03-domain/domain-model.md` | Entities · relations · columns | G3 | always | always | always | always |
51
- | `<pc>/02-rules/rules-<pc>.md` | Rules binding only this component | G4 | — | ✓ | ✓ | ✓ |
52
- | `<pc>/04-usecases/UC-<n>-<slug>.md` | One full flow, at most eight steps | G4 | — | max **3** | max **3** | every `critical` UC |
53
- | `<pc>/03-domain/state-machines.md` | The lifecycle of each multi-state entity | G4 | — | — | — | ✓ |
54
- | `<pc>/05-scenarios/SCN-<nn>-<slug>.md` | A branch that does not fit its use case file | G4 | — | — | — | ✓ |
55
-
56
- **So `SRS-<pc>.md` exists at `mode: catalog`.** It carries the actor list and the use case catalogue. What
57
- is absent there is the `UC-<n>-<slug>.md` files — the step-by-step flows.
58
-
59
- Repealed: `<pc>/01-requirements/` (permanently empty; `FR` live in the PRD and the SRS cites them) and
60
- `<pc>/supplements/` (existed for `ANX-`).
61
-
62
- ## `.how/`
63
-
64
- | File | Holds | Born | `catalog` | `outline` | `guarded` | `deep` |
65
- |---|---|---|---|---|---|---|
66
- | `_platform/ARCHITECTURE-SPINE.md` | `AD-N` — Binds · Prevents · Rule. Invariants only | G3 | always | always | always | always |
67
- | `_platform/c4-l1-system-context.md` | System, outside actors, outside systems | G3 | always | always | always | always |
68
- | `_platform/c4-l2-containers.md` | Containers, their technology, their relations, and the PC × container matrix. **Owns the container list** | G3 | always | always | always | always |
69
- | `_platform/c4-l3-<container>.md` | One file per `built: true` container holding more than one Product Component | G3 | always | always | always | always |
70
- | **`_platform/inventory-db.md`** | **Table list**: `No` · table · owning component · what it holds · **key columns** | G3 | **always** | always | always | always |
71
- | **`_platform/inventory-api.md`** | **Endpoint list**: `No` · method · path · owning component · description · status | G3 | **always** | always | always | always |
72
- | **`_platform/inventory-screen.md`** | **Screen list**: `No` · screen · route · owning component · actor · `UC` served | G3 | **always** | always | always | always |
73
- | `_platform/cross-cutting.md` | One error envelope for the whole product, and the rest of what is shared | G3 | always | always | always | always |
74
- | `_platform/design-system.md` | Tokens and base elements | G2, optional | optional | optional | optional | optional |
75
- | `<pc>/SDD-<pc>.md` § Decision Summary | What this component is built as, and the costliest choices reversed | G4 | skeleton | ✓ | ✓ | ✓ |
76
- | `<pc>/SDD-<pc>.md` § Structure | The `LC` list and their dependency direction | G4 | skeleton | ✓ | ✓ | ✓ |
77
- | `<pc>/SDD-<pc>.md` § Inherited Constraints | The `AD-N` binding this component, quoted not paraphrased | G4 | — | — | ✓ | ✓ |
78
- | **`<pc>/SDD-<pc>.md` § Failure Behaviour** | Per boundary: the other side slow, absent, or lying | G4 | — | — | **✓ every boundary** | ✓ |
79
- | `<pc>/SDD-<pc>.md` § Robustness Analysis | ABCE per `critical` use case | G4 | — | — | — | ✓ |
80
- | `<pc>/03-integrations/<name>.md` | A third party: who owns it, and what happens when they change it | G4 | — | — | ✓ if any | ✓ |
81
- | `<pc>/02-contracts/00-inventory.md` | This component's endpoints, stably numbered | G4 | — | — | — | ✓ |
82
- | `<pc>/02-contracts/<nn>-<resource>.md` | One endpoint, five lanes: auth · validation · error · rate limit · idempotency | G4 | — | — | — | ✓ |
83
- | `<pc>/04-components/<name>.md` | Services and jobs | G4 | — | — | — | ✓ |
84
- | `<pc>/05-model/data-model.md` | Component ERD + **data dictionary per column** | G4 | — | — | — | ✓ |
85
- | `<pc>/06-flows/<nn>-<flow>.md` | Sequence diagram, only for money, irreversible state, or a third party | G4 | — | — | — | ✓ |
86
- | `<pc>/01-ux/<screen>.md` | Screens and composites, **field detail per form** | G4 | — | — | — | ✓, or earlier via `wdi-ux` |
87
-
88
- Repealed: `_platform/architecture/` (one file does not earn a folder) and `<pc>/supplements/`.
89
-
90
- ## Registry and derived files
91
-
92
- | File | Holds | Present at |
93
- |---|---|---|
94
- | `.control/registry/goals.yaml` | `BG` | every mode |
95
- | `.control/registry/requirements-<slug>.yaml` | `CAP` · `FR` · `NFR` · `UJ`, one file per PRD initiative | every mode |
96
- | `.control/registry/usecases.yaml` | `UC-N` with `critical` and the `FR` it satisfies | every mode |
97
- | `.control/registry/components.yaml` → `product_components` | Component · `mode` · `risk_accepted` · `risk_note` · `owns` · `g4_passed` | every mode |
98
- | `.control/registry/components.yaml` → `containers` | The containers from C4 L2 | every mode |
99
- | `.control/registry/components.yaml` → `platform_owns` | Entities no Product Component's promise explains. `_platform` is not a component and has no `mode` | every mode |
100
- | `.control/registry/components.yaml` → `logical_components` | `LC` | boundary from `guarded`; boundary + control at `deep` |
101
- | `.control/registry/decisions.yaml` · `specs.yaml` · `defects.yaml` · `risks.yaml` · `index.yaml` | Decisions · work · defects · risks · the global `mode` and gate map | every mode |
102
- | `.how-rendered/blueprint.md` | **The one-page roll-up reviewed at G3** | every mode |
103
- | `.control/generated/decisions.md` | The flat index of every `DEC-` | every mode |
104
- | `.control/generated/estimate.md` | The candidate task table | every mode |
105
- | `.control/generated/rtm` · `status` · `dag` · `components` · `risks` | Traceability and progress | every mode |
106
-
107
- ## Who owns each file
108
-
109
- A skill lands the output of the layer it owns, and landing is part of producing it — never a follow-up
110
- someone else performs. `../document/corpus-guide.md` holds the binding version of this table.
111
-
112
- | Owner | Writes |
113
- |---|---|
114
- | `wdi-init` | The registry scaffold, `mode`, `risk_accepted`, component birth, the `SRS`/`SDD` skeletons, the two structure maps |
115
- | `wdi-problem` | `.what/_product-brief/` |
116
- | `wdi-product` | `.what/_prd/<initiative>/` |
117
- | `wdi-blueprint` | `.what/<pc>/` § Actor Register + § UC Catalogue + `03-domain/domain-model.md` · `.what/business-rules.md` · `.control/product-glossary.md` · all of `.how/_platform/` except `design-system.md` |
118
- | `wdi-component` | `.what/<pc>/` slots `02`–`05` · `.how/<pc>/` except `01-ux/` |
119
- | `wdi-ux` | `EXPERIENCE.md` · `.how/<pc>/01-ux/` · `.how/_platform/design-system.md` |
120
- | `wdi-build` | `specs.yaml` · `.scratch/<spec-id>-<slug>/` · `src/` · `web/` |
121
- | `wdi-decision` | `.control/decisions/` · `decisions.yaml`, and at apply time whatever `touches` names — through each file's owner |
122
- | `wdi-question` | `.control/questions/` |
123
- | `wdi-log` | `.control/meetings/` · `.control/project-non-technical-log.md` |
124
- | `wdi-report` | `.control/reports/<period>.md` |
125
- | a script | everything in `.control/generated/`, and the three inventories once code exists |
126
-
127
- Five skills write **no file at all**, and that is deliberate: `wdi-reconcile`, `wdi-help`, `wdi-explain-to-me`,
128
- `wdi-report` intent `dispatch`, and `wdi-review` apart from one frontmatter block. What reports MUST NOT
129
- also change things — otherwise there is nothing left to check with.
130
-
131
- ## How the units of work line up
132
-
133
- `FR` is a **promise** and permanent; a spec is a **unit of work** and temporary; `SPEC.md` is the machine
134
- contract for one spec — written from size `M` up, and at `S` the tickets are the contract; a ticket is one
135
- vertical slice one builder takes to a green PR.
136
-
137
- One spec = one parent issue, and a ticket is an **issue**, not a sub-task, because its blocking edges are
138
- what make the frontier visible in the tracker's own UI. **`FR` is not an issue** — it travels as a label,
139
- because one `FR` can be delivered by tickets in two specs and one ticket can satisfy part of two `FR`.
140
-
141
- The binding version of all of this, including why a spec MAY cross components and what has to be true
142
- first, is in `../document/delivery-flow-guide.md`. It is not restated here.
143
-
144
- ## What needs no template, and why
145
-
146
- Stated so the next completeness audit does not report it again:
147
-
148
- | File | Why it has no template |
149
- |---|---|
150
- | `.control/generated/*` | Script output. Its shape is code, not a template |
151
- | `.control/reports/<period>.md` | Rendered by `timeline.py` |
152
- | `.control/project-non-technical-log.md` | States its own entry shape in its own header, and there is exactly one such file |
153
- | `SPEC.md` · ticket files | Their shape belongs to `to-spec` and `to-tickets`. WDI owns where they land, not how they read |
154
- | Registry `*.yaml` | Their shape is the comment block at the head of each file, plus the validator |
155
-
156
- Everything else in this map has a template in `../document/templates/` — 26 of them, and every row above is
157
- covered by one.
1
+ ---
2
+ status: Reference
3
+ ---
4
+
5
+ # Artifact Map — what exists, where, and who owns it
6
+
7
+ **Opened when:** someone asks *"where does this file go"*, or *"does this document exist at my `mode`"*.
8
+
9
+ This file **explains**. It does not bind — `../document/*-guide.md` does, and where the two disagree the guide
10
+ wins and the disagreement is a defect to report.
11
+
12
+ It answers three questions and nothing else: which files exist at each `mode`, who owns each one, and how
13
+ the units of work line up. The **rules** about depth live in `../document/delivery-flow-guide.md`; what is
14
+ here is the map. What `mode` and `risk_accepted` do **together**, cell by cell, is in `mode-risk-map.md`.
15
+
16
+ ## The one thing to read first
17
+
18
+ Nine things exist at **every** `mode`, including `catalog`, because they belong to the blueprint at G3 and
19
+ the depth knob does not reach the blueprint:
20
+
21
+ > the use case list · the API list · the table list with its key columns · the screen list · the domain
22
+ > model · the actor list · the spine `AD-N` · C4 L1 + L2 + L3 · cross-component business rules
23
+
24
+ That is why nobody needs a fifth mode. The request behind wanting one is almost always *"I need at minimum
25
+ the use cases, the API, and the database"* — and all three are already in `catalog`.
26
+
27
+ ## What each mode gives you, cumulatively
28
+
29
+ | `mode` | What you hold |
30
+ |---|---|
31
+ | `catalog` | The nine above. **Zero extra files per component** |
32
+ | `outline` | + `Decision Summary` · the `LC` list per component · full flows for at most 3 use cases · local business rules |
33
+ | `guarded` | + `Failure Behaviour` for every boundary · `Inherited Constraints` · third-party integration documents · boundary `LC` registered |
34
+ | `deep` | + ABCE robustness analysis · five-lane contract spec per endpoint · data dictionary per column · flow diagrams · state machines · branch scenarios · every `critical` use case gets a full flow |
35
+
36
+ Marks used below: **always** = present at all four modes, born at G1, G2, or G3 · ✓ = written at that mode
37
+ · skeleton = the file exists carrying headings and frontmatter · — = not written at all.
38
+
39
+ ## `.what/`
40
+
41
+ | File | Holds | Born | `catalog` | `outline` | `guarded` | `deep` |
42
+ |---|---|---|---|---|---|---|
43
+ | `_product-brief/brief.md` | Problem, users, measure of success, non-goals | G1 | always | always | always | always |
44
+ | `_product-brief/addendum.md` | Depth that does not fit the brief's narrative | G1 | always | always | always | always |
45
+ | `_prd/<initiative>/prd.md` | `CAP` · `FR` · `NFR` · `UJ` · one proof of done per `FR` | G2 | always | always | always | always |
46
+ | `_prd/<initiative>/addendum.md` | Rejected alternatives, option matrices, sizing | G2 | always | always | always | always |
47
+ | `experience.md` | The experience every component keeps: foundation, IA, voice, flow map, journeys across components | G2, optional | optional | optional | optional | optional |
48
+ | `<pc>/04-usecases/EXPERIENCE.md` | The user-facing journey | G2, optional | optional | optional | optional | optional |
49
+ | `business-rules.md` | `BR-N` binding more than one component | G3 | always | always | always | always |
50
+ | **`<pc>/SRS-<pc>.md`** | § Actor Register · **§ UC Catalogue — this is the use case list** · Constraints · Non-Goals · Prerequisite · Assumptions/Risks/TBC | G3 | **always** | always | always | always |
51
+ | `<pc>/03-domain/domain-model.md` | Entities · relations · columns | G3 | always | always | always | always |
52
+ | `<pc>/02-rules/rules-<pc>.md` | Rules binding only this component | G4 | — | ✓ | ✓ | ✓ |
53
+ | `<pc>/04-usecases/UC-<n>-<slug>.md` | One full flow, at most eight steps | G4 | — | max **3** | max **3** | every `critical` UC |
54
+ | `<pc>/03-domain/state-machines.md` | The lifecycle of each multi-state entity | G4 | — | — | — | ✓ |
55
+ | `<pc>/05-scenarios/SCN-<nn>-<slug>.md` | A branch that does not fit its use case file | G4 | — | — | — | ✓ |
56
+
57
+ **So `SRS-<pc>.md` exists at `mode: catalog`.** It carries the actor list and the use case catalogue. What
58
+ is absent there is the `UC-<n>-<slug>.md` files — the step-by-step flows.
59
+
60
+ Repealed: `<pc>/01-requirements/` (permanently empty; `FR` live in the PRD and the SRS cites them) and
61
+ `<pc>/supplements/` (existed for `ANX-`).
62
+
63
+ ## `.how/`
64
+
65
+ | File | Holds | Born | `catalog` | `outline` | `guarded` | `deep` |
66
+ |---|---|---|---|---|---|---|
67
+ | `_platform/ARCHITECTURE-SPINE.md` | `AD-N` — Binds · Prevents · Rule. Invariants only | G3 | always | always | always | always |
68
+ | `_platform/c4-l1-system-context.md` | System, outside actors, outside systems | G3 | always | always | always | always |
69
+ | `_platform/c4-l2-containers.md` | Containers, their technology, their relations, and the PC × container matrix. **Owns the container list** | G3 | always | always | always | always |
70
+ | `_platform/c4-l3-<container>.md` | One file per `built: true` container holding more than one Product Component | G3 | always | always | always | always |
71
+ | **`_platform/inventory-db.md`** | **Table list**: `No` · table · owning component · what it holds · **key columns** | G3 | **always** | always | always | always |
72
+ | **`_platform/inventory-api.md`** | **Endpoint list**: `No` · method · path · owning component · description · status | G3 | **always** | always | always | always |
73
+ | **`_platform/inventory-screen.md`** | **Screen list**: `No` · screen · route · owning component · actor · `UC` served | G3 | **always** | always | always | always |
74
+ | `_platform/cross-cutting.md` | One error envelope for the whole product, and the rest of what is shared | G3 | always | always | always | always |
75
+ | `_platform/design-system.md` | Tokens, base elements, and the build patterns every component shares | G2, optional | optional | optional | optional | optional |
76
+ | `<pc>/SDD-<pc>.md` § Decision Summary | What this component is built as, and the costliest choices reversed | G4 | skeleton | ✓ | ✓ | ✓ |
77
+ | `<pc>/SDD-<pc>.md` § Structure | The `LC` list and their dependency direction | G4 | skeleton | ✓ | ✓ | ✓ |
78
+ | `<pc>/SDD-<pc>.md` § Inherited Constraints | The `AD-N` binding this component, quoted not paraphrased | G4 | — | — | ✓ | ✓ |
79
+ | **`<pc>/SDD-<pc>.md` § Failure Behaviour** | Per boundary: the other side slow, absent, or lying | G4 | — | — | **✓ every boundary** | ✓ |
80
+ | `<pc>/SDD-<pc>.md` § Robustness Analysis | ABCE per `critical` use case | G4 | — | — | — | ✓ |
81
+ | `<pc>/03-integrations/<name>.md` | A third party: who owns it, and what happens when they change it | G4 | — | — | ✓ if any | ✓ |
82
+ | `<pc>/02-contracts/00-inventory.md` | This component's endpoints, stably numbered | G4 | — | — | — | ✓ |
83
+ | `<pc>/02-contracts/<nn>-<resource>.md` | One endpoint, five lanes: auth · validation · error · rate limit · idempotency | G4 | — | — | — | ✓ |
84
+ | `<pc>/04-components/<name>.md` | Services and jobs | G4 | — | — | — | ✓ |
85
+ | `<pc>/05-model/data-model.md` | Component ERD + **data dictionary per column** | G4 | — | — | — | ✓ |
86
+ | `<pc>/06-flows/<nn>-<flow>.md` | Sequence diagram, only for money, irreversible state, or a third party | G4 | — | — | — | ✓ |
87
+ | `<pc>/01-ux/<screen>.md` | Screens and composites, **field detail per form** | G4 | — | — | — | ✓, or earlier via `wdi-ux` |
88
+
89
+ Repealed: `_platform/architecture/` (one file does not earn a folder) and `<pc>/supplements/`.
90
+
91
+ ## Registry and derived files
92
+
93
+ | File | Holds | Present at |
94
+ |---|---|---|
95
+ | `.control/registry/goals.yaml` | `BG` | every mode |
96
+ | `.control/registry/requirements-<slug>.yaml` | `CAP` · `FR` · `NFR` · `UJ`, one file per PRD initiative | every mode |
97
+ | `.control/registry/usecases.yaml` | `UC-N` with `critical` and the `FR` it satisfies | every mode |
98
+ | `.control/registry/components.yaml` → `product_components` | Component · `mode` · `risk_accepted` · `risk_note` · `owns` · `g4_passed` | every mode |
99
+ | `.control/registry/components.yaml` → `containers` | The containers from C4 L2 | every mode |
100
+ | `.control/registry/components.yaml` → `platform_owns` | Entities no Product Component's promise explains. `_platform` is not a component and has no `mode` | every mode |
101
+ | `.control/registry/components.yaml` → `logical_components` | `LC` | boundary from `guarded`; boundary + control at `deep` |
102
+ | `.control/registry/decisions.yaml` · `specs.yaml` · `defects.yaml` · `risks.yaml` · `index.yaml` | Decisions · work · defects · risks · the global `mode` and gate map | every mode |
103
+ | `.how-rendered/blueprint.md` | **The one-page roll-up reviewed at G3** | every mode |
104
+ | `.control/generated/decisions.md` | The flat index of every `DEC-` | every mode |
105
+ | `.control/generated/estimate.md` | The candidate task table | every mode |
106
+ | `.control/generated/rtm` · `status` · `dag` · `components` · `risks` | Traceability and progress | every mode |
107
+
108
+ ## Who owns each file
109
+
110
+ A skill lands the output of the layer it owns, and landing is part of producing it — never a follow-up
111
+ someone else performs. `../document/corpus-guide.md` holds the binding version of this table.
112
+
113
+ | Owner | Writes |
114
+ |---|---|
115
+ | `wdi-init` | The registry scaffold, `mode`, `risk_accepted`, component birth, the `SRS`/`SDD` skeletons, the two structure maps |
116
+ | `wdi-problem` | `.what/_product-brief/` |
117
+ | `wdi-product` | `.what/_prd/<initiative>/` |
118
+ | `wdi-blueprint` | `.what/<pc>/` § Actor Register + § UC Catalogue + `03-domain/domain-model.md` · `.what/business-rules.md` · `.control/product-glossary.md` · all of `.how/_platform/` except `design-system.md` |
119
+ | `wdi-component` | `.what/<pc>/` slots `02`–`05` · `.how/<pc>/` except `01-ux/` |
120
+ | `wdi-ux` | `.what/experience.md` · `EXPERIENCE.md` · `.how/<pc>/01-ux/` · `.how/_platform/design-system.md` |
121
+ | `wdi-build` | `specs.yaml` · `.scratch/<spec-id>-<slug>/` · `src/` · `web/` |
122
+ | `wdi-decision` | `.control/decisions/` · `decisions.yaml`, and at apply time whatever `touches` names — through each file's owner |
123
+ | `wdi-question` | `.control/questions/` |
124
+ | `wdi-log` | `.control/meetings/` · `.control/project-non-technical-log.md` |
125
+ | `wdi-report` | `.control/reports/<period>.md` |
126
+ | a script | everything in `.control/generated/`, and the three inventories once code exists |
127
+
128
+ Five skills write **no file at all**, and that is deliberate: `wdi-reconcile`, `wdi-help`, `wdi-explain-to-me`,
129
+ `wdi-report` intent `dispatch`, and `wdi-review` apart from one frontmatter block. What reports MUST NOT
130
+ also change things — otherwise there is nothing left to check with.
131
+
132
+ ## How the units of work line up
133
+
134
+ `FR` is a **promise** and permanent; a spec is a **unit of work** and temporary; `SPEC.md` is the machine
135
+ contract for one spec — written from size `M` up, and at `S` the tickets are the contract; a ticket is one
136
+ vertical slice one builder takes to a green PR.
137
+
138
+ One spec = one parent issue, and a ticket is an **issue**, not a sub-task, because its blocking edges are
139
+ what make the frontier visible in the tracker's own UI. **`FR` is not an issue** — it travels as a label,
140
+ because one `FR` can be delivered by tickets in two specs and one ticket can satisfy part of two `FR`.
141
+
142
+ The binding version of all of this, including why a spec MAY cross components and what has to be true
143
+ first, is in `../document/delivery-flow-guide.md`. It is not restated here.
144
+
145
+ ## What needs no template, and why
146
+
147
+ Stated so the next completeness audit does not report it again:
148
+
149
+ | File | Why it has no template |
150
+ |---|---|
151
+ | `.control/generated/*` | Script output. Its shape is code, not a template |
152
+ | `.control/reports/<period>.md` | Rendered by `timeline.py` |
153
+ | `.control/project-non-technical-log.md` | States its own entry shape in its own header, and there is exactly one such file |
154
+ | `SPEC.md` · ticket files | Their shape belongs to `to-spec` and `to-tickets`. WDI owns where they land, not how they read |
155
+ | Registry `*.yaml` | Their shape is the comment block at the head of each file, plus the validator |
156
+
157
+ Everything else in this map has a template in `../document/templates/` — 26 of them, and every row above is
158
+ covered by one.