@erclx/canon 5.42.0 → 5.44.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 (195) hide show
  1. package/claude/.claude-plugin/plugin.json +1 -1
  2. package/claude/skills/auto-ship/SKILL.md +3 -3
  3. package/claude/skills/backlog-triage/references/apply.md +6 -6
  4. package/claude/skills/canon-cli/SKILL.md +4 -4
  5. package/claude/skills/canvas-board/REQUIREMENT.md +1 -1
  6. package/claude/skills/canvas-board/SKILL.md +1 -1
  7. package/claude/skills/ci-workflow/REQUIREMENT.md +2 -1
  8. package/claude/skills/ci-workflow/SKILL.md +12 -2
  9. package/claude/skills/ci-workflow/references/workflows.md +12 -9
  10. package/claude/skills/context-fold/references/context.md +1 -1
  11. package/claude/skills/create-rule/SKILL.md +1 -0
  12. package/claude/skills/create-skill/REQUIREMENT.md +1 -1
  13. package/claude/skills/create-skill/SKILL.md +2 -2
  14. package/claude/skills/create-skill/references/skill-requirement.md +68 -9
  15. package/claude/skills/create-skill/references/skill.md +1 -1
  16. package/claude/skills/decision-escalate/SKILL.md +1 -2
  17. package/claude/skills/design-identity/REQUIREMENT.md +40 -0
  18. package/claude/skills/design-identity/SKILL.md +138 -0
  19. package/claude/skills/{draft-identity → design-identity}/references/card-route.md +2 -2
  20. package/claude/skills/design-taste/REQUIREMENT.md +4 -4
  21. package/claude/skills/design-taste/SKILL.md +2 -2
  22. package/claude/skills/design-taste/references/kinds.md +1 -1
  23. package/claude/skills/design-taste/references/preflight.md +1 -1
  24. package/claude/skills/document-health/references/axes.md +2 -1
  25. package/claude/skills/draft-and-pick/REQUIREMENT.md +8 -69
  26. package/claude/skills/draft-and-pick/SKILL.md +3 -153
  27. package/claude/skills/draft-doc/REQUIREMENT.md +9 -30
  28. package/claude/skills/draft-doc/SKILL.md +4 -76
  29. package/claude/skills/draft-figure/REQUIREMENT.md +8 -42
  30. package/claude/skills/draft-figure/SKILL.md +3 -77
  31. package/claude/skills/draft-identity/REQUIREMENT.md +8 -23
  32. package/claude/skills/draft-identity/SKILL.md +3 -130
  33. package/claude/skills/draft-ready/REQUIREMENT.md +8 -37
  34. package/claude/skills/draft-ready/SKILL.md +3 -128
  35. package/claude/skills/draft-screencast/REQUIREMENT.md +8 -23
  36. package/claude/skills/draft-screencast/SKILL.md +3 -62
  37. package/claude/skills/draft-slides/REQUIREMENT.md +8 -27
  38. package/claude/skills/draft-slides/SKILL.md +3 -72
  39. package/claude/skills/draw-figure/REQUIREMENT.md +59 -0
  40. package/claude/skills/draw-figure/SKILL.md +85 -0
  41. package/claude/skills/{draft-figure → draw-figure}/references/architecture-set.md +2 -2
  42. package/claude/skills/{draft-figure → draw-figure}/references/hand-drawn.md +2 -2
  43. package/claude/skills/{draft-figure → draw-figure}/references/mermaid-path.md +2 -2
  44. package/claude/skills/{draft-figure → draw-figure}/references/mermaid.md +1 -1
  45. package/claude/skills/git-commit/references/commit.md +1 -5
  46. package/claude/skills/git-pr/references/pr.md +1 -0
  47. package/claude/skills/make-deck/REQUIREMENT.md +44 -0
  48. package/claude/skills/make-deck/SKILL.md +80 -0
  49. package/claude/skills/markdown-craft/REQUIREMENT.md +1 -1
  50. package/claude/skills/markdown-craft/SKILL.md +2 -2
  51. package/claude/skills/pick-by-eye/REQUIREMENT.md +86 -0
  52. package/claude/skills/pick-by-eye/SKILL.md +161 -0
  53. package/claude/skills/plan-feature/SKILL.md +3 -2
  54. package/claude/skills/plan-feature/references/plan.md +25 -11
  55. package/claude/skills/plan-groundwork/SKILL.md +1 -1
  56. package/claude/skills/plan-intake/SKILL.md +1 -1
  57. package/claude/skills/plan-ready/REQUIREMENT.md +54 -0
  58. package/claude/skills/plan-ready/SKILL.md +136 -0
  59. package/claude/skills/{draft-ready → plan-ready}/references/assembly.md +1 -1
  60. package/claude/skills/{draft-ready → plan-ready}/references/ready.md +1 -1
  61. package/claude/skills/pr-evidence/references/evidence.md +1 -1
  62. package/claude/skills/record-screencast/REQUIREMENT.md +3 -3
  63. package/claude/skills/record-screencast/SKILL.md +2 -2
  64. package/claude/skills/role-orchestrator/REQUIREMENT.md +1 -1
  65. package/claude/skills/role-orchestrator/SKILL.md +2 -0
  66. package/claude/skills/role-orchestrator/references/orchestrator-dispatch.md +5 -2
  67. package/claude/skills/role-orchestrator/references/orchestrator-output.md +4 -0
  68. package/claude/skills/role-orchestrator/references/orchestrator-parked.md +2 -2
  69. package/claude/skills/role-orchestrator/references/orchestrator-refill.md +18 -13
  70. package/claude/skills/role-planner/REQUIREMENT.md +1 -1
  71. package/claude/skills/role-planner/SKILL.md +5 -4
  72. package/claude/skills/role-worker/REQUIREMENT.md +2 -0
  73. package/claude/skills/role-worker/SKILL.md +35 -2
  74. package/claude/skills/script-screencast/REQUIREMENT.md +40 -0
  75. package/claude/skills/script-screencast/SKILL.md +70 -0
  76. package/claude/skills/{draft-screencast → script-screencast}/references/beats-template.md +2 -2
  77. package/claude/skills/search-craft/REQUIREMENT.md +4 -4
  78. package/claude/skills/search-craft/SKILL.md +2 -2
  79. package/claude/skills/target-setup/SKILL.md +1 -0
  80. package/claude/skills/task-board/SKILL.md +11 -9
  81. package/claude/skills/task-board/references/board.md +15 -12
  82. package/claude/skills/teach-workspace/SKILL.md +1 -1
  83. package/claude/skills/teach-workspace/references/lesson-craft.md +2 -2
  84. package/claude/skills/ui-checklist/SKILL.md +2 -0
  85. package/claude/skills/write-doc/REQUIREMENT.md +46 -0
  86. package/claude/skills/write-doc/SKILL.md +83 -0
  87. package/claude/skills/{draft-doc → write-doc}/references/context.md +2 -2
  88. package/claude/skills/{draft-doc → write-doc}/references/docs.md +2 -2
  89. package/claude/skills/{draft-doc → write-doc}/references/readme.md +2 -2
  90. package/claude/skills/{draft-doc → write-doc}/references/wiki-kind.md +4 -4
  91. package/claude/skills/{draft-doc → write-doc}/references/wiki.md +1 -1
  92. package/docs/agents/audits.md +1 -0
  93. package/docs/agents/markdown-audit.md +4 -2
  94. package/docs/agents/migrate.md +13 -10
  95. package/docs/target/migrations.md +28 -4
  96. package/docs/target/projects.md +1 -1
  97. package/docs/workflow/parallel-features.md +3 -2
  98. package/docs/workflow/skill-map-on-request.md +18 -12
  99. package/docs/workflow/skill-map.md +13 -12
  100. package/docs/workflow/visual-design-workflow.md +2 -2
  101. package/governance/detect.toml +4 -0
  102. package/governance/ledger/framework/astro.md +73 -0
  103. package/governance/ledger/framework/fastapi.md +76 -0
  104. package/governance/ledger/framework/nextjs.md +86 -0
  105. package/governance/ledger/framework/react.md +83 -0
  106. package/governance/ledger/framework/shadcn.md +60 -0
  107. package/governance/ledger/framework/tailwind.md +55 -0
  108. package/governance/rules/canon/context.md +2 -1
  109. package/governance/rules/canon/plan.md +3 -5
  110. package/governance/rules/canon/scratch.md +3 -1
  111. package/governance/rules/canon/task-scope.md +2 -1
  112. package/governance/rules/canon/tasks.md +2 -1
  113. package/governance/rules/canon/worktrees.md +5 -2
  114. package/governance/rules/claude/output.md +7 -4
  115. package/governance/rules/claude/skill.md +6 -4
  116. package/governance/rules/framework/astro.md +12 -14
  117. package/governance/rules/framework/fastapi.md +20 -24
  118. package/governance/rules/framework/nextjs.md +19 -27
  119. package/governance/rules/framework/react.md +22 -33
  120. package/governance/rules/framework/shadcn.md +11 -15
  121. package/governance/rules/framework/tailwind.md +12 -14
  122. package/governance/rules/tooling/ci-workflow.md +6 -39
  123. package/governance/rules/ui/design-reference.md +37 -0
  124. package/governance/rules/writing/markdown.md +3 -2
  125. package/package.json +6 -6
  126. package/src/audits/catalog.ts +42 -0
  127. package/src/claude/cases/authoring.ts +15 -3
  128. package/src/claude/cases/misc.ts +12 -0
  129. package/src/claude/cases/workflow.ts +19 -1
  130. package/src/claude/settings.ts +8 -4
  131. package/src/claude/skills-audit.ts +113 -1
  132. package/src/commands/claude.ts +45 -12
  133. package/src/commands/demo.ts +1 -1
  134. package/src/commands/gov.ts +198 -0
  135. package/src/commands/markdown.ts +1 -1
  136. package/src/commands/migrate.ts +125 -2
  137. package/src/commands/pr.ts +34 -83
  138. package/src/commands/tasks.ts +383 -2
  139. package/src/commands/tooling.ts +3 -3
  140. package/src/commands/worktrees.ts +49 -0
  141. package/src/context/audit.ts +1 -1
  142. package/src/demo/beats.ts +1 -1
  143. package/src/gate/stages.ts +15 -0
  144. package/src/gov/audit.ts +441 -0
  145. package/src/listeners/belongs.ts +21 -0
  146. package/src/listeners/machine.ts +93 -0
  147. package/src/listeners/parse.ts +41 -0
  148. package/src/markdown/scope.ts +45 -35
  149. package/src/migrate/record-layout.ts +1 -1
  150. package/src/migrate/session-defaults.ts +138 -0
  151. package/src/migrate/skill-names.ts +68 -21
  152. package/src/pr/frames.ts +14 -3
  153. package/src/pr/local.ts +4 -69
  154. package/src/records/validate.ts +31 -0
  155. package/src/sync/check.ts +15 -0
  156. package/src/tasks/board.ts +854 -0
  157. package/src/tasks/record.ts +20 -1
  158. package/src/tasks/validate.ts +206 -9
  159. package/src/tooling/stamp.ts +56 -12
  160. package/src/worktrees/stop.ts +92 -0
  161. package/tooling/astro/configs/card-src/pages/og-card.astro +1 -1
  162. package/tooling/astro/reference.md +2 -2
  163. package/tooling/base/configs/.github/workflows/phase-label-gate.yml +6 -2
  164. package/tooling/base/configs/commitlint.config.js +0 -20
  165. package/tooling/base/reference.md +1 -1
  166. package/tooling/base/seeds/.github/workflows/verify.yml +4 -1
  167. package/tooling/claude/reference.md +13 -7
  168. package/tooling/claude/seeds/.claude/hooks/board-validate.sh +65 -0
  169. package/tooling/claude/seeds/.claude/settings.json +8 -0
  170. package/tooling/claude/user/settings.template.json +0 -4
  171. package/tooling/cloudflare/configs/.github/workflows/deploy.yml +5 -5
  172. package/tooling/public/configs/.github/dependabot.yml +12 -0
  173. package/tooling/public/configs/.github/workflows/release-please.yml +30 -0
  174. package/tooling/public/manifest.toml +8 -0
  175. package/tooling/public/reference.md +53 -0
  176. package/tooling/public/seeds/.github/ISSUE_TEMPLATE/bug.yml +48 -0
  177. package/tooling/public/seeds/.github/ISSUE_TEMPLATE/config.yml +5 -0
  178. package/tooling/public/seeds/.github/ISSUE_TEMPLATE/feature.yml +16 -0
  179. package/tooling/public/seeds/.release-please-manifest.json +3 -0
  180. package/tooling/public/seeds/CONTRIBUTING.md +50 -0
  181. package/tooling/public/seeds/LICENSE +21 -0
  182. package/tooling/public/seeds/SECURITY.md +13 -0
  183. package/tooling/public/seeds/release-please-config.json +12 -0
  184. package/tooling/shell/configs/.github/workflows/shell.yml +4 -1
  185. package/tooling/web/configs/.github/workflows/readme-screenshot.yml +6 -3
  186. package/tooling/web/configs/.github/workflows/verify.yml +15 -12
  187. /package/claude/skills/{draft-figure → draw-figure}/references/figures.md +0 -0
  188. /package/claude/skills/{draft-slides → make-deck}/references/deck.md +0 -0
  189. /package/claude/skills/{draft-and-pick → pick-by-eye}/references/live-arms.md +0 -0
  190. /package/claude/skills/{draft-doc → write-doc}/references/readme/agent-facing.md +0 -0
  191. /package/claude/skills/{draft-doc → write-doc}/references/readme/application.md +0 -0
  192. /package/claude/skills/{draft-doc → write-doc}/references/readme/cli.md +0 -0
  193. /package/claude/skills/{draft-doc → write-doc}/references/readme/library.md +0 -0
  194. /package/claude/skills/{draft-doc → write-doc}/references/readme/plugin.md +0 -0
  195. /package/claude/skills/{draft-doc → write-doc}/references/requirements.md +0 -0
@@ -51,8 +51,8 @@ Every element competes with the material for attention.
51
51
  Decide the figure once per lesson, before writing the body.
52
52
 
53
53
  1. Name the one relationship, boundary, path, or before-and-after the lesson is about. A lesson about none ends here, with `Figure: none, <why it names no structure>` on the reply.
54
- 2. Hold it against the bar in `${CLAUDE_SKILL_DIR}/../draft-figure/references/figures.md`, which also carries the drawing rules.
55
- 3. Draw it through `canon:draft-figure` into a `raw` block before the quiz, never inside it or after its feedback, which breaks the stepper's gating. Report an unresolved skill rather than drawing.
54
+ 2. Hold it against the bar in `${CLAUDE_SKILL_DIR}/../draw-figure/references/figures.md`, which also carries the drawing rules.
55
+ 3. Draw it through `canon:draw-figure` into a `raw` block before the quiz, never inside it or after its feedback, which breaks the stepper's gating. Report an unresolved skill rather than drawing.
56
56
  4. Or write one line on why prose carries it better, such as a structure an earlier lesson gave.
57
57
 
58
58
  A structure lesson takes step 3 or 4, never neither. Put the outcome on the reply's `Figure:` line, off the lesson page. Never draw to satisfy the step, or on every section (`## Restraint`).
@@ -43,6 +43,8 @@ Write each box so a session driving the running app can run it without guessing:
43
43
  | Taste | End the line with `(taste)` when the result is a judgment of look or feel. A driver reports such a box as needing a person's eyes rather than passing it. |
44
44
  | Setup | State inline any setup the page does not open in. End the line with `(local only)` when a hosted preview cannot reach that state, such as a stopped service or a seeded record. |
45
45
 
46
+ When the plan cites `canon/design/<surface>/` under `**Design references:**`, name the reference as the comparison on each box for that surface, such as "→ matches `canon/design/<surface>/` in light and dark". The reviewer then judges the build against the accepted design instead of against taste.
47
+
46
48
  The checkbox stays `- [ ]` followed by the action and the result, since the evidence comment reads boxes by that shape. Only the UI reviewer ticks a box, stamping it with the commit it passed at, and the comment carries that tick forward only while the head it names is current.
47
49
 
48
50
  ## The missing-test list
@@ -0,0 +1,46 @@
1
+ ---
2
+ name: write-doc
3
+ description: Why a brand-new project document needs its kind's standard, a catalog collision check, and a confirm step, not the rewrite and refresh paths docs-sync and context-fold already own
4
+ ---
5
+
6
+ # Write doc requirement
7
+
8
+ ## Gap
9
+
10
+ Without this skill, a session drafting a document that has no prior version either invents a shape from memory or reaches for a rewrite or refresh surface. `docs-sync` and `context-fold` read an existing document and a diff, and a document that never existed has neither, so they report the request as unrelated to any change. Either way the document ships with no read of the standard its kind answers to and no check against the catalog for a sibling already covering the same ground under a different name.
11
+
12
+ The same procedure ran as five skills, one per kind, each restating the read, the collision check, the confirm, and the write. They drifted on their own cadence, and five descriptions competed for one trigger, writing a new document.
13
+
14
+ ## Must
15
+
16
+ - Resolve the kind from the destination the request names, and ask rather than defaulting when it names none, since a document in the wrong surface is invisible where a reader looks for it
17
+ - Load exactly one kind reference per run, so every step that differs by kind lives in one file and the shared procedure in one body
18
+ - Read the kind's standard before drafting, since its frontmatter contract and its reader questions make the document arguable against a sibling
19
+ - Check the catalog by exact name and by title and description, since a subject can be covered under a name the request does not guess
20
+ - Confirm the resolved path, the kind's detections, and the full content with the user before writing, since placement and detection are judgment calls with no diff to preview them against
21
+ - Regenerate the catalog of the folder the document landed in, where the kind keeps one, so the next run's collision check sees it
22
+ - Draft a README from the template for every detected project type and combine them, never the closest one, since a project that is a CLI and a plugin owes its reader both
23
+ - Carry each kind's own musts in its reference: the root check for context, both placement tests and a fetched source for the wiki, and project detection and rendered-value badges for the readme
24
+
25
+ ## Must not
26
+
27
+ - Rewrite, refresh, or sync a document that already exists. A collision refuses toward the surface that owns the existing document.
28
+ - Hand-edit an `index.md`. It regenerates from sibling frontmatter, and a hand edit is overwritten on the next regen.
29
+ - Substitute recall for a failed fetch on the wiki kind, or invent an image or a placeholder path on the readme kind.
30
+ - Build a hand-drawn diagram loop for a docs page.
31
+ - Widen the wiki's folder split to admit a subject its second placement test rejects. That is a change to the standard, argued there.
32
+ - Assume this skill's routing needs no check. One description now covers four triggers, and a ranking over descriptions is a proxy for how Claude Code routes, so a review some months in should read real invocations back.
33
+
34
+ ## Guards
35
+
36
+ - No subject given, for any kind but the readme: stop and ask what the document should cover.
37
+ - No destination named: ask which kind rather than defaulting to `docs/`.
38
+ - Every other guard is the kind's own, stated in its reference.
39
+
40
+ ## Out of scope
41
+
42
+ - Rewriting or syncing an existing `docs/` page or an authored README against a diff: `docs-sync`
43
+ - Refreshing an existing context entry: `context-fold`
44
+ - Drafting a governance rule: `create-rule`
45
+ - Drawing a figure or a diagram for a document: `draw-figure`
46
+ - Voice, rhythm, punctuation, and formatting in the drafted document: the `write-human` skill and the markdown standard
@@ -0,0 +1,83 @@
1
+ ---
2
+ name: write-doc
3
+ description: Drafts one brand-new project document from scratch against the standard for its kind, picking the kind from where it lands, a `docs/` page, a `canon/context/` entry, a wiki reference page, or a README.md. Checks the catalog for a name or topic collision, places it, confirms with the user, then writes. Use when asked to "write a new docs page for X", "write a context entry for X", "write a wiki page for X", or "write a README" where none exists yet. Do NOT use to rewrite or sync an existing page or README against a diff, which is `docs-sync`, or to refresh a context entry, which is `context-fold`.
4
+ metadata:
5
+ family: generate
6
+ ---
7
+
8
+ # Write doc
9
+
10
+ Drafts one brand-new project document end to end: resolve its kind, read the standard that kind answers to, check the catalog for a collision, place it, draft, confirm with the user, then write.
11
+
12
+ ## Resolve the kind
13
+
14
+ Each kind has one standard and one reference. Load the reference for the resolved kind and no other, since every step below that differs by kind lives there.
15
+
16
+ | Kind | Lands at | Standard | Reference |
17
+ | ------- | -------------------------------------------------------- | ----------------------------------------------------------- | --------------------------------------------- |
18
+ | docs | a page under `docs/` | `${CLAUDE_SKILL_DIR}/../docs-sync/references/docs.md` | `${CLAUDE_SKILL_DIR}/references/docs.md` |
19
+ | context | an entry under `canon/context/` | `${CLAUDE_SKILL_DIR}/../context-fold/references/context.md` | `${CLAUDE_SKILL_DIR}/references/context.md` |
20
+ | wiki | a reference page on a subject owned outside this project | `${CLAUDE_SKILL_DIR}/references/wiki.md` | `${CLAUDE_SKILL_DIR}/references/wiki-kind.md` |
21
+ | readme | a `README.md`, at the root or in a folder | `${CLAUDE_SKILL_DIR}/../docs-sync/references/readme.md` | `${CLAUDE_SKILL_DIR}/references/readme.md` |
22
+
23
+ - Read the kind off the destination the request names: a path, a folder, or the document's own name, such as "a context entry" or "a wiki page".
24
+ - Ask which kind when the request names no destination, offering the candidates the subject fits with the likeliest first
25
+ - Never default to `docs/` without saying so, since a subject documented in the wrong surface is invisible to the session that looks for it in the right one
26
+ - If no subject is given for any kind but readme, stop: `❌ No subject given. Name what this document should cover.`
27
+ - A README covers the project or the folder it sits in, so its subject is the target path
28
+
29
+ ## Read
30
+
31
+ Read these in parallel, from the project root where a path is relative:
32
+
33
+ - The kind's standard from the table above: the reader the document serves, its frontmatter, its structure, and what it links out to rather than restates
34
+ - `${CLAUDE_SKILL_DIR}/../markdown-craft/references/markdown.md`: punctuation and formatting for all generated text
35
+ - The `write-human` skill: voice, rhythm, and sentence construction for all generated text
36
+ - The kind's reference from the table above
37
+
38
+ ## Guards
39
+
40
+ Run the guards the reference states before placing or drafting anything. Each one stops toward the surface that owns the case, and a stop writes nothing.
41
+
42
+ ## Placement
43
+
44
+ Settle the path and check the catalog for a collision the way the reference states. An exact-name check alone misses a document already covering the subject under another name, so check the titles and descriptions of the catalog the placement step already reads, and stop the same way on a match.
45
+
46
+ ## Draft
47
+
48
+ - Draft against the kind's standard, keeping its template and its section order.
49
+ - Draft frontmatter where the standard requires it, then the body, following the reference for what the kind adds.
50
+ - Write for a reader with no source open. Omit an expected section with nothing to put in it rather than padding it.
51
+
52
+ ## Confirm
53
+
54
+ - Show the kind, the resolved path, whatever else the reference names for the preview, and the full drafted content before writing.
55
+ - Confirm with the user, and wait for that answer rather than treating the tool permission dialog as the gate
56
+ - The kind, the placement, and every detection the reference runs are judgment calls with no diff to preview them against, which is why the dialog cannot stand in
57
+
58
+ ## Write
59
+
60
+ - Write the file at the confirmed path, creating the folder when it is absent unless the reference narrows that.
61
+ - Run `canon markdown audit <path>` and fix every ban, density, and reference shape finding until a re-run reports none. The whole file is this run's draft, so every finding is its own.
62
+ - Run `canon indexes regen <folder>` on the folder the reference names, so its `index.md` picks up the new document. Skip it where the reference says the kind keeps no catalog.
63
+
64
+ ## Response format
65
+
66
+ ### Preview
67
+
68
+ **Kind:** `<docs | context | wiki | readme>`
69
+ **Subject:** `<subject, or the target path for a README>`
70
+ **Placement:** `<path>`
71
+ <one line per preview field the reference names>
72
+
73
+ ```markdown
74
+ <drafted frontmatter and body>
75
+ ```
76
+
77
+ ### After confirmation
78
+
79
+ One line once the file is written and its audit reports nothing.
80
+
81
+ ```plaintext
82
+ ✅ Drafted: <path>
83
+ ```
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  title: Context kind
3
- description: The root check, guard, flat-file placement, three-question draft, and regen folder for a brand-new context entry, read by draft-doc once the request resolves to the context kind
3
+ description: The root check, guard, flat-file placement, three-question draft, and regen folder for a brand-new context entry, read by write-doc once the request resolves to the context kind
4
4
  ---
5
5
 
6
6
  # Context kind
7
7
 
8
- `draft-doc` reads this file when the request resolves to an entry under `canon/context/`. An entry that already exists is refreshed by `context-fold`, never drafted here.
8
+ `write-doc` reads this file when the request resolves to an entry under `canon/context/`. An entry that already exists is refreshed by `context-fold`, never drafted here.
9
9
 
10
10
  ## Root
11
11
 
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  title: Docs kind
3
- description: The guard, placement, draft additions, and regen folder for a brand-new page under docs/, read by draft-doc once the request resolves to the docs kind
3
+ description: The guard, placement, draft additions, and regen folder for a brand-new page under docs/, read by write-doc once the request resolves to the docs kind
4
4
  ---
5
5
 
6
6
  # Docs kind
7
7
 
8
- `draft-doc` reads this file when the request resolves to a page under `docs/`. A page that already exists is rewritten by `docs-sync`, never drafted here.
8
+ `write-doc` reads this file when the request resolves to a page under `docs/`. A page that already exists is rewritten by `docs-sync`, never drafted here.
9
9
 
10
10
  ## Guards
11
11
 
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  title: Readme kind
3
- description: The target default, authored-versus-scaffold guard, project detection, header block, and badges for a README.md, read by draft-doc once the request resolves to the readme kind
3
+ description: The target default, authored-versus-scaffold guard, project detection, header block, and badges for a README.md, read by write-doc once the request resolves to the readme kind
4
4
  ---
5
5
 
6
6
  # Readme kind
7
7
 
8
- `draft-doc` reads this file when the request resolves to a `README.md`. An authored README is rewritten by `docs-sync`, never drafted here.
8
+ `write-doc` reads this file when the request resolves to a `README.md`. An authored README is rewritten by `docs-sync`, never drafted here.
9
9
 
10
10
  The readme standard claims the voice of a repository-root README. `write-human` yields voice there and keeps rhythm, density, and the machine-tell catalog everywhere, the root README included.
11
11
 
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  title: Wiki kind
3
- description: The root guard, both placement tests, catalog collision, sourcing from the owner, and vendor-folder regen for a brand-new wiki reference page, read by draft-doc once the request resolves to the wiki kind
3
+ description: The root guard, both placement tests, catalog collision, sourcing from the owner, and vendor-folder regen for a brand-new wiki reference page, read by write-doc once the request resolves to the wiki kind
4
4
  ---
5
5
 
6
6
  # Wiki kind
7
7
 
8
- `draft-doc` reads this file when the request resolves to a wiki reference page. A page that already exists is edited against the same standard, never drafted a second time.
8
+ `write-doc` reads this file when the request resolves to a wiki reference page. A page that already exists is edited against the same standard, never drafted a second time.
9
9
 
10
10
  The standard's `## Placement` section names the folder a page lands in and the vendor subfolder under it. Resolve both from the project root and call them `<wiki-root>` and `<vendor>` below, so the standard stays the one owner of the path.
11
11
 
@@ -19,7 +19,7 @@ The standard sets two tests and a page has to pass both. Run them before draftin
19
19
 
20
20
  | Test | Fails on | Refusal |
21
21
  | ------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
22
- | Owned outside this repository | A subject describing how this repository works | `❌ <subject> is owned by this project, so it belongs in the docs surface or a context entry. Re-run draft-doc naming that destination.` |
22
+ | Owned outside this repository | A subject describing how this repository works | `❌ <subject> is owned by this project, so it belongs in the docs surface or a context entry. Re-run write-doc naming that destination.` |
23
23
  | Owned by the vendor the folder split covers | A third-party tool or a vendor-neutral concept, however reference-like it reads | `❌ <subject> is outside the wiki's folder split. Route it to the docs surface or a skill body rather than adding a second folder for it.` |
24
24
 
25
25
  On the first test, offer the docs or context kind of this skill. The standard names one owner and one subfolder for the second.
@@ -37,7 +37,7 @@ Do not widen the split to admit a subject. Adding a sibling folder is a change t
37
37
 
38
38
  The standard forbids working from training knowledge, so the draft is built on a read rather than on recall.
39
39
 
40
- Fetch current information through the `claude-code-guide` agent for any subject that agent covers, and write from its answer. Reach any other subject through the owner's own published documentation.
40
+ Fetch a Claude Code subject from Anthropic's docs directly, starting at the index `https://code.claude.com/docs/llms.txt` and reading the `.md` form of the page it names, and write from that page. Reach any other subject through the owner's own published documentation.
41
41
 
42
42
  - Invoke `canon:search-craft` with the skill tool before that search, since finding the owner's documentation is its field-and-authority step. Report it when it does not resolve.
43
43
  - Say the fetch failed and stop rather than substituting recall, even for a subject the session believes it knows. A page sourced from memory ships looking identical to one that was checked.
@@ -45,7 +45,7 @@ A page failing either is non-conforming even when it satisfies every shape rule
45
45
 
46
46
  - Close the intro paragraph with a `Source:` sentence naming the owner. Link the canonical page where one exists, and name the owner alone where the subject has no single URL.
47
47
  - Link a docs page in its fetchable form, `https://code.claude.com/docs/en/<page>.md`, so a session reads the live text rather than a copy.
48
- - Fetch current information through the `claude-code-guide` agent when the subject is Claude Code. Do not work from training knowledge.
48
+ - Fetch a Claude Code subject directly, starting at the index `https://code.claude.com/docs/llms.txt`. Do not work from training knowledge.
49
49
  - Propose an addition or correction and wait for confirmation. Do not write to a wiki file unasked.
50
50
 
51
51
  ## Shape
@@ -83,6 +83,7 @@ The placement entry runs pinned to `--backend off`, so its tally stays comparabl
83
83
  | `secrets` | `canon secrets scan` | Credential-shaped values in the shipped tree | Gates |
84
84
  | `labels` | `canon labels audit` | Changed paths no row of the label map reaches | Reports |
85
85
  | `restated` | `canon gov restated` | Instructions `CLAUDE.md` states that a second surface states too | Reports |
86
+ | `rules` | `canon gov audit` | Rules past a shape limit, and here outside-practice rules short of a source ledger | Reports |
86
87
  | `counts` | `canon gov counts` | Sentences stating a closed catalog's size that disagree with the tree | Reports |
87
88
  | `census` | `canon census` | File count, extension breakdown, and line total | Reports |
88
89
  | `deps` | `canon deps audit` | Advisories against the resolved dependencies | Reports |
@@ -45,8 +45,10 @@ A page marked `kind: reference` holds its opening, then `Output`, `Refusals`, an
45
45
  - A paragraph under a list item counts toward that bullet, never as a paragraph
46
46
  - A table, fence, list, heading, or bold section marker ends a run of paragraphs
47
47
  - A run whose every item opens with a bold label or a link is exempt, and numbered items never count
48
- - Only context entries, docs, skill bodies and references, tooling seeds and stack references, the wiki, `README.md`, and `CONTRIBUTING.md` take a finding
49
- - A bullet run gates everywhere those paths sit, and the rest gates under `GATED_PATHS` in `src/markdown/scope.ts`. Outside a canon checkout nothing gates.
48
+ - Only context entries, docs, skill bodies, references, and requirements, tooling seeds and stack references, the wiki, `README.md`, and `CONTRIBUTING.md` take a finding
49
+ - A bullet run gates on those paths, and the rest gates under `GATED_PATHS` in `src/markdown/scope.ts`. Outside a canon checkout nothing gates.
50
+
51
+ A requirement is the one exception to both. It gates only once `GATED_PATHS` names its own file, never through its skill's prefix and never on a bullet run alone.
50
52
 
51
53
  Five measures report and never set the exit code on their own.
52
54
 
@@ -11,18 +11,20 @@ kind: reference
11
11
  | Verb | Moves |
12
12
  | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------- |
13
13
  | `rename` | The retired `aitk` name. `--scope target` rewrites toolkit-owned folders only. |
14
- | `skill-names` | Plugin skills off their `claude-` prefix and other retired names, with every citation |
14
+ | `skill-names` | Plugin skills off their `claude-` and `draft-` prefixes and other retired names, with every citation |
15
15
  | `records` | Session records from `.claude/` to `.canon/`, with every tracked citation |
16
16
  | `surface-roots` | `context/`, `wireframes/`, `ARCHITECTURE.md`, `REQUIREMENTS.md`, `DESIGN.md`, and the stamp folder from `.claude/` to `canon/`, by `git mv` |
17
17
  | `record-tree` | Citations inside `.canon/` folders a session still follows: `diagrams`, `memory`, `plans`, `proposals`, `review`, `tasks`, `teach` |
18
18
  | `rule-layout` | A flat installed-rule layout onto the `canon/`-wrapped one |
19
19
  | `scratch-evidence` | A folder a durable record cites out of `.tmp/`, with its citations |
20
20
  | `record-layout` | Review receipts, memory archives, feedback, renders, picks, and evidence into their current folders |
21
+ | `session-defaults` | The seeded session defaults into an existing `.claude/settings.json`: `Agent` and `Task` denied, auto memory off |
21
22
 
22
- - `skill-names` takes no `--scope` and skips the changelog and eval transcripts
23
+ - `skill-names` takes no `--scope`, and skips the changelog, eval transcripts, and the pointer each renamed `draft-` skill leaves at its old name
23
24
  - `surface-roots` leaves `rules/`, `skills/`, `hooks/`, and `settings.json` where Claude Code reads them
24
25
  - `rule-layout` classifies each flat file against the stamp as clean, edited, or unclaimed. Clean and edited files move untouched, and an unclaimed name stays.
25
26
  - `record-layout` labels each evidence folder `(pick)` or `(evidence)` in the dry run
27
+ - `session-defaults` adds a key only when absent. It never removes a deny entry or changes a set `autoMemoryEnabled`, and a missing settings file is nothing to do.
26
28
 
27
29
  ## Output
28
30
 
@@ -43,14 +45,15 @@ Three markers keep an old spelling on a line. Each also covers the nearest non-b
43
45
 
44
46
  ## Refusals
45
47
 
46
- | Verb | Refuses when |
47
- | ------------------ | ----------------------------------------------------------------------------------- |
48
- | `records` | The project does not ignore `.canon/`. Run `canon tooling sync --write` first. |
49
- | `records` | A record folder already exists at the destination |
50
- | `surface-roots` | Any destination already exists under `canon/`, refusing the whole plan |
51
- | `scratch-evidence` | A destination is occupied |
52
- | `record-layout` | A destination already exists, each move refused on its own |
53
- | `rule-layout` | A destination holds different bytes. Neither file is touched and other moves apply. |
48
+ | Verb | Refuses when |
49
+ | ------------------ | ------------------------------------------------------------------------------------- |
50
+ | `records` | The project does not ignore `.canon/`. Run `canon tooling sync --write` first. |
51
+ | `records` | A record folder already exists at the destination |
52
+ | `surface-roots` | Any destination already exists under `canon/`, refusing the whole plan |
53
+ | `scratch-evidence` | A destination is occupied |
54
+ | `record-layout` | A destination already exists, each move refused on its own |
55
+ | `rule-layout` | A destination holds different bytes. Neither file is touched and other moves apply. |
56
+ | `session-defaults` | The settings file is not valid JSON, or `permissions` or its `deny` has another shape |
54
57
 
55
58
  A `rule-layout` destination holding the same bytes marks a duplicate, which `--write` deletes.
56
59
 
@@ -46,9 +46,22 @@ Run it once, ahead of `canon gov sync` or `canon gov install`.
46
46
 
47
47
  ## Rename the skill citations, once
48
48
 
49
- Plugin skills dropped their `claude-` prefix, so `canon:claude-docs` answers as `canon:context-fold` and `canon:claude-tasks` as `canon:task-board`. The five per-kind drafters merged into `draft-doc`, and no pointer under an old name ships. <!-- canon-keep-retired -->
49
+ Plugin skills dropped their `claude-` prefix, so `canon:claude-docs` answers as `canon:context-fold` and `canon:claude-tasks` as `canon:task-board`. The five per-kind drafters merged into `write-doc`, and no pointer under an old name ships. <!-- canon-keep-retired -->
50
+
51
+ The seven `draft-` skills took verb-first names for what each makes. `canon migrate skill-names --write` carries a project across, and a pointer under each old name answers a typed invocation until it retires.
52
+
53
+ | Old name | New name |
54
+ | ------------------ | ----------------------------------------------- |
55
+ | `draft-doc` | `write-doc` <!-- canon-keep-retired --> |
56
+ | `draft-figure` | `draw-figure` <!-- canon-keep-retired --> |
57
+ | `draft-identity` | `design-identity` <!-- canon-keep-retired --> |
58
+ | `draft-slides` | `make-deck` <!-- canon-keep-retired --> |
59
+ | `draft-and-pick` | `pick-by-eye` <!-- canon-keep-retired --> |
60
+ | `draft-ready` | `plan-ready` <!-- canon-keep-retired --> |
61
+ | `draft-screencast` | `script-screencast` <!-- canon-keep-retired --> |
50
62
 
51
63
  - `canvas` is now `canvas-board`. The sweep rewrites only `canon:canvas` and `skills/canvas`, so replace a bare prose mention by hand. <!-- canon-keep-retired -->
64
+ - `draft-ready` is rewritten only as `canon:draft-ready` and `skills/draft-ready`, since bare it also describes a pull request. Replace a bare mention of the skill by hand. <!-- canon-keep-retired -->
52
65
  - `design-extract` and `sketch-design` are replaced by `canon:canvas-board`. <!-- canon-keep-retired -->
53
66
  - `review-branch`, `seed-sync`, `restate-plainly`, `bash-cli-script`, `canon-operator`, and `canon-rollout` have no successor <!-- canon-keep-retired -->
54
67
  - `create-standard`, `markdown-propose`, `memory-review`, `project-commands`, `repo-metadata`, and `ux-walkthrough` have no successor <!-- canon-keep-retired -->
@@ -108,7 +121,7 @@ From the registry the walk reports `historyUnavailable`, so check both paths by
108
121
  | `context-fold` | `context` |
109
122
  | `canvas-board` | `canvas`, `design` |
110
123
  | `docs-sync` | `docs`, `readme` |
111
- | `draft-figure` | `figures`, `mermaid` |
124
+ | `draw-figure` | `figures`, `mermaid` |
112
125
  | `create-rule` | `rule` |
113
126
  | `create-skill` | `skill`, `skill-paths`, `skill-practice`, `skill-requirement` |
114
127
  | `git-branch` | `branch`, `slug` |
@@ -119,8 +132,8 @@ From the registry the walk reports `historyUnavailable`, so check both paths by
119
132
  | `plan-groundwork` | `groundwork`, `groundwork-spikes` |
120
133
  | `plan-intake` | `intake` |
121
134
  | `plan-feature` | `plan`, `plan-lifecycle` |
122
- | `draft-ready` | `ready` |
123
- | `draft-doc` | `requirements`, `wiki` |
135
+ | `plan-ready` | `ready` |
136
+ | `write-doc` | `requirements`, `wiki` |
124
137
  | `session-map` | `session` |
125
138
 
126
139
  The `standard` name became `skill-reference.md` in `create-skill`.
@@ -136,3 +149,14 @@ The wireframes record is retired, and nothing deletes what a project holds.
136
149
  ## Move decisions out of a held architecture record, once
137
150
 
138
151
  The toolkit no longer seeds `canon/ARCHITECTURE.md`, and a held file and its `CLAUDE.md` import stay. Move a trap a session would hit into that domain's `## Gotchas`, then delete the file and its `@canon/ARCHITECTURE.md` line.
152
+
153
+ ## Deny subagents and turn auto memory off, once
154
+
155
+ The seeded `.claude/settings.json` now denies the `Agent` and `Task` tools and sets `autoMemoryEnabled` to `false`. `canon claude sync` never rewrites a settings file you hold, so it warns while the file holds neither default. Removing the deny later to allow subagents draws no warning.
156
+
157
+ ```bash
158
+ canon migrate session-defaults --json
159
+ canon migrate session-defaults --write --json
160
+ ```
161
+
162
+ The verb only adds a key that is absent. A person who wants auto memory back sets it in their own `.claude/settings.local.json`.
@@ -57,7 +57,7 @@ Before the first feature session:
57
57
 
58
58
  1. Fill `canon/REQUIREMENTS.md` with the problem, goals, and non-goals. The seed's 600-word cap gates under `canon context audit`.
59
59
  2. For a UI project, write `canon/DESIGN.md` from the seed and name the stylesheet in its lead, or work the direction out with `canon:canvas-board`
60
- 3. Optionally invoke `canon:draft-figure` for an architecture view. The Mermaid CLI downloads on first use.
60
+ 3. Optionally invoke `canon:draw-figure` for an architecture view. The Mermaid CLI downloads on first use.
61
61
  4. Start the feature loop in [AI workflow](../workflow/ai-workflow.md)
62
62
 
63
63
  ### Stack decision
@@ -49,13 +49,14 @@ Merge order matters only when two branches touch the same file. Expect to rebase
49
49
 
50
50
  ## The task board
51
51
 
52
- `.canon/tasks/` is gitignored and resolves at the main worktree root, one file per task. A hook generates `index.md`, and `priority.md` carries execution order and blockers.
52
+ `.canon/tasks/` is gitignored and resolves at the main worktree root, one file per task. A hook generates `index.md`, and `priority.md` carries execution order and blockers. `canon tasks place`, `promote`, `move`, and `block` write it, deriving every cell but `Waiting on`.
53
53
 
54
54
  `canon tasks validate` reports and never writes:
55
55
 
56
56
  - A row's cell count must match its header, and a `## Needs a plan` row stating its position is checked against where it sits
57
57
  - Every plan pointer resolves, every task file is named once, and every ready row names its files
58
- - A parked row is reported when its cited task reached the trunk
58
+ - A parked row is reported when its cited task reached the trunk, whether the cell links it or names its bare label
59
+ - A group header must be the columns the group owns, a `Touches` cell must match its plan, and a `Waiting on` cell renders at most 120 characters
59
60
 
60
61
  `canon:task-board` creates a task file, and `canon:task-complete` marks outcomes. The `post-merge` hook archives the task a merged pull request closed, with its plan, and a `post-rewrite` hook does the same for a rebase pull. Both archive only when the merge carried a PR number and the task is closed.
61
62
 
@@ -10,18 +10,24 @@ These skills serve a request rather than a moment. With the [skill map](skill-ma
10
10
 
11
11
  ## Generate an artifact on demand
12
12
 
13
- | Skill | When to use |
14
- | ------------------------- | ------------------------------------------------- |
15
- | `canon:create-rule` | A project rule the toolkit does not ship |
16
- | `canon:create-skill` | A new `SKILL.md` |
17
- | `canon:draft-doc` | A new `docs/` page, context entry, or `README.md` |
18
- | `canon:draft-ready` | Finished files a worker should copy |
19
- | `canon:draft-figure` | A figure or architecture view inside a doc |
20
- | `canon:ci-workflow` | A GitHub Actions workflow file |
21
- | `canon:draft-slides` | A deck rendered to editable PowerPoint |
22
- | `canon:draft-screencast` | A recording script with beats seeded |
23
- | `canon:record-screencast` | Recording a screencast draft into a finished mp4 |
24
- | `canon:draft-identity` | A logo mark and social card |
13
+ | Skill | When to use |
14
+ | ------------------------- | ---------------------------------------------------------------------------------- |
15
+ | `canon:create-rule` | A project rule the toolkit does not ship |
16
+ | `canon:create-skill` | A new `SKILL.md` |
17
+ | `canon:write-doc` | A new `docs/` page, context entry, or `README.md` |
18
+ | `canon:draft-doc` | Never on purpose. A pointer naming `write-doc` <!-- canon-keep-retired --> |
19
+ | `canon:plan-ready` | Finished files a worker should copy |
20
+ | `canon:draft-ready` | Never on purpose. A pointer naming `plan-ready` <!-- canon-keep-retired --> |
21
+ | `canon:draw-figure` | A figure or architecture view inside a doc |
22
+ | `canon:draft-figure` | Never on purpose. A pointer naming `draw-figure` <!-- canon-keep-retired --> |
23
+ | `canon:ci-workflow` | A GitHub Actions workflow file |
24
+ | `canon:make-deck` | A deck rendered to editable PowerPoint |
25
+ | `canon:draft-slides` | Never on purpose. A pointer naming `make-deck` <!-- canon-keep-retired --> |
26
+ | `canon:script-screencast` | A recording script with beats seeded |
27
+ | `canon:draft-screencast` | Never on purpose. A pointer naming `script-screencast` <!-- canon-keep-retired --> |
28
+ | `canon:record-screencast` | Recording a screencast draft into a finished mp4 |
29
+ | `canon:design-identity` | A logo mark and social card |
30
+ | `canon:draft-identity` | Never on purpose. A pointer naming `design-identity` <!-- canon-keep-retired --> |
25
31
 
26
32
  ## Answer a question at any point
27
33
 
@@ -17,18 +17,19 @@ Groups run in the order a project meets them. Every name `canon claude skills li
17
17
 
18
18
  ## Decide what to build
19
19
 
20
- | Skill | When to use |
21
- | -------------------------- | -------------------------------------------------- |
22
- | `canon:plan-intake` | The input is a pile of findings |
23
- | `canon:plan-intake-answer` | An intake folder holds unread slots |
24
- | `canon:backlog-triage` | The backlog needs pruning |
25
- | `canon:plan-groundwork` | The state is unmeasured and approaches compete |
26
- | `canon:decision-escalate` | Open decisions turn on your preference |
27
- | `canon:draft-and-pick` | The call is taste, wanting candidates side by side |
28
- | `canon:canvas-board` | A direction should be drawn as editable frames |
29
- | `canon:task-board` | A decided item needs a file on the board |
30
- | `canon:plan-feature` | The approach is settled and needs a plan |
31
- | `canon:codebase-layout` | A change adds a file and needs a folder |
20
+ | Skill | When to use |
21
+ | -------------------------- | ---------------------------------------------------------------------------- |
22
+ | `canon:plan-intake` | The input is a pile of findings |
23
+ | `canon:plan-intake-answer` | An intake folder holds unread slots |
24
+ | `canon:backlog-triage` | The backlog needs pruning |
25
+ | `canon:plan-groundwork` | The state is unmeasured and approaches compete |
26
+ | `canon:decision-escalate` | Open decisions turn on your preference |
27
+ | `canon:pick-by-eye` | The call is taste, wanting candidates side by side |
28
+ | `canon:draft-and-pick` | Never on purpose. A pointer naming `pick-by-eye` <!-- canon-keep-retired --> |
29
+ | `canon:canvas-board` | A direction should be drawn as editable frames |
30
+ | `canon:task-board` | A decided item needs a file on the board |
31
+ | `canon:plan-feature` | The approach is settled and needs a plan |
32
+ | `canon:codebase-layout` | A change adds a file and needs a folder |
32
33
 
33
34
  ## Build the feature
34
35
 
@@ -19,9 +19,9 @@ The default. `canon/DESIGN.md` holds visual intent as one Overview paragraph, at
19
19
  These skills cover the tier:
20
20
 
21
21
  - `canon:ui-checklist`, `canon:ux-audit`, and `canon:ux-measure` review and measure a UI
22
- - `canon:draft-and-pick` drafts candidates as frames on the canvas and takes your pick
22
+ - `canon:pick-by-eye` drafts candidates as frames on the canvas and takes your pick
23
23
  - `canon:canvas-board` works a direction out as HTML frames you edit in the browser. Only the pick moves into `canon/DESIGN.md`.
24
- - `canon:draft-identity` drafts a logo mark and social card
24
+ - `canon:design-identity` drafts a logo mark and social card
25
25
 
26
26
  Pick tier 0 when the UI is not the core product, decisions fit in sentences, and stakeholders review code.
27
27
 
@@ -200,3 +200,7 @@ files = ["index.html", "*/index.html"]
200
200
  ["canvas"]
201
201
  deps = []
202
202
  files = [".canon/canvas"]
203
+
204
+ ["design-reference"]
205
+ deps = []
206
+ files = ["canon/design"]
@@ -0,0 +1,73 @@
1
+ ---
2
+ title: Astro rule ledger
3
+ description: Sources for governance/rules/framework/astro.md, one row per bullet
4
+ ---
5
+
6
+ # Astro rule ledger
7
+
8
+ The field is front-end engineering, and the authority is the Astro documentation at docs.astro.build. The pages read name no current major, so most rows record the read date alone. The content rows follow the Astro 6 upgrade guide, which removed the legacy collection location.
9
+
10
+ ## Static first
11
+
12
+ | Bullet | Source | Read |
13
+ | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- |
14
+ | `.astro` without client state | [Islands architecture](https://docs.astro.build/en/concepts/islands/): Astro components "render to static HTML with no client-side runtime" | 2026-10-18 |
15
+ | Fetch in the frontmatter | [Data fetching](https://docs.astro.build/en/guides/data-fetching/): "All Astro components have access to the global fetch() function in their component script", run "at build time" | 2026-10-18 |
16
+
17
+ ## Islands
18
+
19
+ | Bullet | Source | Read |
20
+ | ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
21
+ | Directive on the component | [Template directives](https://docs.astro.build/en/reference/directives-reference/): "A client directive can only be used on a UI framework component that is directly imported into a .astro component" | 2026-10-18 |
22
+ | Pick the directive by priority | [Template directives](https://docs.astro.build/en/reference/directives-reference/): `client:load` is for "Immediately-visible UI elements", `client:idle` for "Lower-priority UI elements", `client:visible` for "below the fold" | 2026-10-18 |
23
+
24
+ ## Routing and layouts
25
+
26
+ | Bullet | Source | Read |
27
+ | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
28
+ | `getStaticPaths()` for params | [Routing](https://docs.astro.build/en/guides/routing/): in static mode every parameter value needing a page comes from `getStaticPaths()`, while "In SSR mode, a page will be generated on request" | 2026-10-18 |
29
+ | Layouts with `<slot />` | [Layouts](https://docs.astro.build/en/basics/layouts/): "Layouts are Astro components used to provide a reusable UI structure", with "a slot to specify where individual page content should be injected" | 2026-10-18 |
30
+
31
+ ## Content
32
+
33
+ | Bullet | Source | Read |
34
+ | ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- |
35
+ | `src/content.config.ts` loaders | [Content collections](https://docs.astro.build/en/guides/content-collections/): "All of your build-time content collections are defined in a special src/content.config.ts file", with "two built-in loaders (glob() and file())" | 2026-10-18, Astro 6 |
36
+ | Query through the API | [Content collections](https://docs.astro.build/en/guides/content-collections/): "getCollection() fetches an entire collection and returns an array of entries" | 2026-10-18 |
37
+
38
+ ## Styles and assets
39
+
40
+ | Bullet | Source | Read |
41
+ | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
42
+ | Scoped by default | [Styles and CSS](https://docs.astro.build/en/guides/styling/): "Scoped styles should be used as often as possible" and "Global styles should be used only as-needed" | 2026-10-18 |
43
+ | Images in `src/` | [Images](https://docs.astro.build/en/guides/images/): "We recommend that local images are kept in src/ when possible so that Astro can transform, optimize, and bundle them" | 2026-10-18 |
44
+
45
+ ## Environment
46
+
47
+ | Bullet | Source | Read |
48
+ | ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
49
+ | `astro:env` and `PUBLIC_` | [Environment variables](https://docs.astro.build/en/guides/environment-variables/): "only environment variables prefixed with PUBLIC\_ are available in client-side code", and `astro:env` gives "a type-safe schema" | 2026-10-18 |
50
+
51
+ ## Declined
52
+
53
+ Every bullet the rewrite removed or reshaped, grouped by why.
54
+
55
+ ### Contradicted by the docs
56
+
57
+ - Replaced "content collections in `src/content/` with a `config.ts` schema". The [Astro 6 upgrade guide](https://docs.astro.build/en/guides/upgrade-to/v6/) removed that location in favor of `src/content.config.ts`.
58
+
59
+ ### Cut without a source or a bug class
60
+
61
+ - Cut "do not add a framework integration until the first island needs it" as a dependency call with no page read taking a side.
62
+ - Cut "keep islands leaf-level, never wrap layout chrome to enable nested islands", which no reviewer can check against one line.
63
+ - Cut "use `[param].astro` and `[...rest].astro`" as the file convention Claude already follows. The kept routing bullet names the `getStaticPaths()` footgun instead.
64
+
65
+ ### Merged or reworded
66
+
67
+ - Reworded the hedged "write pages and components as `.astro` unless interactivity requires an island" to a test on client state and event handlers.
68
+ - Reworded the hedged "prefer server-rendered content over client-fetched data" to where the fetch call sits.
69
+ - Reworded "apply `client:*` directives on the component boundary, not on parents" to the rule the directives reference states.
70
+ - Reworded "prefer `client:visible` or `client:idle` over `client:load`" to the priority each directive is documented for.
71
+ - Merged "access collection entries via `getCollection` and `getEntry`" into the query bullet.
72
+ - Reworded "use `is:global` only in layouts" to include `:global()`, the selector the styling page names for the same case.
73
+ - Extended "read environment variables via `import.meta.env`" with `astro:env`, the typed schema the docs now offer.