@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,39 +5,38 @@ description: The visual defaults a model reaches for when nothing states a direc
5
5
 
6
6
  # Machine tells in design
7
7
 
8
- Each item below is a shape rather than a value, which is why no ban list of colors or fonts reaches any of them. Read this before handing over anything a model drafted. Skip it on a small change to a surface that already has a settled direction.
8
+ Each item below is a shape rather than a value, which is why no ban list of colors or fonts reaches any of them. Read this before handing over anything a model drafted, and skip it on a small change to a surface that already has a settled direction.
9
9
 
10
- The skill body carries the ten most common of these. This is the same catalog at full length, so an item appearing in both is one list rather than two.
11
-
12
- An item is a default to reach past, not a prohibition. A brief that explicitly asks for one gets it, and the point is that it was chosen rather than defaulted into.
10
+ The skill body carries the ten most common of these, and this is the same catalog at full length. An item is a default to reach past, not a prohibition, so a brief that explicitly asks for one gets it, chosen rather than defaulted into.
13
11
 
14
12
  ## Composition
15
13
 
16
- - **The three equal cards.** Three identical boxes in a row under a heading is the most-reached-for feature section in existence. Reach for a two-column alternation, an asymmetric grid, a list with one item given weight, or a single worked example.
17
- - **One section shape repeated down the page.** A page where every section is a centered heading over a centered body reads flat whatever its palette. Vary alignment, container width and the ratio between sections.
14
+ - **The three equal cards.** Three identical boxes in a row under a heading. Reach for a two-column alternation, an asymmetric grid, a list with one item given weight, or a single worked example.
15
+ - **One section shape repeated down the page.** Every section a centered heading over a centered body reads flat whatever its palette. Vary alignment, container width and the ratio between sections.
18
16
  - **The centered hero over a dark wash.** Centered headline, centered subhead, two buttons, gradient behind. Reach for an asymmetric split, a full-bleed artifact, or content that starts immediately.
19
- - **Decoration standing in for structure.** Hairline grids, crosshairs, floating rules and corner marks added so a page feels designed. Use them where they organize real content and remove them where they do not.
20
- - **The corner floater.** A large left-aligned section heading with a small explanatory paragraph floating in the top right, aligned to nothing. Put the sub-text under the heading or build a real two-column header.
17
+ - **Decoration standing in for structure.** Hairline grids, crosshairs, floating rules and corner marks added so a page feels designed. Keep them only where they organize real content.
18
+ - **The corner floater.** A large left-aligned heading with a small paragraph floating top right, aligned to nothing. Put the sub-text under the heading or build a real two-column header.
21
19
 
22
20
  ## Content and labels
23
21
 
24
22
  - **Enumerated eyebrows.** `001 / Capabilities`, `Phase 02`, `Step 1`, `Stage One`. The content is the label. Where progression genuinely matters, use the verb.
25
23
  - **Poetic section labels.** "From the field", "On our desks", "Currently on the bench". Use the plain functional label or drop the label.
26
- - **Atmospheric strips.** City, time zone, temperature, coordinates, build version, last-sync time, placed for texture rather than information. Keep one only where it carries real state a reader acts on.
24
+ - **Atmospheric strips.** City, time zone, temperature, coordinates, build version, last-sync time, placed for texture. Keep one only where it carries real state a reader acts on.
27
25
  - **Scroll cues.** "Scroll", an animated wheel, a downward arrow with a label. A reader looking at the top of a page knows what scrolling is.
28
- - **Decorative status dots.** A coloured dot before every nav item, list row or badge. Keep it only where it reports genuine state, and then sparingly.
29
- - **Filler verbs.** A verb chosen for its warmth rather than for what it reports, such as `elevate`, `unleash`, `empower` or `next-generation`. Name the thing the surface does.
30
- - **Placeholder that reads as placeholder.** Generic person names, egg avatars, invented company names of the `Acme` family, one portrait reused for several people, every item dated identically. Real collections are uneven and specific.
31
- - **Invented precision.** A figure like 4.1x or 48k either came from real data, is marked as sample, or does not appear. There is no fourth case. Inventing a number to look engineered is the version of this that gets shipped, because it reads as confidence.
26
+ - **Decorative status dots.** A colored dot before every nav item, list row or badge. Keep it only where it reports genuine state, and then sparingly.
27
+ - **Filler verbs.** A verb chosen for warmth rather than for what it reports, such as `elevate`, `unleash`, `empower` or `next-generation`. Name the thing the surface does.
28
+ - **Placeholder that reads as placeholder.** Generic names, egg avatars, `Acme`-family companies, one portrait for several people, every item dated alike. Real collections are uneven and specific.
29
+ - **Invented precision.** A figure like 4.1x or 48k came from real data, is marked as sample, or does not appear. An invented number gets shipped, because it reads as confidence.
32
30
  - **The fake screenshot built from boxes.** A product UI simulated out of styled rectangles inside a hero. Show the real thing, a real capture, or nothing.
33
- - **Copy nobody re-read.** Read every visible string once as a reader rather than as its author, before handing anything over. Rewrite what is grammatically broken, what carries a pronoun with no antecedent on the page, and what reaches for charm it has not earned. Plain beats clever and wrong, which is what a model drafting copy produces by default.
31
+ - **Copy nobody re-read.** Read every visible string once as a reader rather than its author before handing over. Plain beats clever and wrong, which is what a model drafting copy produces by default.
32
+ - **What the re-read rewrites.** A string that is grammatically broken, carries a pronoun with no antecedent on the page, or reaches for charm it has not earned.
34
33
 
35
34
  ## Surface and palette
36
35
 
37
36
  - **Glow as depth.** Outer glows and neon rims standing in for elevation. Use a border, a tint, or a real shadow with direction.
38
37
  - **Pure black and pure white as grounds.** Both are harsher than nearly any surface wants. Move off the extreme.
39
- - **Saturation everywhere.** An accent at full saturation next to neutrals that are also tinted leaves nothing to anchor on. Desaturate the neutrals and let one accent carry.
40
- - **The gradient as a substitute for a decision.** A gradient covering a section, a heading, or a button set, applied because the flat version looked plain. Flat is usually the fix for flat composition, not gradient.
38
+ - **Saturation everywhere.** A full-saturation accent beside tinted neutrals leaves nothing to anchor on. Desaturate the neutrals and let one accent carry.
39
+ - **The gradient as a substitute for a decision.** A gradient over a section, a heading, or a button set because flat looked plain. Flat composition is fixed by composition, not gradient.
41
40
  - **Uniform radius and uniform elevation.** Every card at the same radius with the same shadow flattens hierarchy. Let the thing that matters differ.
42
41
 
43
42
  ## Typography
@@ -49,28 +48,28 @@ An item is a default to reach past, not a prohibition. A brief that explicitly a
49
48
 
50
49
  ## Motion
51
50
 
52
- - **Motion nobody can justify.** Before adding any animation, say in one sentence what it communicates: hierarchy, sequence, feedback, or a state that changed. "It looked good" is not one of those. A sentence that will not come is the answer, and the animation goes.
51
+ - **Motion nobody can justify.** Before adding any animation, name the hierarchy, sequence, feedback, or changed state it communicates. A sentence that will not come means it goes.
53
52
  - **The permanent loop.** Anything animating forever with no input. It costs attention on every frame and earns none back.
54
53
  - **Motion on arrival for everything.** Every section fading up on scroll. Reserve entrance motion for what genuinely needs the eye.
55
- - **Motion claimed but not present, or present but not claimed.** A surface described as restrained that animates on every scroll, or one described as fluid that sits still, has decided nothing. Ship the motion or drop the claim.
56
- - **Motion that ignores a reduced-motion preference.** Not a taste failure at all. It is a correctness failure the `ui` governance rules own, listed here only so a motion pass does not read this catalog as the whole of what motion owes.
54
+ - **Motion claimed but absent, or present but unclaimed.** A "restrained" surface animating on every scroll, or a "fluid" one sitting still, has decided nothing. Ship the motion or drop the claim.
55
+ - **Motion that ignores a reduced-motion preference.** A correctness failure the `ui` governance rules own, not a taste one. It sits here so a motion pass does not read this catalog as all motion owes.
57
56
 
58
57
  ## The countable limits
59
58
 
60
- These are the rules with numbers, so they are checked by counting rather than by judging. Every one came out of production testing by people shipping model-drafted pages.
59
+ These rules carry numbers, so they are checked by counting rather than by judging. Every one came out of production testing by people shipping model-drafted pages.
61
60
 
62
61
  - **A layout family appears once.** Once a section uses a shape, no other section on the surface uses it. Eight sections need at least four distinct families.
63
- - **Two consecutive splits, never three.** Alternating image-left and image-right reads as considered twice and as filler by the third. Break it with a full-width section, a vertical stack, a grid, or anything else.
64
- - **One small uppercase label per three sections.** The tiny wide-tracked line above a heading is the single most over-reached default in model output. `interface-casing` carries the count. The fix is usually to delete it, since a section's position already says what it is.
62
+ - **Two consecutive splits, never three.** Alternating image sides reads as considered twice and as filler by the third. Break it with a full-width section, a vertical stack, or a grid.
63
+ - **One small uppercase label per three sections.** The most over-reached default in model output, with the count in `interface-casing`. Usually delete it, since position already says what a section is.
65
64
  - **One marquee.** Two sliding strips on one surface read as filler rather than as a device.
66
65
  - **Cells equal items.** A grid with a hole in it, or a blank tile at the end, means the grid was shaped before the content was counted. Reshape it.
67
- - **Over five items wants a different component.** A longer list is the lazy answer. Group into clusters, split into columns, give each item a card, make them scrollable, or collapse the tail behind a disclosure.
66
+ - **Over five items wants a different component.** Group into clusters, split into columns, give each item a card, make them scrollable, or collapse the tail behind a disclosure.
68
67
 
69
68
  ## The first screen
70
69
 
71
- - **It fits.** The point and the primary action are both visible without scrolling. If the copy will not fit, the copy is too long or the type is too large, and the second is the more common cause.
70
+ - **It fits.** The point and the primary action are both visible without scrolling. Copy that will not fit is too long or set too large, and the second is the more common cause.
72
71
  - **At most four text elements.** A label or a brand strip, a headline, a short supporting line, and the actions. That is the whole budget.
73
- - **Everything else moves down.** A small tagline under the actions, a trust strip, a pricing hint, a feature list, a row of faces. Each of those is a section of its own below, not a fifth element above.
72
+ - **Everything else moves down.** A tagline under the actions, a trust strip, a pricing hint, a feature list, a row of faces. Each is a section of its own below, not a fifth element.
74
73
  - **Plan the type scale against the asset.** A headline wrapping to four lines is a size error rather than a length error.
75
74
  - **Logos go under it, never inside it.** A credibility row shares no space with the point.
76
75
 
@@ -7,9 +7,11 @@ description: The layer, property, pattern and process terms this skill uses, so
7
7
 
8
8
  Terms used by `design-taste` and by the skills it is loaded alongside. It changes when a design round needs a name it cannot look up here.
9
9
 
10
- This glossary departs from one rule in `glossary.md`: an entry does not name where the term first appears. The material is five short files a reader can scan, so a location per entry costs more than it returns.
10
+ This glossary departs from one rule in `glossary.md`, since an entry does not name where the term first appears. The material is five short files a reader can scan, so a location per entry costs more than it returns.
11
11
 
12
- Every other rule there holds, and the one deciding membership holds strictly. A term appears here once this skill's own material uses it, never ahead of that, and the section below records what was considered and left out.
12
+ - Every other rule there holds, and the one deciding membership holds strictly
13
+ - A term appears here once this skill's own material uses it, never ahead of that
14
+ - The last section records what was considered and left out
13
15
 
14
16
  ## Layers
15
17
 
@@ -28,7 +30,7 @@ Ordered by when each settles, not alphabetically, since the order is the content
28
30
  ## Properties
29
31
 
30
32
  - **Casing**: whether text is set upper, lower, title or sentence case, treated as a hierarchy decision rather than a typing one.
31
- - **Density**: how much information a given area carries. High density is correct in an application surface and reads as clutter on a marketing one, which is why it belongs to the kind rather than to taste.
33
+ - **Density**: how much information a given area carries. Correct in an application surface and clutter on a marketing one, so it belongs to the kind rather than to taste.
32
34
  - **Hierarchy**: the order a reader takes things in, produced by weight, color, space and position together rather than by size alone.
33
35
  - **Ground**: the surface a thing sits on, whether the page behind everything or the fill behind one element. Named apart from "background" because the relationship that matters is what sits against it.
34
36
  - **Line height**: the vertical distance from one baseline to the next, set against size rather than fixed across a scale. Avoid "leading", which names the same thing.
@@ -52,9 +54,9 @@ Named compositions, carried so an operator can ask for one by name instead of de
52
54
 
53
55
  How a draft is staged while unfinished.
54
56
 
55
- - **FPO**: a placeholder held at the true final size and marked as a placeholder, from print production where it abbreviates "for position only". Marking it is the point, since an unmarked stand-in gets read as a decision.
57
+ - **FPO**: a placeholder held at the true final size and marked as one, from the print term "for position only". Marking it is the point, since an unmarked stand-in gets read as a decision.
56
58
  - **Greeking**: standing text in for copy that does not exist yet, of which lorem ipsum is the common form. Correct while judging space and wrong once an arm is judged on content.
57
- - **Grey-box**: drawing every element as a flat neutral block so the layers above the one under judgment are removed from view. Avoid "wireframe", which reads as a deliverable rather than a drafting stage.
59
+ - **Grey-box**: drawing every element as a flat neutral block, removing the layers above the one under judgment from view. Avoid "wireframe", which reads as a deliverable rather than a stage.
58
60
 
59
61
  ## Terms this vocabulary deliberately does not carry
60
62
 
@@ -11,78 +11,102 @@ The skill body holds the order, the guards, and the report shape. This holds the
11
11
 
12
12
  ## Length
13
13
 
14
- **Measures:** whether a document, or a passage inside it, has grown past what a reader takes in one pass.
14
+ | Field | Value |
15
+ | -------------- | ------------------------------------------------------------------------------------------ |
16
+ | Measures | Whether a document, or a passage inside it, has grown past what a reader takes in one pass |
17
+ | Verb | `canon markdown audit --json` |
18
+ | Evidence class | `measured` |
15
19
 
16
- **Verb:** `canon markdown audit --json`.
17
-
18
- **Evidence class:** `measured`.
19
-
20
- The record carries the checkpoints it read against under `checkpoints` and the per-file weights under `entries`. Read both from the record rather than from a number stated here, since the CLI moves a checkpoint on its own cadence and a copy of one goes stale in place.
21
-
22
- Four weights answer this axis, each naming a different shape of overgrowth:
20
+ The record carries the checkpoints it read against under `checkpoints` and the per-file weights under `entries`. Read both from the record rather than from a number stated here, since the CLI moves a checkpoint on its own cadence and a copy goes stale in place.
23
21
 
24
22
  - `heavyBullets`: a top-level bullet past the character checkpoint, which is a paragraph wearing a dash
25
23
  - `heavyParagraphs`: a paragraph past the sentence or character checkpoint
26
24
  - `longestRun`, against `longestRunLine`: unbroken rendered lines between headings, which is the depth checkpoint
27
25
  - `cadence`, carrying `measured`, `flat`, and `repeating`: sentence-length spread and repeated openers
28
26
 
29
- Weight is a judgment a reader settles rather than a defect, which the verb states for itself and which this axis carries forward. A finding here is an argument for a split or a trim rather than a rule broken.
27
+ ### Reading a length finding
30
28
 
31
- **Routes to:** a split of the document, or a move of the overgrown passage to the surface that owns it. Where the project states what a given document may hold, that statement decides whether the passage belongs in it at all, and the finding routes there rather than to a trim.
29
+ Weight is a judgment a reader settles rather than a defect, as the verb states for itself. A finding here argues for a split or a trim rather than naming a broken rule.
32
30
 
33
- **Caveat:** the cadence numbers are drawn from prose a person reads straight through. Terse reference prose sits below that range correctly, so a flat paragraph in a table-heavy or bullet-heavy file is not a finding.
31
+ - **Routes to:** a split of the document, or a move of the overgrown passage to the surface that owns it
32
+ - **A project statement of what a document may hold** decides whether the passage belongs, and the finding routes there rather than to a trim
33
+ - **Caveat:** the cadence numbers are drawn from prose read straight through. Terse reference prose sits below that range correctly, so a flat paragraph in a table or bullet-heavy file is no finding.
34
34
 
35
35
  ## Placement
36
36
 
37
- **Measures:** whether a document's content sits in the file that owns it, and whether the catalogs pointing at it still resolve.
37
+ | Field | Value |
38
+ | -------------- | ------------------------------------------------------------------------------------------------------------------------ |
39
+ | Measures | Whether a document's content sits in the file that owns it, and whether the catalogs pointing at it resolve |
40
+ | Verbs | `canon context audit --json` for the structural half, `canon context classify sweep --json` for the per-section verdicts |
41
+ | Evidence class | `measured` for the audit's findings, `classified` for the sweep's verdicts |
38
42
 
39
- **Verbs:** `canon context audit --json` for the structural half, `canon context classify sweep --json` for the per-section verdicts.
43
+ The audit answers required sections, entry length, citation resolution, reference form, catalog tables, provenance, and index drift. Required sections reach context entries.
40
44
 
41
- **Evidence class:** `measured` for the audit's findings, `classified` for the sweep's verdicts.
45
+ - A citation resolving to nothing is a fact and gates
46
+ - Entry length, reference form, table shape, and provenance are judgments under every flag
42
47
 
43
- The audit answers required sections, entry length, citation resolution, reference form, catalog tables, provenance, and index drift. Required sections reach context entries. A citation resolving to nothing is a fact and gates. Entry length, reference form, table shape, and provenance are judgments under every flag.
48
+ ### The sweep's verdicts
44
49
 
45
- The sweep classifies each section as keep, replace or rewrite, history, or move. A `move` verdict is the placement finding proper, naming content sitting in the wrong document. Each verdict carries its own confidence, which is why the class is `classified` rather than `measured`, and a low-confidence `move` is a prompt to look rather than an instruction to cut.
50
+ The sweep classifies each section as keep, replace or rewrite, history, or move. A `move` verdict is the placement finding proper, naming content sitting in the wrong document.
46
51
 
47
- **Routes to:** the document the verdict names as the owner. Where the move crosses a tier rather than a file, the project's own content-ownership rules decide the destination.
52
+ - Each verdict carries its own confidence, which is why the class is `classified` rather than `measured`
53
+ - A low-confidence `move` is a prompt to look rather than an instruction to cut
54
+ - **Routes to:** the document the verdict names as the owner. Where the move crosses a tier rather than a file, the project's own content-ownership rules decide the destination.
48
55
 
49
- **Caveat:** both verbs resolve their folders by surface root rather than by a path written into them, so a project whose layout differs from the one they look for resolves nothing. The audit says so, refusing with `reason: "no-folders"` and naming the folders it looked for. Report that refusal as an unread axis. The sweep degrades differently: with the model layer off it answers from its regex layer alone, which is a narrower read rather than a refusal, so say which layer answered.
56
+ ### When a verb resolves nothing
50
57
 
51
- ## Staleness
58
+ Both verbs resolve their folders by surface root rather than by a path written into them, so a project laid out differently resolves nothing. The two degrade differently.
52
59
 
53
- **Measures:** whether a document still describes the tree it was written about.
60
+ - The audit refuses with `reason: "no-folders"`, naming the folders it looked for. Report that refusal as an unread axis.
61
+ - The sweep with the model layer off answers from its regex layer alone, a narrower read rather than a refusal, so say which layer answered
54
62
 
55
- **Verb:** none.
63
+ ## Staleness
56
64
 
57
- **Evidence class:** `read`.
65
+ | Field | Value |
66
+ | -------------- | ---------------------------------------------------------------- |
67
+ | Measures | Whether a document still describes the tree it was written about |
68
+ | Verb | None |
69
+ | Evidence class | `read` |
58
70
 
59
- This is the axis the operator names first and the one nothing measures. A document goes stale by the tree moving under it rather than by anything changing in the document, so no property of the file answers it and a timestamp answers a different question. A file untouched for a year beside code untouched for a year is current, and one edited yesterday against a refactor from this morning is stale.
71
+ This is the axis the operator names first and the one nothing measures. A document goes stale by the tree moving under it, so no property of the file answers it and a timestamp answers a different question.
60
72
 
61
- Read each document against the surfaces it names. Four claim shapes are testable without leaving the project:
73
+ A file untouched for a year beside code untouched for a year is current, and one edited yesterday against a refactor from this morning is stale. Read each document against the surfaces it names, testing four claim shapes without leaving the project.
62
74
 
63
75
  - A file or folder path the document states, against whether it resolves
64
76
  - A command or verb the document names, against whether it exists and carries the flags shown
65
77
  - A count the document states over a tree, against the tree
66
78
  - A cross-reference to another document, against what that document now says
67
79
 
68
- A claim resting on none of the four is unverifiable from here. Report it as unread rather than as passing, which is the same rule the measured axes take when a verb refuses.
80
+ A claim resting on none of the four is unverifiable from here. Report it as unread rather than as passing, the same rule the measured axes take when a verb refuses.
69
81
 
70
82
  ### Identity drift in the requirements record
71
83
 
72
- This record states what the project is and why it is built, so it goes stale by the project changing direction as well as by the tree moving. Test these claim shapes beside the four above:
84
+ This record states what the project is and why, so it goes stale by the project changing direction as well as by the tree moving. Test these claim shapes beside the four above, each a `read`.
73
85
 
74
86
  - A goal nobody pursues, read against the task board and the recent history
75
87
  - A non-goal the project has since shipped
76
88
  - A constraint the tree contradicts
77
89
 
78
- Each is a `read`. The review point beside them is `measured`: `canon records stale canonical --json` returns the `reviewed` date from its frontmatter and `releasesSince`, the release tags merged into HEAD after that day. A null `releasesSince` means the doc was never reviewed, and `tagged: false` means no release tag exists to count, so a zero there measured nothing. The count is a reminder of how far the project has moved since someone last read the record whole, never a threshold.
90
+ ### The review point
79
91
 
80
- **Routes to:** the skill that rewrites a stale claim against an answer, rather than a direct edit from here. A document health run reports and never repairs.
92
+ The review point beside them is `measured`. `canon records stale canonical --json` returns the `reviewed` date from the record's frontmatter and `releasesSince`, the release tags merged into HEAD after that day.
81
93
 
82
- **Caveat:** a reading is the weakest evidence in the report and the most consequential finding in it, which is the tension this axis ships with. Marking the class is what keeps the two facts together in the reader's hands.
94
+ - A null `releasesSince` means the doc was never reviewed
95
+ - `tagged: false` means no release tag exists to count, so a zero there measured nothing
96
+ - The count is a reminder of how far the project has moved since someone last read the record whole, never a threshold
97
+
98
+ ### Routing a staleness finding
99
+
100
+ A document health run reports and never repairs, so a stale claim routes to the skill that rewrites it against an answer rather than to a direct edit from here.
101
+
102
+ A reading is the weakest evidence in the report and the most consequential finding in it, which is the tension this axis ships with. Marking the class keeps the two facts together in the reader's hands.
83
103
 
84
104
  ## Why the three stay apart
85
105
 
86
- The axes are not equally actionable and a report flattening them implies they are. A length finding is a number against a checkpoint, a placement finding is a verdict carrying a confidence, and a staleness finding is a judgment with nothing behind it. Each is worth reporting and each is worth a different response, so the class travels beside the state on every row rather than being stated once in a preamble a reader skims.
106
+ The axes are not equally actionable, and a report flattening them implies they are. Each is worth reporting and each is worth a different response, so the class travels beside the state on every row rather than once in a preamble a reader skims.
107
+
108
+ - A length finding is a number against a checkpoint
109
+ - A placement finding is a verdict carrying a confidence
110
+ - A staleness finding is a judgment with nothing behind it
87
111
 
88
112
  Shipping staleness on weaker evidence than the other two is the trade taken deliberately. Cutting it would leave the report answering the two questions that were never the operator's complaint.
@@ -5,7 +5,7 @@ Read when the surface under decision is a running app rather than a static mocku
5
5
  ## Lift from the app
6
6
 
7
7
  - Dump the rendered markup of the surface under decision from the built page, after it has loaded, into a scratch file the run reads from. Strip scripts from the dump.
8
- - Copy the built stylesheet and font files into the canvas page folder, at the path each frame links them from, since a frame resolves only files inside its own page. Every arm then renders with the stylesheet the app ships and differs from the shipped page only by what the arm names.
8
+ - Copy the built stylesheet and fonts to the canvas page folder at the path each frame links, since a frame resolves only its own page. Each arm then differs from the shipped page only in what it names.
9
9
  - Trim a large dump to the part the decision needs, and keep the wrapper classes intact so layout rules keyed to them still resolve.
10
10
  - Set each frame's `--width` to the content width the decision names rather than the window width, since a container query reads the frame.
11
11
  - Write copy an arm introduces with `write-human`, and take every other word from the dump.
@@ -13,7 +13,7 @@ Read when the surface under decision is a running app rather than a static mocku
13
13
  ## The frames
14
14
 
15
15
  - Generate the frames with a short script, one per round, so a shared change is one edit and a rerun.
16
- - Leave the theme to the canvas toggle, which sets the app's own `data-theme` switch on every frame's root. Name the attribute the app's stylesheet reads where it is not `data-theme`, since the toggle sets that one alone.
16
+ - Leave the theme to the canvas toggle, which sets the app's own `data-theme` switch on every frame's root. Name the attribute the stylesheet reads where it differs, as the toggle sets that one alone.
17
17
  - Print each frame's measurement under it from a script in the frame, so the numbers the operator reads are the browser's.
18
18
  - Draw an arm that is a whole page or a route as one frame at that page's width, so it still sits beside the other arms on the round's page.
19
19
  - Name anything the canvas cannot reproduce, such as an asset whose colors follow the browser rather than the frame's theme, rather than fixing the frame around it.
@@ -13,12 +13,13 @@ A project the surface move has not reached keeps its context folder under `.clau
13
13
 
14
14
  ## Guards
15
15
 
16
- - Derive a kebab-case slug from the domain and check whether `<context-root>/<slug>.md` or `<context-root>/<slug>/index.md` already exists. Either resolving means the domain is already covered under that exact name. Stop: `❌ <slug> already has a context entry. Use context-fold to refresh it instead.`
16
+ Derive a kebab-case slug from the domain and check whether `<context-root>/<slug>.md` or `<context-root>/<slug>/index.md` already exists. Either resolving means the domain is covered under that exact name, so stop: `❌ <slug> already has a context entry. Use context-fold to refresh it instead.`
17
17
 
18
18
  ## Placement
19
19
 
20
- - Read `<context-root>/index.md` and check every title and description it lists against the domain. Stop on a match: `❌ <path> already covers this domain under a different name. Use context-fold to refresh it instead.`
21
- - Default a brand-new entry to a flat file, `<context-root>/<slug>.md`. A domain starts as one page's worth of narrative, and the standard splits it into a folder only once the entry passes the 300-line ceiling, which a fresh domain never does on day one.
20
+ - Read `<context-root>/index.md` and check every title and description it lists against the domain
21
+ - Stop on a match: `❌ <path> already covers this domain under a different name. Use context-fold to refresh it instead.`
22
+ - Default a brand-new entry to a flat file, `<context-root>/<slug>.md`, since the standard splits an entry into a folder only past the 300-line ceiling, which a fresh domain never reaches
22
23
 
23
24
  ## Draft
24
25
 
@@ -9,12 +9,15 @@ description: The guard, placement, draft additions, and regen folder for a brand
9
9
 
10
10
  ## Guards
11
11
 
12
- - Derive a kebab-case slug from the topic and run `canon docs <slug>`. A resolved page means the topic is already covered under that exact name. Stop: `❌ <slug> already resolves to an existing page. Run canon:docs-sync instead.` This is a name match rather than a topic match. Placement checks the wider case.
12
+ Derive a kebab-case slug from the topic and run `canon docs <slug>`. A resolved page means the topic is covered under that exact name, so stop: `❌ <slug> already resolves to an existing page. Run canon:docs-sync instead.`
13
+
14
+ This is a name match rather than a topic match, and Placement checks the wider case.
13
15
 
14
16
  ## Placement
15
17
 
16
- - Read `docs/index.md` and its sub-catalogs for the closest existing `category`. <!-- canon-allow-reference: illustrates the target project's own docs/ tree, not a citation of this repository's own corpus -->
17
- - Check every page title and description that read surfaces against the topic. Stop on a match: `❌ <path> already covers this topic under a different name. Run canon:docs-sync instead.`
18
+ - Read `docs/index.md` and its sub-catalogs for the closest existing `category`. <!-- canon-allow-reference: the target project's own docs/ tree -->
19
+ - Check every page title and description that read surfaces against the topic
20
+ - Stop on a match: `❌ <path> already covers this topic under a different name. Run canon:docs-sync instead.`
18
21
  - Reuse a matching `category` value verbatim. A near-miss spelling opens a second shelf holding one page, per the docs standard.
19
22
  - Default to the `docs/` root with no `category` when nothing fits. A subfolder earns itself only once a shelf of pages already sits there, per the standard's splitting rule.
20
23
 
@@ -13,11 +13,15 @@
13
13
 
14
14
  ### Requirements
15
15
 
16
+ Install <what the machine needs> before setup.
17
+
16
18
  - <Agent tool and minimum version>
17
19
  - <Runtime the listing command needs>
18
20
 
19
21
  ### Set up
20
22
 
23
+ Run these from <where to run them>.
24
+
21
25
  ```bash
22
26
  <clone command>
23
27
  <setup command, when a session needs one>
@@ -31,6 +35,8 @@
31
35
 
32
36
  ### List what the project exposes
33
37
 
38
+ The listing shows <what it shows>.
39
+
34
40
  ```bash
35
41
  <command that lists skills, rules, or commands>
36
42
  ```
@@ -22,11 +22,15 @@
22
22
 
23
23
  ### Requirements
24
24
 
25
+ Install <what the machine needs> before setup.
26
+
25
27
  - <Runtime and version>
26
28
  - <Service the app depends on>
27
29
 
28
30
  ### Set up
29
31
 
32
+ Run these from <where to run them>.
33
+
30
34
  ```bash
31
35
  <clone command>
32
36
  <dependency install command>
@@ -36,11 +40,13 @@
36
40
 
37
41
  ### Run locally
38
42
 
43
+ The dev server runs <what it runs>.
44
+
39
45
  ```bash
40
46
  <dev server command>
41
47
  ```
42
48
 
43
- <Address the app serves on.>
49
+ It serves on <address>.
44
50
 
45
51
  ### Configuration
46
52
 
@@ -50,7 +56,7 @@
50
56
 
51
57
  ### Deploy
52
58
 
53
- <Where the app deploys and the command or workflow that does it.>
59
+ The app deploys to <where>, through <the command or workflow>.
54
60
 
55
61
  ## Support
56
62
 
@@ -27,12 +27,16 @@
27
27
 
28
28
  ### Run a command
29
29
 
30
+ The most common invocation is <what it does>.
31
+
30
32
  ```bash
31
33
  <command> <argument>
32
34
  ```
33
35
 
34
36
  ### Flags
35
37
 
38
+ Most runs need <the flags a reader reaches for first>.
39
+
36
40
  ```bash
37
41
  <command> --<flag> <value>
38
42
  <command> --<flag>
@@ -44,7 +48,7 @@
44
48
 
45
49
  ### Exit codes
46
50
 
47
- <What each non-zero exit means, when a script depends on it.>
51
+ A non-zero exit means <what each code means>, when a script depends on it.
48
52
 
49
53
  ## Documentation
50
54
 
@@ -29,12 +29,16 @@
29
29
 
30
30
  ### Quickstart
31
31
 
32
+ The snippet shows <the core behavior>.
33
+
32
34
  ```<language>
33
35
  <Import and one call that shows the core behavior>
34
36
  ```
35
37
 
36
38
  ### <Second common task>
37
39
 
40
+ Reach for this when <the reader's situation>.
41
+
38
42
  ```<language>
39
43
  <Snippet for the task>
40
44
  ```
@@ -18,18 +18,24 @@
18
18
 
19
19
  ### <First channel name>
20
20
 
21
+ Install through this channel when <who it suits>.
22
+
21
23
  ```bash
22
24
  <install command for this channel>
23
25
  ```
24
26
 
25
27
  ### <Second channel name>
26
28
 
29
+ Install through this channel when <who it suits>.
30
+
27
31
  ```bash
28
32
  <install command for this channel>
29
33
  ```
30
34
 
31
35
  ### Update
32
36
 
37
+ Update when <the trigger>, which replaces <what it replaces>.
38
+
33
39
  ```bash
34
40
  <update command>
35
41
  ```
@@ -38,6 +44,8 @@
38
44
 
39
45
  ### Invoke a skill
40
46
 
47
+ Type the command in <where the user types it>.
48
+
41
49
  ```text
42
50
  /<plugin name>:<skill name> <argument>
43
51
  ```
@@ -50,7 +58,7 @@
50
58
 
51
59
  ### Configuration
52
60
 
53
- <Setting the plugin reads and where the user sets it, when one exists.>
61
+ Set <the setting the plugin reads> in <where the user sets it>, when one exists.
54
62
 
55
63
  ## Support
56
64
 
@@ -11,12 +11,21 @@ The readme standard claims the voice of a repository-root README. `write-human`
11
11
 
12
12
  ## Guards
13
13
 
14
- - Default the target to `README.md` at the repository root when no path is given. A caller naming a path under a folder, a harness, or an internal tool is drafting a nested README instead, which keeps the reference voice per the standard's `## Voice` section rather than the root voice.
15
- - Read the target if it exists.
16
- - It carries an H1 naming the project: it is authored. Stop: `❌ <path> already exists and covers the project. Run canon:docs-sync instead.` Report rather than offering to overwrite it or to conform it to what this kind would draft, since the project's own citations into its README are invisible from here.
17
- - It carries no H1, or its only headings restate the tool that scaffolded it rather than the project: it is unedited generator output. Continue, drafting over it rather than syncing its sections.
18
- - It does not exist: continue.
19
- - A hand-authored README opening with a badge block, or a title in some other form the H1 test misses, falls into the no-H1 branch the same as a scaffold page. The Confirm step is what catches that case before the write happens, so treat it as load-bearing rather than a courtesy: never skip it on the reasoning that the guard already decided.
14
+ Default the target to `README.md` at the repository root when no path is given. A caller naming a path under a folder, a harness, or an internal tool is drafting a nested README, which keeps the reference voice per the standard's `## Voice` section.
15
+
16
+ ### Reading an existing target
17
+
18
+ Read the target if it exists, and branch on its headings.
19
+
20
+ | Target | Reading | Route |
21
+ | -------------------------------------------------------------- | ---------------- | ------------------------------------------------------------------------------------- |
22
+ | Carries an H1 naming the project | Authored | Stop: `❌ <path> already exists and covers the project. Run canon:docs-sync instead.` |
23
+ | Carries no H1, or only headings restating the scaffolding tool | Generator output | Continue, drafting over it rather than syncing its sections |
24
+ | Does not exist | Nothing to read | Continue |
25
+
26
+ - On the authored branch, report rather than offering to overwrite it or to conform it, since the project's own citations into its README are invisible from here
27
+ - A hand-authored README opening with a badge block, or a title the H1 test misses, falls into the no-H1 branch the same as a scaffold page
28
+ - The Confirm step catches that case before the write, so it is load-bearing. Never skip it on the reasoning that the guard already decided.
20
29
 
21
30
  ## Placement
22
31
 
@@ -26,15 +35,18 @@ The target path is the placement. A README keeps no catalog, so there is no coll
26
35
 
27
36
  Read the project's manifest (`package.json`, `pyproject.toml`, `Cargo.toml`, or equivalent) and the tree, then test each type on its own signal. Note every type that matches rather than stopping at the first, since a project is often several at once.
28
37
 
29
- - Library: an installable package name, counted only when no application, CLI, or plugin signal matches, since a named package is also what a site, a CLI, or a plugin carries. An agent-facing match leaves it in place, so a library with a `CLAUDE.md` still gets its quickstart.
38
+ - Library: an installable package name, counted only when no application, CLI, or plugin signal matches, since a site, a CLI, or a plugin also carries a named package
30
39
  - CLI: a `bin` field, a `[project.scripts]` table in `pyproject.toml`, a `[[bin]]` table in `Cargo.toml`, or a CLI entry point.
31
40
  - Application: a site framework dependency, a site config file, or an app entry point.
32
41
  - Agent-facing: a `.claude/skills/` folder, or a file an agent loads such as `CLAUDE.md`.
33
42
  - Plugin: a `plugin.json` or a marketplace manifest.
34
43
 
35
- A match on no type falls back to the standard's generic template. Say so in the preview, and never force the nearest type.
44
+ An agent-facing match leaves the library type in place, so a library with a `CLAUDE.md` still gets its quickstart. A match on no type falls back to the standard's generic template. Say so in the preview, and never force the nearest type.
45
+
46
+ ### Page, mark, and screenshot
47
+
48
+ A site framework dependency or a site config file in the manifest or the tree marks a project as having a page. Read a live URL separately, from a `homepage` field or a deploy config, since a project can have a page and no known URL.
36
49
 
37
- - Check for a page. A dependency on a site framework or a site config file in the manifest or the tree marks a project as having one. Read a live URL separately, from a `homepage` field or a deploy config, since a project can have a page and no known URL.
38
50
  - A monorepo can carry a page in one package and a CLI in another, so both signals may fire. Report each rather than picking one.
39
51
  - Look for the mark and the screenshot among images the project already commits: scan the existing README for image references, then the asset and public folders.
40
52
 
@@ -61,13 +73,18 @@ Between agent-facing and plugin alone, a repository with no plugin manifest take
61
73
 
62
74
  ## Draft
63
75
 
64
- - Start from the picked or combined template. Draft the H1, a 2-3 sentence description in plain text, then the required sections, then whichever optional sections and per-type content Detect found. A README takes no frontmatter.
65
- - Open the page with the standard's header block, filling each slot from what Detect found: mark, title, badges, a one-line claim from the manifest description, the live link, then the product screenshot.
66
- - Fill the screenshot slot only with an image the project already commits, referenced with alt text naming what it depicts. This kind cannot capture one. Omit the slot when no such image exists and say so in the preview. Never write a placeholder path or invent a mark.
67
- - Omit the link and the screenshot for a project with no page, and the mark for a project with none, without a note in the drafted page. A project with a page and no known URL gets the screenshot slot, and the Confirm step asks for the link.
76
+ Start from the picked or combined template. Draft the H1, a 2-3 sentence description in plain text, the required sections, then whichever optional sections and per-type content Detect found. A README takes no frontmatter.
77
+
78
+ - Open with the standard's header block, filled from Detect in order: mark, title, badges, a one-line claim from the manifest description, the live link, then the product screenshot
79
+ - Fill the screenshot slot only with an image the project already commits, with alt text naming what it depicts, since this kind cannot capture one
80
+ - With no such image, omit the slot and say so in the preview. Never write a placeholder path or invent a mark.
81
+ - Omit the link and the screenshot for a project with no page, and the mark for a project with none, with no note in the page
82
+ - A project with a page and no known URL gets the screenshot slot, and the Confirm step asks for the link
68
83
 
69
84
  ### Types and badges
70
85
 
86
+ A badge earns its place only once its rendered value is checked.
87
+
71
88
  - Cover every applicable project type from the standard's `## Content` list rather than picking the closest one.
72
89
  - Candidate badges: check for a published package (a registry field in the manifest), a CI workflow, and a `LICENSE` file.
73
90
  - State each candidate's rendered value in the preview rather than trusting a fetch's status code, since a badge service answers 200 for a query it cannot satisfy.