@erclx/canon 5.40.0 → 5.42.0

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 (187) hide show
  1. package/README.md +34 -17
  2. package/claude/.claude-plugin/plugin.json +1 -1
  3. package/claude/skills/api-design/references/adopted.md +34 -14
  4. package/claude/skills/auto-ship/REQUIREMENT.md +2 -0
  5. package/claude/skills/auto-ship/SKILL.md +28 -2
  6. package/claude/skills/auto-ship/references/draft-mark.md +32 -6
  7. package/claude/skills/auto-ship/references/failure-recovery.md +15 -13
  8. package/claude/skills/auto-ship/references/fan-in.md +59 -0
  9. package/claude/skills/auto-ship/references/tier-failures.md +31 -10
  10. package/claude/skills/auto-ship/references/ui-checklist.md +9 -4
  11. package/claude/skills/auto-ship/references/worktree-name.md +9 -3
  12. package/claude/skills/build-in-slices/references/adopted.md +35 -21
  13. package/claude/skills/canvas-board/references/canvas.md +17 -6
  14. package/claude/skills/canvas-board/references/design.md +26 -7
  15. package/claude/skills/code-craft/references/adopted.md +58 -20
  16. package/claude/skills/codebase-layout/references/adopted.md +49 -16
  17. package/claude/skills/codebase-layout/references/frontend.md +11 -4
  18. package/claude/skills/codebase-layout/references/tests.md +4 -2
  19. package/claude/skills/context-fold/references/classify.md +10 -15
  20. package/claude/skills/context-fold/references/completion-report.md +11 -9
  21. package/claude/skills/context-fold/references/context-refresh.md +26 -9
  22. package/claude/skills/context-fold/references/unusable-baseline.md +5 -3
  23. package/claude/skills/create-rule/REQUIREMENT.md +5 -0
  24. package/claude/skills/create-rule/SKILL.md +9 -1
  25. package/claude/skills/create-rule/references/checklist.md +26 -0
  26. package/claude/skills/create-rule/references/rule.md +98 -20
  27. package/claude/skills/create-skill/SKILL.md +1 -0
  28. package/claude/skills/create-skill/references/skill-disclosure.md +10 -2
  29. package/claude/skills/create-skill/references/skill-frontmatter.md +43 -0
  30. package/claude/skills/create-skill/references/skill-paths.md +7 -4
  31. package/claude/skills/create-skill/references/skill-practice.md +6 -3
  32. package/claude/skills/create-skill/references/skill-requirement.md +4 -2
  33. package/claude/skills/create-skill/references/skill.md +67 -44
  34. package/claude/skills/decision-escalate/REQUIREMENT.md +1 -1
  35. package/claude/skills/decision-escalate/SKILL.md +1 -2
  36. package/claude/skills/deploy-app/references/vercel.md +2 -1
  37. package/claude/skills/deprecation-migration/references/adopted.md +44 -25
  38. package/claude/skills/design-taste/references/adopted.md +9 -1
  39. package/claude/skills/design-taste/references/craft.md +3 -1
  40. package/claude/skills/design-taste/references/kinds.md +8 -7
  41. package/claude/skills/design-taste/references/preflight.md +12 -0
  42. package/claude/skills/design-taste/references/systems.md +7 -6
  43. package/claude/skills/design-taste/references/tells.md +24 -25
  44. package/claude/skills/design-taste/references/vocabulary.md +7 -5
  45. package/claude/skills/document-health/references/axes.md +54 -30
  46. package/claude/skills/draft-and-pick/references/live-arms.md +2 -2
  47. package/claude/skills/draft-doc/references/context.md +4 -3
  48. package/claude/skills/draft-doc/references/docs.md +6 -3
  49. package/claude/skills/draft-doc/references/readme/agent-facing.md +6 -0
  50. package/claude/skills/draft-doc/references/readme/application.md +8 -2
  51. package/claude/skills/draft-doc/references/readme/cli.md +5 -1
  52. package/claude/skills/draft-doc/references/readme/library.md +4 -0
  53. package/claude/skills/draft-doc/references/readme/plugin.md +9 -1
  54. package/claude/skills/draft-doc/references/readme.md +30 -13
  55. package/claude/skills/draft-doc/references/requirements.md +17 -4
  56. package/claude/skills/draft-doc/references/wiki-kind.md +20 -10
  57. package/claude/skills/draft-figure/references/architecture-set.md +7 -3
  58. package/claude/skills/draft-figure/references/figures.md +8 -6
  59. package/claude/skills/draft-figure/references/hand-drawn.md +3 -1
  60. package/claude/skills/draft-figure/references/mermaid-path.md +19 -9
  61. package/claude/skills/draft-figure/references/mermaid.md +10 -5
  62. package/claude/skills/draft-ready/references/ready.md +22 -15
  63. package/claude/skills/git-branch/REQUIREMENT.md +17 -6
  64. package/claude/skills/git-branch/SKILL.md +63 -7
  65. package/claude/skills/git-branch/references/branch.md +11 -1
  66. package/claude/skills/git-branch/references/slug.md +17 -5
  67. package/claude/skills/git-commit/references/commit.md +8 -0
  68. package/claude/skills/git-commit/references/versioning.md +23 -17
  69. package/claude/skills/git-followup/REQUIREMENT.md +1 -1
  70. package/claude/skills/git-followup/SKILL.md +5 -6
  71. package/claude/skills/git-issue/references/issue.md +29 -16
  72. package/claude/skills/git-pr/REQUIREMENT.md +1 -5
  73. package/claude/skills/git-pr/SKILL.md +11 -22
  74. package/claude/skills/git-pr/references/final-command.md +21 -8
  75. package/claude/skills/git-pr/references/labels.md +45 -28
  76. package/claude/skills/git-pr/references/pr.md +28 -9
  77. package/claude/skills/git-pr/references/publish.md +42 -28
  78. package/claude/skills/git-pr/references/task-number.md +20 -8
  79. package/claude/skills/git-ship/SKILL.md +1 -1
  80. package/claude/skills/plan-feature/references/batches.md +48 -1
  81. package/claude/skills/plan-feature/references/plan-lifecycle.md +10 -3
  82. package/claude/skills/plan-feature/references/plan.md +59 -20
  83. package/claude/skills/plan-groundwork/references/groundwork-spikes.md +4 -1
  84. package/claude/skills/plan-groundwork/references/groundwork.md +14 -16
  85. package/claude/skills/plan-intake/references/intake.md +29 -24
  86. package/claude/skills/plan-intake-answer/REQUIREMENT.md +1 -1
  87. package/claude/skills/plan-intake-answer/SKILL.md +1 -2
  88. package/claude/skills/pr-evidence/REQUIREMENT.md +40 -0
  89. package/claude/skills/pr-evidence/SKILL.md +53 -0
  90. package/claude/skills/pr-evidence/references/evidence.md +150 -0
  91. package/claude/skills/review-address/references/post-review-findings.md +10 -3
  92. package/claude/skills/review-address/references/rebase-conflicts.md +22 -7
  93. package/claude/skills/review-address/references/rest-reads.md +3 -1
  94. package/claude/skills/review-craft/references/adopted.md +35 -18
  95. package/claude/skills/review-craft/references/security.md +42 -7
  96. package/claude/skills/review-craft/references/ui.md +23 -8
  97. package/claude/skills/review-pr/SKILL.md +6 -6
  98. package/claude/skills/review-pr/references/body-variants.md +29 -9
  99. package/claude/skills/review-pr/references/close-out.md +20 -5
  100. package/claude/skills/review-pr/references/key-changes.md +27 -3
  101. package/claude/skills/review-pr/references/post.md +83 -31
  102. package/claude/skills/review-pr/references/scope.md +54 -19
  103. package/claude/skills/review-ui/SKILL.md +2 -0
  104. package/claude/skills/review-ui/references/close-out.md +49 -0
  105. package/claude/skills/review-ui/references/driving.md +24 -4
  106. package/claude/skills/review-ui/references/post.md +43 -13
  107. package/claude/skills/role-orchestrator/references/orchestrator-cloud-launch.md +67 -17
  108. package/claude/skills/role-orchestrator/references/orchestrator-dispatch.md +81 -40
  109. package/claude/skills/role-orchestrator/references/orchestrator-handback.md +52 -15
  110. package/claude/skills/role-orchestrator/references/orchestrator-handoff.md +48 -26
  111. package/claude/skills/role-orchestrator/references/orchestrator-inbound.md +12 -13
  112. package/claude/skills/role-orchestrator/references/orchestrator-launch.md +72 -36
  113. package/claude/skills/role-orchestrator/references/orchestrator-output.md +12 -4
  114. package/claude/skills/role-orchestrator/references/orchestrator-parked.md +64 -24
  115. package/claude/skills/role-orchestrator/references/orchestrator-poll.md +80 -26
  116. package/claude/skills/role-orchestrator/references/orchestrator-refill.md +41 -18
  117. package/claude/skills/role-orchestrator/references/orchestrator-resume.md +19 -7
  118. package/claude/skills/role-orchestrator/references/orchestrator-review-dispatch.md +22 -12
  119. package/claude/skills/role-orchestrator/references/orchestrator-reviewer-launch.md +15 -6
  120. package/claude/skills/role-orchestrator/references/orchestrator-sweep.md +25 -7
  121. package/claude/skills/role-orchestrator/references/orchestrator-watch.md +34 -8
  122. package/claude/skills/role-orchestrator/scripts/poll.ts +16 -24
  123. package/claude/skills/role-worker/REQUIREMENT.md +2 -0
  124. package/claude/skills/role-worker/SKILL.md +17 -0
  125. package/claude/skills/search-craft/references/adopted.md +18 -6
  126. package/claude/skills/session-map/references/session.md +26 -7
  127. package/claude/skills/session-worktree/references/main-root-writes.md +25 -8
  128. package/claude/skills/systematic-debugging/references/adopted.md +30 -16
  129. package/claude/skills/target-check/references/domains.md +39 -11
  130. package/claude/skills/target-setup/references/detect.md +80 -65
  131. package/claude/skills/target-setup/references/indexes.md +8 -6
  132. package/claude/skills/task-board/references/board.md +86 -30
  133. package/claude/skills/task-board/references/decline.md +29 -13
  134. package/claude/skills/task-board/references/tasks-decline.md +12 -5
  135. package/claude/skills/task-board/references/tasks.md +65 -33
  136. package/claude/skills/task-complete/references/archive.md +41 -17
  137. package/claude/skills/task-complete/references/receipt-sweep.md +23 -9
  138. package/claude/skills/task-complete/references/unusable-baseline.md +10 -3
  139. package/claude/skills/teach-workspace/REQUIREMENT.md +1 -1
  140. package/claude/skills/teach-workspace/SKILL.md +1 -2
  141. package/claude/skills/teach-workspace/references/glossary.md +6 -2
  142. package/claude/skills/teach-workspace/references/lesson-build.md +44 -16
  143. package/claude/skills/teach-workspace/references/lesson-craft.md +12 -7
  144. package/claude/skills/teach-workspace/references/pedagogy.md +6 -3
  145. package/claude/skills/teach-workspace/references/promotion-fold.md +17 -11
  146. package/claude/skills/teach-workspace/references/promotion.md +31 -8
  147. package/claude/skills/teach-workspace/references/revisit.md +8 -2
  148. package/claude/skills/teach-workspace/references/teach.md +17 -9
  149. package/claude/skills/test-craft/references/adopted.md +48 -14
  150. package/claude/skills/test-craft/references/component.md +7 -4
  151. package/claude/skills/test-craft/references/e2e.md +25 -7
  152. package/claude/skills/test-craft/references/unit.md +3 -1
  153. package/claude/skills/test-first/references/adopted.md +12 -4
  154. package/claude/skills/ui-checklist/REQUIREMENT.md +1 -1
  155. package/claude/skills/ui-checklist/SKILL.md +1 -1
  156. package/claude/skills/video-craft/references/adopted.md +62 -18
  157. package/claude/skills/write-human/references/adopted.md +21 -8
  158. package/docs/workflow/parallel-features.md +2 -1
  159. package/docs/workflow/skill-map.md +2 -1
  160. package/package.json +1 -1
  161. package/src/claude/cases/git.ts +4 -0
  162. package/src/claude/cases/workflow.ts +5 -0
  163. package/src/commands/pr.ts +174 -37
  164. package/src/commands/records.ts +11 -3
  165. package/src/context/shape-gated.ts +1 -0
  166. package/src/markdown/scope.ts +150 -2
  167. package/src/pr/frames.ts +53 -9
  168. package/src/pr/lift.ts +6 -3
  169. package/src/pr/review-state.ts +182 -0
  170. package/src/records/validate.ts +1 -0
  171. package/src/tasks/answers.ts +79 -2
  172. package/src/tasks/fan-in.ts +176 -0
  173. package/src/tasks/stack.ts +1 -1
  174. package/tooling/astro/reference.md +80 -39
  175. package/tooling/base/reference.md +63 -32
  176. package/tooling/base/seeds/canon/context/ci.md +7 -15
  177. package/tooling/base/seeds/canon/context/development.md +14 -14
  178. package/tooling/claude/reference.md +40 -22
  179. package/tooling/cloudflare/reference.md +31 -12
  180. package/tooling/go/reference.md +47 -23
  181. package/tooling/nextjs/reference.md +52 -19
  182. package/tooling/php/reference.md +35 -16
  183. package/tooling/python/reference.md +47 -30
  184. package/tooling/shell/reference.md +6 -5
  185. package/tooling/vite-react/reference.md +49 -21
  186. package/tooling/web/reference.md +130 -70
  187. package/claude/skills/git-pr/references/evidence.md +0 -124
@@ -5,6 +5,8 @@ description: Skill structure and authoring rules for Claude Code
5
5
 
6
6
  # Claude skill reference
7
7
 
8
+ Checked against the [Claude Code skills](https://code.claude.com/docs/en/skills) and [skill authoring best practices](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices) pages on `2026-10-18`.
9
+
8
10
  ## Contents
9
11
 
10
12
  - [Overview](#overview)
@@ -26,7 +28,7 @@ Skills give Claude Code domain-specific constraints and rules inline, so it can
26
28
 
27
29
  ## Scope
28
30
 
29
- Governs a skill folder under `skills/` as one artifact: `SKILL.md`, its siblings `REQUIREMENT.md` and `EVAL.md`, and the bundled reference, script, and asset folders beside them.
31
+ Governs a skill folder under `skills/` as one artifact, being `SKILL.md`, its siblings `REQUIREMENT.md` and `EVAL.md`, and the bundled reference, script, and asset folders beside them.
30
32
 
31
33
  Does not govern:
32
34
 
@@ -37,7 +39,7 @@ Does not govern:
37
39
  - **`rule.md`**: path-scoped coding rules, which load on a file match rather than on a request match
38
40
  - **the `write-human` skill**: voice, rhythm, and sentence construction in a skill body
39
41
  - **`markdown.md`**: punctuation, formatting, and word choice in a skill body
40
- - **`slug.md`**: the transform from a branch name to a slug a skill carries in a filename
42
+ - **`slug.md`**: the transform from a branch name to a filename slug
41
43
  - **the `create-skill` skill and the creation-time bullet in the `skill` governance rule**: whether a new skill earns its place, by the three-question test
42
44
 
43
45
  ## Changing a skill
@@ -51,11 +53,13 @@ Answer all four before editing, and carry the answers into wherever the change i
51
53
 
52
54
  ## Whether a rule belongs beside the skill
53
55
 
54
- A skill fires when a session invokes it or its description matches the request. A path-scoped rule fires when a session reads or writes a file matching its glob, with no decision from the session at all. The rule is the floor and the skill is the depth.
56
+ A skill fires when a session invokes it or its description matches the request. A path-scoped rule fires when a session reads or writes a file matching its glob, with no session decision. The rule is the floor and the skill is the depth.
55
57
 
56
- Run the two-part test over what the body states before calling the skill finished. Does the invariant fire when a specific path is edited, and does violating it ship silently? An invariant passing both halves belongs in a rule as well, since a session that never invoked the skill still edits that path. An invariant failing either half stays here, which is most of a body.
58
+ - Run the two-part test over the body before calling the skill done. Does the invariant fire when a specific path is edited, and does violating it ship silently?
59
+ - An invariant passing both halves moves to a rule, since a session that never invoked the skill still edits that path. It stays here when this skill creates the file the rule globs.
60
+ - An invariant failing either half stays here, which is most of a body
57
61
 
58
- Write that rule to the shape `rule.md` sets and leave the procedure here, since the two carry one invariant at two depths rather than two copies of it. Nothing checks the split.
62
+ Write that rule to the shape `rule.md` sets, keeping one copy of each invariant. A skill that only edits existing files points at the rule.
59
63
 
60
64
  ## Skill types
61
65
 
@@ -89,87 +93,102 @@ allowed-tools: <tools required>
89
93
 
90
94
  ## Structure
91
95
 
92
- - Skill is a folder named in kebab-case containing `SKILL.md` (required), `REQUIREMENT.md` (required), `EVAL.md` (optional), `scripts/` (optional), `references/` (optional), `assets/` (optional)
93
- - Create a new skill with its `REQUIREMENT.md` beside it, even where nobody contests its scope. A requirement present for some skills and absent for others cannot be scanned, since an absence reads as a gap rather than as a verdict
94
- - Name a file sitting directly in the skill folder in capitals and a bundled folder in lowercase, so the parts a reader opens are distinct from the ones a skill loads
96
+ A skill is a folder named in kebab-case. It holds `SKILL.md` and `REQUIREMENT.md`, both required, and maybe `EVAL.md`, `scripts/`, `references/`, and `assets/`.
97
+
98
+ - Create a new skill with its `REQUIREMENT.md` beside it, even where nobody contests its scope, since an absence reads as a gap rather than as a verdict
99
+ - Name a file sitting directly in the skill folder in capitals and a bundled folder in lowercase, so the parts a reader opens differ from the ones a skill loads
95
100
  - `EVAL.md` holds prompts and a judging rubric a person runs by hand, since the automated `claude plugin eval` runner is gated in early access
96
101
 
97
102
  ### Folder and file rules
98
103
 
104
+ The loader reads the folder name as the skill name, so the name follows the same casing everywhere.
105
+
99
106
  - `SKILL.md` must start with YAML frontmatter between `---` delimiters
100
107
  - No `README.md` inside the skill folder
101
108
  - No spaces, capitals, or underscores in folder or skill name
102
109
 
103
110
  ## Frontmatter
104
111
 
105
- - **`name`** (required): kebab-case, matches folder name, no spaces or capitals
106
- - **`description`** (required): what it does + when to use it, under 1024 chars, no XML tags
107
- - **`disable-model-invocation: true`**: user-invoked only, Claude will not auto-trigger. Set it on a skill that starts a process the operator owns, never on one reachable by a matched trigger.
108
- - **`allowed-tools`**: restrict tool access when the skill is active
109
- - **`metadata`**: optional key-value pairs (`author`, `version`, `mcp-server`)
110
- - **`metadata.family`** (required on a skill under `claude/skills/`): the skill map group the skill's row sits under, as one key from `families` in `canon claude skills list --json`. A skill under `.claude/skills/` takes none.
112
+ Read `skill-frontmatter.md` for the required and optional fields, their limits, and which keys an upload accepts.
111
113
 
112
114
  ## Description
113
115
 
114
116
  - Structure: `[What it does] + [When to use it] + [Key trigger phrases]`, quoting phrases users would say
115
117
  - Be specific, not vague. Claude routes based on this field alone.
116
- - Add negative triggers if skill is over-triggering: `Do NOT use for X`
118
+ - Write in the third person, since the description is injected into the system prompt. Write "Reviews code" over "I review code".
119
+ - Add negative triggers if skill is over-triggering: `Do NOT use for X`. That form is canon's own, and Anthropic's pages do not mention it.
117
120
 
118
121
  ## Body
119
122
 
120
123
  ### Rule content and scope
121
124
 
125
+ A body holds behavioral rules and pointers to reference docs, front-loading the critical ones. Narrative about what files are or how the system works belongs in `docs/`.
126
+
122
127
  - Use imperative voice throughout, and sentence case for every heading
123
- - Front-load critical instructions
124
- - Contain only behavioral rules (what to do, what not to do) and pointers to reference docs. Narrative descriptions of what files are or how the system works belong in `docs/`, not in the skill body.
125
- - State rules, not inventories. Reference docs for lists that change, and phrase a rule as a ban on the forbidden shape rather than an enumeration of allowed options, so it stays stable as categories change.
128
+ - State rules, not inventories. Reference docs for lists that change.
129
+ - Phrase a rule as a ban on the forbidden shape rather than an enumeration of allowed options, so it stays stable as categories change
130
+ - When referencing project files, include "from the project root" in the read instruction
131
+ - Run independent operations, such as file reads and shell commands, in parallel to reduce latency
126
132
 
127
- #### Current rule and grouping
133
+ ### Current rule and grouping
134
+
135
+ State the current rule only, in the body and in every file under `references/`. The incident and the date that earned a rule go in `REQUIREMENT.md` under `Gap`, or stay in git, and a date inside a fence or a code span is example data and stays.
128
136
 
129
137
  - Cut any rule that resists crisp one-line phrasing. Vague guidance is worse than none.
130
- - State the current rule only, in the body and in every file under `references/`. The incident and the date that earned a rule go in `REQUIREMENT.md` under `Gap`, or stay in git. A date inside a fence or a code span is example data and stays.
131
- - Group bullets under H2 headings by domain concern. Keep dos and don'ts together under the topic they belong to rather than splitting them into flat rules and constraints sections.
138
+ - Group bullets under H2 headings by concern, keeping dos and don'ts together rather than in flat rules and constraints sections
132
139
  - One actionable constraint per bullet. Prefer the `X over Y` form for preferences.
133
140
 
134
- #### Examples and density
141
+ ### Examples and density
142
+
143
+ Every statement in a body costs a read on each invocation.
135
144
 
136
- - Do not include code examples unless a one to three line inline snippet captures a pattern the model cannot infer.
137
- - Keep a statement only when removing it would change what the agent does, naming a principle as a few-word handle rather than explaining it. Revisit when a run shows the model ignoring a principle named only as a handle.
145
+ - Do not include code examples unless a one to three line inline snippet captures a pattern the model cannot infer
146
+ - Keep a statement only when removing it would change what the agent does, naming a principle as a few-word handle rather than explaining it
147
+ - Revisit when a run shows the model ignoring a principle named only as a handle
138
148
 
139
149
  ### Progressive disclosure
140
150
 
141
151
  Keeping a body and its references under the ceiling, what moves to `references/` and what stays, and how a body names a reference are in `skill-disclosure.md`.
142
152
 
143
- ### Reading and running commands
144
-
145
- - When referencing project files, include "from the project root" in the read instruction
146
- - When executing multiple independent operations (file reads, shell commands), run them in parallel to reduce latency
147
-
148
153
  ### Anti-patterns to avoid
149
154
 
150
- - Avoid flags that dispatch between alternate flows. The model misreads them and runs the vanilla path. Dry-run-style toggles are fine. For alternate flows, prefer a separate skill or manual invocation of two skills in sequence.
155
+ Avoid flags that dispatch between alternate flows, since the model misreads them and runs the vanilla path. Dry-run-style toggles are fine, and an alternate flow takes a separate skill or two skills invoked in sequence.
156
+
151
157
  - When a skill should fire from multiple callers, rely on description matching with strong trigger phrases. Do not hardcode `Skill` calls in sibling skills that could trigger it naturally.
152
- - Before collapsing a manual multi-step flow into a skill, ask what the manual pauses do. Where a pause carries external timing, error-surfacing, or judgment weight, prefer explicit per-step confirmation.
158
+ - Before collapsing a manual multi-step flow into a skill, ask what the manual pauses do
159
+ - Where a pause carries external timing, error-surfacing, or judgment weight, prefer explicit per-step confirmation
160
+
161
+ ### Output paths
162
+
163
+ A success line emits the full relative path from the project root (`<dir>/<file>`) for any file written, updated, or deleted, since a bare filename names a file the reader cannot open. The `## Output` section of the project's instruction file sets the form that path takes, so the body states which path and leaves the form to that section.
164
+
165
+ ### Where output lands
166
+
167
+ Before writing, decide whether the output is a deliverable, which lands among the project's tracked files, or a session record. A session record lands under `.canon/` in the named subfolder for its kind, never in a folder the body invents.
153
168
 
154
- ### Output and tuning
169
+ - Kinds: `tasks/`, `plans/`, `review/`, `groundwork/`, `intake/`, `proposals/`, `diagrams/`, `teach/`, `ready/`, `feedback/`, `picks/`, `evidence/`, `transcripts/`, `walkthroughs/`
170
+ - `tmp/` takes scratch nothing else claims
171
+ - A `review/` writer names its file `<kind>-<slug>.md` and writes it flat
172
+ - An `evidence/` folder takes the next two-digit ordinal as `<nn>-<slug>/`, numbered in the order the folders first appeared
155
173
 
156
- - Skill success lines emit the full relative path from the project root (`<dir>/<file>`) for any file written, updated, or deleted. A bare filename names a file the reader cannot open. The `## Output` section of the project's instruction file sets the form that path takes, so a skill body states which path is emitted and leaves the form to that section.
157
- - Before a skill writes anything, decide whether the output is a deliverable the project keeps or a toolkit session record. A deliverable lands among the project's own tracked files. A session record lands under `.canon/`, in the named subfolder for its kind (`tasks/`, `plans/`, `review/`, `groundwork/`, `intake/`, `proposals/`, `diagrams/`, `teach/`, `ready/`, `feedback/`, `picks/`, `evidence/`, `transcripts/`, or `walkthroughs/`, with `tmp/` for scratch nothing else claims), never in a folder the body invents. A `review/` writer names its file `<kind>-<slug>.md` and writes it flat, and an `evidence/` folder takes the next two-digit ordinal as `<nn>-<slug>/`, numbered in the order the folders first appeared.
158
- - Codify a skill's posted or generated output as a fenced template, and keep the body consistent with every capability the frontmatter description names.
159
- - When a skill gathers user input or pre-seeds a template, attach a concrete proposed default to every question, derived from project context. Accept "use defaults" as a bulk-confirm.
160
- - Separate correctness axes (routing, sourcing, escalation, decline) from shape axes (line count, formatting, variant sprawl) when tuning a skill. Tighten only on correctness regressions, never turning a soft cap hard for aesthetic drift.
174
+ ### Templates, input, and tuning
175
+
176
+ Codify a skill's posted or generated output as a fenced template, and keep the body consistent with every capability the frontmatter description names.
177
+
178
+ - When a skill gathers input or pre-seeds a template, attach a proposed default derived from project context to every question. Accept "use defaults" as a bulk-confirm.
179
+ - Separate correctness axes (routing, sourcing, escalation, decline) from shape axes (line count, formatting, variant sprawl) when tuning a skill
180
+ - Tighten only on correctness regressions, never turning a soft cap hard for aesthetic drift
161
181
 
162
182
  ## Scripts
163
183
 
164
- - Use `scripts/` for operations that must be deterministic or repetitive
165
- - Ask whether a CLI verb the project already has does the job before writing a script. A verb is already installed and tested, and a script beside it is a second copy that drifts
166
- - Write a script in TypeScript and run it as `bun ${CLAUDE_SKILL_DIR}/scripts/<name>.ts`. Keep bash for a few lines that start one command. The rule governs a new script, so bash kept by decision is no breach and is not ported unasked, such as `review-ui`'s `scripts/pw.sh` as glue and the shell scripts the web tooling stacks ship, whose port was deferred
167
- - Import no package. A plugin loads from a cache that carries no `node_modules`, so only `node:` built-ins and the CLIs the skill already requires resolve
168
- - Use XML tags in script output for reliable parsing: `<SECTION>content</SECTION>`
184
+ Use `scripts/` for operations that must be deterministic or repetitive. First ask whether a CLI verb the project already has does the job, since a verb is installed and tested and a script beside it is a second copy that drifts.
169
185
 
170
- ### Inline commands
186
+ - Write a script in TypeScript and run it as `bun ${CLAUDE_SKILL_DIR}/scripts/<name>.ts`. Keep bash for a few lines that start one command.
187
+ - Import no package. A plugin loads from a cache that carries no `node_modules`, so only `node:` built-ins and the CLIs the skill already requires resolve.
188
+ - Use XML tags in script output for parsing: `<SECTION>content</SECTION>`
189
+ - Guard a git or shell command a body runs inline with `2>/dev/null || echo "FALLBACK"`. A TypeScript script uses try and catch instead.
171
190
 
172
- - Always include `2>/dev/null || echo "FALLBACK"` guards on git and shell commands a skill body runs inline. A TypeScript script handles failure with try and catch instead
191
+ The TypeScript rule governs a new script, so bash kept by decision is no breach and is not ported unasked. Examples are `review-ui`'s `scripts/pw.sh` as glue and the shell scripts the web tooling stacks ship, whose port was deferred.
173
192
 
174
193
  ## Invocation
175
194
 
@@ -180,10 +199,14 @@ Keeping a body and its references under the ceiling, what moves to `references/`
180
199
 
181
200
  ### Correct
182
201
 
202
+ Each line names its reason after the `#`.
203
+
183
204
  - `description: Reviews code for bugs and clarity. Use when asked to "review this" or "check the PR".` # names the action, then the trigger phrases
184
205
  - `Read ${CLAUDE_SKILL_DIR}/references/post.md on reaching this step.` # a moved step keeps its heading and one load line
185
206
 
186
207
  ### Incorrect
187
208
 
209
+ Each line names its fault after the `#`.
210
+
188
211
  - `description: Handles all code tasks in scripts/, src/, and lib/, and any file ending in .ts .js .py .sh.` # path-focused and keyword-stuffed
189
212
  - `A good review checks bugs, performance, security, style, naming, coverage, docs, and SOLID...` # dumps everything inline instead of citing a standard
@@ -41,4 +41,4 @@ The opposite failure is the one that ships silently. A session that takes a pref
41
41
 
42
42
  - Making the ordinary judgment call, which is a pick plus a one-sentence tradeoff and needs no surface
43
43
  - Writing the decision into a plan, task, or context entry, which each owning standard governs and this skill only routes to
44
- - Deciding when to fire. The skill is user-invoked through `disable-model-invocation`, so escalating is the operator's call rather than a description match.
44
+ - Deciding when to fire. The description states `Do NOT auto-trigger`, so escalating is the operator's call rather than a description match.
@@ -1,7 +1,6 @@
1
1
  ---
2
2
  name: decision-escalate
3
- description: Collects every open decision whose answer turns on the operator's preference, since only they know what they need, puts them as one batch of questions each carrying options and a recommended default, then waits. Use when asked to "escalate this", "ask me the open questions", "batch the open decisions", "what do you need from me", or "stop and ask before you pick". Do NOT use for a judgment call the session can settle, which is a pick with the tradeoff stated in one sentence.
4
- disable-model-invocation: true
3
+ description: Collects every open decision whose answer turns on the operator's preference, since only they know what they need, puts them as one batch of questions each carrying options and a recommended default, then waits. Use when asked to "escalate this", "ask me the open questions", "batch the open decisions", "what do you need from me", or "stop and ask before you pick". Do NOT use for a judgment call the session can settle, which is a pick with the tradeoff stated in one sentence. Do NOT auto-trigger.
5
4
  metadata:
6
5
  family: decide
7
6
  ---
@@ -10,7 +10,8 @@ Run these steps once the body's Pick step resolves to Vercel. Read `vercel <comm
10
10
  ## Guard
11
11
 
12
12
  - If `vercel whoami` fails, stop: `❌ vercel is not authenticated. Run vercel login, then re-invoke.`
13
- - If `command -v jq` fails, stop: `❌ jq is not installed. Install it, then re-invoke.` Step 3 pipes its output into a secret, and a missing reader would set that secret empty while `gh secret list` still lists its name.
13
+ - If `command -v jq` fails, stop: `❌ jq is not installed. Install it, then re-invoke.`
14
+ - Step 3 pipes jq's output into a secret, and without jq the secret is set empty while `gh secret list` still lists its name
14
15
 
15
16
  ## Step 1: create and link the project
16
17
 
@@ -5,49 +5,68 @@ description: Which external sources on deprecation and migration this skill adop
5
5
 
6
6
  # Adopted and declined
7
7
 
8
- External sources were read and filtered rather than imported. This file is the record. A later session extending the skill adds to it rather than re-arguing an item already settled here.
8
+ External sources were read and filtered rather than imported. This file is the record, and a later session extending the skill adds to it rather than re-arguing an item settled here.
9
9
 
10
- ## Adopted
10
+ ## Adopted from the default shelf
11
11
 
12
- ### From the default shelf
12
+ ### Deprecation
13
13
 
14
- **Deprecation.** [Software Engineering at Google, chapter 15](https://abseil.io/resources/swe-book/html/ch15.html). Adopted from it:
14
+ [Software Engineering at Google, chapter 15](https://abseil.io/resources/swe-book/html/ch15.html) supplies four positions the body states.
15
15
 
16
- - Advisory and compulsory deprecation as the two types, with compulsory carrying a removal date. The body allows compulsory only once a replacement has shipped, which the chapter implies and the four questions make explicit.
17
- - Warnings that are actionable and relevant: a warning names what the caller does, and surfaces where the caller uses the old surface.
18
- - Deprecation as a process with an owner, since the chapter observes that unowned deprecation work makes no progress. Adopted as the fourth decision question and the rule against an advisory deprecation left open with no owner.
19
- - Finding consumers before removal, which the chapter does with static analysis across one repository. Generalized into the zero-consumers check across caller kinds, since a target project rarely has a whole-company code index and its callers often live outside the repository.
16
+ - **Two types.** Advisory and compulsory, the second carrying a removal date. The body allows compulsory only once a replacement ships, which the chapter implies and the four questions make explicit.
17
+ - **Actionable, relevant warnings.** A warning names what the caller does, and surfaces where the caller uses the old surface.
18
+ - **An owner.** The chapter observes that unowned deprecation work makes no progress. Adopted as the fourth decision question and the rule against an ownerless advisory deprecation left open.
19
+ - **Finding consumers before removal.** The chapter's static analysis over one repository becomes the zero-consumers check across caller kinds, since a target's callers often live outside it.
20
20
 
21
- **The Churn Rule.** [Software Engineering at Google, chapter 1](https://abseil.io/resources/swe-book/html/ch01.html), under "Policies That Don't Scale": infrastructure teams move their internal users to new versions themselves, or update in place in a backward-compatible way. Adopted as the group on migrating callers yourself, with the backward-compatible path kept for callers the owner cannot edit.
21
+ ### Migrating callers yourself
22
22
 
23
- ### The decision and the bridges
23
+ [Software Engineering at Google, chapter 1](https://abseil.io/resources/swe-book/html/ch01.html), under "Policies That Don't Scale", has infrastructure teams move their internal users to new versions themselves, or update in place in a backward-compatible way.
24
24
 
25
- **Deprecation and migration.** Addy Osmani's `agent-skills`, pinned at addyosmani/agent-skills@2686b620, [`skills/deprecation-and-migration/SKILL.md`](https://github.com/addyosmani/agent-skills/blob/2686b620/skills/deprecation-and-migration/SKILL.md). Adopted from it:
25
+ Adopted as the group on migrating callers yourself, with the backward-compatible path kept for callers the owner cannot edit.
26
26
 
27
- - The five-question deprecation decision, cut to four. Its unique-value and maintenance-cost questions merge into one question about what keeping the surface costs. Its per-consumer migration-cost question drops, since the Churn Rule puts that cost on the owner rather than weighing it per caller. The owner question from the book takes the freed place.
28
- - The rule never to deprecate without a replacement, as the third decision question.
29
- - The strangler and adapter patterns, stated as when each fits rather than as worked code tied to one stack.
27
+ ## Adopted for the decision and the bridges
30
28
 
31
- #### Migration, zombie code, and red flags
29
+ Addy Osmani's `agent-skills`, pinned at addyosmani/agent-skills@2686b620, [`skills/deprecation-and-migration/SKILL.md`](https://github.com/addyosmani/agent-skills/blob/2686b620/skills/deprecation-and-migration/SKILL.md), supplies the decision and the bridge patterns.
32
30
 
33
- - Expand, migrate, contract, lifted out of its schema section and stated for any surface as three separate changes.
34
- - Zombie code, narrowed to code that is unowned, uncalled, and still built, and settled by the same zero-consumers check rather than a list of staleness signals.
35
- - The rationalizations and red flags that carry across stacks, reworded for any surface rather than a service or a column. Two excuse rows come from here:
36
- - The row on a search that found nothing, from its red flag against removing code without verifying zero active consumers.
37
- - The row on adding the new one and dropping the old one now, generalized from its rationalization about adding a column and dropping the old one in the same migration.
31
+ ### The decision
32
+
33
+ Its five-question deprecation decision is cut to four. The unique-value and maintenance-cost questions merge into one about what keeping the surface costs, and the per-consumer migration-cost question drops, since the Churn Rule puts that cost on the owner.
34
+
35
+ - The owner question from the book takes the freed place
36
+ - The rule never to deprecate without a replacement is the third decision question
37
+ - The strangler and adapter patterns are stated as when each fits rather than as worked code tied to one stack
38
+
39
+ ### Migration, zombie code, and red flags
40
+
41
+ The migration shape and the excuse rows carry across stacks once reworded for any surface rather than a service or a column.
42
+
43
+ - Expand, migrate, contract, lifted out of its schema section and stated for any surface as three separate changes
44
+ - Zombie code, narrowed to code that is unowned, uncalled, and still built, and settled by the zero-consumers check rather than a list of staleness signals
45
+ - The excuse row on a search that found nothing, from its red flag against removing code without verifying zero active consumers
46
+ - The excuse row on adding the new one and dropping the old one now, generalized from its rationalization about a column added and dropped in one migration
38
47
 
39
48
  ## Declined
40
49
 
41
- **Its database schema section.** The column rename worked example, the tested down path, batched backfills, and concurrent index builds. Declined because a project's persistence rule owns schema changes, and restating them here puts two owners on one rule. Only the expand, migrate, contract shape was lifted, generalized beyond schemas.
50
+ Each item below was read and left out, with the reason it changes nothing a session does here.
51
+
52
+ ### The schema section and its mechanisms
53
+
54
+ **Its database schema section.** The column rename worked example, the tested down path, batched backfills, and concurrent index builds. A project's persistence rule owns schema changes, so only the expand, migrate, contract shape was lifted, generalized beyond schemas.
42
55
 
43
56
  **Feature flag migration.** Declined because it is one way to run a strangler, and naming a flag mechanism ties the body to a runtime a target may not have.
44
57
 
45
- **The traffic percentages in its strangler phases.** Declined because they describe a service behind a router, and most surfaces a session retires, such as a function, a flag, or a file, have callers rather than traffic.
58
+ ### Numbers that fit one project
59
+
60
+ **The traffic percentages in its strangler phases.** They describe a service behind a router, and most surfaces a session retires, such as a function, a flag, or a file, have callers rather than traffic.
61
+
62
+ **The thresholds in its zombie signs and rebuttals.** No commits in six months, and comparing costs over two or three years. Declined for the reason the body states no deprecation window, since a number fits one project's cadence and not another's.
63
+
64
+ ### Defaults and framing
46
65
 
47
- **"Default to advisory" as a standing default with no exit.** Kept advisory as the starting state, and declined leaving it open, since an advisory deprecation with no date and no owner is the stalled case the body exists to prevent.
66
+ **"Default to advisory" as a standing default with no exit.** Advisory is kept as the starting state and leaving it open is declined, since an advisory deprecation with no date and no owner is the stalled case the body exists to prevent.
48
67
 
49
- **The thresholds in its zombie signs and rebuttals.** No commits in six months, and comparing costs over two or three years. Declined for the same reason the body states no deprecation window: a number fits one project's cadence and not another's.
68
+ **"Code is a liability" and design-time deprecation planning as sections.** Framing a session already accepts by loading the skill. The cost question carries the first, and designing a new surface for removal belongs to the skill shaping that surface.
50
69
 
51
- **"Code is a liability" and design-time deprecation planning as sections.** Declined as framing a session already accepts by loading the skill. The cost question carries the first, and designing a new surface for removal belongs to the skill shaping that surface.
70
+ ### Ceremony
52
71
 
53
72
  **The celebration step and the deprecation notice template.** Declined because neither changes what a session does, and the template's example names a package runner and a migration script tied to one stack.
@@ -15,14 +15,22 @@ External catalogs were read and filtered rather than imported. This file is the
15
15
 
16
16
  ## Declined from the catalogs
17
17
 
18
+ Each item below is real advice placed in the wrong surface, or a rule that decides nothing.
19
+
20
+ ### Values and dials
21
+
18
22
  **Banned fonts by name.** A font ban is a value ban, and a value belongs to the project's own design document rather than to a skill that loads everywhere. A project that wants a typeface ruled out rules it out there.
19
23
 
20
24
  **Numeric intensity dials.** Every external source carries a 1-to-10 scale for variance, motion and density. A session picks a middle value and reports compliance. That satisfies the rule, decides nothing, and leaves no trace a later reader could check it by. The declared read carries the same information in a sentence somebody can argue with.
21
25
 
26
+ ### Rules owned elsewhere
27
+
22
28
  **The em dash ban as a design rule.** One source bans the character on a page as a visual tell. The markdown standard already bans it for prose reasons and `canon markdown audit` gates that from package data, so restating it here would put a second copy of an enforced rule behind an unenforced pointer.
23
29
 
24
30
  **The official-package map.** A table routing a brief to Fluent, Material, Carbon, Polaris, Primer or a government design system. It is real advice and it is a stack decision a project takes once, so it belongs in that project's own records rather than in a skill that loads on every design round.
25
31
 
32
+ ### Scope
33
+
26
34
  **Scoping out application UI.** The largest source covers landing pages, portfolios and redesigns, and excludes dashboards, data tables and multi-step product UI. Those exclusions are most of what software projects actually build, so the kinds reference carries application UI as a first-class kind.
27
35
 
28
36
  ## Declined from the systems reference
@@ -33,7 +41,7 @@ Each failed the test in `REQUIREMENT.md`. Recorded so they are not argued again.
33
41
  - **Specific ratios for a type scale**, such as a named musical interval. Falsifiable and arbitrary, and a project picking a different ratio is not wrong.
34
42
  - **Named palettes or banned hues.** A value ban, which belongs to the project's design document. This is where every external catalog of this kind ends up, and it is why theirs cannot be imported.
35
43
  - **A minimum contrast figure.** A threshold with a number, which the accessibility rules own.
36
- - **Imagery as a system.** There is no scale to establish. What a model gets wrong about images is using fake ones, which `tells.md` already covers, so the layer stays thin on purpose rather than by oversight.
44
+ - **Imagery as a system.** There is no scale to establish. What a model gets wrong about images is using fake ones, which `tells.md` covers, so the layer stays thin on purpose.
37
45
 
38
46
  ## Carried as a caution
39
47
 
@@ -11,7 +11,7 @@ Read this when a layout satisfies the ordering, the locks and the tells, and sti
11
11
 
12
12
  The eye and the arithmetic disagree, and the eye is the one being served.
13
13
 
14
- - **Centering by the numbers is not centering.** A triangle inside a circle, an icon beside a label, a glyph inside a round button all sit visually left or low when centered by their bounding box. Nudge until it looks right, usually a pixel or two.
14
+ - **Centering by the numbers is not centering.** A triangle in a circle, an icon beside a label, or a glyph in a round button sits left or low when centered by its box. Nudge it, usually a pixel or two.
15
15
  - **Equal vertical padding reads bottom-heavy.** A block with matching top and bottom padding looks like it is sinking. Give the bottom slightly more.
16
16
  - **Optical size beats declared size.** A circle and a square at the same declared size do not read as the same size. The circle needs to be larger.
17
17
  - **Type alignment follows the letterform, not the box.** A quotation mark, a bullet or an opening parenthesis at the start of a line should hang outside the text edge so the text itself lines up.
@@ -56,6 +56,8 @@ Reaching for size is the first instinct and the weakest tool.
56
56
 
57
57
  ### Content and copy
58
58
 
59
+ Copy reads unfinished in the same way.
60
+
59
61
  - Every item dated identically, which no real collection ever is.
60
62
  - An exclamation mark in a success message. Confidence is quieter than that.
61
63
  - An error opening on an apology rather than on what to do next.
@@ -12,8 +12,8 @@ Read this once the declared read names a kind. The body's rules hold on every ki
12
12
  Landing pages, campaign pages, portfolios. The reader has never used the thing and owes it no attention.
13
13
 
14
14
  - **Optimizes for** comprehension in the first screen, then one clear next action.
15
- - **Composition carries the weight.** A marketing page is judged on section order and variation before anything else, which is why a palette round against a flat composition changes nothing a reader notices.
16
- - **Vary the section shape.** Alternate alignment, container width and the ratio between sections. A page where every section is a centered heading over centered body reads as a template regardless of its values.
15
+ - **Composition carries the weight.** A marketing page is judged on section order and variation first, so a palette round against a flat composition changes nothing a reader notices.
16
+ - **Vary the section shape.** Alternate alignment, container width and the ratio between sections. Every section a centered heading over centered body reads as a template whatever its values.
17
17
  - **Low density.** Whitespace is the argument that the thing is considered. This is the one kind where less information on screen is usually better.
18
18
  - **Every claim names a real thing.** A page asserting what a tool does, illustrated by something the tool did not produce, breaks its own thesis in the place it is making it.
19
19
  - **Motion is permitted and rationed.** Entrance motion for what genuinely leads the eye, nothing looping forever.
@@ -25,8 +25,9 @@ Dashboards, tools, admin surfaces, agentic and assistant interfaces. The reader
25
25
 
26
26
  - **Optimizes for** throughput and state legibility. How fast can the reader see what is happening and act on it.
27
27
  - **High density is correct.** Cramming is a failure and spaciousness is also a failure, since a surface that shows six rows where thirty fit costs the reader a scroll per glance.
28
- - **The states carry the design weight.** Loading, empty, error, partial and stale are not edge cases on this kind, they are most of what the reader sees, so they are composed rather than handled. Whether each exists at all is the `ui` rules' question and not this one.
29
- - **An agentic surface adds three states of its own:** work in progress with something to read while it runs, work that needs the person before it continues, and work that finished with a result to inspect. Each needs a visible resting place and none should be a spinner.
28
+ - **The states carry the design weight.** Loading, empty, error, partial and stale are most of what the reader sees on this kind, so they are composed rather than handled.
29
+ - **Whether each state exists** is the `ui` rules' question, not this file's.
30
+ - **An agentic surface adds three states.** Work running with something to read, work that needs the person, and work finished with a result to inspect. Each rests visibly, never as a spinner.
30
31
  - **Chrome is persistent and quiet.** Navigation, status and context stay put and stay recessive, since they are read constantly and looked at rarely.
31
32
  - **Motion is feedback, not entrance.** A thing moving should be reporting that something changed.
32
33
  - **Where a rule from another kind is wrong here:** generous whitespace, entrance animation on every panel, and hero-scale typography all read as a marketing page wearing a product's clothes.
@@ -41,12 +42,12 @@ Documentation, articles, reference pages, learning material. The reader arrived
41
42
  - **Navigation is a map.** A reader who cannot see where they are in the whole cannot judge whether to keep going, which is what a scrollspy or a persistent outline buys.
42
43
  - **Code, tables and figures are first-class.** They are what the reader scans for, so they are styled as content rather than as interruptions.
43
44
  - **Motion is almost always wrong.** Movement during reading competes with reading.
44
- - **Where a rule from another kind is wrong here:** density tuned for an application surface makes long prose unreadable, and marketing whitespace between every paragraph breaks a section into unrelated fragments.
45
+ - **Where a rule from another kind is wrong here:** application density makes long prose unreadable, and marketing whitespace between every paragraph breaks a section into unrelated fragments.
45
46
 
46
47
  ## Kinds this file does not cover
47
48
 
48
- - **Transactional flows** such as checkout, sign-up and settings are read as application UI. Their distinctive rules are state coverage and error recovery, which the `ui` governance rules already carry.
49
- - **Presentation surfaces** such as slide decks are drafted by `draft-slides`, which carries the deck's own design rules. Take the layer ordering and the floor from the body and the rest from that skill.
49
+ - **Transactional flows** such as checkout, sign-up and settings are read as application UI. Their distinctive rules, state coverage and error recovery, sit in the `ui` governance rules.
50
+ - **Presentation surfaces** such as slide decks are drafted by `draft-slides`, which carries the deck's design rules. Take the layer ordering and the floor from the body and the rest from it.
50
51
  - **Terminal and text-mode surfaces** have no layout engine and their own color rules, stated where the writing surface is decided rather than here.
51
52
 
52
53
  A read naming any of the three above takes the body's rules and says it has no per-kind guidance, naming the surface that governs it. A read naming a kind this file does not list at all says so rather than borrowing the nearest section.
@@ -28,6 +28,8 @@ Skip nothing on the ground that it is obviously fine. A rule is on this list bec
28
28
 
29
29
  ### Section rhythm
30
30
 
31
+ Each box here is a count from `tells.md`.
32
+
31
33
  - [ ] No layout family used twice. Eight sections carry at least four families
32
34
  - [ ] No three consecutive sections sharing the image-and-text split
33
35
  - [ ] Small uppercase labels above headings number no more than one per three sections, per `interface-casing`
@@ -35,6 +37,8 @@ Skip nothing on the ground that it is obviously fine. A rule is on this list bec
35
37
 
36
38
  ### Content and first screen
37
39
 
40
+ The grid and the first screen are shaped to the content counted.
41
+
38
42
  - [ ] Grid cells equal content items, with no blank tile filling a gap
39
43
  - [ ] Lists over five items use something other than a longer list
40
44
  - [ ] The first screen carries the point and the primary action without scrolling
@@ -46,12 +50,16 @@ Skip this group where the surface draws on a system already settled.
46
50
 
47
51
  ### Space and type
48
52
 
53
+ The scales come from `systems.md`.
54
+
49
55
  - [ ] Every gap comes from one scale, and the distinct spacing values number under about eight
50
56
  - [ ] Space between groups exceeds space within them
51
57
  - [ ] The type scale carries five to seven steps, each visibly different from its neighbors
52
58
 
53
59
  ### Color
54
60
 
61
+ Each box is a relationship, never a value.
62
+
55
63
  - [ ] The accent is rare enough to read as an accent
56
64
  - [ ] Neutrals sit in one family at one temperature
57
65
  - [ ] Adjacent surfaces separate by a little and content separates from ground by a lot
@@ -64,6 +72,8 @@ Skip this group where the surface draws on a system already settled.
64
72
 
65
73
  ### Type detail
66
74
 
75
+ The detail boxes come from `craft.md`.
76
+
67
77
  - [ ] No orphaned word closing a heading
68
78
  - [ ] Body text measure is capped
69
79
  - [ ] Changing numbers set in tabular figures
@@ -77,6 +87,8 @@ Skip this group where the surface draws on a system already settled.
77
87
 
78
88
  ### Wording
79
89
 
90
+ Every word on the surface states what is true of it.
91
+
80
92
  - [ ] No filler verbs
81
93
  - [ ] Sentence case throughout, with exceptions per `interface-casing`
82
94
  - [ ] Every claim about what the product does is a thing it does
@@ -14,8 +14,9 @@ Nothing below states a value. A value belongs to the project's own design docume
14
14
  An unguided model reaches for whatever number looks right at each point, which produces a surface with thirty spacing values and no rhythm.
15
15
 
16
16
  - **Every gap comes from one scale.** Count the distinct spacing values on a finished surface. More than about eight means there is no scale, only arithmetic.
17
- - **The steps grow, they do not add.** A scale stepping 4, 8, 12, 16, 24, 32, 48, 64 gives usable distinctions at both ends. One stepping 10, 20, 30, 40 gives four values that all read the same at large sizes and none that work at small.
18
- - **Space between groups exceeds space within them.** This is the one spacing rule carrying real meaning, since proximity is what tells a reader which things belong together. A surface with one gap everywhere has told the reader nothing, and it is the most common spacing failure in generated output.
17
+ - **The steps grow, they do not add.** A scale stepping 4, 8, 12, 16, 24, 32, 48, 64 gives usable distinctions at both ends. One stepping 10, 20, 30, 40 reads alike at large sizes and fails at small.
18
+ - **Space between groups exceeds space within them.** The one spacing rule carrying meaning, since proximity tells a reader which things belong together.
19
+ - **One gap everywhere** tells the reader nothing, and it is the most common spacing failure in generated output.
19
20
  - **Section rhythm is two or three tiers, not a value per section.** Pick the tiers, then assign each section to one.
20
21
  - **Space responds to viewport, type mostly does not.** A layout that scales every value together arrives at a phone reading like a shrunken desktop.
21
22
 
@@ -31,12 +32,12 @@ An unguided model reaches for whatever number looks right at each point, which p
31
32
 
32
33
  The layer a model is worst at, and the layer where rules are hardest to make falsifiable. Everything below is a relationship, since a rule naming a value is a value ban and values belong to the project.
33
34
 
34
- - **An accent is defined by rarity, not by hue.** A color used on a third of the surface is a ground, whatever it was chosen as. If the accent appears more than a handful of times per screen, there is no accent.
35
+ - **An accent is defined by rarity, not by hue.** A color on a third of the surface is a ground, whatever it was chosen as. An accent seen more than a handful of times per screen is none.
35
36
  - **Neutrals are one family at one temperature.** Warm grays beside cool grays read as a mistake rather than as a decision, and it is a mistake a model makes by pulling neutrals from different sources.
36
37
  - **Adjacent surfaces separate by a little, content separates from ground by a lot.** Generated output routinely inverts this: cards that shout against the page, and text that does not.
37
- - **A semantic color is not the accent.** Error, success and warning carry meaning. Borrowing the accent for one of them makes the accent mean something, and it stops being available for anything else.
38
- - **Dark mode is re-derived, not inverted.** The relationships above are what carry across, and the values are settled again. A palette flipped by algorithm gets the relationships wrong in both directions.
39
- - **Saturation has a budget across the surface, not per color.** Several colors each individually reasonable produce a surface that reads loud, which is why the rule is about the total rather than about any one value.
38
+ - **A semantic color is not the accent.** Error, success and warning carry meaning. Borrowing the accent for one makes the accent mean something, and it stops being available for anything else.
39
+ - **Dark mode is re-derived, not inverted.** The relationships above carry across and the values are settled again. A palette flipped by algorithm gets the relationships wrong in both directions.
40
+ - **Saturation has a budget across the surface, not per color.** Several colors each reasonable alone produce a surface that reads loud, so the rule is about the total rather than any one value.
40
41
 
41
42
  ## Considered and declined
42
43