@nurix/etna 0.20.36 → 0.20.37

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 (182) hide show
  1. package/data/catalog/skills/nustack/SKILL.md +2 -2
  2. package/data/catalog/skills/nustack/references/cli-design.md +35 -35
  3. package/data/catalog/skills/nustack/references/monorepo-master-list.md +6 -6
  4. package/data/catalog/skills/nustack/references/monorepo-setup.md +13 -13
  5. package/data/catalog/skills/nustack/references/publishing.md +40 -39
  6. package/data/harness-index.json +1 -1
  7. package/data/harnesses/code/harness.json +1 -1
  8. package/data/harnesses/code/skills/boundary/SKILL.md +33 -22
  9. package/data/harnesses/code/skills/boundary/references/index.md +2 -4
  10. package/data/harnesses/code/skills/boundary/references/mechanisms.md +3 -10
  11. package/data/harnesses/code/skills/boundary/references/packs/frontend.md +17 -17
  12. package/data/harnesses/code/skills/boundary/references/packs/generic-tail.md +1 -1
  13. package/data/harnesses/code/skills/brainstorm/README.md +11 -13
  14. package/data/harnesses/code/skills/brainstorm/SKILL.md +150 -132
  15. package/data/harnesses/code/skills/brainstorm/references/doctrine.md +48 -51
  16. package/data/harnesses/code/skills/brainstorm/references/harvest.md +51 -56
  17. package/data/harnesses/code/skills/brainstorm/references/session-schema.md +48 -42
  18. package/data/harnesses/code/skills/design/SKILL.md +31 -35
  19. package/data/harnesses/code/skills/design/data/iconography.md +2 -2
  20. package/data/harnesses/code/skills/design/references/compose.md +14 -16
  21. package/data/harnesses/code/skills/design/references/foundations.md +5 -5
  22. package/data/harnesses/code/skills/design/references/intake.md +6 -6
  23. package/data/harnesses/code/skills/design/references/object-pass.md +1 -1
  24. package/data/harnesses/code/skills/design/references/ship-gate.md +5 -5
  25. package/data/harnesses/code/skills/design/references/ux-patterns/Readme.md +4 -4
  26. package/data/harnesses/code/skills/design/references/ux-patterns/ai-layer.md +1 -1
  27. package/data/harnesses/code/skills/design/references/ux-patterns/container-choice.md +1 -1
  28. package/data/harnesses/code/skills/design/references/ux-patterns/dashboards.md +1 -1
  29. package/data/harnesses/code/skills/design/references/ux-patterns/modes.md +1 -1
  30. package/data/harnesses/code/skills/design/references/ux-patterns/object-model.md +2 -2
  31. package/data/harnesses/code/skills/design/references/ux-patterns/promotion-demotion.md +1 -1
  32. package/data/harnesses/code/skills/design/references/ux-patterns/settings.md +1 -1
  33. package/data/harnesses/code/skills/design/references/ux-patterns/standard-pages.md +1 -1
  34. package/data/harnesses/code/skills/documentation/SKILL.md +5 -5
  35. package/data/harnesses/code/skills/documentation/references/examples.md +22 -22
  36. package/data/harnesses/code/skills/documentation/references/frontmatter.md +3 -3
  37. package/data/harnesses/code/skills/documentation/references/instruction-style.md +3 -3
  38. package/data/harnesses/code/skills/documentation/references/source-comments.md +3 -3
  39. package/data/harnesses/code/skills/documentation/references/style-guide.md +5 -5
  40. package/data/harnesses/code/skills/documentation/references/untemplated.md +8 -8
  41. package/data/harnesses/code/skills/documentation/scripts/doc-lint.mjs +3 -2
  42. package/data/harnesses/code/skills/documentation/templates/Readme.md +1 -1
  43. package/data/harnesses/code/skills/documentation/templates/acceptance-criteria.md +1 -1
  44. package/data/harnesses/code/skills/documentation/templates/api-reference.md +1 -1
  45. package/data/harnesses/code/skills/documentation/templates/architecture-decision.md +3 -7
  46. package/data/harnesses/code/skills/documentation/templates/behavioral-checklist.md +1 -1
  47. package/data/harnesses/code/skills/documentation/templates/changelog-entry.md +1 -1
  48. package/data/harnesses/code/skills/documentation/templates/changelog-index.md +1 -1
  49. package/data/harnesses/code/skills/documentation/templates/docs-readme.md +3 -3
  50. package/data/harnesses/code/skills/documentation/templates/doctrine.md +1 -1
  51. package/data/harnesses/code/skills/documentation/templates/domain-model.md +1 -1
  52. package/data/harnesses/code/skills/documentation/templates/environment-registry.md +1 -1
  53. package/data/harnesses/code/skills/documentation/templates/feature.md +3 -3
  54. package/data/harnesses/code/skills/documentation/templates/handover.md +2 -2
  55. package/data/harnesses/code/skills/documentation/templates/implementation-map.md +1 -1
  56. package/data/harnesses/code/skills/documentation/templates/migration-runbook.md +1 -1
  57. package/data/harnesses/code/skills/documentation/templates/non-goals.md +1 -1
  58. package/data/harnesses/code/skills/documentation/templates/operations-procedure.md +2 -2
  59. package/data/harnesses/code/skills/documentation/templates/package.md +1 -1
  60. package/data/harnesses/code/skills/documentation/templates/protected-files.md +1 -1
  61. package/data/harnesses/code/skills/documentation/templates/root-readme.md +1 -1
  62. package/data/harnesses/code/skills/documentation/templates/security-overview.md +1 -1
  63. package/data/harnesses/code/skills/documentation/templates/system-overview.md +1 -1
  64. package/data/harnesses/code/skills/documentation/templates/system.md +1 -1
  65. package/data/harnesses/code/skills/documentation/templates/testing-strategy.md +1 -1
  66. package/data/harnesses/code/skills/documentation/templates/ux-behavior.md +3 -5
  67. package/data/harnesses/code/skills/issue-bridge/SKILL.md +51 -16
  68. package/data/harnesses/code/skills/issue-bridge/references/trackers/github.md +5 -5
  69. package/data/harnesses/code/skills/issue-bridge/references/trackers/jira.md +11 -8
  70. package/data/harnesses/code/skills/issue-bridge/references/trackers/linear.md +16 -11
  71. package/data/harnesses/code/skills/nustack-graph/SKILL.md +38 -29
  72. package/data/harnesses/code/skills/polygraph/references/dispatch.md +31 -18
  73. package/data/harnesses/code/skills/polygraph/references/rows.md +11 -6
  74. package/data/harnesses/code/skills/schema-design/SKILL.md +39 -41
  75. package/data/harnesses/code/skills/test/SKILL.md +38 -42
  76. package/data/harnesses/code/skills/testing/SKILL.md +83 -73
  77. package/data/harnesses/code/skills/workflow-mapper/SKILL.md +156 -193
  78. package/data/harnesses/code/skills/workflow-mapper/references/patterns.md +15 -15
  79. package/data/harnesses/delivery/harness.json +1 -1
  80. package/data/harnesses/delivery/skills/brainstorm/README.md +11 -13
  81. package/data/harnesses/delivery/skills/brainstorm/SKILL.md +150 -132
  82. package/data/harnesses/delivery/skills/brainstorm/references/doctrine.md +48 -51
  83. package/data/harnesses/delivery/skills/brainstorm/references/harvest.md +51 -56
  84. package/data/harnesses/delivery/skills/brainstorm/references/session-schema.md +48 -42
  85. package/data/harnesses/delivery/skills/cost-report/SKILL.md +10 -10
  86. package/data/harnesses/delivery/skills/documentation/SKILL.md +5 -5
  87. package/data/harnesses/delivery/skills/documentation/references/examples.md +22 -22
  88. package/data/harnesses/delivery/skills/documentation/references/frontmatter.md +3 -3
  89. package/data/harnesses/delivery/skills/documentation/references/instruction-style.md +3 -3
  90. package/data/harnesses/delivery/skills/documentation/references/source-comments.md +3 -3
  91. package/data/harnesses/delivery/skills/documentation/references/style-guide.md +5 -5
  92. package/data/harnesses/delivery/skills/documentation/references/untemplated.md +8 -8
  93. package/data/harnesses/delivery/skills/documentation/scripts/doc-lint.mjs +3 -2
  94. package/data/harnesses/delivery/skills/documentation/templates/Readme.md +1 -1
  95. package/data/harnesses/delivery/skills/documentation/templates/acceptance-criteria.md +1 -1
  96. package/data/harnesses/delivery/skills/documentation/templates/api-reference.md +1 -1
  97. package/data/harnesses/delivery/skills/documentation/templates/architecture-decision.md +3 -7
  98. package/data/harnesses/delivery/skills/documentation/templates/behavioral-checklist.md +1 -1
  99. package/data/harnesses/delivery/skills/documentation/templates/changelog-entry.md +1 -1
  100. package/data/harnesses/delivery/skills/documentation/templates/changelog-index.md +1 -1
  101. package/data/harnesses/delivery/skills/documentation/templates/docs-readme.md +3 -3
  102. package/data/harnesses/delivery/skills/documentation/templates/doctrine.md +1 -1
  103. package/data/harnesses/delivery/skills/documentation/templates/domain-model.md +1 -1
  104. package/data/harnesses/delivery/skills/documentation/templates/environment-registry.md +1 -1
  105. package/data/harnesses/delivery/skills/documentation/templates/feature.md +3 -3
  106. package/data/harnesses/delivery/skills/documentation/templates/handover.md +2 -2
  107. package/data/harnesses/delivery/skills/documentation/templates/implementation-map.md +1 -1
  108. package/data/harnesses/delivery/skills/documentation/templates/migration-runbook.md +1 -1
  109. package/data/harnesses/delivery/skills/documentation/templates/non-goals.md +1 -1
  110. package/data/harnesses/delivery/skills/documentation/templates/operations-procedure.md +2 -2
  111. package/data/harnesses/delivery/skills/documentation/templates/package.md +1 -1
  112. package/data/harnesses/delivery/skills/documentation/templates/protected-files.md +1 -1
  113. package/data/harnesses/delivery/skills/documentation/templates/root-readme.md +1 -1
  114. package/data/harnesses/delivery/skills/documentation/templates/security-overview.md +1 -1
  115. package/data/harnesses/delivery/skills/documentation/templates/system-overview.md +1 -1
  116. package/data/harnesses/delivery/skills/documentation/templates/system.md +1 -1
  117. package/data/harnesses/delivery/skills/documentation/templates/testing-strategy.md +1 -1
  118. package/data/harnesses/delivery/skills/documentation/templates/ux-behavior.md +3 -5
  119. package/data/harnesses/delivery/skills/escalate/SKILL.md +11 -11
  120. package/data/harnesses/delivery/skills/prompt-eval/SKILL.md +8 -8
  121. package/data/harnesses/delivery/skills/prompt-library/SKILL.md +30 -9
  122. package/data/harnesses/delivery/skills/route/SKILL.md +8 -8
  123. package/data/harnesses/etna/harness.json +1 -1
  124. package/data/harnesses/etna/skills/boundary/SKILL.md +33 -22
  125. package/data/harnesses/etna/skills/boundary/references/index.md +2 -4
  126. package/data/harnesses/etna/skills/boundary/references/mechanisms.md +3 -10
  127. package/data/harnesses/etna/skills/boundary/references/packs/frontend.md +17 -17
  128. package/data/harnesses/etna/skills/boundary/references/packs/generic-tail.md +1 -1
  129. package/data/harnesses/etna/skills/brainstorm/README.md +11 -13
  130. package/data/harnesses/etna/skills/brainstorm/SKILL.md +150 -132
  131. package/data/harnesses/etna/skills/brainstorm/references/doctrine.md +48 -51
  132. package/data/harnesses/etna/skills/brainstorm/references/harvest.md +51 -56
  133. package/data/harnesses/etna/skills/brainstorm/references/session-schema.md +48 -42
  134. package/data/harnesses/etna/skills/documentation/SKILL.md +5 -5
  135. package/data/harnesses/etna/skills/documentation/references/examples.md +22 -22
  136. package/data/harnesses/etna/skills/documentation/references/frontmatter.md +3 -3
  137. package/data/harnesses/etna/skills/documentation/references/instruction-style.md +3 -3
  138. package/data/harnesses/etna/skills/documentation/references/source-comments.md +3 -3
  139. package/data/harnesses/etna/skills/documentation/references/style-guide.md +5 -5
  140. package/data/harnesses/etna/skills/documentation/references/untemplated.md +8 -8
  141. package/data/harnesses/etna/skills/documentation/scripts/doc-lint.mjs +3 -2
  142. package/data/harnesses/etna/skills/documentation/templates/Readme.md +1 -1
  143. package/data/harnesses/etna/skills/documentation/templates/acceptance-criteria.md +1 -1
  144. package/data/harnesses/etna/skills/documentation/templates/api-reference.md +1 -1
  145. package/data/harnesses/etna/skills/documentation/templates/architecture-decision.md +3 -7
  146. package/data/harnesses/etna/skills/documentation/templates/behavioral-checklist.md +1 -1
  147. package/data/harnesses/etna/skills/documentation/templates/changelog-entry.md +1 -1
  148. package/data/harnesses/etna/skills/documentation/templates/changelog-index.md +1 -1
  149. package/data/harnesses/etna/skills/documentation/templates/docs-readme.md +3 -3
  150. package/data/harnesses/etna/skills/documentation/templates/doctrine.md +1 -1
  151. package/data/harnesses/etna/skills/documentation/templates/domain-model.md +1 -1
  152. package/data/harnesses/etna/skills/documentation/templates/environment-registry.md +1 -1
  153. package/data/harnesses/etna/skills/documentation/templates/feature.md +3 -3
  154. package/data/harnesses/etna/skills/documentation/templates/handover.md +2 -2
  155. package/data/harnesses/etna/skills/documentation/templates/implementation-map.md +1 -1
  156. package/data/harnesses/etna/skills/documentation/templates/migration-runbook.md +1 -1
  157. package/data/harnesses/etna/skills/documentation/templates/non-goals.md +1 -1
  158. package/data/harnesses/etna/skills/documentation/templates/operations-procedure.md +2 -2
  159. package/data/harnesses/etna/skills/documentation/templates/package.md +1 -1
  160. package/data/harnesses/etna/skills/documentation/templates/protected-files.md +1 -1
  161. package/data/harnesses/etna/skills/documentation/templates/root-readme.md +1 -1
  162. package/data/harnesses/etna/skills/documentation/templates/security-overview.md +1 -1
  163. package/data/harnesses/etna/skills/documentation/templates/system-overview.md +1 -1
  164. package/data/harnesses/etna/skills/documentation/templates/system.md +1 -1
  165. package/data/harnesses/etna/skills/documentation/templates/testing-strategy.md +1 -1
  166. package/data/harnesses/etna/skills/documentation/templates/ux-behavior.md +3 -5
  167. package/data/harnesses/etna/skills/workflow-mapper/SKILL.md +156 -193
  168. package/data/harnesses/etna/skills/workflow-mapper/references/patterns.md +15 -15
  169. package/data/harnesses/hr/harness.json +1 -1
  170. package/data/harnesses/hr/skills/evaluator/SKILL.md +71 -73
  171. package/data/harnesses/hr/skills/evaluator/criteria/code-quality.md +28 -47
  172. package/data/harnesses/hr/skills/evaluator/criteria/deployment-readiness.md +33 -43
  173. package/data/harnesses/hr/skills/evaluator/criteria/maintainability.md +34 -46
  174. package/data/harnesses/hr/skills/evaluator/criteria/mechanical-ambition.md +13 -13
  175. package/data/harnesses/hr/skills/evaluator/criteria/problem-substantiveness.md +7 -7
  176. package/data/harnesses/hr/skills/evaluator/criteria/testing.md +36 -41
  177. package/data/harnesses/hr/skills/evaluator/criteria/ux-mechanics.md +25 -11
  178. package/data/harnesses/hr/skills/evaluator/criteria/value-articulation.md +7 -7
  179. package/data/harnesses/hr/skills/evaluator/preflight.md +27 -46
  180. package/data/harnesses/hr/skills/interview-eval/SKILL.md +37 -42
  181. package/data/harnesses/hr/skills/interview-eval/rubric.md +21 -23
  182. package/package.json +2 -2
@@ -1,12 +1,12 @@
1
- # Documentation Examples
1
+ # Documentation examples
2
2
 
3
- Good vs bad examples showing the key differences.
3
+ Good and bad documentation side by side; `style-guide.md` cites each example by number.
4
4
 
5
5
  ---
6
6
 
7
- ## Example 1: Function Documentation
7
+ ## Example 1: Function documentation
8
8
 
9
- ### Bad: Full Implementation
9
+ ### Bad: full implementation
10
10
 
11
11
  ```markdown
12
12
  ### mergeData
@@ -14,9 +14,9 @@ Good vs bad examples showing the key differences.
14
14
  function mergeData(server, local, changes) { const result = {}; const serverMap = new Map(server.map((i) => [i.id, i])); // ... 30 more lines return result; }
15
15
  ```
16
16
 
17
- **Problems:** Will become obsolete, focuses on HOW not WHAT.
17
+ **Problems:** goes stale with the first refactor; shows *how* instead of *what*.
18
18
 
19
- ### Good: Contract Only
19
+ ### Good: contract only
20
20
 
21
21
  ```markdown
22
22
  ### `mergeData(serverData, localData, changes)`
@@ -40,9 +40,9 @@ function mergeData(server, local, changes) { const result = {}; const serverMap
40
40
 
41
41
  ---
42
42
 
43
- ## Example 2: State Documentation
43
+ ## Example 2: State documentation
44
44
 
45
- ### Bad: State Everywhere
45
+ ### Bad: state everywhere
46
46
 
47
47
  ```markdown
48
48
  ## Component State
@@ -58,9 +58,9 @@ const [items, setItems] = useState([]);
58
58
  { items: [], loading: false, error: null }
59
59
  ```
60
60
 
61
- **Problems:** Documents transient state, repeats shapes.
61
+ **Problems:** documents transient state and repeats shapes.
62
62
 
63
- ### Good: Persistence Points Only, in the API reference
63
+ ### Good: persistence points only, in the API reference
64
64
 
65
65
  Persisted shapes live in the API reference (`docs/architecture/api.md`), never in a feature document, where `## State` is a retired mechanism section.
66
66
 
@@ -89,7 +89,7 @@ export const items = pgTable('items', {
89
89
 
90
90
  ## Example 3: Changelog
91
91
 
92
- ### Bad: Vague
92
+ ### Bad: vague
93
93
 
94
94
  ```markdown
95
95
  # 2025-01-05 - Updates
@@ -105,7 +105,7 @@ export const items = pgTable('items', {
105
105
  - Various files in src/
106
106
  ```
107
107
 
108
- ### Good: Behavior First, Refinement Context Kept
108
+ ### Good: behavior first, refinement context kept
109
109
 
110
110
  ```markdown
111
111
  # 2025-01-05 · data-sync — Local edits survive a sync only when versions match
@@ -123,7 +123,7 @@ export const items = pgTable('items', {
123
123
 
124
124
  ## Example 4: Flow
125
125
 
126
- ### Bad: Mechanism narrated in a paragraph
126
+ ### Bad: mechanism narrated in a paragraph
127
127
 
128
128
  ```markdown
129
129
  ## Data Flow
@@ -133,7 +133,7 @@ When the page loads, the useAppInit hook calls the syncData function. This funct
133
133
 
134
134
  **Problems:** names a hook, a function and a store that a rename would invalidate (the stability test); runs parallel cases together in one paragraph; gives a scanning reader no label to land on; "Data Flow" is a retired mechanism section.
135
135
 
136
- ### Good: Labelled bullets, a role-level diagram beside them
136
+ ### Good: labelled bullets, a role-level diagram beside them
137
137
 
138
138
  ````markdown
139
139
  ## Flows
@@ -161,7 +161,7 @@ sequenceDiagram
161
161
 
162
162
  ## Example 5: Architecture Decision revision
163
163
 
164
- ### Bad: Supersession chain
164
+ ### Bad: supersession chain
165
165
 
166
166
  ```
167
167
  docs/architecture/decisions/
@@ -170,9 +170,9 @@ docs/architecture/decisions/
170
170
  └── AD-011-auth-better-auth-v2.md (status: Accepted, "supersedes AD-006")
171
171
  ```
172
172
 
173
- **Problems:** Three files hold one subject; the reader must diff a chain to learn the current truth; two of the three are wrong-but-present (the same pathology as keeping `report_v1.sql` beside the live `report_v2.sql`); the reasoning that killed Keycloak is stranded in a dead file nobody opens.
173
+ **Problems:** three files hold one subject; the reader must diff a chain to learn the current truth; two of the three are wrong-but-present (the same pathology as keeping `report_v1.sql` beside the live `report_v2.sql`); the reasoning that killed Keycloak is stranded in a dead file nobody opens.
174
174
 
175
- ### Good: One subject, updated in place
175
+ ### Good: one subject, updated in place
176
176
 
177
177
  ```
178
178
  docs/architecture/decisions/
@@ -195,15 +195,15 @@ We use Better Auth with one-shot credential issuance… ← current truth, no
195
195
  - 2026-01-10 — Initial decision accepted. Implemented by [plan](…).
196
196
  ```
197
197
 
198
- **Why it works:** The body answers "how does auth work and why" without archaeology; the tail preserves every reversal with its trigger; the rejected alternatives stay findable in the one file a reader actually opens.
198
+ **Why it works:** the body answers "how does auth work and why" without archaeology; the tail preserves every reversal with its trigger; the rejected alternatives stay findable in the one file a reader actually opens.
199
199
 
200
200
  ---
201
201
 
202
202
  ## Example 6: Stripping history from a truth doc
203
203
 
204
- The move agents fumble: deleting narration is only half the job — the story must land in a record.
204
+ Deleting narration is only half the move; the story **must** land in a record.
205
205
 
206
- ### Bad: The journey narrated in place
206
+ ### Bad: the journey narrated in place
207
207
 
208
208
  ```markdown
209
209
  ## Export Pipeline
@@ -214,7 +214,7 @@ output is not yet implemented. Treat any reference to `reports/export.js` as
214
214
  stale — it was superseded by `src/export/run.js`.
215
215
  ```
216
216
 
217
- ### Good: Present-tense truth doc + a dated record carrying the story
217
+ ### Good: present-tense truth doc + a dated record carrying the story
218
218
 
219
219
  The feature doc states only what is:
220
220
 
@@ -243,7 +243,7 @@ And the change-story goes to `docs/history/changelog/2026-06-02-export-extractio
243
243
 
244
244
  ---
245
245
 
246
- ## Quick Comparison
246
+ ## Quick comparison
247
247
 
248
248
  | Aspect | Bad | Good |
249
249
  | ---------- | -------------------- | --------------------------- |
@@ -6,7 +6,7 @@ This reference states how a document joins the knowledge graph, and it is kept i
6
6
 
7
7
  ## The model
8
8
 
9
- A document names the product objects it designs. Every other edge between a document and the code is either authored on the code's side or computed, never typed into the document. The harness's ownership scan reads one edge today, the transitional `owns:` region glob (§ `owns:`); principles 2 and 3 are the edges it switches to, and the header pointer is written now so the switch needs no second pass over the code.
9
+ A document names the product objects it designs. Every other edge between a document and the code is either authored on the code's side or computed, never typed into the document. The harness's ownership scan reads one edge, the transitional `owns:` region glob (§ `owns:` — transitional); principles 2 and 3 are the edges it switches to, and the header pointer is written alongside it so the switch needs no second pass over the code.
10
10
 
11
11
  ### Principles
12
12
 
@@ -63,7 +63,7 @@ Tooling keys sit beside these on any genre: `rev:` (a generator's generation sta
63
63
 
64
64
  ### `owns:` — transitional
65
65
 
66
- - **Reason for the key:** the harness's ownership scan (`.claude/hooks/lib/ownership.mjs`) keys on `owns:` until it switches to the header pointers and the object closure, which is the knowledge layer's recorded gap. Until then the key keeps the session's ownership index and the doc-debt detectors working.
66
+ - **Reason for the key:** the harness's ownership scan (`.claude/hooks/lib/ownership.mjs`) keys on `owns:` until it switches to the header pointers and the object closure, which is the knowledge layer's recorded gap. The key is what keeps the session's ownership index and the doc-debt detectors working.
67
67
  - **Form:** region globs only, one per region the document speaks for: `packages/{name}/**` on a package document, the machine's subtrees on a system document, a feature's own directory on a feature document. Never a list of individual files, and never a shared file several features import.
68
68
  - **Growth:** none. A new document carries the region glob its genre needs and nothing more; an edit never adds file-level entries.
69
69
  - **Retirement:** removed from every document in the same change that switches the scan, and this section with it.
@@ -73,7 +73,7 @@ Tooling keys sit beside these on any genre: `rev:` (a generator's generation sta
73
73
  | Key | Retired because | What replaces it |
74
74
  | --- | --- | --- |
75
75
  | `applies:` | A list of governing documents is a hand-kept copy of a relationship the graph computes through the objects both documents name, and it drifts the way any copy does | The objects the doctrine and the surface share, computed; for people, the document's Scope section (a UX document's Purpose) names its governing doctrine and what each settles |
76
- | `keywords:` | An object's name and aliases are its discovery terms | `objects:`. The ownership scan still shows a document's `keywords:` in the index when it names no `objects:`, so removing the key without adding `objects:` empties that entry |
76
+ | `keywords:` | An object's name and aliases are its discovery terms | `objects:`. The ownership scan shows a document's `keywords:` in the index when it names no `objects:`, so removing the key without adding `objects:` empties that entry |
77
77
  | A file-level `owns:` list | The header pointers and the object closure compute it | Region globs only, until the scan switches (above) |
78
78
 
79
79
  An edit to a document that carries a retired key removes the key in the same edit.
@@ -1,4 +1,4 @@
1
- # Instruction-File Style
1
+ # Instruction-file style
2
2
 
3
3
  The shared style for every file an agent obeys — a `CLAUDE.md`, a rule, an agent definition, skill prose. Prose style only: frontmatter is metadata, not style. Docs-tree documents follow the skill's templates and [`style-guide.md`](style-guide.md) instead.
4
4
 
@@ -6,11 +6,11 @@ The shared style for every file an agent obeys — a `CLAUDE.md`, a rule, an age
6
6
 
7
7
  An instruction file is paid for whenever it loads, scaled by its load class: `CLAUDE.md` and unscoped rules load on **every turn of every session** — the most expensive prose in a repo per word; a `paths:`-scoped rule loads on those same terms from its first matching file read on; an agent definition loads per dispatch, a skill per invocation. The bar is not "is this true?" but **"must this be in front of the agent whenever this file loads?"** Measure weight in tokens, not lines; trim biggest-first on every edit.
8
8
 
9
- **Rewriting, the test is armor vs. narration.** A reason clause either blocks a move an agent would otherwise make — the failure is counter-intuitive, the wrong fix looks correct, or the rule reads as arbitrary tidiness and gets "improved away" — or it explains the self-evident. Ask of each: *does the forbidden move look correct to an agent mid-task?* Keep the first kind, cut the second. **A constraint may lose its explanation; it may never lose its existence** — compression is fewer words for the same constraints, so a passage that cannot shrink without dropping one stays long.
9
+ **On a rewrite, the test is armor vs. narration.** A reason clause either blocks a move an agent would otherwise make — the failure is counter-intuitive, the wrong fix looks correct, or the rule reads as arbitrary tidiness and gets "improved away" — or it explains the self-evident. Ask of each: *does the forbidden move look correct to an agent mid-task?* Keep the first kind, cut the second. **A constraint may lose its explanation; it may never lose its existence** — compression is fewer words for the same constraints, so a passage that cannot shrink without dropping one stays long.
10
10
 
11
11
  ## Coherence
12
12
 
13
- A rewrite is not only a trim — read the file as one artifact and fix what disagrees or is missing:
13
+ A rewrite is not only a trim. Read the file as one artifact and fix what disagrees or is missing:
14
14
 
15
15
  - **Two statements of one fact agree, or become one.** A defaults block vs. the worked example beside it, a table row vs. a bullet — reconcile against the code the rule governs and keep one canonical statement; a silent disagreement is worse than either version alone, because each reader picks a different one.
16
16
  - **Every cross-reference resolves** — the cited `§`, sibling file, or command exists and still says what the citation claims. Section numbers are a public surface other files cite: append, never reshuffle.
@@ -2,17 +2,17 @@
2
2
 
3
3
  Load when: writing or sweeping source-file comments, or cutting a comment whose claim belongs in a document. Not needed to write a document.
4
4
 
5
- **In `docs/`, never in the file's comments** — and this skill is the half of that rule that makes it safe. A source file carries a repo-relative path header of two or three present-tense sentences and one third-person sentence above each non-obvious function; the shape is the harness's `CLAUDE.md` § File Structure, which is canonical and is not restated here. That header's `docs/…` path is also the file's edge into the knowledge graph: the header pointer names the document that speaks for the file, which is how ownership is computed ([`frontmatter.md`](frontmatter.md)). What lands **here** is everything that shape displaces: design rationale, the alternatives weighed, the measurement behind a constant, the reason an obvious-looking change is wrong.
5
+ **In `docs/`, never in the file's comments** — and this skill is the half of that rule that makes it safe. A source file carries a repo-relative path header of two or three present-tense sentences and one third-person sentence above each non-obvious function; the canonical shape is the harness's `CLAUDE.md` § File Structure. That header's `docs/…` path is also the file's edge into the knowledge graph: the header pointer names the document that speaks for the file, which is how ownership is computed ([`frontmatter.md`](frontmatter.md)). What lands **here** is everything that shape displaces: design rationale, the alternatives weighed, the measurement behind a constant, the reason an obvious-looking change is wrong.
6
6
 
7
7
  **Cutting a comment is a move, not a deletion.** A claim taken out of a source file is owed one of two things before the cut is done, and the choice is per claim, not per file:
8
8
 
9
9
  | The claim is | What it earns |
10
10
  | --- | --- |
11
11
  | Worth keeping, and its doc does not state it | A section in the **owning feature doc** (the ownership index resolves which), carrying the claim and the argument for why the codebase is worse without it — never the comment's wording, which was written for a reader holding the code |
12
- | Already stated in its doc | Nothing — but you **open that doc and find the sentence** before saying so. An assumed duplicate is how a claim is lost |
12
+ | Already stated in its doc | Nothing, once you **open that doc and find the sentence**. An assumed duplicate is how a claim is lost |
13
13
  | History, a ticket or decision-record reference, a dated note, a divider, or narration of code that no longer exists | Nothing, and no record. A record lives in `docs/history/`; these are not claims about the present |
14
14
 
15
- **Count what you cut, and prove the cut was only comments.** A comment sweep states comment lines before and after per file, so a drop nobody accounted for is visible as a number rather than as a feeling. [`scripts/comment-strip.mjs`](../scripts/comment-strip.mjs) turns that from a claim into a check: it strips comments from both revisions — honouring strings, template and character literals, regex literals, raw strings and JSX comment braces — and diffs what is left, so a sweep that quietly changed executable code cannot pass as a cleanup. `comment-strip.mjs --rev <before> --to <after> <paths…>` exits 0 for "no executable code changed" and 1 naming the file and the first diverging line. Run it over any pass that touches more than a handful of files; a sweep without it is an assertion.
15
+ **Count what you cut, and prove the cut was only comments.** A comment sweep states comment lines before and after per file, so an unaccounted drop shows as a number. [`scripts/comment-strip.mjs`](../scripts/comment-strip.mjs) turns that from a claim into a check: it strips comments from both revisions — honouring strings, template and character literals, regex literals, raw strings and JSX comment braces — and diffs what is left, so a sweep that quietly changed executable code cannot pass as a cleanup. `comment-strip.mjs --rev <before> --to <after> <paths…>` exits 0 for "no executable code changed" and 1 naming the file and the first diverging line. Run it over any pass that touches more than a handful of files; a sweep without it is an assertion.
16
16
 
17
17
  **The mechanical half of the shape is checked, not remembered.** [`scripts/source-lint.mjs`](../scripts/source-lint.mjs) `--changed` reports a header that names another path or none, a change whose added lines are over a quarter comments, and the four shapes the convention deletes outright — narration, ALL-CAPS emphasis, an over-long header, a comment block that has become a document. Block-severity findings must be fixed; the escape hatch is a `source-lint-disable: <id>` comment with the reason in a second comment beside it, and the only finding that legitimately takes one is a booby trap. The harness detector raises a bookkeeping row for the same condition, so an unfixed breach outlives the session that wrote it.
18
18
 
@@ -1,9 +1,9 @@
1
1
  <!-- doc-lint-disable: date-in-truth-doc, history-narration, stale-tripwire, progress-marker, temporal-hedge, predecessor-frame, status-glyph -->
2
2
  <!-- reason: the style authority quotes the forbidden constructions verbatim in its ❌ columns; each match is an example of what not to write. -->
3
3
 
4
- # Documentation Style Guide
4
+ # Documentation style guide
5
5
 
6
- This guide states how a document is written: every file under `docs/` and every README the `documentation` skill authors or edits. Two neighbouring authorities answer the questions beside it. [`instruction-style.md`](instruction-style.md) governs the files an agent obeys (`CLAUDE.md`, rules, agents, skill prose), which are paid for on every load and written lean; each template in [`templates/`](../templates/Readme.md) governs its genre's sections and fields. The first two sections of this guide are enough to write a correct document; the sections after them are the detail each principle unfolds into, and a reader who stops early holds a coarse picture that is still true.
6
+ This guide states how a document is written: every file under `docs/` and every README the `documentation` skill authors or edits. Two neighbouring authorities answer the questions beside it: [`instruction-style.md`](instruction-style.md) governs the files an agent obeys (`CLAUDE.md`, rules, agents, skill prose), which are paid for on every load and written lean, and each template in [`templates/`](../templates/Readme.md) governs its genre's sections and fields. The first two sections are enough to write a correct document; the sections after them are the detail each principle unfolds into, so a reader who stops early holds a coarse picture that is true.
7
7
 
8
8
  ## The model
9
9
 
@@ -75,7 +75,7 @@ The test (principle 3) decides what a sentence may say. These survive it:
75
75
 
76
76
  Unbuilt work has one home per kind. Decided design the code does not do yet is an `UNBUILT` block where the design is stated; a shortfall in what is built (a promise the code does not keep, a case it mishandles) is one bullet under Gaps; the work that would close either is a backlog row, and the document never tracks that work's progress.
77
77
 
78
- The authority split (principle 4) is stated once, where agents enter the docs (the root instruction file or `docs/README.md`), so a reader who finds the code and the document disagreeing knows which way to resolve it. A doctrine document restates it in its model where its readers would otherwise not know; a feature, package or system document never does, because its opening is fixed to its goal.
78
+ The authority split (principle 4) is stated once, where agents enter the docs (the root instruction file or `docs/README.md`), so a reader who finds the code and the document disagreeing knows which way to resolve it. A doctrine document restates it in its opening, as the authority sentence (`templates/doctrine.md`), where its readers would otherwise not know; a feature, package or system document never does, because its opening is fixed to its goal.
79
79
 
80
80
  ### Diagrams and length by layer
81
81
 
@@ -131,7 +131,7 @@ A feature, package or system document is scanned more than read (principle 6). I
131
131
  | System | Opening paragraph (the machine defined) · Scope · Flow · Decisions · Promises · Gaps · For the agent |
132
132
  | Package | Identity line · Goal line · Scope · Ownership · Usage · Decisions · Promises · Gaps · For the agent |
133
133
 
134
- Nothing else. "Why it exists" is retired; its content is Scope or Decisions. Mechanism sections (Architecture, Key Functions, State, Files, Schema, Routes, Wire, and their kin) are the graph's, and `doc-lint` blocks them as `mechanism-section`. The templates say when each section is required and how long each genre runs.
134
+ Nothing else. A "Why it exists" section has no place; its content is Scope or Decisions. Mechanism sections (Architecture, Key Functions, State, Files, Schema, Routes, Wire, and their kin) are the graph's, and `doc-lint` blocks them as `mechanism-section`. The templates say when each section is required and how long each genre runs.
135
135
 
136
136
  ### The body
137
137
 
@@ -269,7 +269,7 @@ flowchart LR
269
269
 
270
270
  ## Reference documents
271
271
 
272
- A reference document is the deepest genre: signatures, shapes and variables are its content, so the stability test does not apply to it (§ The genres). These rules bind only there, and in a procedure's appendix; an owning document names a symbol nowhere but its footer, and then only as a seam.
272
+ A reference document is the deepest genre: signatures, shapes and variables are its content, so the stability test does not apply to it (§ The genres). These rules bind only there, and in a procedure's appendix; an owning document names a symbol only as a seam (§ Owning documents — the body and the footer).
273
273
 
274
274
  ### Function signatures
275
275
 
@@ -1,28 +1,28 @@
1
- # Writing an Untemplated Document
1
+ # Writing an untemplated document
2
2
 
3
3
  Load when: no template in [`templates/`](../templates/Readme.md) matches the document being written — a design note, a comparison, an investigation writeup, an index, a reference sheet, anything the Routing table sends to "no template matches".
4
4
 
5
5
  A template is a pre-made set of shape decisions. With no template, make the same decisions explicitly, in this order.
6
6
 
7
- ## 1. Decide the nature — truth or record
7
+ ## 1. Decide the nature — truth, record or queue
8
8
 
9
- Every document is exactly one (`SKILL.md` § The three natures). Ask: *when reality changes, is this file rewritten, frozen, or does it lose a row?*
9
+ Every document is exactly one of the three (`SKILL.md` § The three natures). Ask: *when reality changes, is this file rewritten, frozen, or does it lose a row?*
10
10
 
11
- - Rewritten in place → **truth document**. Topic-named (`kebab-case.md`), lives outside `docs/history/`, present tense throughout — the iron rule in `SKILL.md` § The three natures.
12
- - A list of open work whose rows are added and deleted → **queue**. A fixed name, one row per item; extend an existing queue before inventing one.
11
+ - Rewritten in place → **truth document**. Topic-named (`kebab-case.md`), lives outside `docs/history/`, present tense throughout.
13
12
  - Frozen → **record**. Date-named (`YYYY-MM-DD-slug.md`), lives in `docs/history/` — inside an existing subfolder where it fits (an investigation or research writeup → `history/research/{topic}/`); a genuinely new category of record needs a `docs/structure.md` folder-rule row in the same change, never an invented folder.
13
+ - Loses a row when work is resolved → **queue**. A fixed name, one row per item; extend an existing queue before inventing one.
14
14
 
15
15
  When a draft wants to be both — the current state *and* the story of getting there — split it: the state becomes a truth document, the story becomes a record that links to it. Never mix the natures in one body.
16
16
 
17
17
  ## 2. Place and name it
18
18
 
19
19
  - `docs/structure.md` is the placement authority — match the document's topic to its folder map before inventing a location.
20
- - **One canonical home per topic.** If a document on the topic already exists, extend it; a second document on the same topic is drift waiting to happen. Link, don't copy.
20
+ - **One canonical home per topic.** If a document on the topic already exists, extend it; a second document on the same topic is drift. Link, don't copy.
21
21
  - A new topic *folder* gets a `Readme.md` landing page that describes what the folder holds and how its files are named, never a row per file (`type: folder-index`).
22
22
 
23
23
  ## 3. Shape it
24
24
 
25
- - **Open with the goal.** The first line under the H1 states what the document is for and who reads it — a reader (or agent) landing here cold decides in one sentence whether to keep reading.
25
+ - **Open with the goal.** The first line under the H1 states what the document is for and who reads it, so a reader landing cold decides in one sentence whether to keep reading.
26
26
  - **Headings are noun phrases** — no verb, no tense, no person (`references/style-guide.md` § Labels).
27
27
  - **Headings are retrieval keys.** Sections get pulled out of context by search and agents; qualify generic headings with the topic (`## Merge rules — data sync`, not `## Rules`) so each stands alone.
28
28
  - **Tables for enumerable facts, prose for judgment.** One row per item; anything needing a *because* lives in prose around the table, never inside a cell.
@@ -38,4 +38,4 @@ When a draft wants to be both — the current state *and* the story of getting t
38
38
 
39
39
  **Stage 1 — context gathering.** Read what already exists on the topic, then draft the structure from §1–3 with sensible defaults for audience, purpose and format. Ask only the questions whose answer the repository cannot give and a default would get wrong (usually one to three), each with your recommended answer, in one message.
40
40
 
41
- **Stage 2 — draft.** Show the structure with the questions, then draft the whole document on the answers or the defaults. The user indicates changes — learn their style from their edits; don't silently rewrite them.
41
+ **Stage 2 — draft.** Show the structure with the questions, then draft the whole document on the answers or the defaults. Learn the user's style from the changes they make, and **never** silently rewrite their edits.
@@ -234,8 +234,9 @@ function lintFile(path, findings) {
234
234
  findings.push({ path, n: 1, severity: 'block', id: 'record-type-in-truth-location', message: `\`type: ${declared}\` is a record genre declared in a truth location — move the file to \`docs/history/\` if it is a record, or give it its location's genre` });
235
235
  }
236
236
 
237
- // A folder index (Readme.md/README.md) is a browse page, not a feature doc — it owns no code.
238
- const isFolderIndex = /(^|\/)(readme)\.md$/i.test(path);
237
+ // A folder index (Readme.md/README.md) is a browse page that owns no code; a Readme declaring an owning genre is
238
+ // that folder's landing document and is graded as its genre instead.
239
+ const isFolderIndex = /(^|\/)(readme)\.md$/i.test(path) && !['feature', 'package', 'system'].includes(declaredType(text));
239
240
 
240
241
  // An index names folders, never files (SKILL.md § Indexes and descriptions). A link from a folder index or
241
242
  // the authority map to an individual document is a row that must be edited on every add, rename
@@ -61,7 +61,7 @@ Every fact about a genre lives in one row of the table below: its template, its
61
61
 
62
62
  ## Ownership
63
63
 
64
- Three genres speak for code — **feature**, **package**, **system** — and a **UX** document speaks for a surface's components where none of them does (`ux-behavior.md`). A document names the objects it designs in `objects:`; a source file names the document that speaks for it in its path header. The harness's ownership scan reads one edge today, the transitional `owns:` region glob on each owning document (`packages/{name}/**` on a package, a machine's subtrees on a system, a feature's own directory on a feature), and the narrower glob wins. The header pointer is written now so the scan can switch to it and the object closure without a second pass over the code (`references/frontmatter.md`).
64
+ Three genres speak for code — **feature**, **package**, **system** — and a **UX** document speaks for a surface's components where none of them does (`ux-behavior.md`). A document names the objects it designs in `objects:`; a source file names the document that speaks for it in its path header. The harness's ownership scan reads one edge, the transitional `owns:` region glob on each owning document (`packages/{name}/**` on a package, a machine's subtrees on a system, a feature's own directory on a feature), and the narrower glob wins. The header pointer is written alongside it so the scan can switch to it and the object closure without a second pass over the code (`references/frontmatter.md`).
65
65
 
66
66
  ## Baseline scaffolds
67
67
 
@@ -1,4 +1,4 @@
1
- # Acceptance Criteria
1
+ # Acceptance criteria
2
2
 
3
3
  Truth document. Use for: the promises one capability must keep, stated as machine-parseable claims. Lives in `docs/acceptance/`, one `kebab-case.md` per capability. Written at specification time — before implementation — and read by verification surfaces, which parse each `AC-n` line as a claim to grade the built product against.
4
4
 
@@ -1,4 +1,4 @@
1
- # API Reference (docs/architecture/api.md)
1
+ # API reference (docs/architecture/api.md)
2
2
 
3
3
  Truth document. Use for: the consolidated catalog of the system's HTTP surface — every live route in one place. This is the **reference document** for the API surface: a route's shape lives here or in the generated spec, never in a feature doc, which states what the route promises and leaves its shape to this catalog. If the repo generates an OpenAPI spec, this doc points at it and carries only what the spec can't (auth model, conventions, ownership links).
4
4
 
@@ -24,7 +24,7 @@ Don't write an AD for:
24
24
 
25
25
  `Proposed` → `Accepted` → `Deprecated`
26
26
 
27
- Frontmatter `status:` is the single lifecycle source of truth. An AD stays `Accepted` for as long as its subject is live — revisions rewrite the body and never change the status, and there is **no `Superseded` state**: supersession is an edit plus a changelog entry, not a new document. Set `Deprecated` only when the subject itself is retired (the component is gone, the contract no longer exists); state where the replacement lives, if any.
27
+ Frontmatter `status:` is the single lifecycle source of truth; **never** also write "Status: Accepted" in the body. An AD stays `Accepted` for as long as its subject is live — revisions rewrite the body and never change the status, and there is **no `Superseded` state**: supersession is an edit plus a changelog entry, not a new document. Set `Deprecated` only when the subject itself is retired (the component is gone, the contract no longer exists); state where the replacement lives, if any.
28
28
 
29
29
  ### Naming
30
30
 
@@ -110,12 +110,8 @@ reviewers: [] # optional
110
110
 
111
111
  ### Rules
112
112
 
113
- - **One subject per AD; all its revisions stay inside it.** Two genuinely different subjects means two ADs — a revision of an existing subject never does.
114
- - **The body is always the current truth.** Rewrite affected sections on every revision; never leave a superseded choice narrated in the body — the Decision Changelog carries the journey, with each entry naming the old choice and the trigger.
115
- - Decision-first. The first paragraph after the heading is the answer; readers should not need to scroll.
116
113
  - **Consequences lists positives, negatives, AND risks.** Pros-only Consequences is the genre's classic failure — one AD's honest resulting context is the input context for the next.
117
114
  - **Options Considered keeps every genuinely rejected alternative with the real reason.** Informed rejections are the most expensive knowledge to lose; a rejection made with strong prior art in view says so explicitly.
118
115
  - **Keep it short — one to two pages.** Long decision docs don't get updated. How-it-works detail belongs in the owning feature doc; execution in a plan. Link, don't embed.
119
- - No section numbering (`§5.1.1`). Use markdown headings only — inserting a section shouldn't renumber everything.
120
- - Frontmatter `status` is the single source of truth for lifecycle. Don't also write "Status: Accepted" in the body.
121
- - The Decision Changelog is append-only, newest first. Typo and formatting fixes don't get entries.
116
+ - **No section numbering** (`§5.1.1`); markdown headings only, so inserting a section renumbers nothing.
117
+ - **The Decision Changelog is append-only, newest first**, one entry per revision naming the old choice and the trigger. Typo and formatting fixes get no entry.
@@ -1,4 +1,4 @@
1
- # Behavioral Checklist (docs/tests/{feature}.md)
1
+ # Behavioral checklist (docs/tests/{feature}.md)
2
2
 
3
3
  Truth document. Use for: **how to verify one feature's promised behavior by driving the real product** — the browser, the CLI binary, HTTP against the running service. One file per feature, named for the feature doc that owns the code (`docs/features/auth.md` → `docs/tests/auth.md`).
4
4
 
@@ -1,4 +1,4 @@
1
- # Changelog Entry
1
+ # Changelog entry
2
2
 
3
3
  Record. Use for: the per-unit-of-work journal of what changed and how it was refined — one file per entry under `docs/history/changelog/YYYY-MM-DD-{three-words}.md`, written by whoever does the work and frozen inside the commit it describes. The three words name the work, not the commit. Trigger and lifecycle policy: the `changelog` rule; distillation is the `retro` agent.
4
4
 
@@ -22,7 +22,7 @@ description: "How {Project Name}'s changelog works: one entry per unit of work u
22
22
  ## Owed entries
23
23
 
24
24
  - **Plan completion:** a draft entry, written when the plan reaches `Status: Complete`.
25
- - **Commit:** every non-exempt commit carries its entry inside it (the `changelog` rule lists the exemptions).
25
+ - **Commit:** every non-exempt commit carries its entry inside it (the closed exemption list is the `documentation` skill's `templates/changelog-entry.md`).
26
26
 
27
27
  ## Reading the changelog
28
28
 
@@ -1,8 +1,8 @@
1
- # docs/README.md (Documentation Root)
1
+ # docs/README.md (documentation root)
2
2
 
3
- Truth document. Use for: the entry point for all documentation in a repo. Created during baseline audit.
3
+ Truth document. Use for: the entry point for all documentation in a repo, created by the `maintenance` agent's baseline.
4
4
 
5
- **This file describes directories, never files.** Each section names one folder under `docs/` and says what the folder holds, who reads it and how its files are named — a description of the directory, not of its contents. No per-file rows, no file tree, no `├──` block: the tree is `structure.md`'s, as the authority on placement, and `ls` is the roster. A row per file forces an index edit on every file added, renamed or retired, and the index's own history then records roster churn instead of what the index said. Each section below names a folder and says what the folder holds and how its files are named; the only files an index may name are the mandated scaffolds and the root instruction files, listed in `SKILL.md` § The three natures. The repo-root `README.md` routes the team and agents in by intent; this file describes the folders of the docs tree — each links the other once and neither restates the other. Naming a file without a link is the same row: no filename, no record ID (`AD-010`), no per-record table. Each file's own `description:` frontmatter is its account, read with `grep -m1 '^description:' <folder>/*.md`. `doc-lint` blocks a folder index that links an individual document (`index-lists-files`), names one (`index-names-records`) or draws a tree (`index-file-tree`).
5
+ **This file describes directories, never files.** Each section names one folder under `docs/` and says what the folder holds, who reads it and how its files are named. No per-file rows, no file tree, no `├──` block: the tree is `structure.md`'s, as the authority on placement, and `ls` is the roster. A row per file forces an index edit on every file added, renamed or retired, so the index's history records roster churn instead of what the index said. Naming a file without a link is the same row: no filename, no record ID (`AD-010`), no per-record table. The only files an index may name are the mandated scaffolds and the root instruction files (`SKILL.md` § Indexes and descriptions). Each file's own `description:` frontmatter is its account, read with `grep -m1 '^description:' <folder>/*.md`. `doc-lint` blocks a folder index that links an individual document (`index-lists-files`), names one (`index-names-records`) or draws a tree (`index-file-tree`). The repo-root `README.md` routes the team and agents in by intent and this file describes the folders of the docs tree; each links the other once and neither restates the other.
6
6
 
7
7
  **Link only what exists.** Every row below is a placeholder — drop any whose target the repo does not have. Most `history/` and `architecture/` folders are created on first use, so linking them unconditionally ships a docs index with dead links on day one. An index is a browse page: a link that resolves to nothing is worse than an absent row.
8
8
 
@@ -1,4 +1,4 @@
1
- # Doctrine Documentation (docs/architecture/common/{concern}.md)
1
+ # Doctrine documentation (docs/architecture/common/{concern}.md)
2
2
 
3
3
  Truth document. Use for **one concern the platform handles everywhere**: authentication, authorization, storage, the API protocol, credentials, telemetry. One file per concern, named for the concern. A doctrine document speaks for no code: no source header names it, and it carries no `owns:`. The surfaces bound by it are the documents that design or touch the objects it governs, computed through those objects, and each names it in its Scope.
4
4
 
@@ -1,4 +1,4 @@
1
- # Domain Model (docs/architecture/domain-model.md)
1
+ # Domain model (docs/architecture/domain-model.md)
2
2
 
3
3
  Truth document. Use for: the entities the system is about — what they are, how they relate, and who owns their state. The vocabulary here must match the glossary and the code; when they disagree, fix the disagreement, don't document around it.
4
4
 
@@ -1,4 +1,4 @@
1
- # Environment Registry (docs/operations/environment.md)
1
+ # Environment registry (docs/operations/environment.md)
2
2
 
3
3
  Truth document. Use for: the config surface — every variable the code reads, in one table. `.env.example` mirrors this doc's variable list.
4
4
 
@@ -1,4 +1,4 @@
1
- # Feature Documentation (docs/features/{feature}.md)
1
+ # Feature documentation (docs/features/{feature}.md)
2
2
 
3
3
  Truth document. Use for every feature in `docs/features/`: something a person points at, such as an address, a command family or a named control. One file per feature, cut by the objects it designs, never by the code's routers, tables, plans or packages. The file persists from design (`status: draft`) to live reference (`status: active`).
4
4
 
@@ -8,9 +8,9 @@ Truth document. Use for every feature in `docs/features/`: something a person po
8
8
  - **Each bullet is a bold label, then one or two third-person sentences** saying what happens: "**Organization user:** user lands in their existing organization", never "you land…".
9
9
  - **Flows carry the journey; Decisions carry the reasons; Promises run deepest.**
10
10
 
11
- The frontmatter names the objects the feature designs; which files it speaks for is never listed in the body. The ownership scan reads its transitional `owns:` region glob today, and each owned source file's header names this document for when the scan switches (`references/frontmatter.md`). Every computable fact (columns, vocabularies, foreign keys, writers, routes, guards, files) is the code graph's (`docs/architecture/systems/knowledge-layer.md`), and a hand-typed copy is the defect this genre removes. Code is named only where a person types or sees it (a page, a command, a flag, an environment variable) or at a cross-cutting seam the graph would not lead a reader to.
11
+ The frontmatter names the objects the feature designs; which files it speaks for is never listed in the body. The ownership scan reads its transitional `owns:` region glob, and each owned source file's header names this document, ready for when the scan switches (`references/frontmatter.md`). Every computable fact (columns, vocabularies, foreign keys, writers, routes, guards, files) is the code graph's (`docs/architecture/systems/knowledge-layer.md`), and a hand-typed copy is the defect this genre removes. Code is named only where a person types or sees it (a page, a command, a flag, an environment variable) or at a cross-cutting seam the graph would not lead a reader to.
12
12
 
13
- **A feature document runs deepest toward its end.** Scope and Flows are the model and the journey. **Promises** goes as deep as the behaviour does: every state the surface can be in, every edge case, what a refusal tells the person, and the exact wording wherever the wording itself is promised. That depth is earned because a person or a test checks it and the code cannot state it as intent. It still stops before mechanism. A promise reads "a removed membership shows a panel, not a redirect", never which route answers it.
13
+ **A feature document runs deepest toward its end.** Scope and Flows are the model and the journey. **Promises** goes as deep as the behaviour does: every state the surface can be in, every edge case, what a refusal tells the person, and the exact wording wherever the wording itself is promised. That depth is earned because a person or a test checks it and the code cannot state it as intent. It stops before mechanism. A promise reads "a removed membership shows a panel, not a redirect", never which route answers it.
14
14
 
15
15
  **Sections:**
16
16
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Record. Use for: the account an **unattended or multi-session build** leaves the person who owns it — written by the orchestrating session as its last act, before the owner's first decision, read in one sitting. It is a **decision queue, an undo manual and a resume file**, in that order: is it done · what must I decide today · what escaped the repository and how do I undo it · can I see it working · what was decided for me and how do I overturn it · what is red and whose it is. Everything below the divider is for the next session, not the owner. It is not a pull-request description (which argues for a diff), not a changelog entry (which carries refinement context) and not a plan (which is frozen). It is mutable while `status: open` — a successor that re-proves a state line corrects it in place and appends one Timeline row — and **freezes when the owner has acted on § 1 (`status: accepted`)**; a correction after that is a new dated hand-over linking back. Raw artefacts (plans, hand-offs, notes) live in a same-named folder beside it.
4
4
 
5
- Required: **Verdict**, **Owner decisions due**, **Live-world ledger** (even when empty), **Ten-minute walkthrough**, **Rulings on the owner's behalf**, **Red board**, **What was built**, **Proof**, **State**, **Open loops**, **Artefacts & mandate**. Optional: Left alone, Discoveries, Debt, Cost, Timeline.
5
+ Required: **Verdict**, **Owner decisions due**, **Live-world ledger** (even when empty), **Ten-minute walkthrough**, **Rulings on the owner's behalf**, **Red board**, **What was built**, **Proof**, **State**, **Open loops**, **Artefacts & mandate**. Optional: Untouched scope, Discoveries, Deferrable debt, Cost, Timeline.
6
6
 
7
7
  **Reading order is act → verify → understand.** Owner half, ~20 minutes: Verdict (1) · § 1 (2) · § 2 (2) · § 3 (10, at the product) · § 4 (3) · § 5–6 (2). Successor half, read when the job arrives: § 8–14 (~10).
8
8
 
@@ -168,7 +168,7 @@ Present tense; every row true of `as_of_commit`, and every row re-provable by it
168
168
  - **§ 8 Proof.** **An unproven claim is an empty cell, never a sentence** — prose has no empty cell to scan for. `Independent?` reads `no` whenever one agent authored both the code and its pin, or found, fixed and pinned the same defect, and names who. Ledger counts are parsed from the plan, never quoted from an agent's summary, so `blocked` cannot hide inside "discharged". Every `G-n` names the command that would close it.
169
169
  - **§ 9 State.** Present tense; a claim that cannot be re-proved by its `Re-prove` command does not belong here — it moves to § 15 as a dated event. Volatile things (`/tmp`, pid files, ports, tokens, browser connections) declare a lifetime and the command that makes them durable.
170
170
  - **§ 10–12.** A loop is a runnable command or a named question, never a noun phrase and never "investigate"; one needing a person's judgment states the question and the default in force. A discovery is a present-tense fact with a guard — "Workers Builds does not fire on a `dev` merge", not "we found that it didn't"; `none — {what would hold it}` is an honest guard that feeds the backlog. Debt names where it now lives, so this file can be deleted without losing it.
171
- - **§ 13–14.** Every uninstrumented number reads `unmeasured — {what would have measured it}`; a blank reports a cheaper run than the one that happened. **State whether the run's own corpus is version-controlled** — an untracked corpus is one `rm -rf` from being three PR descriptions, and archiving it is a § 1 row.
171
+ - **§ 13–14.** Every uninstrumented number reads `unmeasured — {what would measure it}`; a blank reports a cheaper run than the one that happened. **State whether the run's own corpus is version-controlled** — an untracked corpus is one `rm -rf` from being three PR descriptions, and archiving it is a § 1 row.
172
172
  - **Ids are stable and run-global** — `D-`, `G-`, `L-`, `X-`, `T-` — so a PR comment or a successor cites a row instead of re-describing it. A withdrawn row keeps its id and states what disproved it.
173
173
  - **Evidence is an address that outlives the run** — `path:line`, a 7-char sha, a PR number, a URL, or a command. A branch name is not a pointer; a `/tmp` log is not evidence — copy it into the record folder first.
174
174
  - **Blanket claims are banned.** "All suites green", "every ledger discharged", "nothing was deployed" carry a count and the sha they are true of, or they become a `G-n` row.
@@ -1,4 +1,4 @@
1
- # Implementation Map (docs/operations/implementation-map.md)
1
+ # Implementation map (docs/operations/implementation-map.md)
2
2
 
3
3
  Truth document. Use for: **the cold-start execution contract of a project being built from its documented design** — one per repo, at `docs/operations/implementation-map.md`. It is authored by the **executing session at build start**, never generated at design time: build order is derived from the repo's actual feature docs and their stated dependencies, and a design-time prediction of it goes stale the day reality disagrees. It lives in operations because it says *how to proceed*, not *what is true of the design*.
4
4
 
@@ -1,4 +1,4 @@
1
- # Migration Runbook (docs/history/migrations/YYYY-MM-DD-{slug}.md)
1
+ # Migration runbook (docs/history/migrations/YYYY-MM-DD-{slug}.md)
2
2
 
3
3
  Record. Use for: a **one-shot** migration, upgrade, or data operation — authored before execution, executed once, then outcome-stamped and frozen. Supporting scripts live beside it in a same-named folder when needed (`YYYY-MM-DD-{slug}/`).
4
4
 
@@ -1,4 +1,4 @@
1
- # Non-Goals (docs/architecture/non-goals.md)
1
+ # Non-goals (docs/architecture/non-goals.md)
2
2
 
3
3
  Truth document. Use for: what the system deliberately does **not** do. A non-goal is a decision, not an omission — each entry carries the why and what would reopen it. Readers (and agents) use this to stop re-proposing settled exclusions.
4
4
 
@@ -1,8 +1,8 @@
1
- # Operations Procedure (docs/operations/{procedure}.md)
1
+ # Operations procedure (docs/operations/{procedure}.md)
2
2
 
3
3
  Truth document. Use for: any **recurring** procedure — development, deployment, maintenance. The one-time first run (prerequisites, install, env files, first commands, the stack) is not one of these: it has its own template and a fixed name, `templates/setup.md` → `docs/operations/setup.md`, one per repo. A procedure is consulted mid-task, not read: exact commands, copy-paste runnable, no narrative. Updated in place whenever the workflow changes.
4
4
 
5
- A **one-shot** procedure (a migration, an upgrade, an incident response executed once) is not an operations doc — it is a **Migration Runbook** (record, below). The test: will someone run this again next month? Yes → operations. No → runbook.
5
+ A **one-shot** procedure (a migration, an upgrade, an incident response executed once) is not an operations doc — it is a **migration runbook** (record, `templates/migration-runbook.md`). The test: will someone run this again next month? Yes → operations. No → runbook.
6
6
 
7
7
  Required: **Goal**, **Steps**, **Verification**. Optional: Preconditions, Troubleshooting, Rollback — include only when they carry real content.
8
8
 
@@ -1,4 +1,4 @@
1
- # Package Documentation (docs/architecture/packages/{package}.md)
1
+ # Package documentation (docs/architecture/packages/{package}.md)
2
2
 
3
3
  Truth document. Use for: **one workspace package** — one unit of distribution: a manifest, a build, a binary, a bundle, a Worker. One file per package, named for its folder.
4
4
 
@@ -1,4 +1,4 @@
1
- # Protected Files
1
+ # Protected files
2
2
 
3
3
  Truth document. Use for: documenting critical files that need approval before modification.
4
4
 
@@ -1,4 +1,4 @@
1
- # Project Root README (/README.md)
1
+ # Project root README (/README.md)
2
2
 
3
3
  Truth document. Use for: the repository root `/README.md`. It opens outward — what the product does, for whom, and where it runs, in a user's terms — then turns inward for the team and coding agents: what state the repo is in, how it works, what its parts are and what must not break, then routes every other question into `docs/`. The outward part comes first because it is what a stranger reads; the inward part is longer because it is what the team uses. **It hosts nothing it can link to.** It is distinct from `docs/README.md`, which describes the folders of the docs tree, and from `CLAUDE.md` / `AGENTS.md`, the standing rules an agent loads. It points at both and restates neither.
4
4
 
@@ -1,4 +1,4 @@
1
- # Security Overview (docs/architecture/security.md)
1
+ # Security overview (docs/architecture/security.md)
2
2
 
3
3
  Truth document. Use for: the single place the system's security posture is stated — assets, trust boundaries, controls, and accepted risks. Controls link to the code that implements them; this doc asserts, the code proves.
4
4
 
@@ -1,4 +1,4 @@
1
- # System Overview (docs/architecture/system-design.md)
1
+ # System overview (docs/architecture/system-design.md)
2
2
 
3
3
  Truth document. Use for: the bird's-eye view — what the system is, its subsystems, and how they connect. The first doc a new reader opens after the README; austere and short (two screens max). Depth lives in feature docs — this doc maps, it doesn't explain.
4
4
 
@@ -1,4 +1,4 @@
1
- # System Documentation (docs/architecture/systems/{system}.md)
1
+ # System documentation (docs/architecture/systems/{system}.md)
2
2
 
3
3
  Truth document. Use for: **one machine that spans packages**, which a person cannot point at — the walk, the egress, the ingest, the settlement, a gate, a sweep, a door an agent calls. One file per machine, named for the machine. A thing a person navigates to is a feature document, even when it owns tables; a unit of distribution is a package document.
4
4
 
@@ -1,4 +1,4 @@
1
- # Testing Strategy (docs/architecture/common/testing.md)
1
+ # Testing strategy (docs/architecture/common/testing.md)
2
2
 
3
3
  Truth document. Use for: the repo's test posture — what is tested at which level, how to run it, and what is deliberately untested. The framework choices come from the harness testing rule; this doc records how *this repo* applies them.
4
4