@erclx/canon 5.31.0 → 5.32.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 (303) hide show
  1. package/README.md +1 -1
  2. package/claude/.claude-plugin/plugin.json +1 -1
  3. package/claude/skills/api-design/references/adopted.md +1 -1
  4. package/claude/skills/auto-ship/REQUIREMENT.md +4 -16
  5. package/claude/skills/auto-ship/SKILL.md +13 -58
  6. package/claude/skills/auto-ship/references/draft-mark.md +2 -2
  7. package/claude/skills/auto-ship/references/failure-recovery.md +1 -5
  8. package/claude/skills/auto-ship/references/tier-failures.md +1 -1
  9. package/claude/skills/auto-ship/references/ui-checklist.md +2 -2
  10. package/claude/skills/auto-ship/references/verb-absent.md +3 -27
  11. package/claude/skills/backlog-triage/SKILL.md +1 -1
  12. package/claude/skills/canon-cli/REQUIREMENT.md +4 -6
  13. package/claude/skills/canon-cli/SKILL.md +2 -2
  14. package/claude/skills/canon-feedback/REQUIREMENT.md +1 -1
  15. package/claude/skills/canon-feedback/SKILL.md +10 -13
  16. package/claude/skills/canon-feedback-triage/REQUIREMENT.md +13 -14
  17. package/claude/skills/canon-feedback-triage/SKILL.md +49 -30
  18. package/claude/skills/canvas/REQUIREMENT.md +3 -4
  19. package/claude/skills/canvas/SKILL.md +5 -5
  20. package/{standards → claude/skills/canvas/references}/canvas.md +12 -1
  21. package/claude/skills/ci-workflow/REQUIREMENT.md +0 -1
  22. package/claude/skills/context-fold/REQUIREMENT.md +8 -20
  23. package/claude/skills/context-fold/SKILL.md +20 -44
  24. package/claude/skills/context-fold/references/classify.md +7 -8
  25. package/claude/skills/context-fold/references/completion-report.md +2 -6
  26. package/claude/skills/context-fold/references/context-refresh.md +5 -15
  27. package/claude/skills/context-fold/references/promoted-pages.md +3 -3
  28. package/claude/skills/context-fold/references/receipt-sweep.md +6 -17
  29. package/claude/skills/context-fold/references/unusable-baseline.md +4 -6
  30. package/claude/skills/create-rule/REQUIREMENT.md +0 -1
  31. package/claude/skills/create-skill/REQUIREMENT.md +6 -4
  32. package/claude/skills/create-skill/SKILL.md +8 -7
  33. package/{standards → claude/skills/create-skill/references}/skill-paths.md +1 -0
  34. package/claude/skills/decision-escalate/REQUIREMENT.md +1 -1
  35. package/claude/skills/decision-escalate/SKILL.md +1 -1
  36. package/claude/skills/design-taste/REQUIREMENT.md +0 -2
  37. package/claude/skills/design-taste/SKILL.md +1 -3
  38. package/claude/skills/design-taste/references/vocabulary.md +1 -1
  39. package/claude/skills/docs-sync/REQUIREMENT.md +3 -3
  40. package/claude/skills/document-health/REQUIREMENT.md +2 -2
  41. package/claude/skills/document-health/SKILL.md +4 -5
  42. package/claude/skills/document-health/references/axes.md +4 -6
  43. package/claude/skills/draft-and-pick/REQUIREMENT.md +16 -14
  44. package/claude/skills/draft-and-pick/SKILL.md +40 -32
  45. package/claude/skills/draft-and-pick/references/live-arms.md +9 -9
  46. package/claude/skills/draft-doc/REQUIREMENT.md +5 -5
  47. package/claude/skills/draft-doc/SKILL.md +9 -10
  48. package/claude/skills/draft-doc/references/requirements.md +61 -0
  49. package/claude/skills/draft-doc/references/wiki-kind.md +53 -0
  50. package/claude/skills/draft-doc/references/wiki.md +50 -30
  51. package/claude/skills/draft-figure/REQUIREMENT.md +2 -2
  52. package/claude/skills/draft-figure/SKILL.md +4 -4
  53. package/claude/skills/draft-figure/references/architecture-set.md +4 -4
  54. package/claude/skills/draft-figure/references/hand-drawn.md +1 -1
  55. package/claude/skills/draft-figure/references/mermaid-path.md +55 -0
  56. package/claude/skills/draft-figure/references/mermaid.md +43 -34
  57. package/claude/skills/draft-identity/REQUIREMENT.md +1 -1
  58. package/claude/skills/draft-identity/SKILL.md +9 -7
  59. package/claude/skills/draft-ready/REQUIREMENT.md +1 -1
  60. package/claude/skills/draft-ready/SKILL.md +6 -6
  61. package/claude/skills/draft-ready/references/assembly.md +1 -1
  62. package/{standards → claude/skills/draft-ready/references}/ready.md +13 -5
  63. package/claude/skills/git-issue/references/issue.md +3 -3
  64. package/claude/skills/git-ship/REQUIREMENT.md +0 -2
  65. package/claude/skills/git-ship/SKILL.md +16 -24
  66. package/claude/skills/plan-feature/SKILL.md +2 -6
  67. package/{standards → claude/skills/plan-feature/references}/plan.md +9 -10
  68. package/claude/skills/plan-groundwork/SKILL.md +5 -6
  69. package/{standards → claude/skills/plan-groundwork/references}/groundwork.md +17 -4
  70. package/claude/skills/plan-intake/SKILL.md +2 -3
  71. package/{standards → claude/skills/plan-intake/references}/intake.md +17 -2
  72. package/claude/skills/plan-intake-answer/REQUIREMENT.md +1 -1
  73. package/claude/skills/plan-intake-answer/SKILL.md +1 -1
  74. package/claude/skills/review-address/SKILL.md +1 -1
  75. package/claude/skills/review-craft/REQUIREMENT.md +3 -3
  76. package/claude/skills/review-craft/SKILL.md +2 -2
  77. package/claude/skills/review-craft/references/ui.md +4 -4
  78. package/claude/skills/review-pr/REQUIREMENT.md +1 -1
  79. package/claude/skills/review-pr/SKILL.md +5 -7
  80. package/claude/skills/review-ui/REQUIREMENT.md +0 -1
  81. package/claude/skills/review-ui/SKILL.md +1 -1
  82. package/claude/skills/role-orchestrator/REQUIREMENT.md +0 -3
  83. package/claude/skills/role-orchestrator/SKILL.md +8 -8
  84. package/claude/skills/role-orchestrator/references/orchestrator-dispatch.md +3 -3
  85. package/claude/skills/role-orchestrator/references/orchestrator-handoff.md +7 -10
  86. package/claude/skills/role-orchestrator/references/orchestrator-parked.md +2 -2
  87. package/claude/skills/role-orchestrator/references/orchestrator-refill.md +0 -3
  88. package/claude/skills/role-orchestrator/references/orchestrator-resume.md +1 -1
  89. package/claude/skills/role-planner/SKILL.md +2 -2
  90. package/claude/skills/role-reviewer/SKILL.md +1 -1
  91. package/claude/skills/role-worker/SKILL.md +2 -2
  92. package/claude/skills/session-compact/REQUIREMENT.md +1 -4
  93. package/claude/skills/session-compact/SKILL.md +3 -13
  94. package/claude/skills/session-compact/references/handoff-note.md +2 -2
  95. package/claude/skills/session-map/REQUIREMENT.md +1 -9
  96. package/claude/skills/session-map/SKILL.md +8 -16
  97. package/{standards → claude/skills/session-map/references}/session.md +17 -11
  98. package/claude/skills/session-relay/REQUIREMENT.md +1 -1
  99. package/claude/skills/session-resume/REQUIREMENT.md +4 -6
  100. package/claude/skills/session-resume/SKILL.md +3 -9
  101. package/claude/skills/session-worktree/SKILL.md +1 -1
  102. package/claude/skills/session-worktree/references/main-root-writes.md +2 -2
  103. package/claude/skills/systematic-debugging/REQUIREMENT.md +0 -1
  104. package/claude/skills/target-check/REQUIREMENT.md +3 -3
  105. package/claude/skills/target-check/SKILL.md +1 -1
  106. package/claude/skills/target-check/references/domains.md +1 -1
  107. package/claude/skills/target-setup/REQUIREMENT.md +4 -4
  108. package/claude/skills/target-setup/SKILL.md +3 -3
  109. package/claude/skills/target-setup/references/detect.md +1 -1
  110. package/claude/skills/task-board/SKILL.md +4 -4
  111. package/claude/skills/task-board/references/archive.md +1 -1
  112. package/{standards → claude/skills/task-board/references}/board.md +9 -0
  113. package/claude/skills/task-board/references/decline.md +1 -1
  114. package/{standards → claude/skills/task-board/references}/tasks.md +13 -8
  115. package/claude/skills/teach-workspace/SKILL.md +1 -1
  116. package/claude/skills/teach-workspace/references/revisit.md +1 -1
  117. package/{standards → claude/skills/teach-workspace/references}/teach.md +17 -5
  118. package/claude/skills/ux-audit/REQUIREMENT.md +2 -2
  119. package/claude/skills/ux-audit/SKILL.md +2 -3
  120. package/claude/skills/write-human/REQUIREMENT.md +0 -1
  121. package/claude/skills/write-human/SKILL.md +1 -1
  122. package/docs/agents/audits.md +1 -1
  123. package/docs/agents/canvas.md +1 -1
  124. package/docs/agents/commands.md +1 -6
  125. package/docs/agents/context-audit-checks.md +9 -23
  126. package/docs/agents/context-audit.md +7 -15
  127. package/docs/agents/context-classify.md +5 -5
  128. package/docs/agents/counts.md +5 -5
  129. package/docs/agents/drift-surfaces.md +2 -2
  130. package/docs/agents/index.md +3 -5
  131. package/docs/agents/install-and-sync.md +6 -6
  132. package/docs/agents/intake.md +1 -1
  133. package/docs/agents/records-stale.md +5 -5
  134. package/docs/agents/records-validate.md +1 -1
  135. package/docs/agents/records.md +2 -2
  136. package/docs/agents/restated.md +1 -1
  137. package/docs/agents/rule-citations.md +1 -1
  138. package/docs/agents/skills-audit.md +2 -2
  139. package/docs/agents/state-scoped-risk.md +2 -2
  140. package/docs/agents/superseded.md +2 -2
  141. package/docs/agents/tasks-plans.md +1 -1
  142. package/docs/agents/tasks-validate.md +1 -1
  143. package/docs/agents/tasks.md +1 -1
  144. package/docs/agents/teach.md +1 -1
  145. package/docs/agents/upstream.md +26 -2
  146. package/docs/target/migrations.md +24 -0
  147. package/docs/target/projects.md +5 -7
  148. package/docs/target/scenarios.md +2 -2
  149. package/docs/target/sync.md +3 -3
  150. package/docs/workflow/ai-workflow.md +7 -38
  151. package/docs/workflow/index.md +1 -1
  152. package/docs/workflow/operating-model.md +8 -8
  153. package/docs/workflow/parallel-features.md +7 -7
  154. package/docs/workflow/skill-map-on-request.md +12 -15
  155. package/docs/workflow/skill-map.md +20 -32
  156. package/docs/workflow/visual-design-workflow.md +11 -14
  157. package/governance/renames.toml +0 -19
  158. package/governance/rules/canon/605-worktrees.md +1 -1
  159. package/governance/rules/{standards → canon}/plan.md +4 -5
  160. package/governance/rules/canon/tasks.md +18 -0
  161. package/governance/stacks/base.toml +1 -1
  162. package/package.json +1 -1
  163. package/scripts/core/install-check.sh +1 -1
  164. package/scripts/core/regen-web-previews.ts +1 -1
  165. package/src/audits/catalog.ts +5 -97
  166. package/src/claude/cases/authoring.ts +0 -18
  167. package/src/claude/cases/misc.ts +0 -13
  168. package/src/claude/cases/setup.ts +3 -20
  169. package/src/claude/cases/workflow.ts +0 -33
  170. package/src/claude/seeds.ts +1 -7
  171. package/src/claude/skills-audit.ts +1 -1
  172. package/src/cli/help.ts +1 -4
  173. package/src/cli.ts +0 -4
  174. package/src/commands/claude.ts +8 -14
  175. package/src/commands/context.ts +18 -280
  176. package/src/commands/feedback.ts +22 -91
  177. package/src/commands/records.ts +5 -5
  178. package/src/commands/sync.ts +5 -3
  179. package/src/commands/upstream.ts +135 -0
  180. package/src/context/audit.ts +5 -14
  181. package/src/context/classify/extract.ts +6 -13
  182. package/src/context/classify/patterns.ts +2 -41
  183. package/src/context/classify/prompts.ts +2 -6
  184. package/src/context/classify/run.ts +3 -3
  185. package/src/context/folders.ts +7 -12
  186. package/src/context/gate.ts +11 -91
  187. package/src/context/requirements.ts +13 -4
  188. package/src/counts/scan.ts +3 -3
  189. package/src/design/components.ts +2 -2
  190. package/src/feedback/body.ts +0 -12
  191. package/src/gate/measures.ts +6 -57
  192. package/src/gov/citations.ts +9 -3
  193. package/src/gov/restated.ts +3 -3
  194. package/src/markdown/structure.ts +2 -2
  195. package/src/migrate/record-layout.ts +3 -3
  196. package/src/records/ordinal.ts +1 -1
  197. package/src/records/prune.ts +2 -1
  198. package/src/records/stale-canonical.ts +2 -2
  199. package/src/roots/record.ts +1 -1
  200. package/src/sandbox/scenario.ts +115 -11
  201. package/src/shipped/references.ts +3 -3
  202. package/src/standards/read.ts +31 -0
  203. package/src/sync/seeds-report.ts +1 -1
  204. package/src/tasks/reach.ts +2 -2
  205. package/src/tasks/validate.ts +1 -1
  206. package/src/teach/workspace.ts +1 -1
  207. package/src/upstream/cursor.ts +1 -1
  208. package/src/upstream/due.ts +128 -0
  209. package/src/upstream/releases.ts +2 -1
  210. package/standards/context.md +3 -5
  211. package/standards/design.md +2 -3
  212. package/standards/index.md +0 -22
  213. package/standards/publish.md +1 -1
  214. package/standards/skill.md +1 -1
  215. package/tooling/base/reference.md +1 -1
  216. package/tooling/claude/reference.md +6 -20
  217. package/tooling/claude/seeds/.claude/hooks/records-index.sh +8 -20
  218. package/tooling/claude/seeds/.claude/hooks/standards-audit.sh +3 -3
  219. package/tooling/claude/seeds/CLAUDE.md +1 -3
  220. package/tooling/claude/seeds/canon/REQUIREMENTS.md +2 -9
  221. package/tooling/web/configs/e2e/screenshot.ts +0 -1
  222. package/claude/skills/auto-ship/references/review-findings.md +0 -20
  223. package/claude/skills/bash-cli-script/REQUIREMENT.md +0 -43
  224. package/claude/skills/bash-cli-script/SKILL.md +0 -53
  225. package/claude/skills/bash-cli-script/references/template.md +0 -19
  226. package/claude/skills/canon-operator/REQUIREMENT.md +0 -62
  227. package/claude/skills/canon-operator/SKILL.md +0 -113
  228. package/claude/skills/canon-rollout/REQUIREMENT.md +0 -59
  229. package/claude/skills/canon-rollout/SKILL.md +0 -140
  230. package/claude/skills/canon-rollout/references/failure-recovery.md +0 -20
  231. package/claude/skills/context-fold/references/anchor-sweep.md +0 -58
  232. package/claude/skills/context-fold/references/wireframe-sweep.md +0 -45
  233. package/claude/skills/create-standard/REQUIREMENT.md +0 -33
  234. package/claude/skills/create-standard/SKILL.md +0 -31
  235. package/claude/skills/design-extract/REQUIREMENT.md +0 -42
  236. package/claude/skills/design-extract/SKILL.md +0 -108
  237. package/claude/skills/draft-and-pick/references/frame.html +0 -118
  238. package/claude/skills/draft-doc/references/wireframes.md +0 -48
  239. package/claude/skills/markdown-propose/REQUIREMENT.md +0 -47
  240. package/claude/skills/markdown-propose/SKILL.md +0 -122
  241. package/claude/skills/markdown-propose/references/format.md +0 -118
  242. package/claude/skills/memory-capture/REQUIREMENT.md +0 -50
  243. package/claude/skills/memory-capture/SKILL.md +0 -117
  244. package/claude/skills/memory-review/REQUIREMENT.md +0 -52
  245. package/claude/skills/memory-review/SKILL.md +0 -129
  246. package/claude/skills/memory-review/references/later-phases.md +0 -118
  247. package/claude/skills/memory-review/references/receipt-format.md +0 -64
  248. package/claude/skills/project-commands/REQUIREMENT.md +0 -42
  249. package/claude/skills/project-commands/SKILL.md +0 -87
  250. package/claude/skills/repo-metadata/REQUIREMENT.md +0 -37
  251. package/claude/skills/repo-metadata/SKILL.md +0 -54
  252. package/claude/skills/restate-plainly/REQUIREMENT.md +0 -41
  253. package/claude/skills/restate-plainly/SKILL.md +0 -41
  254. package/claude/skills/review-branch/REQUIREMENT.md +0 -40
  255. package/claude/skills/review-branch/SKILL.md +0 -137
  256. package/claude/skills/seed-sync/REQUIREMENT.md +0 -45
  257. package/claude/skills/seed-sync/SKILL.md +0 -158
  258. package/claude/skills/sketch-design/REQUIREMENT.md +0 -38
  259. package/claude/skills/sketch-design/SKILL.md +0 -94
  260. package/claude/skills/ux-walkthrough/REQUIREMENT.md +0 -56
  261. package/claude/skills/ux-walkthrough/SKILL.md +0 -53
  262. package/claude/skills/ux-walkthrough/references/builds.md +0 -15
  263. package/claude/skills/ux-walkthrough/references/candidate-pages.md +0 -11
  264. package/claude/skills/ux-walkthrough/references/measuring.md +0 -22
  265. package/claude/skills/ux-walkthrough/references/record.md +0 -36
  266. package/claude/skills/ux-walkthrough/references/relay.md +0 -25
  267. package/docs/agents/architecture-record.md +0 -36
  268. package/docs/agents/review-classification.md +0 -76
  269. package/governance/rules/canon/603-memory.md +0 -11
  270. package/governance/rules/lang/120-bash.md +0 -18
  271. package/governance/rules/standards/architecture.md +0 -13
  272. package/governance/rules/standards/groundwork.md +0 -13
  273. package/governance/rules/standards/intake.md +0 -12
  274. package/governance/rules/standards/memory.md +0 -12
  275. package/governance/rules/standards/ready.md +0 -13
  276. package/governance/rules/standards/requirements.md +0 -12
  277. package/governance/rules/standards/session.md +0 -13
  278. package/governance/rules/standards/tasks.md +0 -15
  279. package/governance/rules/standards/teach.md +0 -14
  280. package/governance/rules/standards/wiki.md +0 -13
  281. package/governance/rules/standards/wireframes.md +0 -13
  282. package/src/autoship/classify.ts +0 -75
  283. package/src/autoship/paths.ts +0 -50
  284. package/src/commands/autoship.ts +0 -129
  285. package/src/commands/repo.ts +0 -393
  286. package/src/context/architecture.ts +0 -654
  287. package/src/context/wireframe-states.ts +0 -238
  288. package/src/repo/metadata.ts +0 -206
  289. package/standards/architecture.md +0 -127
  290. package/standards/memory.md +0 -158
  291. package/standards/mermaid.md +0 -64
  292. package/standards/requirements.md +0 -79
  293. package/standards/wiki.md +0 -77
  294. package/standards/wireframes.md +0 -143
  295. package/tooling/claude/seeds/.claude/memory/index.md +0 -8
  296. package/tooling/claude/seeds/canon/ARCHITECTURE.md +0 -23
  297. package/tooling/claude/seeds/canon/wireframes/index.md +0 -8
  298. /package/{standards → claude/skills/create-skill/references}/skill-practice.md +0 -0
  299. /package/{standards → claude/skills/create-skill/references}/skill-requirement.md +0 -0
  300. /package/{standards → claude/skills/plan-feature/references}/plan-lifecycle.md +0 -0
  301. /package/{standards → claude/skills/plan-groundwork/references}/groundwork-spikes.md +0 -0
  302. /package/{standards → claude/skills/task-board/references}/tasks-decline.md +0 -0
  303. /package/{standards → claude/skills/teach-workspace/references}/glossary.md +0 -0
@@ -1,87 +0,0 @@
1
- ---
2
- name: project-commands
3
- description: Runs a command the project documents in its development context entry and stops there. Use when asked to "start the app", "start the dev server", "run the checks", "run the build", "spin it up", or "what commands does this project have". Do NOT use to confirm a change works in a running app, which needs verification past the launch. Do NOT use to deploy, publish, or release.
4
- metadata:
5
- family: build
6
- ---
7
-
8
- # Project commands
9
-
10
- Read the project's development context entry, run the command the user named, report where it landed, and stop.
11
-
12
- The value is the stop. A launch that continues into log inspection, browser checks, or unrelated defects is the failure this skill exists to avoid.
13
-
14
- ## Guards
15
-
16
- - Resolve the entry before anything else. Take the flat `development.md` under `canon/context/` when it exists, and `canon/context/development/overview.md` when the domain outgrew one file and split into a folder, which is where the `## Scripts` table lands in a split. Test both paths, then read one. If neither resolves, stop with the line below and let the user decide.
17
- - If the entry documents no command matching the request, stop and list what it does document. Do not infer a command from a filename or a framework.
18
- - If the resolved command has an effect that outlives the process and stopping it does not undo, print it for the user to run and stop. Deploying, publishing, releasing, migrating, and resetting are the common shapes, and the test is the effect rather than the name. A script called `infra:apply` or `promote` qualifies.
19
-
20
- Do not read another file to reconstruct an entry that did not resolve, because a guess is worse than a stop when the user cannot see it was a guess.
21
-
22
- The stop names the flat path in both cases, since a project carrying neither has no entry to point at and the flat one is where a project without a split keeps it:
23
-
24
- ```plaintext
25
- ❌ No canon/context/development.md. This project has no documented dev loop.
26
- ```
27
-
28
- ## Step 1: read the entry
29
-
30
- Read the path the guard resolved, from the project root, the whole entry rather than a named section. That file and no others. A second file is a discovery chain, and this skill has none. Testing two candidate paths is not one, since the test happens before any read and exactly one file is opened.
31
-
32
- A split domain keeps its other sub-area files out of reach on purpose. `overview.md` carries the run commands, and the siblings beside it cover verification stages, hooks, and scratch, none of which this skill runs.
33
-
34
- ## Step 2: resolve the command
35
-
36
- Match the request against what the entry documents, reading the stated purpose and not only the command name. A project that documents two similar commands separately means the distinction, and the purpose column is where it says which is which.
37
-
38
- When the request maps to more than one documented command, resolve all of them. A project that starts as a frontend and a backend has two rows in the table and one request covering both, and running one of the two reports success on half an app.
39
-
40
- State the resolved command before running it. One line, no rationale.
41
-
42
- ## Step 3: run it
43
-
44
- Run each resolved command as the entry writes it, from the project root. When a command only works from a subdirectory, the entry has to say so, since the table gives the skill nothing else to go on.
45
-
46
- A command that terminates runs in the foreground. A command that stays up runs in the background, by setting the Bash tool's `run_in_background` parameter on the call. Nothing backgrounds a process on its own, and a foreground dev server blocks until the tool timeout kills it, which reports as a command that never came up and leaves nothing running.
47
-
48
- Decide from what the entry says the command does, not from its name. When the entry does not say, treat a server, watcher, or preview as staying up.
49
-
50
- - Read a backgrounded command's output back before checking anything against it. The call that starts it returns immediately and carries no port.
51
- - Report the port or URL each command prints, and the log location when one exists
52
- - Confirm a service came up with one check against what it reports listening on
53
- - Leave a process the skill did not start alone. Never stop, restart, or reconfigure one.
54
- - Do not tear down what the skill started. A session that starts a server and stops it has not done what was asked.
55
-
56
- If a command fails or never comes up, report the failure and the last output. Do not retry with a different command, and do not abandon the others.
57
-
58
- An exit status here is part of the report rather than the basis for one. Step 3 confirms a service came up against what it printed, so the number is passed through to the reader and decides nothing. A documented command reaching `canon` is the case worth naming, since an operator's shell profile may wrap the binary in a function that takes its status from a later command, and judging that run by its exit would call a refusal a success.
59
-
60
- ## Step 4: stop
61
-
62
- Report and end the turn. Specifically do not:
63
-
64
- - Run a second check after the first one passed
65
- - Read the startup log for anything beyond a failure
66
- - Open a browser, take a screenshot, or drive the running app
67
- - Report a defect noticed while starting up, however real
68
-
69
- Those belong to a verification request, which is a different ask. When one of them looks warranted, say so in one line and let the user decide.
70
-
71
- ## Output
72
-
73
- ```plaintext
74
- ▶️ <resolved command>
75
-
76
- <what it reported: port, URL, or exit status>
77
- ```
78
-
79
- One block per command when the request resolved to more than one.
80
-
81
- For a request with no command to run, list what the entry documents instead:
82
-
83
- ```plaintext
84
- 📋 Documented in <the entry path the guard resolved>
85
-
86
- - `<command>`: <purpose as the entry states it>
87
- ```
@@ -1,37 +0,0 @@
1
- ---
2
- name: repo-metadata
3
- description: Why an About text nobody re-derives drifts from the README it summarizes, and why writing it stays a second, explicit step
4
- ---
5
-
6
- # Repo metadata requirement
7
-
8
- ## Gap
9
-
10
- Without this skill, a repository's GitHub About description, homepage, and topics are set once by hand and never checked again. Nothing in either skill corpus reads or writes them, so a README rewrite carries no signal back to the three fields a stranger reads before the README, and they drift silently. That already happened here: the About text disagreed with the README's own opening line, and nobody noticed until someone read both side by side.
11
-
12
- A session that fixes this by hand skips the gate a repeatable proposal would have given it. It reads the README once, writes a description from memory, and never records what it compared against or gives anyone else a chance to see the diff before it goes out. The write is also public and immediate: `gh repo edit` changes what every visitor to the repository page sees, with no draft state and no second confirmation from GitHub itself.
13
-
14
- ## Must
15
-
16
- - Compute the proposal from the tree alone, through `canon repo metadata propose`, and report the diff against the remote before any write is discussed
17
- - Route the choice of which fields to write through the structured question surface, since which field to accept is the operator's preference to decide
18
- - Run `canon repo metadata apply` only in a turn separate from the one that ran propose, carrying only the fields the operator answered in this conversation
19
-
20
- ## Must not
21
-
22
- - Call apply in the same invocation that ran propose, whatever the operator's request already names
23
- - Write a field the operator has not answered in this conversation, even when the CLI's own proposal suggested a value for it
24
- - Read an absent field in the proposal as a suggestion to clear what the remote already carries
25
- - Edit `README.md` or any repository setting other than description, homepage, and topics
26
- - Fire from a request with no repository-metadata content, since a skill invoked on a vague signal risks presenting a write path the operator never asked for
27
-
28
- ## Guards
29
-
30
- - No `gh` remote resolves. Stop, naming the refusal `canon repo metadata propose` reports, since a proposal with nothing to compare against is a suggestion nobody asked for.
31
- - `canon repo metadata propose` or `apply` does not resolve on an older install. Report that rather than proceeding, since the fix without the verb reintroduces the hand-written write this skill exists to gate.
32
-
33
- ## Out of scope
34
-
35
- - Editing the README's own content, which is a request against that file rather than against repository metadata
36
- - Repository settings outside description, homepage, and topics, such as visibility or branch protection, which carry a different blast radius and no local source to propose from
37
- - Any repeat run outside a target project's own tree, since the proposal is computed from that tree's README and manifest rather than from this toolkit's shape
@@ -1,54 +0,0 @@
1
- ---
2
- name: repo-metadata
3
- description: Proposes a GitHub About description, homepage, and topic set computed from the README's opening line and package.json, reports the difference against what the repository's remote already carries, and stops without writing. A later invocation, carrying the operator's answered fields, writes the change through gh repo edit. Use when asked to "propose repo metadata", "check the github description", "does our github about text match the readme", "sync github topics", "update the repo homepage", or "apply the repo metadata answers". Do NOT use to edit README.md itself, or to change a repository setting other than description, homepage, or topics.
4
- metadata:
5
- family: setup
6
- ---
7
-
8
- # Repo metadata
9
-
10
- Reads what `canon repo metadata propose` computes locally and reports it against the remote. Writing is a separate step: `canon repo metadata apply` never runs in the same invocation that ran propose, whatever the operator answers in the same breath. The gate is the two invocations, not a prompt inside one.
11
-
12
- ## Guards
13
-
14
- - Report it rather than proceeding silently when `canon repo metadata propose` or `canon repo metadata apply` does not resolve. Both ship with the CLI, so a project on an older install meets a missing subcommand rather than a refusal.
15
- - The propose read refuses when the repository has no remote `gh` can read. Report that refusal verbatim and stop. A proposal with nothing to compare against is a suggestion nobody asked for.
16
- - Never call apply in the same turn that ran propose, even when the operator's request already names the fields to write. Surface the proposal, get the answer, then run apply as its own step.
17
- - Never write a field the operator did not confirm in this conversation. A field the proposal computed and the operator has not answered stays unwritten, whatever the CLI's own suggestion for it was.
18
- - A field absent from the proposal has no local source and is never a suggestion to clear what the remote already carries. Report it as unchanged, not as a removal.
19
-
20
- ## Propose
21
-
22
- 1. Run `canon repo metadata propose --json`.
23
- 2. Read `diff` and `repo` from the record. `repo` is the `--repo` value the later apply step must carry. An empty `diff` means the remote already matches what this run computed: report that and stop, since there is nothing to answer.
24
- 3. When `diff` carries a `description` field, compress its proposed value, the raw opening line `canon repo metadata propose` computed, into a single short phrase. Leave the shape and length of the phrase to judgment on each run. No numeric target applies. Keep the raw proposed value beside the compressed phrase in what gets reported, so the operator can check the phrase against the README line it came from.
25
- 4. For each field `diff` carries, put the change to the operator through the structured question surface: which of the differing fields to write. For `description`, the value offered to accept is the compressed phrase from step 3, not the raw line beside it. Rank accepting the proposed value first for a field whose current value is stale or wrong, and give the reject option the cost of leaving the remote as it stands. Never pre-select an answer for the operator.
26
- 5. Report the fields the proposal left absent as unchanged, naming that neither the README nor `package.json` carried a source for them.
27
- 6. Stop. Do not run apply here even when the operator answers immediately, since answering is not yet an apply invocation.
28
-
29
- ## Apply
30
-
31
- 1. Confirm every field about to be written was answered by the operator in this conversation. Carry no field forward unanswered. For `description`, the answered value is the compressed phrase Propose offered, never the raw README line reported beside it.
32
- 2. Run `canon repo metadata apply`, always passing `--repo <owner/name>` from the propose record's `repo` field, plus the flags for the answered fields: `--description <text>`, `--homepage <url>`, `--topics <comma-separated list>`. `--topics` is the full desired set, and the command reads the current set itself to compute what to add and remove. The command refuses rather than writing when `--repo` does not match what `--root` resolves to, so never omit it and never guess it from anything but the propose record's `repo` field.
33
- 3. Report the written state from the JSON record.
34
-
35
- ## Output
36
-
37
- Propose:
38
-
39
- ```plaintext
40
- 📋 Repo metadata proposal
41
- description: "<current>" → "<compressed>" (derived from the README's opening line: "<raw>")
42
- homepage: unchanged, no local source
43
- topics: +<added>, -<removed>
44
-
45
- Answer which fields to write, then ask again to apply.
46
- ```
47
-
48
- Apply:
49
-
50
- ```plaintext
51
- ✅ Applied: <fields written>
52
- ```
53
-
54
- Omit a line from the proposal block for a field `diff` did not carry.
@@ -1,41 +0,0 @@
1
- ---
2
- name: restate-plainly
3
- description: Why a plain restatement is asked for by name, and where its boundary sits against the skill that drafts and the command that measures
4
- ---
5
-
6
- # Restate plainly requirement
7
-
8
- ## Gap
9
-
10
- Without this skill, a reader who cannot follow a dense answer has to ask for it again in ordinary words, and the second answer is drafted by the same session that produced the first. Nothing tells that session which half of its own text carried the decision, so the rewrite shortens the passage and keeps the abstraction that made it hard to read.
11
-
12
- The corpus around it covers the neighboring jobs and not this one. `write-human` governs a passage being drafted or revised and arrives on a markdown edit, so it never sees an answer in chat and never reaches a document nobody is editing. `canon markdown audit` reports sentence spread and repeated openings against a stated range, which measures how a passage moves and says nothing about whether a reader can act on it.
13
-
14
- A restatement also fails in a way a rewrite does not. A run that compresses by dropping what supports a claim leaves a reader who acts on the plain version and meets a different answer in the source, and that failure is invisible in the restatement itself.
15
-
16
- ## Must
17
-
18
- - Take a named markdown path or the preceding answer, resolving the path first, since a reader pointing at a file has already said which one they mean
19
- - Keep every point that changes a decision and cut what only supports one, which is the split that separates a restatement from a summary
20
- - Preserve a hedge the source carries, since dropping it manufactures a certainty
21
- - Cite the carrier of the rhythm and density rules rather than restating them, because a second copy drifts with nothing comparing the two
22
- - Fire on an explicit request and refuse the model's own judgment about its own output
23
-
24
- ## Must not
25
-
26
- - Write a file. A restatement is read once to reach a decision, and a file makes a record nobody opens twice.
27
- - Add a fact, number, or name the source does not carry
28
- - Restate the voice, rhythm, or density rules, which live in the skill this body cites
29
- - Claim the restatement is verified. Nothing checks whether a plain version kept the deciding half, so the sandbox arm asserts what the run did rather than that the output is good.
30
-
31
- ## Guards
32
-
33
- - A named path that does not resolve stops the run rather than falling back to the preceding answer, since the two inputs are different requests
34
- - A request with no path and nothing preceding it stops rather than restating the request itself
35
-
36
- ## Out of scope
37
-
38
- - Drafting or revising a passage, which is `write-human` on a markdown edit
39
- - Measuring cadence in finished output, which `canon markdown audit` reports from package data
40
- - Rewriting a document into a file, which is a proposal against the source rather than a restatement of it
41
- - The banned characters, which `markdown.md` states and the audit gates
@@ -1,41 +0,0 @@
1
- ---
2
- name: restate-plainly
3
- description: Restates a dense answer or a named markdown document in plain language, cutting jargon and keeping only what changes a decision. Use when asked to "restate that in plain language", "say that plainly", "what does this actually mean", "cut the jargon", "give me the plain version", or "restate this document". Do NOT use to draft or revise prose, which is `write-human`, and do NOT fire on the model's own judgment that its own output was dense.
4
- metadata:
5
- family: answer
6
- ---
7
-
8
- # Restate plainly
9
-
10
- Return the plain version of something already written. The reader asked because they stopped to decode rather than to decide, so the restatement earns its place by getting them to the decision.
11
-
12
- ## What to restate
13
-
14
- - Restate the file when the request names a markdown path, and the preceding answer in the conversation when it names none. A named path wins over an answer sitting in the same turn.
15
- - Stop when the request names a path that does not resolve: `❌ No file at <path>. Name a path that exists, or ask for the preceding answer instead.`
16
- - Stop when nothing precedes the request and no path is named: `❌ Nothing to restate. Name a markdown path, or ask right after the answer you want in plain words.`
17
- - Refuse a request to restate output on the model's own initiative. A person asks for this by name.
18
-
19
- ## What survives
20
-
21
- - Keep every point that changes a decision, and cut every point that only supports one. A reader who acts on the restatement and is surprised by the original has been given the wrong half.
22
- - Name the thing the source names. Replace a term of art with its plain equivalent, and keep the term where the reader has to search for it later.
23
- - Say what is uncertain where the source hedges, and say it plainly. Dropping a hedge invents a certainty the source does not carry.
24
- - Introduce no fact, number, or name the source lacks. A restatement changes wording and never claims.
25
- - Report the reasoning, not the metaphor. An abstraction standing in for a mechanism is what made the source dense.
26
-
27
- ## How it reads
28
-
29
- Load the `write-human` skill before writing the restatement. Compression is where a plain version turns into a list of verbless fragments, and that skill states the rhythm and density rules this one does not copy.
30
-
31
- ## Output
32
-
33
- Answer in chat. Write no file, since a restatement is read once to reach a decision.
34
-
35
- Lead with the plain version in prose. Close with one line naming what was cut and why, so the reader can go back for it:
36
-
37
- ```plaintext
38
- Cut: <what left, and why it changes no decision>
39
- ```
40
-
41
- Name the source path on its own line when the restatement came from a file.
@@ -1,40 +0,0 @@
1
- ---
2
- name: review-branch
3
- description: What local review is for, the gaps it closes, and why it reports without fixing
4
- ---
5
-
6
- # Review branch requirement
7
-
8
- ## Gap
9
-
10
- Without this skill, a branch ships on the confidence of the session that wrote it. Review happens in chat and evaporates, so the ship step has no receipt to gate on. What review does happen mixes style opinion with real defects at one severity, and a reader cannot tell which blocks the merge. Worst, a diff that resolves empty against a stale base reports a clean branch instead of admitting the skill could not see the work.
11
-
12
- ## Must
13
-
14
- - Read the project's own context before the diff, so a decision already settled is not reported as a defect
15
- - Resolve the base ref once, preferring the remote over local `main`, and reuse it in the guard and the read
16
- - Say when the baseline is unusable and name the narrowed scope, rather than letting a clean summary read as a clean branch
17
- - Flag only what will cause incorrect behavior or break a documented rule
18
- - Apply `canon:review-craft`'s axes and evidence bar, rendered output included, rather than carrying an axis list of its own
19
- - Grade every finding, since the caller gates on the counts rather than on the prose
20
- - Write the report to disk under a branch-derived slug, so what the ship step reads outlives the session
21
-
22
- ## Must not
23
-
24
- - Fix, rewrite, or suggest a refactor outside a finding. Reporting is the whole job.
25
- - Flag style, linter territory, or anything resting on unverified state. A false positive erodes trust in the pass.
26
- - Substitute the whole tree for a missing baseline
27
- - Repeat the full report in chat. The file is the report and a chat copy of it goes stale immediately.
28
- - Stage or commit the receipt, which is gitignored scratch
29
- - Auto-trigger on a vague signal. Require an explicit request or a pipeline invocation.
30
-
31
- ## Guards
32
-
33
- - The staged set, the branch set, and the working set are all empty: stop with a pass
34
- - Baseline unusable: continue on the uncommitted set and lead the report with the warning
35
-
36
- ## Out of scope
37
-
38
- - Reviewing an open pull request, which `review-pr` owns. The split is by vantage: this one reviews local work for the session that wrote it and writes to disk.
39
- - Deciding whether the findings block the ship. This skill grades and the caller gates.
40
- - Fixing anything it found, which `review-address` owns once the work is on a pull request
@@ -1,137 +0,0 @@
1
- ---
2
- name: review-branch
3
- description: Reviews all changes since main for bugs, edge cases, and logic flaws. Reads CLAUDE.md, REQUIREMENTS.md, and ARCHITECTURE.md for context, then applies a structured review to the full diff and outputs a findings report. Coding standards from `.claude/rules/` are auto-loaded by Claude Code. Use when asked to review changes, run a code review, or check the current branch. Do NOT auto-trigger on vague signals like "looks good" or "can you check this". Require an explicit review request or an autoship invocation.
4
- metadata:
5
- family: check
6
- ---
7
-
8
- # Review branch
9
-
10
- ## Guards
11
-
12
- - Resolve the base ref first, per Diff baseline below. If `git diff <base>` and the untracked listing are both empty, stop: `✅ No changes to review.` Those two are the sets Step 2 reads, and the range already carries the staged and the unstaged work the guard used to test on its own. A guard reading bare local `main` stops the skill on `main` before it ever reaches Step 2.
13
-
14
- ## Diff baseline
15
-
16
- Resolve the base ref once and reuse it in the guard and in Step 2:
17
-
18
- ```bash
19
- git merge-base HEAD origin/main 2>/dev/null || git merge-base HEAD main 2>/dev/null
20
- ```
21
-
22
- Prefer `origin/main` over local `main`. On `main` itself the local ref resolves to HEAD, so every committed change drops out of the set and the skill reports a clean branch rather than admitting it cannot see the work.
23
-
24
- The baseline is unusable in one case: no merge base resolves against either ref. Substitute `HEAD` and lead the report with `⚠ Baseline unusable. Reviewed the uncommitted set only.`, so a clean summary is never read as a clean branch. That substitution costs the committed half, because `git diff HEAD` reaches the staged and the unstaged work and nothing behind it.
25
-
26
- The base equalling HEAD is a usable baseline rather than the second case it used to be. It means nothing is committed ahead of the base, which is the ordinary shape on `main` and on a feature branch before its first commit, and `git diff <base>` degenerates there to `git diff HEAD` and reads the branch whole. Warning on it would tell a reader their review was partial when it had covered everything.
27
-
28
- ## Step 1: read context
29
-
30
- Read these in parallel from the project root, skipping any that do not exist:
31
-
32
- - `CLAUDE.md`: project type, conventions, and commands
33
- - `canon/REQUIREMENTS.md`: feature scope and non-goals
34
- - `canon/ARCHITECTURE.md`: technical design decisions
35
-
36
- Coding standards from `.claude/rules/` are auto-loaded by Claude Code. Always-on rules apply every session. Path-scoped rules apply to files matching their `paths:` glob.
37
-
38
- ## Step 2: get the diff and changed files
39
-
40
- Resolve the base ref per Diff baseline above, then run these in parallel from the project root:
41
-
42
- ```bash
43
- git diff <base>
44
- ```
45
-
46
- ```bash
47
- git diff --name-only <base>
48
- ```
49
-
50
- ```bash
51
- git ls-files --others --exclude-standard
52
- ```
53
-
54
- Use `git diff <base>` as the diff scope. It compares the base against the working tree, so the committed, staged, and unstaged halves arrive in one range and no selection between them is made. Take the file list as the name-only output plus the untracked listing, which covers a file git has never tracked and therefore no diff can reach.
55
-
56
- When the baseline is unusable, substitute `HEAD` for `<base>` in both diff commands. Never substitute the whole tree for a missing baseline.
57
-
58
- ## Step 3: read changed files
59
-
60
- Read each file from the changed file list. Skip deleted files. Run reads in parallel.
61
-
62
- ## Step 4: review and persist
63
-
64
- Invoke `canon:review-craft` before reading the diff for findings, whatever the diff's size. It carries what to look for and the evidence bar, rendered output included, and this step carries no axis list of its own to fall back on. Report it rather than proceeding silently when the skill does not resolve.
65
-
66
- Review the full diff and changed file contents for:
67
-
68
- 1. Every axis `canon:review-craft` states, held to its evidence bar
69
- 2. Violations of rules from `.claude/rules/` that apply to the changed files
70
- 3. When the diff touches a file this project ships to a target holding none of its own history: a repository-relative path, a phase label naming a gitignored board, a same-repository pull request or commit reference, or a layout, stack, or config-path claim true of this checkout but stated as if it were general
71
-
72
- Use `CLAUDE.md`, `canon/REQUIREMENTS.md`, `canon/ARCHITECTURE.md`, and the auto-loaded `.claude/rules/` as project context to inform what is intentional vs problematic. Do not fix, rewrite, or suggest refactors outside the scope of a finding.
73
-
74
- ### High-signal filter
75
-
76
- Flag only issues that will definitely cause incorrect behavior or break a documented rule. Skip:
77
-
78
- - Code style or quality concerns
79
- - Subjective suggestions
80
- - Linter territory
81
- - Issues that depend on unverified state
82
-
83
- A comment that makes a false claim about the code is a correctness finding, not a style one. Flag it past the exclusions above and let the severity ladder rank it.
84
-
85
- If uncertain, do not flag. False positives erode trust.
86
-
87
- ### Severity
88
-
89
- - **critical**: blocks the feature. Broken in production if shipped.
90
- - **should-fix**: fix in same session while context is fresh. Not a blocker.
91
- - **minor**: not worth fixing now. Include for visibility.
92
-
93
- ### Report format
94
-
95
- Start with a summary line. Group findings by file. Within each file, list findings sorted by severity (critical first, then should-fix, then minor). Omit files with no findings.
96
-
97
- ```markdown
98
- X critical, Y should-fix, Z minor across N files.
99
-
100
- File: path/to/file.ext
101
-
102
- - **critical**: finding
103
- - **should-fix**: finding
104
- - **minor**: finding
105
-
106
- File: path/to/other.ext
107
-
108
- - **critical**: finding
109
- - **minor**: finding
110
- ```
111
-
112
- If nothing is wrong, use: `✅ No findings.`
113
-
114
- ### Persist
115
-
116
- Derive `<slug>` per `${CLAUDE_SKILL_DIR}/../../standards/slug.md`. Fall back to `latest` on an empty result.
117
-
118
- Write the full report directly to `.canon/review/branch-<slug>.md` at the main worktree root, not the current worktree. Resolve that root the way `session-worktree` does. Create the directory if it does not exist. Always overwrite.
119
-
120
- The report is a main-root write, so it goes out as a heredoc, routed the way `session-worktree` states.
121
-
122
- If there are no findings, write `✅ No findings.` to the file with a timestamp.
123
-
124
- The `.canon/review/` directory is gitignored. Do not stage or commit the file.
125
-
126
- The report is disposable. It outlives the ship chain that reads it, and `context-fold` sweeps it once the branch it names is gone, because the durable record of what a review found is the comment `review-pr` posts on the pull request. A review run on a branch that never opens one leaves nothing behind once that branch is gone, so fold anything worth keeping into the pull request body or a task finding while the report is still on disk.
127
-
128
- ### Chat output
129
-
130
- Output only the summary line and the file path. Do not repeat the full report in chat.
131
-
132
- ```plaintext
133
- X critical, Y should-fix, Z minor across N files.
134
- 📝 Wrote .canon/review/branch-<slug>.md
135
- ```
136
-
137
- If no findings: `✅ No findings. Wrote .canon/review/branch-<slug>.md`
@@ -1,45 +0,0 @@
1
- ---
2
- name: seed-sync
3
- description: Scope boundary for section-granular seed reconciliation against the bulk install and sync commands
4
- ---
5
-
6
- # Seed sync requirement
7
-
8
- ## Gap
9
-
10
- Without this skill, a project that edited a seed has no way to take an upstream change without losing something. No `canon` command touches a seed at all, so the only route is a hand copy that overwrites the file and takes the edits with it, unrecorded. Nothing can deliver one upstream section into a file the project has customized, which is the case a grown project is always in.
11
-
12
- A whole-file diff does not close it either. It cannot separate a section the user rewrote on purpose from a section the toolkit moved on without them, so the choice reaches the user as accept everything or lose everything, and the safe answer is always to skip.
13
-
14
- Naming the bulk command carries a failure of its own. This skill decides which files the bulk sync should take and then hands that command over without stating what it does to them, and the boundary line below names the reference holding that answer where no session reads it. Claude Code loads the skill entry alone, so a sibling named here reaches nobody.
15
-
16
- Two failures belong to the audit rather than to the diff. A decision taken in chat dies with the session, so an audit half applied cannot be resumed and the second run starts over. And a file the toolkit generates rather than ships, such as an index rebuilt from sibling frontmatter, is absent from every source catalog by design, so a naive comparison reports it as a local addition and invites the user to reconcile something nothing owns.
17
-
18
- ## Must
19
-
20
- - Read seed content from the CLI rather than holding a copy, so the audit and the install cannot disagree
21
- - Diff per section, treating the preamble as a section of its own
22
- - Separate a customized section from a stale one by reading the attribution the drift report records, not by how the section looks, and default the customized one to no action
23
- - Fall back to appearance only when attribution is unavailable, and mark every verdict reached that way as unverified
24
- - Leave a file the report proves untouched to the bulk sync that owns it, rather than auditing what carries no edits
25
- - Route to the overwrite contract from the body, at the point the bulk command is named, since the boundary below is read by an author and never by a session
26
- - Persist the proposal and every decision to a review file that stays the source of truth across re-pings
27
- - Apply one section at a time, never by rewriting a file
28
-
29
- ## Must not
30
-
31
- - Propose removing a section present only in the target. Those are the customizations the skill exists to preserve.
32
- - Write a target file before a decision is recorded against the item
33
- - Read an empty decision slot as consent
34
-
35
- ## Guards
36
-
37
- - No `canon` on PATH, or no `.claude/` directory at the project root, stops before any read
38
-
39
- ## Out of scope
40
-
41
- - Bulk install and sync of a whole domain, which `canon <domain> install` and `canon <domain> sync` own and `canon-cli` documents. Reach for this skill when the target holds edits worth keeping, and for those commands when it does not.
42
- - Golden configs, which overwrite by design and carry no section structure to diff
43
- - Governance rules: `canon gov sync`
44
- - First-time scaffold of a project that has installed nothing yet: `target-setup`
45
- - Public `README.md` and `docs/` prose: `docs-sync`