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.
- package/CHANGELOG.md +68 -0
- package/README.md +3 -0
- package/bin/wdi-method.js +121 -14
- package/kit/.constitution/method/document/architecture-guide.md +217 -209
- package/kit/.constitution/method/document/corpus-guide.md +522 -517
- package/kit/.constitution/method/document/decision-guide.md +236 -216
- package/kit/.constitution/method/document/delivery-flow-guide.md +20 -0
- package/kit/.constitution/method/document/prd-guide.md +245 -245
- package/kit/.constitution/method/document/templates/design-system.md +96 -66
- package/kit/.constitution/method/document/templates/experience.md +62 -0
- package/kit/.constitution/method/document/templates/structure-codebase.md +131 -129
- package/kit/.constitution/method/document/templates/ux.md +78 -76
- package/kit/.constitution/method/document/ux-guide.md +161 -115
- package/kit/.constitution/method/method-glossary.md +3 -0
- package/kit/.constitution/method/scripts/validate.py +3310 -3200
- package/kit/.constitution/method/structure-guide.md +204 -202
- package/kit/.constitution/method/why/artifact-map.md +158 -157
- package/kit/skills/wdi-blueprint/SKILL.md +271 -264
- package/kit/skills/wdi-component/SKILL.md +179 -174
- package/kit/skills/wdi-decision/SKILL.md +206 -203
- package/kit/skills/wdi-help/SKILL.md +127 -125
- package/kit/skills/wdi-init/SKILL.md +9 -4
- package/kit/skills/wdi-problem/SKILL.md +114 -108
- package/kit/skills/wdi-product/SKILL.md +167 -162
- package/kit/skills/wdi-reconcile/SKILL.md +170 -169
- package/kit/skills/wdi-upgrade/SKILL.md +234 -215
- package/kit/skills/wdi-ux/SKILL.md +187 -169
- package/kit-overlay/AGENTS.md +3 -1
- package/package.json +1 -1
- 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
|
-
|
|
|
48
|
-
|
|
|
49
|
-
|
|
|
50
|
-
|
|
|
51
|
-
| `<pc>/
|
|
52
|
-
| `<pc>/
|
|
53
|
-
| `<pc>/
|
|
54
|
-
| `<pc>/
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
`<pc>/
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
| `_platform/
|
|
68
|
-
| `_platform/c4-
|
|
69
|
-
| `_platform/c4-
|
|
70
|
-
|
|
|
71
|
-
| **`_platform/inventory-
|
|
72
|
-
| **`_platform/inventory-
|
|
73
|
-
|
|
|
74
|
-
| `_platform/
|
|
75
|
-
|
|
|
76
|
-
| `<pc>/SDD-<pc>.md` §
|
|
77
|
-
| `<pc>/SDD-<pc>.md` §
|
|
78
|
-
|
|
|
79
|
-
|
|
|
80
|
-
| `<pc>/
|
|
81
|
-
| `<pc>/
|
|
82
|
-
| `<pc>/02-contracts
|
|
83
|
-
| `<pc>/
|
|
84
|
-
| `<pc>/
|
|
85
|
-
| `<pc>/
|
|
86
|
-
| `<pc>/
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
| `.control/registry/
|
|
96
|
-
| `.control/registry/
|
|
97
|
-
| `.control/registry/
|
|
98
|
-
| `.control/registry/components.yaml` → `
|
|
99
|
-
| `.control/registry/components.yaml` → `
|
|
100
|
-
| `.control/registry/components.yaml` → `
|
|
101
|
-
| `.control/registry/
|
|
102
|
-
| `.
|
|
103
|
-
| `.
|
|
104
|
-
| `.control/generated/
|
|
105
|
-
| `.control/generated/
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
| `wdi-
|
|
116
|
-
| `wdi-
|
|
117
|
-
| `wdi-
|
|
118
|
-
| `wdi-
|
|
119
|
-
| `wdi-
|
|
120
|
-
| `wdi-
|
|
121
|
-
| `wdi-
|
|
122
|
-
| `wdi-
|
|
123
|
-
| `wdi-
|
|
124
|
-
| `wdi-
|
|
125
|
-
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
| `.control/
|
|
152
|
-
| `.control/
|
|
153
|
-
|
|
|
154
|
-
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
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.
|