@nurix/etna 0.20.35 → 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 (233) hide show
  1. package/data/catalog/rules/changelog.md +1 -1
  2. package/data/catalog/skills/nustack/SKILL.md +2 -2
  3. package/data/catalog/skills/nustack/references/cli-design.md +35 -35
  4. package/data/catalog/skills/nustack/references/monorepo-master-list.md +6 -6
  5. package/data/catalog/skills/nustack/references/monorepo-setup.md +13 -13
  6. package/data/catalog/skills/nustack/references/publishing.md +40 -39
  7. package/data/harness-index.json +1 -1
  8. package/data/harnesses/code/CLAUDE.md +4 -4
  9. package/data/harnesses/code/agents/brainstorm.md +2 -2
  10. package/data/harnesses/code/agents/lld-mode.md +2 -2
  11. package/data/harnesses/code/agents/maintenance.md +17 -17
  12. package/data/harnesses/code/codex/agents/brainstorm.toml +6 -2
  13. package/data/harnesses/code/codex/agents/lld-mode.toml +2 -2
  14. package/data/harnesses/code/codex/agents/maintenance.toml +18 -17
  15. package/data/harnesses/code/docs/README.md +9 -17
  16. package/data/harnesses/code/docs/history/CHANGELOG.md +19 -18
  17. package/data/harnesses/code/docs/structure.md +60 -45
  18. package/data/harnesses/code/harness.json +2 -2
  19. package/data/harnesses/code/hooks/compliance.mjs +8 -2
  20. package/data/harnesses/code/hooks/lib/sweep.mjs +3 -2
  21. package/data/harnesses/code/rules/changelog.md +1 -1
  22. package/data/harnesses/code/skills/boundary/SKILL.md +33 -22
  23. package/data/harnesses/code/skills/boundary/references/index.md +2 -4
  24. package/data/harnesses/code/skills/boundary/references/mechanisms.md +3 -10
  25. package/data/harnesses/code/skills/boundary/references/packs/frontend.md +17 -17
  26. package/data/harnesses/code/skills/boundary/references/packs/generic-tail.md +1 -1
  27. package/data/harnesses/code/skills/brainstorm/README.md +11 -13
  28. package/data/harnesses/code/skills/brainstorm/SKILL.md +149 -130
  29. package/data/harnesses/code/skills/brainstorm/references/doctrine.md +48 -51
  30. package/data/harnesses/code/skills/brainstorm/references/harvest.md +51 -57
  31. package/data/harnesses/code/skills/brainstorm/references/session-schema.md +48 -42
  32. package/data/harnesses/code/skills/design/SKILL.md +31 -35
  33. package/data/harnesses/code/skills/design/data/iconography.md +2 -2
  34. package/data/harnesses/code/skills/design/references/compose.md +14 -16
  35. package/data/harnesses/code/skills/design/references/foundations.md +5 -5
  36. package/data/harnesses/code/skills/design/references/intake.md +6 -6
  37. package/data/harnesses/code/skills/design/references/object-pass.md +1 -1
  38. package/data/harnesses/code/skills/design/references/ship-gate.md +5 -5
  39. package/data/harnesses/code/skills/design/references/ux-patterns/Readme.md +4 -4
  40. package/data/harnesses/code/skills/design/references/ux-patterns/ai-layer.md +1 -1
  41. package/data/harnesses/code/skills/design/references/ux-patterns/container-choice.md +1 -1
  42. package/data/harnesses/code/skills/design/references/ux-patterns/dashboards.md +1 -1
  43. package/data/harnesses/code/skills/design/references/ux-patterns/modes.md +1 -1
  44. package/data/harnesses/code/skills/design/references/ux-patterns/object-model.md +2 -2
  45. package/data/harnesses/code/skills/design/references/ux-patterns/promotion-demotion.md +1 -1
  46. package/data/harnesses/code/skills/design/references/ux-patterns/settings.md +1 -1
  47. package/data/harnesses/code/skills/design/references/ux-patterns/standard-pages.md +1 -1
  48. package/data/harnesses/code/skills/documentation/SKILL.md +92 -143
  49. package/data/harnesses/code/skills/documentation/references/examples.md +45 -72
  50. package/data/harnesses/code/skills/documentation/references/frontmatter.md +8 -8
  51. package/data/harnesses/code/skills/documentation/references/instruction-style.md +3 -3
  52. package/data/harnesses/code/skills/documentation/references/source-comments.md +19 -0
  53. package/data/harnesses/code/skills/documentation/references/style-guide.md +25 -11
  54. package/data/harnesses/code/skills/documentation/references/untemplated.md +11 -10
  55. package/data/harnesses/code/skills/documentation/scripts/doc-lint.mjs +181 -40
  56. package/data/harnesses/code/skills/documentation/templates/Readme.md +68 -41
  57. package/data/harnesses/code/skills/documentation/templates/acceptance-criteria.md +11 -19
  58. package/data/harnesses/code/skills/documentation/templates/api-reference.md +8 -3
  59. package/data/harnesses/code/skills/documentation/templates/architecture-decision.md +8 -12
  60. package/data/harnesses/code/skills/documentation/templates/backlog.md +2 -2
  61. package/data/harnesses/code/skills/documentation/templates/behavioral-checklist.md +10 -17
  62. package/data/harnesses/code/skills/documentation/templates/bookkeeping.md +2 -2
  63. package/data/harnesses/code/skills/documentation/templates/changelog-entry.md +2 -2
  64. package/data/harnesses/code/skills/documentation/templates/changelog-index.md +21 -29
  65. package/data/harnesses/code/skills/documentation/templates/docs-readme.md +4 -4
  66. package/data/harnesses/code/skills/documentation/templates/doctrine.md +3 -3
  67. package/data/harnesses/code/skills/documentation/templates/domain-model.md +10 -5
  68. package/data/harnesses/code/skills/documentation/templates/environment-registry.md +7 -2
  69. package/data/harnesses/code/skills/documentation/templates/feature.md +6 -6
  70. package/data/harnesses/code/skills/documentation/templates/glossary.md +6 -1
  71. package/data/harnesses/code/skills/documentation/templates/handover.md +17 -17
  72. package/data/harnesses/code/skills/documentation/templates/implementation-map.md +10 -5
  73. package/data/harnesses/code/skills/documentation/templates/journal.md +2 -2
  74. package/data/harnesses/code/skills/documentation/templates/memory-main.md +2 -2
  75. package/data/harnesses/code/skills/documentation/templates/migration-runbook.md +1 -1
  76. package/data/harnesses/code/skills/documentation/templates/non-goals.md +8 -3
  77. package/data/harnesses/code/skills/documentation/templates/operations-procedure.md +8 -3
  78. package/data/harnesses/code/skills/documentation/templates/package.md +5 -9
  79. package/data/harnesses/code/skills/documentation/templates/plan.md +5 -11
  80. package/data/harnesses/code/skills/documentation/templates/protected-files.md +7 -2
  81. package/data/harnesses/code/skills/documentation/templates/root-readme.md +5 -5
  82. package/data/harnesses/code/skills/documentation/templates/security-overview.md +9 -4
  83. package/data/harnesses/code/skills/documentation/templates/setup.md +6 -6
  84. package/data/harnesses/code/skills/documentation/templates/system-overview.md +12 -7
  85. package/data/harnesses/code/skills/documentation/templates/system.md +2 -2
  86. package/data/harnesses/code/skills/documentation/templates/testing-strategy.md +10 -5
  87. package/data/harnesses/code/skills/documentation/templates/ux-behavior.md +14 -5
  88. package/data/harnesses/code/skills/issue-bridge/SKILL.md +51 -16
  89. package/data/harnesses/code/skills/issue-bridge/references/trackers/github.md +5 -5
  90. package/data/harnesses/code/skills/issue-bridge/references/trackers/jira.md +11 -8
  91. package/data/harnesses/code/skills/issue-bridge/references/trackers/linear.md +16 -11
  92. package/data/harnesses/code/skills/nustack-graph/SKILL.md +38 -29
  93. package/data/harnesses/code/skills/polygraph/references/dispatch.md +31 -18
  94. package/data/harnesses/code/skills/polygraph/references/rows.md +11 -6
  95. package/data/harnesses/code/skills/schema-design/SKILL.md +39 -41
  96. package/data/harnesses/code/skills/test/SKILL.md +38 -42
  97. package/data/harnesses/code/skills/testing/SKILL.md +83 -73
  98. package/data/harnesses/code/skills/workflow-mapper/SKILL.md +156 -193
  99. package/data/harnesses/code/skills/workflow-mapper/references/patterns.md +15 -15
  100. package/data/harnesses/delivery/CLAUDE.md +1 -1
  101. package/data/harnesses/delivery/agents/brainstorm.md +2 -2
  102. package/data/harnesses/delivery/agents/lld-mode.md +2 -2
  103. package/data/harnesses/delivery/agents/maintenance.md +17 -17
  104. package/data/harnesses/delivery/codex/agents/brainstorm.toml +6 -2
  105. package/data/harnesses/delivery/codex/agents/lld-mode.toml +2 -2
  106. package/data/harnesses/delivery/codex/agents/maintenance.toml +18 -17
  107. package/data/harnesses/delivery/harness.json +2 -2
  108. package/data/harnesses/delivery/rules/changelog.md +1 -1
  109. package/data/harnesses/delivery/skills/brainstorm/README.md +11 -13
  110. package/data/harnesses/delivery/skills/brainstorm/SKILL.md +149 -130
  111. package/data/harnesses/delivery/skills/brainstorm/references/doctrine.md +48 -51
  112. package/data/harnesses/delivery/skills/brainstorm/references/harvest.md +51 -57
  113. package/data/harnesses/delivery/skills/brainstorm/references/session-schema.md +48 -42
  114. package/data/harnesses/delivery/skills/cost-report/SKILL.md +10 -10
  115. package/data/harnesses/delivery/skills/documentation/SKILL.md +92 -143
  116. package/data/harnesses/delivery/skills/documentation/references/examples.md +45 -72
  117. package/data/harnesses/delivery/skills/documentation/references/frontmatter.md +8 -8
  118. package/data/harnesses/delivery/skills/documentation/references/instruction-style.md +3 -3
  119. package/data/harnesses/delivery/skills/documentation/references/source-comments.md +19 -0
  120. package/data/harnesses/delivery/skills/documentation/references/style-guide.md +25 -11
  121. package/data/harnesses/delivery/skills/documentation/references/untemplated.md +11 -10
  122. package/data/harnesses/delivery/skills/documentation/scripts/doc-lint.mjs +181 -40
  123. package/data/harnesses/delivery/skills/documentation/templates/Readme.md +68 -41
  124. package/data/harnesses/delivery/skills/documentation/templates/acceptance-criteria.md +11 -19
  125. package/data/harnesses/delivery/skills/documentation/templates/api-reference.md +8 -3
  126. package/data/harnesses/delivery/skills/documentation/templates/architecture-decision.md +8 -12
  127. package/data/harnesses/delivery/skills/documentation/templates/backlog.md +2 -2
  128. package/data/harnesses/delivery/skills/documentation/templates/behavioral-checklist.md +10 -17
  129. package/data/harnesses/delivery/skills/documentation/templates/bookkeeping.md +2 -2
  130. package/data/harnesses/delivery/skills/documentation/templates/changelog-entry.md +2 -2
  131. package/data/harnesses/delivery/skills/documentation/templates/changelog-index.md +21 -29
  132. package/data/harnesses/delivery/skills/documentation/templates/docs-readme.md +4 -4
  133. package/data/harnesses/delivery/skills/documentation/templates/doctrine.md +3 -3
  134. package/data/harnesses/delivery/skills/documentation/templates/domain-model.md +10 -5
  135. package/data/harnesses/delivery/skills/documentation/templates/environment-registry.md +7 -2
  136. package/data/harnesses/delivery/skills/documentation/templates/feature.md +6 -6
  137. package/data/harnesses/delivery/skills/documentation/templates/glossary.md +6 -1
  138. package/data/harnesses/delivery/skills/documentation/templates/handover.md +17 -17
  139. package/data/harnesses/delivery/skills/documentation/templates/implementation-map.md +10 -5
  140. package/data/harnesses/delivery/skills/documentation/templates/journal.md +2 -2
  141. package/data/harnesses/delivery/skills/documentation/templates/memory-main.md +2 -2
  142. package/data/harnesses/delivery/skills/documentation/templates/migration-runbook.md +1 -1
  143. package/data/harnesses/delivery/skills/documentation/templates/non-goals.md +8 -3
  144. package/data/harnesses/delivery/skills/documentation/templates/operations-procedure.md +8 -3
  145. package/data/harnesses/delivery/skills/documentation/templates/package.md +5 -9
  146. package/data/harnesses/delivery/skills/documentation/templates/plan.md +5 -11
  147. package/data/harnesses/delivery/skills/documentation/templates/protected-files.md +7 -2
  148. package/data/harnesses/delivery/skills/documentation/templates/root-readme.md +5 -5
  149. package/data/harnesses/delivery/skills/documentation/templates/security-overview.md +9 -4
  150. package/data/harnesses/delivery/skills/documentation/templates/setup.md +6 -6
  151. package/data/harnesses/delivery/skills/documentation/templates/system-overview.md +12 -7
  152. package/data/harnesses/delivery/skills/documentation/templates/system.md +2 -2
  153. package/data/harnesses/delivery/skills/documentation/templates/testing-strategy.md +10 -5
  154. package/data/harnesses/delivery/skills/documentation/templates/ux-behavior.md +14 -5
  155. package/data/harnesses/delivery/skills/escalate/SKILL.md +11 -11
  156. package/data/harnesses/delivery/skills/prompt-eval/SKILL.md +8 -8
  157. package/data/harnesses/delivery/skills/prompt-library/SKILL.md +30 -9
  158. package/data/harnesses/delivery/skills/route/SKILL.md +8 -8
  159. package/data/harnesses/etna/CLAUDE.md +2 -2
  160. package/data/harnesses/etna/agents/brainstorm.md +2 -2
  161. package/data/harnesses/etna/agents/lld-mode.md +2 -2
  162. package/data/harnesses/etna/agents/maintenance.md +17 -17
  163. package/data/harnesses/etna/codex/agents/brainstorm.toml +6 -2
  164. package/data/harnesses/etna/codex/agents/lld-mode.toml +2 -2
  165. package/data/harnesses/etna/codex/agents/maintenance.toml +18 -17
  166. package/data/harnesses/etna/harness.json +2 -2
  167. package/data/harnesses/etna/rules/changelog.md +1 -1
  168. package/data/harnesses/etna/skills/boundary/SKILL.md +33 -22
  169. package/data/harnesses/etna/skills/boundary/references/index.md +2 -4
  170. package/data/harnesses/etna/skills/boundary/references/mechanisms.md +3 -10
  171. package/data/harnesses/etna/skills/boundary/references/packs/frontend.md +17 -17
  172. package/data/harnesses/etna/skills/boundary/references/packs/generic-tail.md +1 -1
  173. package/data/harnesses/etna/skills/brainstorm/README.md +11 -13
  174. package/data/harnesses/etna/skills/brainstorm/SKILL.md +149 -130
  175. package/data/harnesses/etna/skills/brainstorm/references/doctrine.md +48 -51
  176. package/data/harnesses/etna/skills/brainstorm/references/harvest.md +51 -57
  177. package/data/harnesses/etna/skills/brainstorm/references/session-schema.md +48 -42
  178. package/data/harnesses/etna/skills/documentation/SKILL.md +92 -143
  179. package/data/harnesses/etna/skills/documentation/references/examples.md +45 -72
  180. package/data/harnesses/etna/skills/documentation/references/frontmatter.md +8 -8
  181. package/data/harnesses/etna/skills/documentation/references/instruction-style.md +3 -3
  182. package/data/harnesses/etna/skills/documentation/references/source-comments.md +19 -0
  183. package/data/harnesses/etna/skills/documentation/references/style-guide.md +25 -11
  184. package/data/harnesses/etna/skills/documentation/references/untemplated.md +11 -10
  185. package/data/harnesses/etna/skills/documentation/scripts/doc-lint.mjs +181 -40
  186. package/data/harnesses/etna/skills/documentation/templates/Readme.md +68 -41
  187. package/data/harnesses/etna/skills/documentation/templates/acceptance-criteria.md +11 -19
  188. package/data/harnesses/etna/skills/documentation/templates/api-reference.md +8 -3
  189. package/data/harnesses/etna/skills/documentation/templates/architecture-decision.md +8 -12
  190. package/data/harnesses/etna/skills/documentation/templates/backlog.md +2 -2
  191. package/data/harnesses/etna/skills/documentation/templates/behavioral-checklist.md +10 -17
  192. package/data/harnesses/etna/skills/documentation/templates/bookkeeping.md +2 -2
  193. package/data/harnesses/etna/skills/documentation/templates/changelog-entry.md +2 -2
  194. package/data/harnesses/etna/skills/documentation/templates/changelog-index.md +21 -29
  195. package/data/harnesses/etna/skills/documentation/templates/docs-readme.md +4 -4
  196. package/data/harnesses/etna/skills/documentation/templates/doctrine.md +3 -3
  197. package/data/harnesses/etna/skills/documentation/templates/domain-model.md +10 -5
  198. package/data/harnesses/etna/skills/documentation/templates/environment-registry.md +7 -2
  199. package/data/harnesses/etna/skills/documentation/templates/feature.md +6 -6
  200. package/data/harnesses/etna/skills/documentation/templates/glossary.md +6 -1
  201. package/data/harnesses/etna/skills/documentation/templates/handover.md +17 -17
  202. package/data/harnesses/etna/skills/documentation/templates/implementation-map.md +10 -5
  203. package/data/harnesses/etna/skills/documentation/templates/journal.md +2 -2
  204. package/data/harnesses/etna/skills/documentation/templates/memory-main.md +2 -2
  205. package/data/harnesses/etna/skills/documentation/templates/migration-runbook.md +1 -1
  206. package/data/harnesses/etna/skills/documentation/templates/non-goals.md +8 -3
  207. package/data/harnesses/etna/skills/documentation/templates/operations-procedure.md +8 -3
  208. package/data/harnesses/etna/skills/documentation/templates/package.md +5 -9
  209. package/data/harnesses/etna/skills/documentation/templates/plan.md +5 -11
  210. package/data/harnesses/etna/skills/documentation/templates/protected-files.md +7 -2
  211. package/data/harnesses/etna/skills/documentation/templates/root-readme.md +5 -5
  212. package/data/harnesses/etna/skills/documentation/templates/security-overview.md +9 -4
  213. package/data/harnesses/etna/skills/documentation/templates/setup.md +6 -6
  214. package/data/harnesses/etna/skills/documentation/templates/system-overview.md +12 -7
  215. package/data/harnesses/etna/skills/documentation/templates/system.md +2 -2
  216. package/data/harnesses/etna/skills/documentation/templates/testing-strategy.md +10 -5
  217. package/data/harnesses/etna/skills/documentation/templates/ux-behavior.md +14 -5
  218. package/data/harnesses/etna/skills/workflow-mapper/SKILL.md +156 -193
  219. package/data/harnesses/etna/skills/workflow-mapper/references/patterns.md +15 -15
  220. package/data/harnesses/hr/harness.json +1 -1
  221. package/data/harnesses/hr/skills/evaluator/SKILL.md +71 -73
  222. package/data/harnesses/hr/skills/evaluator/criteria/code-quality.md +28 -47
  223. package/data/harnesses/hr/skills/evaluator/criteria/deployment-readiness.md +33 -43
  224. package/data/harnesses/hr/skills/evaluator/criteria/maintainability.md +34 -46
  225. package/data/harnesses/hr/skills/evaluator/criteria/mechanical-ambition.md +13 -13
  226. package/data/harnesses/hr/skills/evaluator/criteria/problem-substantiveness.md +7 -7
  227. package/data/harnesses/hr/skills/evaluator/criteria/testing.md +36 -41
  228. package/data/harnesses/hr/skills/evaluator/criteria/ux-mechanics.md +25 -11
  229. package/data/harnesses/hr/skills/evaluator/criteria/value-articulation.md +7 -7
  230. package/data/harnesses/hr/skills/evaluator/preflight.md +27 -46
  231. package/data/harnesses/hr/skills/interview-eval/SKILL.md +37 -42
  232. package/data/harnesses/hr/skills/interview-eval/rubric.md +21 -23
  233. package/package.json +2 -2
@@ -1,11 +1,16 @@
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
 
5
- ```
5
+ ```markdown
6
+ ---
7
+ type: non-goals
8
+ description: "{at most 300 characters: what this document settles and where its boundary sits}"
9
+ ---
10
+
6
11
  # Non-Goals
7
12
 
8
13
  Things this system deliberately does not do. Each is a decision — don't re-propose one without new information of the kind its "revisit if" names.
9
14
 
10
- - **{Non-goal}** — {why it's excluded}. Revisit if: {the trigger that would reopen it}.
15
+ - **{Non-goal}:** {why it's excluded}. Revisit if: {the trigger that would reopen it}.
11
16
  ```
@@ -1,14 +1,19 @@
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
 
9
9
  If a procedure is a deterministic command list run frequently, script it and have the doc point at the script — a doc should carry judgment (when, why, what to check), not replace automation.
10
10
 
11
- ```
11
+ ```markdown
12
+ ---
13
+ type: operations
14
+ description: "{at most 300 characters: what this document settles and where its boundary sits}"
15
+ ---
16
+
12
17
  # {Procedure Name}
13
18
 
14
19
  **Goal:** What this procedure accomplishes, one line.
@@ -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
 
@@ -6,7 +6,7 @@ Truth document. Use for: **one workspace package** — one unit of distribution:
6
6
 
7
7
  **A package document's deepest layer is its public contract** (`references/style-guide.md` § Shape — the model first, the detail after): the commands and flags a person types, the exports another package imports, what is installed and where. For a CLI the flags *are* the promise, so they belong in Usage. It stops before internal layout, build steps and which file holds what.
8
8
 
9
- **A package document is the residual owner of its own tree.** Every file in the package whose header names no narrower document is its to speak for, so it loses to every system or feature document a header names. Until the ownership scan switches to header pointers, its transitional `owns:` is the whole package glob. The one enumerable fact it declares is the ownership table: which subtrees other documents speak for.
9
+ **A package document is the residual owner of its own tree.** Every file in the package whose header names no narrower document is its to speak for, so it loses to every system or feature document a header names. Until the ownership scan switches to header pointers, its transitional `owns:` is the whole package glob. Which subtrees narrower documents speak for is computed from their headers, never tabled here.
10
10
 
11
11
  **Sharp, bulleted, labelled with noun phrases** (`references/style-guide.md` § Labels). Every section after the goal line is bullets under a noun-phrase heading, each bullet a bold noun-phrase label followed by one or two sentences.
12
12
 
@@ -15,7 +15,7 @@ Truth document. Use for: **one workspace package** — one unit of distribution:
15
15
  | Section | When |
16
16
  | --- | --- |
17
17
  | `Scope` | required. Why the package is its own unit, who consumes it, and what it deliberately does not hold |
18
- | `Ownership` | required, as one line or a table |
18
+ | `Ownership` | required, as one line |
19
19
  | `Usage` | required |
20
20
  | `Decisions` | once any choice was made that the code cannot explain |
21
21
  | `Promises` | required |
@@ -49,11 +49,7 @@ owns: ["packages/{name}/**"] # transitional — the residual
49
49
 
50
50
  ## Ownership
51
51
 
52
- This document is the residual owner of `packages/{name}/**`. Claimed at higher specificity:
53
-
54
- | Subtree | Stated and owned by |
55
- | --- | --- |
56
- | `src/{machine}/**` | [{system}](../systems/{system}.md) |
52
+ This document is the residual owner of `packages/{name}/**`; a subtree whose files' headers name a system or feature document is that document's.
57
53
 
58
54
  ## Usage
59
55
 
@@ -77,7 +73,7 @@ This document is the residual owner of `packages/{name}/**`. Claimed at higher s
77
73
  - **Commands and exports:** {…} — the public contract
78
74
  - **Code root:** `packages/{name}/`
79
75
  - **Seams:** {…} by name
80
- - **Checklist:** `tests/{package}.md`
76
+ - **Checklist:** `docs/tests/{package}.md`
81
77
  - **See also:** {neighbour}: {why}
82
78
 
83
79
  No file lists or symbol rosters — those are the graph's.
@@ -8,7 +8,7 @@ The `boundary` skill parses the **Proposed Changes** sections to check boundary
8
8
 
9
9
  **Doc Obligations is the one ledger the plan's author writes.** Deriving tests from behavior is judgment, which is why `testing` owns that section and it is marked never-hand-author; resolving Proposed Changes' file paths to the feature docs that own them is a **lookup** against the ownership index already injected at session start. Different work, different rule — fill it yourself, while the touch list is fresh.
10
10
 
11
- The **`Gates:`** line carries two machine-read segments. The compliance hook greps **`Boundary:`** — implementation edits inside the plan's scope are blocked while it reads `Boundary: pending`; the `boundary` skill rewrites it to `Boundary: passed YYYY-MM-DD` or `Boundary: blocked YYYY-MM-DD`. The other two plan gates are enforced by **section presence**: a plan with no `## Test Obligations` or no `## Doc Obligations` section blocks the same edits — the sections are the artifacts, and the gate derives from them, not from a claim about them. A **`Polygraph:`** segment appears only when the user has the `polygraph` agent audit the plan's documents — it appends `Polygraph: passed YYYY-MM-DD (N docs · N claims · N corrected · N registered)`, or `Polygraph: pending` while an owner question is open. It is a trace for readers, never an obligation: a plan carries none by default, no hook or CI check reads it, and it is never hand-written. Never hand-edit the line to skip a gate.
11
+ The **`Gates:`** line carries one machine-read segment. The compliance hook greps **`Boundary:`** and blocks implementation edits inside the plan's scope until it reads `passed`: `Boundary: pending` has no verdict yet and `Boundary: blocked` is a verdict against coding, so both wall. The `boundary` skill rewrites it to `Boundary: passed YYYY-MM-DD` or `Boundary: blocked YYYY-MM-DD`; a blocked plan folds the amendments and re-runs the skill. The other two plan gates are enforced by **section presence**: a plan with no `## Test Obligations` or no `## Doc Obligations` section blocks the same edits — the sections are the artifacts, and the gate derives from them, not from a claim about them. A **`Polygraph:`** segment appears only when the user has the `polygraph` agent audit the plan's documents — it appends `Polygraph: passed YYYY-MM-DD (N docs · N claims · N corrected · N registered)`, or `Polygraph: pending` while an owner question is open. It is a trace for readers, never an obligation: a plan carries none by default, no hook or CI check reads it, and it is never hand-written. Never hand-edit the line to skip a gate.
12
12
 
13
13
  ```
14
14
  # {Feature Name}
@@ -51,12 +51,11 @@ Why this work is happening *now*. Link to the spec for *what* we're building; th
51
51
  ## Doc Obligations
52
52
 
53
53
  <!-- One row per feature doc whose `owns:` globs intersect the Proposed Changes above — resolve
54
- them against the injected ownership index. Hand-authored: this is a lookup, not research.
55
- Amendable while the plan is open; discharged at Completion. -->
54
+ them against the injected ownership index. Hand-authored: this is a lookup, not research. Amendable while the plan is open; discharged at Completion. -->
56
55
 
57
- | Doc | Claim that changes | `owns:` still accurate? | Outcome |
56
+ | Doc | Claim that changes | Still the owning doc? | Outcome |
58
57
  | --- | --- | --- | --- |
59
- | `docs/features/{feature}.md` | what it says today that this plan makes false | yes / no — new paths to add | written empty; discharged at Completion — **updated** / **owes nothing** (with the reason) / **blocked** (→ backlog) |
58
+ | `docs/features/{feature}.md` | what it says today that this plan makes false | yes / no — the document the changed files' headers should name | written empty; discharged at Completion — **updated** / **owes nothing** (with the reason) / **blocked** (→ backlog) |
60
59
 
61
60
  **"None" is valid** — a plan touching only unowned paths owes no doc update, and says so explicitly. It is not a free pass: `boundary` builds its own touch list from the same Proposed Changes and reports docs this table missed.
62
61
 
@@ -69,12 +68,7 @@ Why this work is happening *now*. Link to the spec for *what* we're building; th
69
68
  ## Test Obligations
70
69
 
71
70
  <!-- Written by the `testing` skill (plan-gate mode) at the plan gate (after `boundary`). One row per
72
- promised behavior: layer · target file · oracle · fixtures · an empty Outcome cell the
73
- verification gate fills (satisfied / owes nothing / blocked → backlog). Amendable while the
74
- plan is open. Do not hand-author. NEVER put a pipe in a ledger cell, escaped or not — the
75
- compliance hook splits rows on `|` at a fixed column index with no unescaping, so a
76
- markdown-legal `\|` shifts every later cell and the wall blocks a row that is in fact
77
- discharged. Write "`install` or `update`", not "`install \| update`". -->
71
+ promised behavior: layer · target file · oracle · fixtures · an empty Outcome cell the verification gate fills (satisfied / owes nothing / blocked → backlog). Amendable while the plan is open. Do not hand-author. A literal pipe in a cell is written `\|`; an unescaped one adds a column and shifts every later cell. Prefer "`install` or `update`" to escaping. -->
78
72
 
79
73
  ## Open Questions
80
74
 
@@ -1,10 +1,15 @@
1
- # Protected Files
1
+ # Protected files
2
2
 
3
3
  Truth document. Use for: documenting critical files that need approval before modification.
4
4
 
5
5
  This doc answers *what is protected and why breaking it hurts* — nothing more. Don't duplicate function-level detail here (signatures, inputs/outputs): it drifts from both the code and the owning feature doc. The owning feature doc is the canonical reference for how the code works; link to it.
6
6
 
7
- ```
7
+ ```markdown
8
+ ---
9
+ type: protected-files
10
+ description: "{at most 300 characters: what this document settles and where its boundary sits}"
11
+ ---
12
+
8
13
  # Protected Files
9
14
 
10
15
  Critical files requiring approval before modification.
@@ -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
 
@@ -13,7 +13,7 @@ Sections come in this order; 1 to 3 are the outward-facing first screen, 4 onwar
13
13
  5. **State.** Optional: a one-line blockquote, present only while something repo-wide is true that a newcomer must know (frozen, mid-migration, mid-breaking-change on `dev`). It links the plan or runbook that owns the change. Say here which units publish and where, if any do.
14
14
  6. **The main path.** Three to six short paragraphs, or numbered stages, along the main request or data path: who arrives, what is built, where state lives, how the result leaves. Name a technology only where it explains a stage. End with a link to the system overview.
15
15
  7. **Repository map.** A sentence on how the tree is organised, then one table row per top-level unit (package, app, service), giving its path, what it is in one line, and its owning doc; the top folders that are not packages get a sentence each. This replaces the tree.
16
- 8. **Rules that bite.** Optional. At most five one-line invariants, public/internal boundaries, never-edit paths (generated, protected) or non-goals, each linked to the doc that argues it.
16
+ 8. **Load-bearing rules.** Optional. At most five one-line invariants, public/internal boundaries, never-edit paths (generated, protected) or non-goals, each linked to the doc that argues it.
17
17
  9. **Destinations.** An intent-to-destination table. Its last row is the one for agents.
18
18
  10. **Everyday commands.** Optional. At most four commands run on every change, ending at the gate a push must pass. First-run commands are never here.
19
19
 
@@ -31,11 +31,11 @@ Sections come in this order; 1 to 3 are the outward-facing first screen, 4 onwar
31
31
 
32
32
  ### Writing rules
33
33
 
34
- - **Budget: between 60 and 140 non-blank lines, the outward part under a third of it.** Prose is welcome — The main path and Rules that bite read better as paragraphs than as rows — but past the ceiling a section is hosting content that belongs in a doc. Move it and leave the link.
34
+ - **Budget: between 60 and 140 non-blank lines, the outward part under a third of it.** Prose is welcome — The main path and Load-bearing rules read better as paragraphs than as rows — but past the ceiling a section is hosting content that belongs in a doc. Move it and leave the link.
35
35
  - **Every section is either a fact the reader acts on or a link.** If a section needs a paragraph, it needs a doc.
36
36
  - **One H1, then H2 sections, in plain Markdown.** Sentence-case headings, no emoji, no HTML layout, and no `#` comment lines inside code blocks (they parse as H1s).
37
37
  - **Relative links into the repo only.** Never an absolute repo URL. Never an external site as the home of a canonical doc.
38
- - **Link folders and mandated scaffolds, never rosters.** The allowed targets are folders, `docs/README.md`, `docs/structure.md`, `docs/operations/setup.md`, `docs/history/CHANGELOG.md`, `docs/history/backlog.md`, `CLAUDE.md` and the owning docs in the Map. A procedure is named only where a Destinations row needs it. Every heading and table header is a noun phrase (`../references/style-guide.md` § Labels). Never list individual feature docs: the ownership index finds them.
38
+ - **Link folders and mandated scaffolds, never rosters.** The allowed targets are folders, `docs/README.md`, `docs/structure.md`, `docs/operations/setup.md`, `docs/history/CHANGELOG.md`, `docs/history/backlog.md`, `CLAUDE.md`, `AGENTS.md` and the owning docs in the Map. A procedure is named only where a Destinations row needs it. Every heading and table header is a noun phrase (`../references/style-guide.md` § Labels). Never list individual feature docs: the ownership index finds them.
39
39
  - **No tree.** The Map stops at top-level units and never lists files. Mark paths that look primary but are not, for example "`legacy/`: reference only, never edited".
40
40
  - **The Map is a coarse view of the ownership index, not a rival to it.** The Owning doc column names the doc the index resolves for that path. When the two disagree the index wins, and the Map row is fixed in the same change.
41
41
  - **No version numbers and no dates.** Name the file that pins a version (`.nvmrc`, `packageManager`, `rust-toolchain.toml`). Write in the present tense, with no "coming soon" and no "as of".
@@ -90,7 +90,7 @@ The rest of this page is for the team and for coding agents working in this repo
90
90
 
91
91
  {One sentence each for the top folders that are not packages — `registry/`, `scripts/`, `docs/` — with their owning doc.} Where every doc lives: [docs/structure.md](docs/structure.md).
92
92
 
93
- ## Rules that bite
93
+ ## Load-bearing rules
94
94
 
95
95
  {One sentence saying these are stated here and argued in the documents they point at.}
96
96
 
@@ -1,10 +1,15 @@
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
 
5
5
  Required: **Trust boundaries**, **Controls**. Optional: Assets, Accepted risks.
6
6
 
7
- ```
7
+ ```markdown
8
+ ---
9
+ type: security-overview
10
+ description: "{at most 300 characters: what this document settles and where its boundary sits}"
11
+ ---
12
+
8
13
  # Security Overview
9
14
 
10
15
  ## Assets
@@ -13,7 +18,7 @@ Required: **Trust boundaries**, **Controls**. Optional: Assets, Accepted risks.
13
18
 
14
19
  ## Trust boundaries
15
20
 
16
- - {Boundary} — {what crosses it, and what checks the crossing}
21
+ - **{Boundary}:** {what crosses it, and what checks the crossing}
17
22
 
18
23
  ## Controls
19
24
 
@@ -23,5 +28,5 @@ Required: **Trust boundaries**, **Controls**. Optional: Assets, Accepted risks.
23
28
 
24
29
  ## Accepted risks
25
30
 
26
- - {Risk knowingly carried} — accepted because {reason}; owner: {who}. Revisit if: {trigger}.
31
+ - **{Risk knowingly carried}:** accepted because {reason}; owner: {who}. Revisit if: {trigger}.
27
32
  ```
@@ -4,7 +4,7 @@ Truth document, operations genre (`type: operations`). Use for: **the one-time p
4
4
 
5
5
  It is distinct from `local-development.md`, the daily loop: watch modes, resetting state, per-package traps, the inner test cycle. Setup runs once per machine. Local development runs every session. Setup ends by handing off to it, and neither copies the other. Deploying is `deployment.md`.
6
6
 
7
- Required: **Goal**, **Stack**, **Prerequisites**, **Install**, **First run**, **Verify**. Optional, included only with real content: the audience fork, **Before cloning**, **Environment files**, **Local services**, **Reset**, **Common failures**.
7
+ Required: **Goal**, **Stack**, **Prerequisites**, **Installation**, **First run**, **Verification**. Optional, included only with real content: the audience fork, **Before cloning**, **Environment files**, **Local services**, **Reset**, **Common failures**.
8
8
 
9
9
  ### Writing rules
10
10
 
@@ -32,7 +32,7 @@ description: "{at most 300 characters: what this document settles and where its
32
32
 
33
33
  **Goal:** take a fresh machine from clone to a verified first run of {what runs: e.g. "the product Worker on :{port} and the web shell on :{port}, signed in as the dev fixture"}. Done once per machine; the daily loop is [`local-development.md`]({local-development}.md).
34
34
 
35
- {Optional audience fork: "Only running {the CLI / one package}? Stop after Install and see [`{procedure}`]({path})."}
35
+ {Optional audience fork: "Only running {the CLI / one package}? Stop after Installation and see [`{procedure}`]({path})."}
36
36
 
37
37
  ## Stack
38
38
 
@@ -59,7 +59,7 @@ Why these were chosen: [{system overview}](../architecture/{overview}.md).
59
59
 
60
60
  - **{Trap}:** {what a fresh clone hits and the one command that clears it, e.g. `git lfs install`, `git submodule update --init`}.
61
61
 
62
- ## Install
62
+ ## Installation
63
63
 
64
64
  \`\`\`bash
65
65
  git clone {url} && cd {repo}
@@ -103,7 +103,7 @@ The contract is [`{example file or typed Env}`](../../{path}). Read it before co
103
103
 
104
104
  4. Open `{http://localhost:port}` and {sign in as `{seeded user}` / reach `{first screen}`}.
105
105
 
106
- ## Verify
106
+ ## Verification
107
107
 
108
108
  - `{curl -fsS http://localhost:{port}/{health}}` returns `200` {and `{body}`}.
109
109
  - `{doctor or status command}` reports {expected}. ← keep whichever exists
@@ -130,9 +130,9 @@ The baseline scaffolds `docs/operations/setup.md` when it is missing and the rep
130
130
 
131
131
  - **Stack:** from the workspace manifests, one row per layer.
132
132
  - **Prerequisites:** from the pinning files.
133
- - **Install and First run:** from the root README's getting-started block (if one exists) and the root scripts.
133
+ - **Installation and First run:** from the root README's getting-started block (if one exists) and the root scripts.
134
134
  - **Environment files:** from every `*.example` / `.dev.vars.example` in the workspace.
135
- - **Verify:** from a health route, a doctor command or the test script.
135
+ - **Verification:** from a health route, a doctor command or the test script.
136
136
 
137
137
  It leaves Common failures empty until a failure is root-caused, and it drops every section it cannot fill concretely.
138
138
 
@@ -1,13 +1,18 @@
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
 
5
- Required: **What this is**, **Subsystem map**. Optional: Key flows, Where the truth lives.
5
+ Required: **Purpose**, **Subsystem map**. Optional: Key flows, Sources of truth.
6
+
7
+ ```markdown
8
+ ---
9
+ type: system-overview
10
+ description: "{at most 300 characters: what this document settles and where its boundary sits}"
11
+ ---
6
12
 
7
- ```
8
13
  # System Overview
9
14
 
10
- ## What this is
15
+ ## Purpose
11
16
 
12
17
  {Two or three sentences: what the system does, for whom, in what environment it runs.}
13
18
 
@@ -18,13 +23,13 @@ Required: **What this is**, **Subsystem map**. Optional: Key flows, Where the tr
18
23
  └──────────┘ └──────────┘ └──────────┘
19
24
  {One box per subsystem; label the arrows with the contract that crosses them.}
20
25
 
21
- - **{Subsystem}** — one line: what it owns. → [owning doc](../features/{feature}.md)
26
+ - **{Subsystem}:** what it owns, in one line. → [owning doc](../features/{feature}.md)
22
27
 
23
28
  ## Key flows
24
29
 
25
- {At most two or three ASCII flow diagrams for the flows everything else hangs off — request lifecycle, auth, the core domain operation.}
30
+ {At most two or three mermaid flow diagrams, at role level, for the flows everything else hangs off: request lifecycle, auth, the core domain operation.}
26
31
 
27
- ## Where the truth lives
32
+ ## Sources of truth
28
33
 
29
34
  | Area | Canonical doc |
30
35
  | ---- | ------------- |
@@ -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
 
@@ -69,7 +69,7 @@ owns: # transitional — region globs
69
69
  - **Objects:** {…}
70
70
  - **Code roots:** {…} — directories, one per package the machine spans
71
71
  - **Seams:** {…} by name
72
- - **Checklist:** `tests/{system}.md`
72
+ - **Checklist:** `docs/tests/{system}.md`
73
73
  - **See also:** {neighbour}: {why}
74
74
 
75
75
  No tables, routes or symbol rosters — those are the graph's.
@@ -1,10 +1,15 @@
1
- # Testing Strategy (docs/tests/strategy.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
 
5
- Required: **Levels**, **Running**. Optional: Deliberately untested, Adding a test.
5
+ Required: **Levels**, **Commands**. Optional: Deliberately untested, New tests.
6
+
7
+ ```markdown
8
+ ---
9
+ type: testing-strategy
10
+ description: "{at most 300 characters: what this document settles and where its boundary sits}"
11
+ ---
6
12
 
7
- ```
8
13
  # Testing Strategy
9
14
 
10
15
  ## Levels
@@ -14,7 +19,7 @@ Required: **Levels**, **Running**. Optional: Deliberately untested, Adding a tes
14
19
  | Unit / integration | {runner} | `tests/` | {what} |
15
20
  | E2E | {runner} | `e2e/` | {what} |
16
21
 
17
- ## Running
22
+ ## Commands
18
23
 
19
24
  - `{pm} test` — the whole unit suite (CI gate)
20
25
  - `{pm} run test:e2e` — {when to run}
@@ -23,7 +28,7 @@ Required: **Levels**, **Running**. Optional: Deliberately untested, Adding a tes
23
28
 
24
29
  - {Area} — {why, and what verifies it instead (typecheck, boot check, manual journey)}
25
30
 
26
- ## Adding a test
31
+ ## New tests
27
32
 
28
33
  1. {Where the file goes, what it's named, where fixtures live}
29
34
  ```
@@ -1,9 +1,20 @@
1
- # UX Behavior — template
1
+ # UX behavior (docs/features/{surface}-ux.md)
2
2
 
3
3
  **Truth document.** States what a person sees and can do on a surface, and what the surface promises never to do. Present tense, like every truth document.
4
4
 
5
5
  **`type: ux`**, plus `status:` and `objects:` — the objects the surface presents (`references/frontmatter.md`). The doctrine it answers to (the state vocabulary, the routing doctrine, the information architecture) is named in its Purpose for people and computed through shared objects for tooling.
6
6
 
7
+ ```yaml
8
+ ---
9
+ type: ux
10
+ description: "{at most 300 characters: what this document settles and where its boundary sits}"
11
+ status: active # draft until the surface it decides is built
12
+ objects: [workspace, run] # the objects the surface presents
13
+ owns: # transitional, only when this document speaks for the surface's components (references/frontmatter.md)
14
+ - packages/{pkg}/src/{surface}/**
15
+ ---
16
+ ```
17
+
7
18
  **Why this genre exists.** A feature doc (LLD) states what a feature is, how its data flows, and which contracts it honours — all of which stay plausibly true through a rewrite of the surface. Nothing else in the repo states what a person *observes*. So a change to the wire lands, the interface absorbs it, and the absorption reads as maintenance: no test fails, no lint fires, no document is contradicted. This document is the thing a silent change contradicts.
8
19
 
9
20
  **Not a test plan.** `docs/tests/{feature}.md` records that behavior was driven and holds `Pinned:` traces; this document *decides* the behavior it later verifies. Written after the code, it is a transcript. Write it first.
@@ -15,9 +26,7 @@
15
26
  | One surface's — a panel, an editor, a dialog | `docs/features/{surface}-ux.md`; its component files' headers name it |
16
27
  | Cross-cutting — routing, information architecture, the state vocabulary every surface obeys, presentation of streams | `docs/architecture/` — owns no code, like every architecture doc |
17
28
 
18
- **Ownership: a component file names one document in its header.** A surface's components are frequently already spoken for — by the page's feature document, by the feature behind one panel — and a file's header names exactly one document. Where the header already names the feature document, this document is named in that feature document's **coordinated edits** row instead, phrased as *different promises over the same files*, and the object closure links the two through the objects both name. Where no document speaks for the component yet, its header names this one.
19
-
20
- That matters because a doc nothing implicates is a doc that rots, and a surface rewritten under an unimplicated document is the failure this genre exists to prevent. The coordinated-edit row is the weaker of the two bindings; prefer the header pointer wherever no document speaks for the component yet.
29
+ **Ownership: a component file names one document in its header.** A surface's components are frequently already spoken for — by the page's feature document, by the feature behind one panel — and a file's header names exactly one document. Where the header already names the feature document, this document is named in that feature document's **See also** line under For the agent instead, phrased as *different promises over the same files*, and the object closure links the two through the objects both name. Where no document speaks for the component, its header names this one; prefer that header pointer, because the See also line is the weaker binding. A document nothing implicates rots, and a surface rewritten under an unimplicated document is the failure this genre exists to prevent.
21
30
 
22
31
  ---
23
32
 
@@ -56,7 +65,7 @@ What moves the surface between states, and who causes each move — the person,
56
65
 
57
66
  ## Optional sections
58
67
 
59
- **Copy** — the exact words, where the wording is load-bearing (a refusal, an irreversible confirmation). **Density and rhythm** — where a surface deliberately differs from the design system's default. **Open questions** — decisions deliberately not yet made, so an implementer knows what to ask rather than guessing.
68
+ **Copy** — the exact words, where the wording is load-bearing (a refusal, an irreversible confirmation). **Density and rhythm** — where a surface deliberately differs from the design system's default. **Open questions** — decisions deliberately left open, so an implementer knows what to ask rather than guessing.
60
69
 
61
70
  ## Rules
62
71
 
@@ -5,21 +5,21 @@ description: Use when a task's routed tier isn't good enough — a prompt keeps
5
5
 
6
6
  # Escalate — evidence-gated tier promotion
7
7
 
8
- Promotion is earned by a failing eval, never by intuition. This skill is the only legitimate path to running a task above its routed tier — and it is deliberately fast: one eval run of evidence, one entry, done. No approvals theater.
8
+ Promotion is earned by a failing eval, never by intuition. This skill is the **only** path to running a task above its routed tier. The gate is one eval run and one entry — ask for no further approval.
9
9
 
10
10
  ## Procedure
11
11
 
12
- 1. **Demand the evidence.** A completed `prompt-eval` run at the currently routed tier, failing the family threshold. No run ⇒ run it now (that is the whole gate). An old run doesn't count — the evidence is for the current prompt version.
13
- 2. **Write the escalation entry** — this skill owns the format; `cost-report` parses these entries, so the shape is a contract:
14
- - File: `docs/history/changelog/YYYY-MM-DD-{three-words}.md`, standard changelog-entry template, plus its `docs/history/CHANGELOG.md` row.
15
- - **`Class: escalation`** — the fixed rendezvous keyword. Exactly this word; `cost-report` and `retro` match on it.
16
- - `Change:` names the task type, the family, the failing score vs. threshold, and the tier movement (`standard → frontier`).
17
- - `Discovered:` what the failure teaches about the tier's capability ceiling — this is the routing table's tuning signal.
18
- 3. **Record the promotion scope**: one-off (this task runs high once) or standing (the routing row itself is wrong). A standing promotion also appends an out-of-scope discovery proposing the routing-table row change — the table is policy and moves by its own edit, not silently.
12
+ 1. **Demand the evidence**: a completed `prompt-eval` run at the routed tier, failing the family threshold, against the current prompt version — a run against an earlier version **never** counts. No such run ⇒ run it now.
13
+ 2. **Write the escalation entry.** This skill owns its shape, and `cost-report` and `retro` parse it, so the shape is a contract:
14
+ - File: `docs/history/changelog/YYYY-MM-DD-{three-words}.md`, on the standard changelog-entry template.
15
+ - `Class:` carries `escalation`, spelled exactly — the keyword `cost-report` and `retro` match on.
16
+ - `Change:` names the task type, the family, the failing score vs. the threshold, and the tier movement (`standard → frontier`).
17
+ - `Discovered:` states what the failure teaches about the tier's capability ceiling — the routing table's tuning signal.
18
+ 3. **Record the promotion scope**: one-off (this task runs high once) or standing (the routing row itself is wrong). For a standing promotion, also append an out-of-scope discovery proposing the routing-row change — **never** edit the routing table here; it is policy and moves by its own reviewed edit.
19
19
  4. **Dispatch at the new tier** and finish the work.
20
20
 
21
21
  ## Rules
22
22
 
23
- - **The entry precedes the dispatch.** An escalation with no entry is an unevidenced promotion — the routing guardrails prohibit it.
24
- - **Escalation is symmetric.** When `regression-runner`'s demotion experiment passes a tier down, that result is recorded the same way (`Class: escalation`, direction down) — the table tunes on both signals.
25
- - **Frequency is signal, not failure.** Many escalations from one row mean the row is wrong; that is `retro`'s finding to make, from these entries. Never suppress one to keep the table looking right.
23
+ - **The entry precedes the dispatch.** A dispatch with no entry is an unevidenced promotion, which `CLAUDE.md`'s routing guardrails prohibit.
24
+ - **Escalation is symmetric.** A `regression-runner` demotion experiment that passes a tier down is recorded on the same format — `Class: escalation`, direction down.
25
+ - **Frequency is signal, not failure.** Many escalations from one row mean the row is wrong — `retro`'s finding to make from these entries. **Never** suppress an escalation to keep the table looking right.
@@ -5,18 +5,18 @@ description: Use when a prompt needs its quality measured — after drafting or
5
5
 
6
6
  # Prompt Eval — the golden-set loop
7
7
 
8
- A prompt's quality claim is its eval result, nothing else. This skill runs the loop; conventions for golden sets, rubrics, and thresholds are `.claude/rules/evals.md`.
8
+ A prompt's quality claim is its eval result, nothing else. This skill runs the loop; golden-set, rubric, and threshold conventions are `.claude/rules/evals.md`.
9
9
 
10
10
  ## Procedure
11
11
 
12
- 1. **Locate the family's golden set** at `evals/{family}/` — the owning feature doc names the family. A prompt with no golden set gets one *first* (eval-first: the set ships with the prompt, and `data-generator` drafts edge-case items for human review).
13
- 2. **Run the set** against the prompt via `eval-runner` — every item, not a sample. Batch variants in one run so scores are comparable.
14
- 3. **Grade with the family's rubric.** Mechanical checks (format, required fields, refusal correctness) grade in code; judgment dimensions grade against the rubric's anchors. Report per-dimension scores and the delta against the incumbent prompt's certified score.
15
- 4. **Gate:** meeting the family's threshold on iteration is a *candidate*; certification for the library additionally requires the `judge` ship gate (frontier, one dispatch — the only frontier call in the loop).
16
- 5. **Record:** the winning variant's scores go into its `prompt-library` entry; the losing variants' deltas belong in the changelog entry's refinement context.
12
+ 1. **Locate the family's golden set** at `evals/{family}/` — the owning feature doc names the family. A prompt with no golden set gets one **first**: dispatch `data-generator` to draft edge-case items, and have a human review them before they join the set.
13
+ 2. **Run the full set** against the prompt via `eval-runner` — every item, never a sample. Batch all variants into one run so their scores are comparable.
14
+ 3. **Grade with the family's rubric.** Mechanical checks grade in code; judgment dimensions grade against the rubric's anchors. Report per-dimension scores and the delta against the incumbent prompt's certified score.
15
+ 4. **Gate.** A variant meeting the family threshold is a candidate, not certified. Certification for the library also requires one `judge` dispatch — the loop's only frontier-tier call.
16
+ 5. **Record.** Write the certified variant's scores into its `prompt-library` entry; put the losing variants' deltas in the changelog entry's refinement context.
17
17
 
18
18
  ## Rules
19
19
 
20
- - **Iteration stays cheap.** The draft → eval → revise loop runs on economy (`eval-runner`) and standard (`prompt-iterator`) tiers; the frontier judge appears once, at the gate — never inside the loop.
20
+ - **Iteration stays off the frontier tier.** The draft → eval → revise loop runs on economy (`eval-runner`) and standard (`prompt-iterator`); **never** dispatch `judge` inside the loop.
21
21
  - **Never weaken a rubric to pass a prompt.** A rubric change is a design change to the family's eval suite: it goes through the owning feature doc, re-runs the whole family, and re-certifies every entry.
22
- - **A failing eval is a result, not an obstacle.** Report it honestly; if the family genuinely needs a stronger tier, that is the `escalate` skill's evidence.
22
+ - **A failing eval is a result, not an obstacle.** Report it as it stands. When the family needs a stronger tier, that failing run is the `escalate` skill's evidence.
@@ -5,11 +5,11 @@ description: Use when creating, versioning, retrieving, or auditing a production
5
5
 
6
6
  # Prompt Library — versioned, certified entries
7
7
 
8
- `prompts/{family}/` is a library of certified production artifacts, not a scratchpad. Every entry is versioned, eval-scored, and tier-certified; scratch iterations live outside until they pass.
8
+ `prompts/{family}/` holds certified production prompts only. Every entry is versioned, eval-scored and tier-certified; scratch iterations stay outside `prompts/**` until they pass their family's evals.
9
9
 
10
10
  ## The entry format
11
11
 
12
- Each prompt is one file at `prompts/{family}/{name}.md` with frontmatter:
12
+ Each prompt is one file at `prompts/{family}/{name}.md` with this frontmatter:
13
13
 
14
14
  ```yaml
15
15
  ---
@@ -21,16 +21,37 @@ status: active # active | candidate | retired
21
21
  ---
22
22
  ```
23
23
 
24
- The body is the prompt itself, verbatim — no narration, no history (the journey lives in changelog entries). A `candidate` has passed its family threshold but not the `judge` gate; `retired` entries stay in place for provenance (consumers must never load them — status is the filter).
24
+ | `status` | Meaning |
25
+ | --- | --- |
26
+ | `active` | Certified — the only status a consumer loads |
27
+ | `candidate` | Met the family threshold in `prompt-eval`; not yet through the `judge` gate |
28
+ | `retired` | Kept in place for provenance; **never** loaded |
29
+
30
+ The body is the prompt verbatim — no narration, no history; the journey lives in changelog entries.
25
31
 
26
32
  ## Procedure
27
33
 
28
- - **Create / update**: a content change bumps `version`, resets `status` to `candidate`, and goes through `prompt-eval` → `judge` before flipping back to `active` with fresh `eval-score` and `certified` values. The owning feature doc's `owns:` glob covers the family — read it first.
29
- - **Retrieve**: match by family + status `active`; the entry's `tier` names the tier it runs on — dispatch accordingly, never stronger (that is an unevidenced promotion).
30
- - **Audit** (on demand, and by `regression-runner` after a model-generation change): every `active` entry whose `certified` date precedes the current `model-tiers` mapping is stale — re-certify or flag.
34
+ Before any write, read the family's owning feature doc — its `owns:` glob covers the family.
35
+
36
+ **Create or update:**
37
+
38
+ 1. Iterate outside `prompts/**` with `prompt-eval` until the variant meets the family threshold.
39
+ 2. Write the entry with `version` bumped and `status: candidate`.
40
+ 3. Run the `judge` gate.
41
+ 4. On a pass, set `status: active` with the certifying run's `eval-score` and `certified` date.
42
+
43
+ **Retrieve:**
44
+
45
+ 1. Match by family and `status: active`.
46
+ 2. Dispatch at the entry's `tier` — **never** stronger; running above the certified tier is an unevidenced promotion.
47
+
48
+ **Audit** — on demand, and by `regression-runner` after every model-generation change:
49
+
50
+ 1. List every `active` entry whose `certified` date precedes the latest change to the `model-tiers` rule — each is stale.
51
+ 2. Re-certify each stale entry, or flag it.
31
52
 
32
53
  ## Rules
33
54
 
34
- - **Certification is per tier.** A prompt certified on standard says nothing about economy; a demotion experiment that passes produces a *new* certification at the lower tier.
35
- - **One prompt, one entry.** Variants under comparison are `candidate` siblings; only one `active` per name.
36
- - **Never hand-edit `eval-score`** — it is written by the certifying run or not at all.
55
+ - **Certification is per tier.** A prompt certified on standard says nothing about economy; a passing demotion experiment produces a *new* certification at the lower tier.
56
+ - **One prompt, one entry.** Variants under comparison are `candidate` siblings; only one is `active` per name.
57
+ - **Never hand-edit `eval-score`** — only the certifying run writes it.
@@ -5,17 +5,17 @@ description: Use when starting any piece of prompt work — drafting, evaluating
5
5
 
6
6
  # Route — classify, look up, dispatch
7
7
 
8
- The model decision belongs to the routing table in `CLAUDE.md` § The Routing Policy, not to you and not to the user. This skill is the single entry point that applies it.
8
+ The model decision belongs to the routing table in `CLAUDE.md` § The Routing Policy — not to you and not to the user. This skill is the single entry point that applies it.
9
9
 
10
10
  ## Procedure
11
11
 
12
- 1. **Classify the task into exactly one task type** from the routing table's rows. Classification is mechanical work — do it inline at the cheapest capable tier, never by dispatching a frontier agent to think about it. When a task spans types (e.g. "draft a prompt and evaluate it"), decompose: each leg routes separately.
13
- 2. **Read the row**: task type → tier → executing agent.
14
- 3. **Dispatch the named agent.** The agent's own pin enforces the tier — never override the model at dispatch time. Work with no matching row is new: route it provisionally to the standard tier, do the work, and record the missing row as an out-of-scope discovery so the table gains it.
15
- 4. **Never route around a failing eval.** If the routed tier's output fails its evals, the answer is the `escalate` skill (evidence-gated promotion), not a quiet re-dispatch on a stronger agent.
12
+ 1. **Classify the task into exactly one task type** from the routing table's rows. Classify inline — it is mechanical work, never worth a dispatch. When a task spans types ("draft a prompt and evaluate it"), decompose it and route each leg separately.
13
+ 2. **Read the row**: task type → tier → executing agent. When no row matches, the task type is new: do the work provisionally at the standard tier and record the missing row as an out-of-scope discovery, so the table gains it.
14
+ 3. **Dispatch the named agent.** Its `model:` pin enforces the tier — **never** override the model at dispatch time.
15
+ 4. **Never route around a failing eval.** When the routed tier's output fails its evals, run the `escalate` skill (evidence-gated promotion) — never a quiet re-dispatch on a stronger agent.
16
16
 
17
17
  ## What this skill refuses
18
18
 
19
- - Naming a model. Tiers only; the mapping lives in `.claude/rules/model-tiers.md` and the agents' pins.
20
- - Frontier dispatch for mechanical work (eval runs, data generation, classification) — the routing guardrails in `CLAUDE.md` prohibit it regardless of who asks.
21
- - Skipping the table because the task "obviously" needs the strongest model — that intuition is exactly what the escalation ladder exists to test.
19
+ - ❌ Naming a model — tiers only; the mapping lives in `.claude/rules/model-tiers.md` and the agents' `model:` pins.
20
+ - ❌ Frontier dispatch for mechanical work (eval runs, data generation, classification) — the routing guardrails in `CLAUDE.md` § The Routing Policy prohibit it whoever asks.
21
+ - ❌ Skipping the table because the task "obviously" needs the strongest model — that intuition is what the escalation ladder exists to test.
@@ -105,7 +105,7 @@ Invoke the `boundary` skill after a plan is approved and before its first implem
105
105
  - **Everything written in this repo follows [`docs/writing-style.md`](docs/writing-style.md) — no exceptions.** It is the single style authority for both genres: instruction files (`CLAUDE.md`, rules, agents, skill prose) and documents. Read it before writing prose here, not after. Its load-bearing rule is the Two Natures — truth documents state the present and narrate no history; records are dated and never edited to match the present.
106
106
  - **Every markdown document also goes through the `documentation` skill** for its *genre* — invoke it before creating or substantively editing any `.md` file and apply the matching template. The skill supplies structure; `writing-style.md` supplies the prose.
107
107
  - **[override]** Keep `docs/` updated when a change alters documented behaviour — creating and updating docs is part of the work.
108
- - After plan completion **[override]**: write the `docs/history/changelog/` entry as a **draft** immediately, while the context is fresh — no confirmation needed — and append its `docs/history/CHANGELOG.md` row; the commit fills what the draft left open and freezes it. Non-plan work needs no separate prompt: every non-exempt commit carries its own entry (the `changelog` rule).
108
+ - After plan completion **[override]**: write the `docs/history/changelog/` entry as a **draft** immediately, while the context is fresh — no confirmation needed; the commit fills what the draft left open and freezes it. Non-plan work needs no separate prompt: every non-exempt commit carries its own entry (the `changelog` rule).
109
109
  - When moving or renaming a component: update the `owns:` globs of the doc that owns it so the ownership index stays accurate. A new doc that owns code declares its paths in its own `owns:` frontmatter.
110
110
  - `docs/structure.md` is the authority on what belongs where — read it before adding or moving a doc; one canonical source per topic, link don't copy. Only `CLAUDE.md`, `AGENTS.md`, and `README.md` live at the repo root.
111
111
 
@@ -117,7 +117,7 @@ Invoke the `boundary` skill after a plan is approved and before its first implem
117
117
 
118
118
  A commit marks the user's behavioral verification of the work, and the working session is the last holder of the refinement context that produced it — asks, iterations, rejections, skill outcomes, discoveries. That context is captured in the changelog and distilled on demand. The `changelog` rule carries the trigger and the lifecycle; this is the policy:
119
119
 
120
- - **Every non-mechanical commit is covered by an entry** at `docs/history/changelog/YYYY-MM-DD-{three-words}.md`, staged inside the commit it describes — whatever tool or session performs the commit — plus a row in `docs/history/CHANGELOG.md`. Format, required fields, and the closed exemption list are the `documentation` skill's `templates/changelog-entry.md`; the failure fields (rejected attempts, overridden skill output) and verbatim taste quotes are required, not optional — the entry's value concentrates there.
120
+ - **Every non-mechanical commit is covered by an entry** at `docs/history/changelog/YYYY-MM-DD-{three-words}.md`, staged inside the commit it describes — whatever tool or session performs the commit. `docs/history/CHANGELOG.md` is the folder's guide and takes no row per entry. Format, required fields, and the closed exemption list are the `documentation` skill's `templates/changelog-entry.md`; the failure fields (rejected attempts, overridden skill output) and verbatim taste quotes are required, not optional — the entry's value concentrates there.
121
121
  - **An entry may exist before its commit.** A plan reaching `Status: Complete` writes its entry as a **draft** immediately, while the context is fresh; the commit fills what the draft left open. **Immutability begins at commit, not creation** — a draft is mutable, a committed entry never is, and a correction is a new entry that links back. Doc-health passes skip the genre.
122
122
  - **A commit is the smallest unit an entry may describe**; above that the mapping is judgment. Work exceeding a draft's scope gets a *second* entry rather than stretching the first.
123
123
  - **Distillation is the `retro` agent** — run on demand (before a brainstorm or LLD, before a new project, after a refinement arc), it converts accumulated entries into a typed punch list (doc content, doc structure, skill evolution, pins, harness rules), appends actionable items to the backlog, and proposes only — application runs through the normal documentation loop.