@erclx/canon 4.67.0 → 4.68.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 (147) hide show
  1. package/claude/.claude-plugin/plugin.json +1 -1
  2. package/claude/skills/{claude-autoship → auto-ship}/REQUIREMENT.md +3 -3
  3. package/claude/skills/{claude-autoship → auto-ship}/SKILL.md +36 -36
  4. package/claude/skills/canon-cli/REQUIREMENT.md +2 -2
  5. package/claude/skills/canon-cli/SKILL.md +2 -2
  6. package/claude/skills/canon-feedback-triage/REQUIREMENT.md +1 -1
  7. package/claude/skills/canon-feedback-triage/SKILL.md +3 -3
  8. package/claude/skills/canon-operator/REQUIREMENT.md +1 -1
  9. package/claude/skills/canon-operator/SKILL.md +4 -4
  10. package/claude/skills/canon-rollout/REQUIREMENT.md +6 -6
  11. package/claude/skills/canon-rollout/SKILL.md +7 -7
  12. package/claude/skills/{claude-design-extract → design-extract}/REQUIREMENT.md +4 -4
  13. package/claude/skills/{claude-design-extract → design-extract}/SKILL.md +1 -1
  14. package/claude/skills/{claude-docs → docs-fold}/REQUIREMENT.md +3 -3
  15. package/claude/skills/{claude-docs → docs-fold}/SKILL.md +14 -14
  16. package/claude/skills/{claude-docs → docs-fold}/references/anchor-sweep.md +1 -1
  17. package/claude/skills/{claude-docs → docs-fold}/references/wireframe-sweep.md +1 -1
  18. package/claude/skills/docs-sync/REQUIREMENT.md +3 -3
  19. package/claude/skills/docs-sync/SKILL.md +1 -1
  20. package/claude/skills/draft-and-pick/REQUIREMENT.md +4 -4
  21. package/claude/skills/draft-and-pick/SKILL.md +6 -6
  22. package/claude/skills/draft-context/REQUIREMENT.md +2 -2
  23. package/claude/skills/draft-context/SKILL.md +3 -3
  24. package/claude/skills/{claude-diagram → draft-diagram}/REQUIREMENT.md +4 -4
  25. package/claude/skills/{claude-diagram → draft-diagram}/SKILL.md +3 -3
  26. package/claude/skills/draft-docs/REQUIREMENT.md +1 -1
  27. package/claude/skills/draft-wireframes/REQUIREMENT.md +1 -1
  28. package/claude/skills/draft-wireframes/SKILL.md +2 -2
  29. package/claude/skills/git-followup/REQUIREMENT.md +1 -1
  30. package/claude/skills/git-followup/SKILL.md +1 -1
  31. package/claude/skills/git-pr/SKILL.md +3 -3
  32. package/claude/skills/git-ship/REQUIREMENT.md +2 -2
  33. package/claude/skills/git-ship/SKILL.md +8 -8
  34. package/claude/skills/git-worktree/REQUIREMENT.md +2 -2
  35. package/claude/skills/git-worktree/SKILL.md +3 -3
  36. package/claude/skills/identity/REQUIREMENT.md +2 -2
  37. package/claude/skills/identity/SKILL.md +3 -3
  38. package/claude/skills/{claude-markdown-propose → markdown-propose}/REQUIREMENT.md +8 -8
  39. package/claude/skills/{claude-markdown-propose → markdown-propose}/SKILL.md +5 -5
  40. package/claude/skills/{claude-markdown-propose → markdown-propose}/references/format.md +1 -1
  41. package/claude/skills/{claude-memory-capture → memory-capture}/REQUIREMENT.md +5 -5
  42. package/claude/skills/{claude-memory-capture → memory-capture}/SKILL.md +13 -13
  43. package/claude/skills/{claude-memory-review → memory-review}/REQUIREMENT.md +4 -4
  44. package/claude/skills/{claude-memory-review → memory-review}/SKILL.md +10 -10
  45. package/claude/skills/migration-context/SKILL.md +1 -1
  46. package/claude/skills/migration-standards-drop/REQUIREMENT.md +1 -1
  47. package/claude/skills/migration-superseded/REQUIREMENT.md +1 -1
  48. package/claude/skills/{claude-feature → plan-feature}/REQUIREMENT.md +4 -4
  49. package/claude/skills/{claude-feature → plan-feature}/SKILL.md +4 -4
  50. package/claude/skills/{claude-groundwork → plan-groundwork}/REQUIREMENT.md +5 -5
  51. package/claude/skills/{claude-groundwork → plan-groundwork}/SKILL.md +8 -8
  52. package/claude/skills/{claude-intake → plan-intake}/REQUIREMENT.md +6 -6
  53. package/claude/skills/{claude-intake → plan-intake}/SKILL.md +10 -10
  54. package/claude/skills/{claude-intake-answer → plan-intake-answer}/REQUIREMENT.md +4 -4
  55. package/claude/skills/{claude-intake-answer → plan-intake-answer}/SKILL.md +5 -5
  56. package/claude/skills/{claude-address-review → review-address}/REQUIREMENT.md +5 -5
  57. package/claude/skills/{claude-address-review → review-address}/SKILL.md +6 -6
  58. package/claude/skills/{claude-address-review → review-address}/references/rebase-conflicts.md +1 -1
  59. package/claude/skills/{claude-review → review-branch}/REQUIREMENT.md +4 -4
  60. package/claude/skills/{claude-review → review-branch}/SKILL.md +4 -4
  61. package/claude/skills/{claude-pr-review → review-pr}/REQUIREMENT.md +5 -5
  62. package/claude/skills/{claude-pr-review → review-pr}/SKILL.md +11 -11
  63. package/claude/skills/{claude-orchestrate → role-orchestrator}/REQUIREMENT.md +5 -5
  64. package/claude/skills/{claude-orchestrate → role-orchestrator}/SKILL.md +20 -20
  65. package/claude/skills/{claude-orchestrate → role-orchestrator}/references/orchestrator-dispatch.md +30 -30
  66. package/claude/skills/{claude-orchestrate → role-orchestrator}/references/orchestrator-handoff.md +2 -2
  67. package/claude/skills/{claude-orchestrate → role-orchestrator}/references/orchestrator-parked.md +8 -8
  68. package/claude/skills/{claude-orchestrate → role-orchestrator}/references/orchestrator-poll.md +8 -8
  69. package/claude/skills/{claude-orchestrate → role-orchestrator}/references/orchestrator-resume.md +1 -1
  70. package/claude/skills/{claude-orchestrate → role-orchestrator}/references/orchestrator-sweep.md +1 -1
  71. package/claude/skills/{claude-orchestrate → role-orchestrator}/scripts/poll.sh +6 -6
  72. package/claude/skills/{claude-planner → role-planner}/REQUIREMENT.md +12 -12
  73. package/claude/skills/{claude-planner → role-planner}/SKILL.md +4 -4
  74. package/claude/skills/{claude-worker → role-worker}/REQUIREMENT.md +8 -8
  75. package/claude/skills/{claude-worker → role-worker}/SKILL.md +6 -6
  76. package/claude/skills/{claude-seed-sync → seed-sync}/REQUIREMENT.md +2 -2
  77. package/claude/skills/{claude-seed-sync → seed-sync}/SKILL.md +3 -3
  78. package/claude/skills/session-map/REQUIREMENT.md +2 -2
  79. package/claude/skills/session-map/SKILL.md +2 -2
  80. package/claude/skills/session-resume/REQUIREMENT.md +2 -2
  81. package/claude/skills/session-resume/SKILL.md +2 -2
  82. package/claude/skills/{claude-worktree → session-worktree}/REQUIREMENT.md +3 -3
  83. package/claude/skills/{claude-worktree → session-worktree}/SKILL.md +6 -6
  84. package/claude/skills/setup-plugins/references/plugin-catalog.md +1 -1
  85. package/claude/skills/{claude-standards-audit → standards-audit}/REQUIREMENT.md +2 -2
  86. package/claude/skills/{claude-standards-audit → standards-audit}/SKILL.md +2 -2
  87. package/claude/skills/systematic-debugging/REQUIREMENT.md +1 -1
  88. package/claude/skills/{claude-tasks → task-board}/REQUIREMENT.md +3 -3
  89. package/claude/skills/{claude-tasks → task-board}/SKILL.md +7 -7
  90. package/claude/skills/{claude-teach → teach-workspace}/REQUIREMENT.md +2 -2
  91. package/claude/skills/{claude-teach → teach-workspace}/SKILL.md +4 -4
  92. package/claude/skills/test-first/REQUIREMENT.md +2 -2
  93. package/claude/skills/{claude-ui-test → ui-test}/REQUIREMENT.md +3 -3
  94. package/claude/skills/{claude-ui-test → ui-test}/SKILL.md +3 -3
  95. package/claude/skills/{claude-ux-audit → ux-audit}/REQUIREMENT.md +6 -6
  96. package/claude/skills/{claude-ux-audit → ux-audit}/SKILL.md +5 -5
  97. package/claude/skills/{claude-ux-measure → ux-measure}/REQUIREMENT.md +5 -5
  98. package/claude/skills/{claude-ux-measure → ux-measure}/SKILL.md +5 -5
  99. package/docs/agents/install-and-sync.md +1 -1
  100. package/docs/agents/key-changes.md +3 -3
  101. package/docs/agents/markdown-audit.md +1 -1
  102. package/docs/agents/restated.md +1 -1
  103. package/docs/agents/review-classification.md +1 -1
  104. package/docs/agents/sessions.md +1 -1
  105. package/docs/agents/state-scoped-risk.md +1 -1
  106. package/docs/agents/targets.md +1 -1
  107. package/docs/agents/tasks.md +4 -4
  108. package/docs/agents/teach.md +1 -1
  109. package/docs/target-projects.md +10 -10
  110. package/docs/workflow/ai-workflow.md +84 -84
  111. package/docs/workflow/operating-model.md +17 -17
  112. package/docs/workflow/visual-design-workflow.md +6 -6
  113. package/governance/rules/core/045-memory.md +1 -1
  114. package/governance/rules/core/085-worktrees.md +1 -1
  115. package/package.json +1 -1
  116. package/scripts/core/regen-agent-fixture.sh +1 -1
  117. package/scripts/core/regen-hero.sh +7 -7
  118. package/snippets/claude/decision-memo.md +1 -1
  119. package/src/autoship/paths.ts +1 -1
  120. package/src/claude/cases/all.ts +2 -2
  121. package/src/claude/cases/{claude-workflow.ts → workflow.ts} +33 -33
  122. package/src/commands/sync.ts +3 -3
  123. package/src/design/tokens.ts +1 -1
  124. package/src/gov/restated.ts +2 -2
  125. package/src/markdown/structure.ts +1 -1
  126. package/src/migrate/rename.ts +4 -3
  127. package/src/pr/bijection.ts +1 -1
  128. package/src/pr/paths.ts +2 -2
  129. package/src/shipped/references.ts +1 -1
  130. package/src/sync/seeds-report.ts +1 -1
  131. package/src/targets/pulls.ts +2 -2
  132. package/src/tasks/answers.ts +1 -1
  133. package/src/tasks/archive.ts +4 -4
  134. package/src/tasks/record.ts +2 -2
  135. package/src/tasks/validate.ts +1 -1
  136. package/standards/groundwork.md +1 -1
  137. package/standards/snippets.md +1 -1
  138. package/standards/tasks.md +3 -3
  139. package/standards/teach.md +2 -2
  140. package/tooling/base/configs/.husky/post-merge +3 -3
  141. package/tooling/claude/reference.md +5 -5
  142. package/tooling/claude/seeds/.claude/hooks/pr-create-log.sh +2 -2
  143. /package/claude/skills/{claude-memory-review → memory-review}/references/receipt-format.md +0 -0
  144. /package/claude/skills/{claude-orchestrate → role-orchestrator}/scripts/watch.sh +0 -0
  145. /package/claude/skills/{claude-teach → teach-workspace}/references/lesson-craft.md +0 -0
  146. /package/claude/skills/{claude-teach → teach-workspace}/references/pedagogy.md +0 -0
  147. /package/claude/skills/{claude-teach → teach-workspace}/references/promotion.md +0 -0
@@ -1,8 +1,8 @@
1
1
  import type { SkillCase } from '@/claude/skills-rank'
2
2
 
3
3
  /**
4
- * The `claude-*` skill family: feature planning, review, and the session
5
- * artifacts that coordinate work across sessions.
4
+ * The session workflow skills: feature planning, review, and the artifacts
5
+ * that coordinate work across sessions.
6
6
  *
7
7
  * Every positive is phrased away from its skill's own quoted trigger, since a
8
8
  * verbatim trigger passes by construction and proves nothing about a prompt in
@@ -10,33 +10,33 @@ import type { SkillCase } from '@/claude/skills-rank'
10
10
  * an explicit `Do NOT` boundary against each other, since a boundary in a
11
11
  * body does not reach the field a router reads.
12
12
  */
13
- export const CLAUDE_WORKFLOW_CASES: readonly SkillCase[] = [
13
+ export const WORKFLOW_CASES: readonly SkillCase[] = [
14
14
  {
15
15
  prompt: 'Go fix everything the reviewer flagged on my open PR.',
16
- expect: 'claude-address-review',
16
+ expect: 'review-address',
17
17
  },
18
18
  {
19
19
  prompt:
20
20
  'Run the whole implement, verify, review, and ship pipeline for the approved plan.',
21
- expect: 'claude-autoship',
21
+ expect: 'auto-ship',
22
22
  },
23
23
  {
24
24
  prompt: "Pull together a design system from what's already in the app.",
25
- expect: 'claude-design-extract',
25
+ expect: 'design-extract',
26
26
  },
27
27
  {
28
28
  prompt: 'Draw me a diagram of how the pieces of this system connect.',
29
- expect: 'claude-diagram',
29
+ expect: 'draft-diagram',
30
30
  },
31
31
  {
32
32
  prompt:
33
33
  'Bring the internal planning docs under .claude up to date with what we decided this session.',
34
- expect: 'claude-docs',
34
+ expect: 'docs-fold',
35
35
  },
36
36
  {
37
37
  prompt:
38
38
  'Sketch out a plan for adding this new capability before we touch any code.',
39
- expect: 'claude-feature',
39
+ expect: 'plan-feature',
40
40
  },
41
41
  {
42
42
  prompt:
@@ -46,43 +46,43 @@ export const CLAUDE_WORKFLOW_CASES: readonly SkillCase[] = [
46
46
  {
47
47
  prompt:
48
48
  'We need to measure this properly before committing to an approach.',
49
- expect: 'claude-groundwork',
49
+ expect: 'plan-groundwork',
50
50
  },
51
51
  {
52
52
  prompt: 'Take this pile of raw notes and turn it into filed items.',
53
- expect: 'claude-intake',
53
+ expect: 'plan-intake',
54
54
  },
55
55
  {
56
56
  prompt: 'Walk me through the open intake items so I can decide on each.',
57
- expect: 'claude-intake-answer',
57
+ expect: 'plan-intake-answer',
58
58
  },
59
59
  {
60
60
  prompt:
61
61
  "Draft a diff-based proposal for tightening this passage in the standard, don't just edit it.",
62
- expect: 'claude-markdown-propose',
62
+ expect: 'markdown-propose',
63
63
  },
64
64
  {
65
65
  prompt: 'Pull the durable lessons out of this session before it ends.',
66
- expect: 'claude-memory-capture',
66
+ expect: 'memory-capture',
67
67
  },
68
68
  {
69
69
  prompt:
70
70
  'Go through the memory folder and propose what to do with each entry.',
71
- expect: 'claude-memory-review',
71
+ expect: 'memory-review',
72
72
  },
73
73
  {
74
74
  prompt:
75
75
  'Take on the orchestrator role and coordinate the parallel feature builds.',
76
- expect: 'claude-orchestrate',
76
+ expect: 'role-orchestrator',
77
77
  },
78
78
  {
79
79
  prompt:
80
80
  'I am writing the plan for a row another session will build. What may I write, and where do I read what is already in flight?',
81
- expect: 'claude-planner',
81
+ expect: 'role-planner',
82
82
  },
83
83
  {
84
84
  prompt: 'Post a formal review with findings on that open pull request.',
85
- expect: 'claude-pr-review',
85
+ expect: 'review-pr',
86
86
  },
87
87
  {
88
88
  prompt:
@@ -92,7 +92,7 @@ export const CLAUDE_WORKFLOW_CASES: readonly SkillCase[] = [
92
92
  {
93
93
  prompt:
94
94
  'Look over everything that changed on this branch for bugs and edge cases.',
95
- expect: 'claude-review',
95
+ expect: 'review-branch',
96
96
  },
97
97
  {
98
98
  prompt: 'Draft me a script with beats for a screencast recording.',
@@ -101,7 +101,7 @@ export const CLAUDE_WORKFLOW_CASES: readonly SkillCase[] = [
101
101
  {
102
102
  prompt:
103
103
  "Check whether my installed Claude seed docs have drifted from the toolkit's.",
104
- expect: 'claude-seed-sync',
104
+ expect: 'seed-sync',
105
105
  },
106
106
  {
107
107
  prompt: 'Turn this topic into a slide deck I can render.',
@@ -110,37 +110,37 @@ export const CLAUDE_WORKFLOW_CASES: readonly SkillCase[] = [
110
110
  {
111
111
  prompt:
112
112
  'Check whether the markdown I changed violates any authoring standards.',
113
- expect: 'claude-standards-audit',
113
+ expect: 'standards-audit',
114
114
  },
115
115
  {
116
116
  prompt: 'Open a new entry on the task board for this piece of work.',
117
- expect: 'claude-tasks',
117
+ expect: 'task-board',
118
118
  },
119
119
  {
120
120
  prompt: 'Open a learning workspace so I can study this topic properly.',
121
- expect: 'claude-teach',
121
+ expect: 'teach-workspace',
122
122
  },
123
123
  {
124
124
  prompt: 'Generate the Playwright tests I need after this UI change.',
125
- expect: 'claude-ui-test',
125
+ expect: 'ui-test',
126
126
  },
127
127
  {
128
128
  prompt:
129
129
  'Look over the interface and tell me what feels unfinished or confusing.',
130
- expect: 'claude-ux-audit',
130
+ expect: 'ux-audit',
131
131
  },
132
132
  {
133
133
  prompt: 'Tell me the paint and layout cost of this page right now.',
134
- expect: 'claude-ux-measure',
134
+ expect: 'ux-measure',
135
135
  },
136
136
  {
137
137
  prompt:
138
138
  'I am building this branch for another session. What am I on the hook for, and what is off limits?',
139
- expect: 'claude-worker',
139
+ expect: 'role-worker',
140
140
  },
141
141
  {
142
142
  prompt: 'Get me set up in a fresh Claude Code worktree for this branch.',
143
- expect: 'claude-worktree',
143
+ expect: 'session-worktree',
144
144
  },
145
145
 
146
146
  // Negatives: pairs whose bodies already carry an explicit Do NOT boundary.
@@ -151,23 +151,23 @@ export const CLAUDE_WORKFLOW_CASES: readonly SkillCase[] = [
151
151
  },
152
152
  {
153
153
  prompt: 'Sort through this brain dump and write it up as findings.',
154
- expect: 'claude-intake',
154
+ expect: 'plan-intake',
155
155
  },
156
156
  {
157
157
  prompt:
158
158
  "Go through what's still unanswered in the intake folder and decide.",
159
- expect: 'claude-intake-answer',
159
+ expect: 'plan-intake-answer',
160
160
  },
161
161
  {
162
162
  prompt: 'Check this markdown against the house style rules.',
163
- expect: 'claude-standards-audit',
163
+ expect: 'standards-audit',
164
164
  },
165
165
  {
166
166
  prompt: 'Find the rough, unfinished-feeling spots in this interface.',
167
- expect: 'claude-ux-audit',
167
+ expect: 'ux-audit',
168
168
  },
169
169
  {
170
170
  prompt: 'Tell me the render cost of this page in the browser.',
171
- expect: 'claude-ux-measure',
171
+ expect: 'ux-measure',
172
172
  },
173
173
  ]
@@ -265,7 +265,7 @@ function renderTooling(report: CheckReport): void {
265
265
  /**
266
266
  * Seeds print their own section because no sync command applies them. A `stale`
267
267
  * seed is safe to take whole and a `drifted` one holds edits, which is the split
268
- * `claude-seed-sync` reads to decide what needs a section-level merge.
268
+ * `seed-sync` reads to decide what needs a section-level merge.
269
269
  */
270
270
  function renderSeeds(report: CheckReport): void {
271
271
  const notable = report.seeds.entries.filter(
@@ -283,7 +283,7 @@ function renderSeeds(report: CheckReport): void {
283
283
  logWarn(`${entry.rel} (${entry.state})`)
284
284
  }
285
285
 
286
- logInfo('Run /canon:claude-seed-sync to reconcile these section by section.')
286
+ logInfo('Run /canon:seed-sync to reconcile these section by section.')
287
287
  }
288
288
 
289
289
  /**
@@ -399,7 +399,7 @@ async function runSync(target: string): Promise<number> {
399
399
 
400
400
  if (existsSync(join(resolved, '.claude'))) {
401
401
  process.stderr.write(
402
- `${GREY}Tip: run \`/claude-seed-sync\` to audit seed drift per section, preserving local customizations.${NC}\n`,
402
+ `${GREY}Tip: run \`/seed-sync\` to audit seed drift per section, preserving local customizations.${NC}\n`,
403
403
  )
404
404
  }
405
405
 
@@ -354,7 +354,7 @@ export const TOKENS: DesignTokens = {
354
354
  'Motion is not used. No transition, animation, or keyframe declaration appears on any rendered surface, and the capture pipeline screenshots a static frame.',
355
355
 
356
356
  iconography:
357
- "No icon library is installed. `assets/brand/mark.svg` is the one authored icon, embedded inline in the hero topbar, and the surfaces otherwise draw literal glyph characters: `│ ├ ✓ ! ✗ + - ◆ ◇ ❯` for the terminal framing. The same mark also ships as a favicon on every rendered surface, as three independently-maintained copies that track different accents by design rather than by drift: `regen-hero.sh` derives one from the live SVG colored with whatever `--color-accent` (`#e0724b`) the fetched token CSS carries, `src/design/render.ts` carries the path data as a hardcoded literal colored via `colorValue('light-accent')` (`#a4471c`), since a data URI has no CSS context and that page renders on light chrome, and `claude-teach`'s `SKILL.md` names one in prose colored `rgb(224,114,75)`, the same value as the dark accent written as decimal rather than hex to clear the shipped-references gate's commit-sha check. Unifying the three or repairing the one that looks drifted would break the fit each was chosen for.",
357
+ "No icon library is installed. `assets/brand/mark.svg` is the one authored icon, embedded inline in the hero topbar, and the surfaces otherwise draw literal glyph characters: `│ ├ ✓ ! ✗ + - ◆ ◇ ❯` for the terminal framing. The same mark also ships as a favicon on every rendered surface, as three independently-maintained copies that track different accents by design rather than by drift: `regen-hero.sh` derives one from the live SVG colored with whatever `--color-accent` (`#e0724b`) the fetched token CSS carries, `src/design/render.ts` carries the path data as a hardcoded literal colored via `colorValue('light-accent')` (`#a4471c`), since a data URI has no CSS context and that page renders on light chrome, and `teach-workspace`'s `SKILL.md` names one in prose colored `rgb(224,114,75)`, the same value as the dark accent written as decimal rather than hex to clear the shipped-references gate's commit-sha check. Unifying the three or repairing the one that looks drifted would break the fit each was chosen for.",
358
358
  }
359
359
 
360
360
  /** A role's value, or `undefined` where the record declares no such role. */
@@ -24,7 +24,7 @@ export const RULES_REL = join('governance', 'rules')
24
24
  /**
25
25
  * Path pairs whose duplication is deliberate and already recorded.
26
26
  *
27
- * The seed is authored from the always-loaded file and `claude-seed-sync`
27
+ * The seed is authored from the always-loaded file and `seed-sync`
28
28
  * exists to reconcile the two, so a bullet appearing in both is the design
29
29
  * rather than a defect. Excluding by pair rather than by content is what the
30
30
  * plan settled on: the duplication is a location fact this repository already
@@ -574,7 +574,7 @@ function authorityFor(
574
574
  if (candidate.kind === 'seed') {
575
575
  return {
576
576
  authority: 'claude-md',
577
- reason: `${INSTRUCTIONS_REL} is authored first and the seed carries it to a target, so an edit starts there and reaches the seed through claude-seed-sync`,
577
+ reason: `${INSTRUCTIONS_REL} is authored first and the seed carries it to a target, so an edit starts there and reaches the seed through seed-sync`,
578
578
  }
579
579
  }
580
580
 
@@ -26,7 +26,7 @@ const HEADING = /^#{1,6}\s/
26
26
  * run and a false one shortens every run around it until the measure stops
27
27
  * reporting, which is the dearer of the two.
28
28
  *
29
- * A colon ends most markers and not all of them. `claude-pr-review` writes
29
+ * A colon ends most markers and not all of them. `review-pr` writes
30
30
  * three colon-less ones into every body it posts and a bold path heading for
31
31
  * each file it reviews, so requiring the colon held a real seam out. Two
32
32
  * signals stand in where the colon is absent, because the shape a marker has to
@@ -46,8 +46,9 @@ export interface RenameRuleSpec {
46
46
  * A rename whose tokens are whole names wants this, and one whose tokens are
47
47
  * word stems cannot have it. `aitk` is a stem that legitimately carries a
48
48
  * suffix, as in `aitk-allow-superseded`, so requiring a boundary there would
49
- * leave every hyphenated form behind. A skill name is not a stem, and
50
- * `claude-worktree` inside `claude-worktrees` is a different subject: the
49
+ * leave every hyphenated form behind. A skill name is not a stem, and the
50
+ * spelling below is the pre-rename one on purpose (canon-keep-retired):
51
+ * `claude-worktree` inside `claude-worktrees` is a different subject, the
51
52
  * wiki page about the harness feature, which the rename must not move.
52
53
  */
53
54
  readonly wholeToken?: boolean
@@ -88,7 +89,7 @@ const NEVER_MATCHES = '(?!)'
88
89
  *
89
90
  * A plain word boundary rejects a following letter and accepts a following
90
91
  * hyphen, since `\b` reads a hyphen as the end of a word. That leaves
91
- * `claude-intake` matching inside `claude-intake-answer`, with the ordering of
92
+ * `plan-intake` matching inside `plan-intake-answer`, with the ordering of
92
93
  * the alternation the only thing standing between them. Naming the characters
93
94
  * that continue an identifier holds on both, so the ordering and the boundary
94
95
  * each cover what the other could miss, and a slash, a dot, or a backtick
@@ -99,7 +99,7 @@ function owesNoBullet(path: string): boolean {
99
99
  * names.
100
100
  *
101
101
  * An unanchored claim matches on a segment-anchored suffix, which is what lets
102
- * `claude-worker/SKILL.md` credit `claude/skills/claude-worker/SKILL.md`. That
102
+ * `role-worker/SKILL.md` credit `claude/skills/role-worker/SKILL.md`. That
103
103
  * asymmetry is deliberate: a partial spelling can confirm a changed file was
104
104
  * named and never accuse one of being absent, because nothing here separates a
105
105
  * path written short from a path written wrong.
package/src/pr/paths.ts CHANGED
@@ -20,7 +20,7 @@ export interface PathClaim {
20
20
  * True when the first segment names an entry the tree actually holds.
21
21
  *
22
22
  * An unanchored claim is a path written partially, such as
23
- * `claude-worker/SKILL.md` for a file under `claude/skills/`. It can confirm
23
+ * `role-worker/SKILL.md` for a file under `claude/skills/`. It can confirm
24
24
  * that a changed file was named and can never accuse one of being absent,
25
25
  * because the comparison has no way to tell a partial spelling from a
26
26
  * genuinely wrong one.
@@ -145,7 +145,7 @@ function maskSpans(text: string): string {
145
145
  * that came out. A path past the comma was left out of the claim set entirely
146
146
  * and fell to the unnamed direction, accepted here on the ground that the
147
147
  * direction reports without grading. It graded anyway, one consumer removed:
148
- * `claude-pr-review` reads `unnamed` as a question to put to the branch author,
148
+ * `review-pr` reads `unnamed` as a question to put to the branch author,
149
149
  * and on 2026-09-01 the question went to three pull requests over bullets that
150
150
  * had named the files all along, with `#1329` gaining bullets it did not need.
151
151
  *
@@ -61,7 +61,7 @@ export const REFERENCE_MARKER = 'canon-allow-reference'
61
61
  * The leading boundary is what excludes the repair form by construction rather
62
62
  * than by exemption, and that is load bearing. A lookbehind rejecting a word
63
63
  * character before `#` never matches `erclx/canon#1299`, so a qualified
64
- * reference passes with no marker, and `claude/skills/claude-worktree/SKILL.md`
64
+ * reference passes with no marker, and `claude/skills/session-worktree/SKILL.md`
65
65
  * already ships `anthropics/claude-code#58345` in exactly that form.
66
66
  *
67
67
  * The trailing boundary is what the first shape of this pattern lacked, and it
@@ -34,7 +34,7 @@ export interface SeedsReport {
34
34
  * Classifies every seed the toolkit ships against the target's copy, and never
35
35
  * returns a change. Seeds are copy-once files a project is expected to edit, so
36
36
  * the engine's copy path would overwrite `CLAUDE.md` wholesale. Reporting alone
37
- * is what lets `claude-seed-sync` merge one section at a time instead.
37
+ * is what lets `seed-sync` merge one section at a time instead.
38
38
  *
39
39
  * Attribution reuses the history reader rather than the engine's own recovery
40
40
  * pass, which is private and takes a `SyncAdapter` seeds have no way to supply.
@@ -7,8 +7,8 @@ const GH_TIMEOUT_MS = 30_000
7
7
  /**
8
8
  * The two headings a review pass posts under.
9
9
  *
10
- * Owned by `claude-pr-review`, which states the full set once, and pinned here
11
- * the way `claude-orchestrate/scripts/poll.sh` pins them. All three surfaces
10
+ * Owned by `review-pr`, which states the full set once, and pinned here
11
+ * the way `role-orchestrator/scripts/poll.sh` pins them. All three surfaces
12
12
  * ship separately, so a heading added in that skill goes stale here with
13
13
  * nothing comparing the copies.
14
14
  */
@@ -186,7 +186,7 @@ export function resolvePlanReference(
186
186
  }
187
187
 
188
188
  // An archived plan answers every question and would report as launchable, so
189
- // the name would clear a dispatch that `claude-autoship` Step 1 then refuses
189
+ // the name would clear a dispatch that `auto-ship` Step 1 then refuses
190
190
  // as already-shipped work. Catching it here is a step earlier than the worker.
191
191
  // Both roots, for the reason `resolveLivePlan` carries: the reference is a
192
192
  // string a caller wrote, and one spelling the root this tree has since left is
@@ -269,7 +269,7 @@ function isRowFor(line: string, target: string): boolean {
269
269
 
270
270
  /**
271
271
  * Resolves the `Plan:` target against the board and against the project root
272
- * both, which is how `claude-docs` reads the same line. It accepts `../plans/x.md`
272
+ * both, which is how `docs-fold` reads the same line. It accepts `../plans/x.md`
273
273
  * and `.canon/plans/x.md` as one file, so a gate reading only the first form
274
274
  * would pass the second and strand the plan this exists to protect.
275
275
  *
@@ -323,7 +323,7 @@ function atOneRoot(path: string, plans: string[], root: string): string {
323
323
 
324
324
  /**
325
325
  * Names the other live tasks whose `Plan:` line lands on the same file. This is
326
- * the rule `claude-docs` applies before it archives a plan, held here so one
326
+ * the rule `docs-fold` applies before it archives a plan, held here so one
327
327
  * question has one implementation: a plan another live task still cites is a
328
328
  * plan the sweep is correct to leave, and a guard that read the folder instead
329
329
  * refused every task sharing one plan and deadlocked the board against the
@@ -380,7 +380,7 @@ export type CitationOutcome = PlanCitations | ArchiveRefused
380
380
 
381
381
  /**
382
382
  * Answers where one task's plan sits and who else holds it, which is the whole
383
- * of the last-live-citation rule. `claude-docs` reads this rather than scanning
383
+ * of the last-live-citation rule. `docs-fold` reads this rather than scanning
384
384
  * the board itself, so the sweep that moves a plan and the gate that refuses a
385
385
  * task archive cannot drift into disagreeing about which plan is free.
386
386
  *
@@ -564,7 +564,7 @@ async function resolveStem(
564
564
 
565
565
  /**
566
566
  * Archives one task as a single unit: the move, the ordering-row removal, and
567
- * the index regen. The hook and `claude-tasks` both call this, so every gate
567
+ * the index regen. The hook and `task-board` both call this, so every gate
568
568
  * refuses rather than reports. A caller with nobody watching cannot act on a
569
569
  * warning, and two callers gating differently is the drift this exists to stop.
570
570
  */
@@ -311,7 +311,7 @@ export async function recordPullRequest(
311
311
 
312
312
  /**
313
313
  * Records a plan's path on the task it belongs to, as the task's `Plan:` line.
314
- * `claude-feature` runs this right after the plan file lands, resolving the
314
+ * `plan-feature` runs this right after the plan file lands, resolving the
315
315
  * reference the same two ways `canon tasks plan-answers` does, through
316
316
  * `planCandidates`, so a bare slug and a board-relative path both resolve.
317
317
  *
@@ -346,7 +346,7 @@ export async function recordPlan(
346
346
  }
347
347
 
348
348
  /**
349
- * Marks the named outcomes `[x]` in place. `claude-docs` runs this against a
349
+ * Marks the named outcomes `[x]` in place. `docs-fold` runs this against a
350
350
  * board it can read and cannot edit from a linked worktree, and the positions
351
351
  * come from the read it already made.
352
352
  */
@@ -557,7 +557,7 @@ async function listTaskStems(dir: string): Promise<string[]> {
557
557
 
558
558
  /**
559
559
  * Resolves a pointer against the board and against the project root both, the
560
- * way `claude-docs` reads the same line. A fragment is dropped first, since an
560
+ * way `docs-fold` reads the same line. A fragment is dropped first, since an
561
561
  * anchor is part of the link and never part of the path.
562
562
  */
563
563
  function resolves(target: string, dir: string, root: string): boolean {
@@ -156,7 +156,7 @@ A lean is weaker than the suggestion a plan file carries. It records the current
156
156
  ## Conventions
157
157
 
158
158
  - State a number with what it settles. The strongest sections are the ones where a measurement answers a named question and says so.
159
- - Route a finding that would change an existing standard or rule through `claude-intake`. Only a demonstrated failure changes one.
159
+ - Route a finding that would change an existing standard or rule through `plan-intake`. Only a demonstrated failure changes one.
160
160
  - Let the file count follow the number of genuinely separable questions, not the importance of the topic. A large topic with one question is a small folder.
161
161
 
162
162
  ## Anti-patterns
@@ -38,7 +38,7 @@ Overlapping a skill that does the same job is not disqualifying on its own. A sn
38
38
  ## Use patterns
39
39
 
40
40
  - Run-as-is: invoke and send immediately. The snippet is self-contained and needs no extra context.
41
- - Invoke-then-add-context: invoke the snippet, then append specifics in the same message (e.g. invoke `claude-feature`, then add the feature name or extra constraints)
41
+ - Invoke-then-add-context: invoke the snippet, then append specifics in the same message (e.g. invoke `plan-feature`, then add the feature name or extra constraints)
42
42
  - Invoke-on-history: invoke after a discussion. The snippet uses prior conversation as implicit context with no additional input needed (e.g. invoke `claude-figma` after discussing a design).
43
43
 
44
44
  ## Authoring
@@ -47,7 +47,7 @@ The handoff takes one file per session for the reason a task does. A single shar
47
47
 
48
48
  The catalog is the one reader that filters nothing, so it carries a row per sibling alongside the tasks. That is what a folder catalog is for, and the handoffs are what make it worth stating: a board accumulates one row per session that ever wrote one, with nothing pruning them. Anything reading the catalog as the backlog therefore does its own filtering, and a reader that takes every row as a task reports the handoffs as queued work.
49
49
 
50
- The `claude-tasks` skill creates and archives task files, and the archive carries the task's plan with it. `claude-docs` marks outcomes `[x]` in an existing file. Neither does the other's job.
50
+ The `task-board` skill creates and archives task files, and the archive carries the task's plan with it. `docs-fold` marks outcomes `[x]` in an existing file. Neither does the other's job.
51
51
 
52
52
  ## Ordering
53
53
 
@@ -219,9 +219,9 @@ A project that archived plans before the folder nested under `.canon/plans/` hol
219
219
 
220
220
  One plan per task. A plan cited by two tasks is a misfile rather than a shape to design for, which is why the sweep counts citations before archiving: the count is a guard against the misfile stranding a pointer, not support for the shape.
221
221
 
222
- `canon tasks plan-link <task> <plan>` writes or corrects the `Plan:` line, mirroring how `canon tasks pull-request` writes its own. `claude-feature` calls it right after the plan file lands, when an existing task names the feature, so the line is a mechanical write rather than hand-edited markdown.
222
+ `canon tasks plan-link <task> <plan>` writes or corrects the `Plan:` line, mirroring how `canon tasks pull-request` writes its own. `plan-feature` calls it right after the plan file lands, when an existing task names the feature, so the line is a mechanical write rather than hand-edited markdown.
223
223
 
224
- `Groundwork:` points at `../groundwork/<slug>/`, the folder `claude-groundwork` fills. It names the surface it points at the way `Plan:` does. Use this key alone. `Research record` and `Decision record` are earlier spellings of the same thing and both convert to it.
224
+ `Groundwork:` points at `../groundwork/<slug>/`, the folder `plan-groundwork` fills. It names the surface it points at the way `Plan:` does. Use this key alone. `Research record` and `Decision record` are earlier spellings of the same thing and both convert to it.
225
225
 
226
226
  `Intake:` points at `../intake/<slug>/`, the folder an intake pass fills. Use it rather than `Groundwork:`, because a groundwork track measures one question in depth while an intake dispositions many across a tree, and one key covering both loses which kind of pass produced the task. The line names the folder rather than an item inside it. A task routinely promotes several items at once, so an anchored line would name one and drop the rest, and the item numbers belong in that task's `## Findings`.
227
227
 
@@ -15,7 +15,7 @@ Governs a learning workspace under `.canon/teach/<nn>-<topic>/`: folder layout,
15
15
 
16
16
  Does not govern:
17
17
 
18
- - The frontmatter, entry shape, and ordering of the glossary the workspace holds: the `claude-teach` skill, which carries that reference
18
+ - The frontmatter, entry shape, and ordering of the glossary the workspace holds: the `teach-workspace` skill, which carries that reference
19
19
  - What a lesson teaches, how it sequences difficulty, and what makes one worth returning to, which belong to the surface driving the workspace
20
20
  - Where a durable page goes once it leaves the workspace, which belongs to the routing test the destination surface states
21
21
  - One question measured in depth before anyone can plan against it: `groundwork.md`
@@ -113,7 +113,7 @@ Take the date and the rung from what the surface driving the workspace reports r
113
113
 
114
114
  ## GLOSSARY.md
115
115
 
116
- Required in every workspace, holding one entry per term the subject defines. The glossary reference the `canon:claude-teach` skill carries fixes what an entry looks like, how the file orders and groups them, and which terms it carries, so this standard states only that the file exists and sits at the workspace root. That reference ships with the plugin rather than installing here, because a promoted glossary keeps its shape wherever it lands and no project folder covers every destination. Say so and stop rather than working the shape from memory when the project has no plugin to read it from.
116
+ Required in every workspace, holding one entry per term the subject defines. The glossary reference the `canon:teach-workspace` skill carries fixes what an entry looks like, how the file orders and groups them, and which terms it carries, so this standard states only that the file exists and sits at the workspace root. That reference ships with the plugin rather than installing here, because a promoted glossary keeps its shape wherever it lands and no project folder covers every destination. Say so and stop rather than working the shape from memory when the project has no plugin to read it from.
117
117
 
118
118
  Name the lesson or reference page a term first appears in as that reference requires. A workspace is the case it was written for, so a glossary here has a first appearance to name.
119
119
 
@@ -7,10 +7,10 @@
7
7
  # to hand a worker. This is the only event that lands after a merge.
8
8
  #
9
9
  # Candidates rather than closed tasks, because an all-`[x]` board entry does not
10
- # mean the work merged. `claude-docs` marks outcomes on the branch as step 1 of
10
+ # mean the work merged. `docs-fold` marks outcomes on the branch as step 1 of
11
11
  # the ship chain, so a task can read closed while its pull request is still open
12
12
  # or already abandoned. The board is gitignored and an archived task has nothing
13
- # to recover it, so `claude-tasks` confirms the work is on `main` before moving
13
+ # to recover it, so `task-board` confirms the work is on `main` before moving
14
14
  # anything and this output says so rather than implying the check is done.
15
15
  #
16
16
  # It announces and never moves a file. The board is gitignored, so a shell-side
@@ -58,4 +58,4 @@ done
58
58
 
59
59
  printf '\n📋 %s archive candidate(s) on the board:\n%s\n' "$count" "$closed"
60
60
  printf 'Outcomes are marked on the branch, so each still needs its work confirmed\n'
61
- printf 'on main. Run /claude-tasks, which checks that and sweeps the plan first.\n\n'
61
+ printf 'on main. Run /task-board, which checks that and sweeps the plan first.\n\n'
@@ -20,8 +20,8 @@ The claude stack installs the `.claude/` workflow directory into a project. Stat
20
20
  .canon/
21
21
  ├── tasks/ ← seeded. One file per task plus a generated index.md, local scratch only. `archive/` holds the tasks that shipped.
22
22
  ├── diagrams/ ← seeded. Per-kind Mermaid views. `index.md` is the discovery anchor. `<kind>.md` files hold one diagram each, grouped by the `category` frontmatter field.
23
- ├── plans/ ← execution detail for multi-step tasks. `feature-*.md` entries swept by claude-docs into `archive/`.
24
- ├── review/ ← one subfolder per producer. `branch/` for claude-review, `feedback/` for canon feedback, `memory/` for claude-memory-review with its own `archive/`, `design/` for canon design render.
23
+ ├── plans/ ← execution detail for multi-step tasks. `feature-*.md` entries swept by docs-fold into `archive/`.
24
+ ├── review/ ← one subfolder per producer. `branch/` for review-branch, `feedback/` for canon feedback, `memory/` for memory-review with its own `archive/`, `design/` for canon design render.
25
25
  ├── tmp/ ← ephemeral scratch space, safe to delete without loss
26
26
  └── memory/ ← session facts no context entry owns. `index.md` regenerated by a hook.
27
27
  ```
@@ -48,7 +48,7 @@ Convert by hand, once per project:
48
48
 
49
49
  ## Upgrading a hand-appended memory index
50
50
 
51
- A project installed before the memory folder gained a generated index still holds `.canon/memory/MEMORY.md`, and its entries still carry `name` and `type` frontmatter. Nothing migrates it. `claude-memory-capture` stops appending rows once the new seed lands, so the old file freezes at whatever it held while the folder keeps growing past it.
51
+ A project installed before the memory folder gained a generated index still holds `.canon/memory/MEMORY.md`, and its entries still carry `name` and `type` frontmatter. Nothing migrates it. `memory-capture` stops appending rows once the new seed lands, so the old file freezes at whatever it held while the folder keeps growing past it.
52
52
 
53
53
  Convert by hand, once per project:
54
54
 
@@ -58,7 +58,7 @@ Convert by hand, once per project:
58
58
 
59
59
  ## Upgrading from a single-file diagram set
60
60
 
61
- A project installed before the diagram surface became a folder still holds `.claude/DIAGRAMS.md`. Unlike the board, this one migrates itself. The `claude-diagram` skill reads the flat file when `.canon/diagrams/` holds no entries, splits it by kind into the folder, and reports what it wrote. The old file stays on disk so the split can be compared against its source, and deleting it is a manual step once that check passes.
61
+ A project installed before the diagram surface became a folder still holds `.claude/DIAGRAMS.md`. Unlike the board, this one migrates itself. The `draft-diagram` skill reads the flat file when `.canon/diagrams/` holds no entries, splits it by kind into the folder, and reports what it wrote. The old file stays on disk so the split can be compared against its source, and deleting it is a manual step once that check passes.
62
62
 
63
63
  ## Gitignore
64
64
 
@@ -79,7 +79,7 @@ The first entry covers the whole record root, so a record folder added later nee
79
79
  - Ships as a seed with placeholder project name, description, and key paths. Fill these in after init.
80
80
  - Section layout: `Context`, `Indexes`, `Markdown`, `Key paths`, `Spelling`, `Snippets`, `Tasks`, `Memory`. Each section groups rules that share a surface so skills can detect, extend, or skip by heading.
81
81
  - The memory rules favor signal over volume. Saving only after a second occurrence or an explicit user correction keeps entries focused on patterns worth preventing, not first-occurrence slips. The 3-line cap stops the built-in auto-memory from drifting into narrative writeups that bury the rule underneath the recovery story.
82
- - The `Context` section points at `.claude/` state docs one line. `claude-feature` does the parallel read when invoked. The seed intentionally does not re-list every file.
82
+ - The `Context` section points at `.claude/` state docs one line. `plan-feature` does the parallel read when invoked. The seed intentionally does not re-list every file.
83
83
 
84
84
  ## Seed docs
85
85
 
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env bash
2
2
 
3
3
  # Reminds a worker session of the pull-request announcement it owes and logs
4
- # the creation as a denominator for the miss rate `claude-worker` cannot
4
+ # the creation as a denominator for the miss rate `role-worker` cannot
5
5
  # measure on its own. Follows path-form.sh's precedent: a PostToolUse hook
6
6
  # returning hookSpecificOutput.additionalContext is the shipped route back
7
7
  # into a session's own turn.
@@ -51,5 +51,5 @@ mkdir -p "$log_dir"
51
51
  session=$(printf '%s' "$input" | jq -r '.session_id // "unknown"')
52
52
  printf -- '- %s session=%s pr=%s\n' "$(date -u +%Y-%m-%dT%H:%M:%SZ)" "$session" "$url" >>"$log_dir/log.md"
53
53
 
54
- msg="Pull request $url just opened. If this session holds a worker's channel obligation, announce it to the controller now, per claude-worker."
54
+ msg="Pull request $url just opened. If this session holds a worker's channel obligation, announce it to the controller now, per role-worker."
55
55
  jq -nc --arg msg "$msg" '{hookSpecificOutput:{hookEventName:"PostToolUse",additionalContext:$msg}}'