@erclx/canon 5.45.0 → 5.47.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.
- package/claude/.claude-plugin/plugin.json +1 -1
- package/claude/skills/api-design/REQUIREMENT.md +15 -31
- package/claude/skills/auto-ship/REQUIREMENT.md +14 -25
- package/claude/skills/backlog-triage/REQUIREMENT.md +12 -23
- package/claude/skills/build-in-slices/REQUIREMENT.md +15 -25
- package/claude/skills/canon-cli/REQUIREMENT.md +15 -27
- package/claude/skills/canon-feedback/REQUIREMENT.md +10 -18
- package/claude/skills/canon-feedback-triage/REQUIREMENT.md +10 -15
- package/claude/skills/canvas-board/REQUIREMENT.md +14 -28
- package/claude/skills/ci-workflow/REQUIREMENT.md +12 -21
- package/claude/skills/code-craft/REQUIREMENT.md +14 -28
- package/claude/skills/codebase-layout/REQUIREMENT.md +14 -31
- package/claude/skills/context-fold/REQUIREMENT.md +15 -39
- package/claude/skills/context-fold/references/context.md +3 -3
- package/claude/skills/create-rule/REQUIREMENT.md +10 -24
- package/claude/skills/create-rule/SKILL.md +3 -0
- package/claude/skills/create-skill/REQUIREMENT.md +10 -21
- package/claude/skills/decision-escalate/REQUIREMENT.md +12 -24
- package/claude/skills/deploy-app/REQUIREMENT.md +12 -22
- package/claude/skills/deprecation-migration/REQUIREMENT.md +14 -42
- package/claude/skills/design-identity/REQUIREMENT.md +14 -20
- package/claude/skills/design-taste/REQUIREMENT.md +16 -57
- package/claude/skills/docs-sync/REQUIREMENT.md +14 -23
- package/claude/skills/document-health/REQUIREMENT.md +15 -29
- package/claude/skills/document-health/SKILL.md +2 -2
- package/claude/skills/document-repair/REQUIREMENT.md +32 -0
- package/claude/skills/document-repair/SKILL.md +76 -0
- package/claude/skills/document-repair/references/batches.md +44 -0
- package/claude/skills/draft-and-pick/REQUIREMENT.md +4 -3
- package/claude/skills/draft-doc/REQUIREMENT.md +4 -3
- package/claude/skills/draft-figure/REQUIREMENT.md +4 -3
- package/claude/skills/draft-identity/REQUIREMENT.md +4 -3
- package/claude/skills/draft-ready/REQUIREMENT.md +4 -3
- package/claude/skills/draft-screencast/REQUIREMENT.md +4 -3
- package/claude/skills/draft-slides/REQUIREMENT.md +4 -3
- package/claude/skills/draw-figure/REQUIREMENT.md +15 -39
- package/claude/skills/git-branch/REQUIREMENT.md +12 -26
- package/claude/skills/git-commit/REQUIREMENT.md +11 -15
- package/claude/skills/git-followup/REQUIREMENT.md +11 -22
- package/claude/skills/git-followup/SKILL.md +1 -0
- package/claude/skills/git-issue/REQUIREMENT.md +9 -15
- package/claude/skills/git-pr/REQUIREMENT.md +13 -32
- package/claude/skills/git-pr/SKILL.md +11 -2
- package/claude/skills/git-pr/references/closing-issues.md +47 -0
- package/claude/skills/git-pr/references/pr.md +62 -7
- package/claude/skills/git-ship/REQUIREMENT.md +13 -26
- package/claude/skills/git-split/REQUIREMENT.md +10 -17
- package/claude/skills/git-stage/REQUIREMENT.md +12 -18
- package/claude/skills/git-worktree/REQUIREMENT.md +15 -19
- package/claude/skills/make-deck/REQUIREMENT.md +13 -21
- package/claude/skills/markdown-craft/REQUIREMENT.md +9 -3
- package/claude/skills/plan-feature/REQUIREMENT.md +15 -24
- package/claude/skills/plan-groundwork/REQUIREMENT.md +12 -28
- package/claude/skills/plan-groundwork/SKILL.md +5 -2
- package/claude/skills/plan-groundwork/references/output.md +47 -1
- package/claude/skills/plan-intake/REQUIREMENT.md +11 -26
- package/claude/skills/plan-intake/references/intake.md +2 -2
- package/claude/skills/plan-intake-answer/REQUIREMENT.md +14 -29
- package/claude/skills/plan-intake-answer/SKILL.md +7 -1
- package/claude/skills/plan-ready/REQUIREMENT.md +17 -36
- package/claude/skills/pr-evidence/REQUIREMENT.md +11 -17
- package/claude/skills/read-frames/REQUIREMENT.md +3 -8
- package/claude/skills/record-screencast/REQUIREMENT.md +14 -17
- package/claude/skills/review-address/REQUIREMENT.md +14 -38
- package/claude/skills/review-address/SKILL.md +18 -6
- package/claude/skills/review-address/references/post-review-findings.md +4 -1
- package/claude/skills/review-address/references/rebase-only.md +14 -2
- package/claude/skills/review-craft/REQUIREMENT.md +14 -32
- package/claude/skills/review-pr/REQUIREMENT.md +15 -34
- package/claude/skills/review-pr/SKILL.md +9 -2
- package/claude/skills/review-pr/references/body-variants.md +29 -8
- package/claude/skills/review-pr/references/post.md +29 -10
- package/claude/skills/review-ui/REQUIREMENT.md +14 -39
- package/claude/skills/review-ui/SKILL.md +1 -0
- package/claude/skills/review-ui/references/post.md +2 -0
- package/claude/skills/review-ui/references/tick.md +3 -0
- package/claude/skills/role-orchestrator/REQUIREMENT.md +2 -2
- package/claude/skills/role-orchestrator/references/orchestrator-refill.md +5 -0
- package/claude/skills/role-orchestrator/references/orchestrator-review-dispatch.md +9 -0
- package/claude/skills/role-reviewer/REQUIREMENT.md +15 -65
- package/claude/skills/role-reviewer/SKILL.md +8 -1
- package/claude/skills/role-worker/REQUIREMENT.md +2 -2
- package/claude/skills/role-worker/SKILL.md +3 -0
- package/claude/skills/script-screencast/REQUIREMENT.md +10 -16
- package/claude/skills/search-craft/REQUIREMENT.md +12 -36
- package/claude/skills/search-craft/SKILL.md +1 -1
- package/claude/skills/search-craft/references/adopted.md +2 -2
- package/claude/skills/session-compact/REQUIREMENT.md +13 -23
- package/claude/skills/session-map/REQUIREMENT.md +13 -29
- package/claude/skills/session-relay/REQUIREMENT.md +14 -58
- package/claude/skills/session-relay/SKILL.md +6 -0
- package/claude/skills/session-resume/REQUIREMENT.md +13 -27
- package/claude/skills/session-worktree/REQUIREMENT.md +14 -43
- package/claude/skills/systematic-debugging/REQUIREMENT.md +13 -34
- package/claude/skills/target-check/REQUIREMENT.md +16 -23
- package/claude/skills/target-setup/REQUIREMENT.md +11 -34
- package/claude/skills/task-board/REQUIREMENT.md +13 -22
- package/claude/skills/task-board/SKILL.md +7 -0
- package/claude/skills/task-board/references/decline.md +2 -2
- package/claude/skills/task-board/references/tasks.md +1 -1
- package/claude/skills/task-complete/REQUIREMENT.md +11 -24
- package/claude/skills/task-complete/references/archive.md +4 -2
- package/claude/skills/teach-workspace/REQUIREMENT.md +14 -45
- package/claude/skills/test-craft/REQUIREMENT.md +15 -46
- package/claude/skills/test-first/REQUIREMENT.md +14 -20
- package/claude/skills/ui-checklist/REQUIREMENT.md +14 -29
- package/claude/skills/ui-checklist/SKILL.md +3 -3
- package/claude/skills/ux-audit/REQUIREMENT.md +3 -7
- package/claude/skills/ux-measure/REQUIREMENT.md +14 -28
- package/claude/skills/video-craft/REQUIREMENT.md +14 -27
- package/claude/skills/write-doc/REQUIREMENT.md +14 -24
- package/claude/skills/write-human/REQUIREMENT.md +15 -27
- package/claude/skills/youtube-transcripts/REQUIREMENT.md +9 -15
- package/docs/agents/context-audit.md +19 -12
- package/docs/agents/markdown-audit.md +15 -10
- package/docs/target/projects.md +2 -0
- package/docs/workflow/skill-map.md +6 -5
- package/docs/workflow/zshrc-aliases.md +3 -0
- package/governance/renames.toml +0 -2
- package/governance/rules/claude/output.md +5 -1
- package/governance/rules/code/routing.md +5 -1
- package/governance/stacks/base.toml +0 -1
- package/package.json +1 -1
- package/scripts/core/bootstrap.sh +1 -0
- package/src/claude/cases/workflow.ts +12 -0
- package/src/commands/context.ts +57 -3
- package/src/commands/labels.ts +149 -4
- package/src/commands/markdown.ts +188 -21
- package/src/commands/pr.ts +113 -4
- package/src/commands/sessions.ts +58 -11
- package/src/commands/tasks.ts +182 -0
- package/src/commands/worktrees.ts +2 -0
- package/src/context/coverage.ts +210 -0
- package/src/context/gate.ts +12 -3
- package/src/gate/stages.ts +1 -1
- package/src/init/steps.ts +45 -0
- package/src/intake/items.ts +14 -0
- package/src/labels/closing.ts +46 -0
- package/src/labels/density.ts +363 -0
- package/src/markdown/gated.ts +250 -0
- package/src/markdown/scope.ts +115 -2
- package/src/migrate/rename.ts +6 -0
- package/src/pr/evidence.ts +1 -1
- package/src/pr/rest.ts +2 -0
- package/src/pr/tick.ts +89 -0
- package/src/sessions/claim.ts +7 -0
- package/src/sessions/live.ts +79 -6
- package/src/sessions/registry.ts +11 -0
- package/src/sessions/resolve.ts +85 -7
- package/src/tasks/archive.ts +15 -4
- package/src/tasks/closes.ts +136 -0
- package/src/tasks/record.ts +1 -1
- package/src/worktrees/reclaim.ts +16 -1
- package/tooling/base/configs/scripts/verify.ts +1 -1
- package/tooling/base/seeds/.github/pull_request_template.md +1 -1
- package/tooling/claude/seeds/.claude/hooks/board-validate.sh +1 -1
- package/tooling/claude/seeds/CLAUDE.md +2 -2
- package/governance/rules/canon/task-scope.md +0 -12
|
@@ -52,15 +52,30 @@ A body describes the new behavior and nothing the diff or the commits already sa
|
|
|
52
52
|
|
|
53
53
|
## Sections
|
|
54
54
|
|
|
55
|
-
- `## Summary`:
|
|
56
|
-
- `## Key changes`:
|
|
55
|
+
- `## Summary`: one paragraph following `<Action Verb> <Direct Object> to <Result>`, then the closing lines
|
|
56
|
+
- `## Key changes`: bullets only, one change each, naming actual files, functions, or modules (e.g., `AuthService.verify()` not "auth handler")
|
|
57
|
+
- Name every changed path in a Key changes bullet. A trim may cut a clause and never a path, since `canon pr key-changes` reports a path no bullet claims.
|
|
58
|
+
|
|
59
|
+
### Key changes groups
|
|
60
|
+
|
|
61
|
+
Past 5 bullets, group Key changes under bold labels, 5 bullets a group at most.
|
|
62
|
+
|
|
63
|
+
- A label sits on its own line, names the area a reviewer opens together, and ends with no period
|
|
64
|
+
- Write a label in plain words, since a code span inside bold renders unbolded
|
|
65
|
+
- Open each group on a bullet, never on prose
|
|
66
|
+
|
|
67
|
+
### Closing lines
|
|
68
|
+
|
|
69
|
+
The closing lines end `## Summary`, one `Closes #NNN` per issue and no trailing period. A task shipped in slices carries them on its last slice only. `closing-issues.md` states how the list is decided, and `canon labels scan --closes` fails a body that disagrees with it.
|
|
57
70
|
|
|
58
71
|
### Context section
|
|
59
72
|
|
|
60
|
-
`## Technical context` is optional and
|
|
73
|
+
`## Technical context` is optional and says why, naming the decisions the code can't show and any shortcoming of the approach.
|
|
61
74
|
|
|
62
75
|
- Omit Technical context for docs, config, or trivial changes
|
|
63
|
-
-
|
|
76
|
+
- Take one form per section, never bullets and paragraphs mixed
|
|
77
|
+
- Use bullets when every reason fits one sentence under 200 characters
|
|
78
|
+
- Otherwise write one paragraph per decision, opening on a bold lead-in that ends with a period and runs into the paragraph
|
|
64
79
|
|
|
65
80
|
### Testing section
|
|
66
81
|
|
|
@@ -68,6 +83,7 @@ A body describes the new behavior and nothing the diff or the commits already sa
|
|
|
68
83
|
|
|
69
84
|
- Omit Testing for docs, config, or trivial sync changes
|
|
70
85
|
- Use checkboxes, never prose. See Testing discipline for which box gets ticked.
|
|
86
|
+
- Write one box per command, pointing at a test file rather than listing its cases
|
|
71
87
|
|
|
72
88
|
### Reviewer section and visuals
|
|
73
89
|
|
|
@@ -86,6 +102,8 @@ A body describes the new behavior and nothing the diff or the commits already sa
|
|
|
86
102
|
- A ticked box describes the tree as it stands. A later commit removing or replacing what it names makes the box false.
|
|
87
103
|
- The branch that made that commit corrects the box in the same pass, as with any other stale claim in the body
|
|
88
104
|
|
|
105
|
+
Leave the `UI pass` line to `canon pr tick`, and carry it on a rewrite.
|
|
106
|
+
|
|
89
107
|
### Human-only boxes
|
|
90
108
|
|
|
91
109
|
Leave a box unchecked only when a human is required, and name which human and why on the same line. The agent runs everything else.
|
|
@@ -106,6 +124,17 @@ A live agent session is never the human a box waits on.
|
|
|
106
124
|
## Formatting
|
|
107
125
|
|
|
108
126
|
- End every bullet point with a period
|
|
127
|
+
- Carry no H3 or H4 anywhere in a body. GitHub draws an H3 one step under an H2, so stacked H3s compete with the sections.
|
|
128
|
+
- Group with a bold label or lead-in instead, in the forms the Sections rules above state
|
|
129
|
+
|
|
130
|
+
### Density
|
|
131
|
+
|
|
132
|
+
`canon labels scan` reports each section's density under `density`, naming the section, the kind, and the line in the whole body. Its help lists every limit.
|
|
133
|
+
|
|
134
|
+
- Every section but Testing holds bullets to 200 characters and 5 in a row, and paragraphs to 350 characters and 2 in a row
|
|
135
|
+
- Any section reports a `subheading`, and Technical context reports a `mixed-form`
|
|
136
|
+
- A bold label alone on a line breaks a Key changes run, and a bold lead-in starts a new Technical context run
|
|
137
|
+
- Fix a finding by regrouping or splitting, never by cutting a path
|
|
109
138
|
|
|
110
139
|
## Examples
|
|
111
140
|
|
|
@@ -118,19 +147,29 @@ Every section a body may carry, in order.
|
|
|
118
147
|
|
|
119
148
|
<Action Verb> <Direct Object> to <Result>.
|
|
120
149
|
|
|
150
|
+
Closes #<number>
|
|
151
|
+
|
|
121
152
|
## Key changes
|
|
122
153
|
|
|
154
|
+
**<Area a reviewer opens together>**
|
|
155
|
+
|
|
123
156
|
- <Verb> <specific component/file/function> (<reason if non-obvious>)
|
|
124
157
|
- <Verb> <specific component/file/function>
|
|
125
158
|
|
|
159
|
+
**<Next area>**
|
|
160
|
+
|
|
161
|
+
- <Verb> <specific component/file/function>
|
|
162
|
+
|
|
126
163
|
## Technical context
|
|
127
164
|
|
|
128
|
-
|
|
165
|
+
**<Decision in a few words>.** <Why this approach, what the code can't show, and any shortcoming>
|
|
166
|
+
|
|
167
|
+
**<Next decision>.** <Why>
|
|
129
168
|
|
|
130
169
|
## Testing
|
|
131
170
|
|
|
132
171
|
- [x] <Command run> <observed result>
|
|
133
|
-
- [x] <
|
|
172
|
+
- [x] <Test file run> <observed result>
|
|
134
173
|
- [ ] <Human-only check> (<which human, why>)
|
|
135
174
|
|
|
136
175
|
## For the reviewer
|
|
@@ -149,12 +188,20 @@ Update auth middleware to enforce jwt expiration checks. # imperative + direct o
|
|
|
149
188
|
|
|
150
189
|
## Key changes
|
|
151
190
|
|
|
191
|
+
**Validation** # bold label on its own line, no period
|
|
192
|
+
|
|
152
193
|
- Add `verifyExpiration()` to `src/auth/validators.ts`. # specific function + file path
|
|
194
|
+
- Add the clock skew window to `src/auth/config.ts`. # one change per bullet
|
|
195
|
+
|
|
196
|
+
**Session handling** # one label per area a reviewer opens together
|
|
197
|
+
|
|
153
198
|
- Refactor `AuthService.authenticate()` to handle 401 codes. # named component + clear change
|
|
154
199
|
|
|
155
200
|
## Technical context
|
|
156
201
|
|
|
157
|
-
|
|
202
|
+
**Stateless sessions.** Expiry lives in the token, so any instance can reject it without a shared store. # bold lead-in + why
|
|
203
|
+
|
|
204
|
+
**Clock skew.** A 30-second window absorbs drift between instances, so a token can outlive its expiry by that much. # decision + shortcoming
|
|
158
205
|
|
|
159
206
|
## Testing
|
|
160
207
|
|
|
@@ -178,9 +225,17 @@ This PR updates the authentication system to be more robust. # "This PR" opener
|
|
|
178
225
|
|
|
179
226
|
## Key changes
|
|
180
227
|
|
|
228
|
+
### Middleware # H3 inside a body
|
|
229
|
+
|
|
181
230
|
- Updated auth middleware files # vague, no specific component, no period
|
|
182
231
|
- The old system used to check tokens differently # describes historical behavior
|
|
183
232
|
|
|
233
|
+
## Technical context
|
|
234
|
+
|
|
235
|
+
- Tokens are stateless now. # a bullet
|
|
236
|
+
|
|
237
|
+
The skew window trades precision for no shared store. # mixed with a paragraph in one section
|
|
238
|
+
|
|
184
239
|
## Testing
|
|
185
240
|
|
|
186
241
|
- Tested manually # no specific command or case
|
|
@@ -7,39 +7,26 @@ description: What the ship chain is for, the gaps it closes, and why it does not
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, the post-feature sequence runs from memory. Doc sync gets skipped,
|
|
10
|
+
Without this skill, the post-feature sequence runs from memory. Doc sync gets skipped, or runs after staging has closed so its output never reaches a commit. A session chaining by hand narrates between steps, which turns one flow into a conversation and invites a decision at every boundary.
|
|
11
11
|
|
|
12
|
-
The sequence also reaches the remote on work nothing re-checked. This skill is
|
|
12
|
+
The sequence also reaches the remote on work nothing re-checked. This skill is where an `auto-ship` stop resumes, so a fix the user makes by hand after a failed verify is pushed with no suite run against it. A chain that ends on its CI watch line, or never reads the evidence thread, reports done on a pull request still owed a result.
|
|
13
13
|
|
|
14
14
|
## Must
|
|
15
15
|
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
- Emit no text between steps. The sequence is the unit and prose inside it reopens settled decisions.
|
|
22
|
-
- Name the one point a wrapping caller may act at, so a chain built on this one is not left to pick a gap of its own
|
|
23
|
-
- Name the condition under which the closing block is not emitted, since a caller that closes on its own block leaves two instructions about the last line and nothing deciding between them
|
|
24
|
-
- Watch continuous integration to a terminal state in the background, so the session stays reachable while CI runs, and stop on a failure naming the check
|
|
25
|
-
- Read the evidence thread with `canon pr evidence <number> --check --json` once CI passes, run what it reports owed, and report done only on `settled`, since a chain that never reads the thread ships a regenerated image with no comment and no preview and leaves the controller to repair it
|
|
16
|
+
- The project's verify commands run before the sequence and a failure stops it, and a project naming none is said so rather than read as passing
|
|
17
|
+
- Each step runs through the Skill tool in the stated order, with staging after the sync skills write, and the chain reaches the pull request on a branch already committed
|
|
18
|
+
- No text appears between steps beyond a stop report and the background watch line, and the body names the one point a wrapping caller may act at and when the closing block is not emitted
|
|
19
|
+
- CI is watched to a terminal state in the background, and a failure stops the chain naming the check
|
|
20
|
+
- Done is reported only once `canon pr evidence <number> --check --json` reads `settled`, re-read once after running what it owed, and a binary lacking `--check` reads as unread
|
|
26
21
|
|
|
27
22
|
## Must not
|
|
28
23
|
|
|
29
|
-
- Auto-trigger
|
|
30
|
-
- Fix a failing check
|
|
31
|
-
-
|
|
32
|
-
-
|
|
33
|
-
- Report the chain done before the CI watch exits. A turn ending on the watch line leaves a pull request still waiting on CI, and a `✅ Shipped` there claims a result nothing has read.
|
|
34
|
-
|
|
35
|
-
## Guards
|
|
36
|
-
|
|
37
|
-
- A failing verify stops the run before the sync skills write, so the tree is left as the user left it
|
|
38
|
-
- A binary lacking `--check` reports the thread unread, never settled, since reading the absence as a pass repeats the failure the read exists to close
|
|
39
|
-
- Re-read the thread once after running what was owed and stop on anything but `settled`, so a refused preview cannot loop the chain
|
|
40
|
-
- A failing check stops the sequence. A stop report and the line announcing the background watch are the two places text is allowed between steps.
|
|
24
|
+
- Auto-trigger
|
|
25
|
+
- Fix a failing check or attempt a fix for a failing verify
|
|
26
|
+
- Implement or review
|
|
27
|
+
- Report the chain done before the CI watch exits
|
|
41
28
|
|
|
42
29
|
## Out of scope
|
|
43
30
|
|
|
44
|
-
- Implementation and review, which `auto-ship` chains ahead of this same sequence
|
|
45
|
-
- The behavior of each step,
|
|
31
|
+
- Implementation and review, which `auto-ship` chains ahead of this same sequence
|
|
32
|
+
- The behavior of each step, which the skill it invokes owns
|
|
@@ -7,33 +7,26 @@ description: What branch splitting is for, the gaps it closes, and how it differ
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, a branch carrying unrelated commits ships as one pull request, which a reviewer
|
|
10
|
+
Without this skill, a branch carrying unrelated commits ships as one pull request, which a reviewer skims because no single concern holds it together. Split by hand, commits get cherry-picked in an order that leaves a branch missing something it depends on, and a dirty tree loses its uncommitted work across the checkouts.
|
|
11
|
+
|
|
12
|
+
Merging the wrong branch first lands every other branch's content on main and leaves the remaining pull requests empty after rebase, with no signal that anything went wrong. Every body leaves through `gh`, which the audit hook never watches, so a banned character survives into a published pull request.
|
|
11
13
|
|
|
12
14
|
## Must
|
|
13
15
|
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
- State the merge order and the reason behind it, since the order is not recoverable from reading the pull requests afterward
|
|
19
|
-
- Carry the restack loop for stacked mode, where each branch is rebased onto main once the one below it merges
|
|
20
|
-
- Scan every generated title and body for banned characters and internal phase labels as an explicit step before opening a pull request
|
|
16
|
+
- Groups follow concern from both commit messages and file paths, preferring fewer branches, and every commit ahead of main is accounted for in the preview
|
|
17
|
+
- Each group is classified independent or stacked before any command is generated, and stacked mode carries the restack loop
|
|
18
|
+
- The merge order and its reason are stated
|
|
19
|
+
- Every generated title and body is scanned for banned characters and phase labels before a pull request opens
|
|
21
20
|
|
|
22
21
|
## Must not
|
|
23
22
|
|
|
23
|
+
- Run on a dirty tree, on `main`, or with no commits ahead of main
|
|
24
24
|
- Split when one concern already covers the branch
|
|
25
25
|
- Rename a branch whose name already matches its concern
|
|
26
|
-
- Leave a commit unaccounted for
|
|
26
|
+
- Leave a commit unaccounted for
|
|
27
27
|
- Merge the pull requests it opens
|
|
28
28
|
|
|
29
|
-
## Guards
|
|
30
|
-
|
|
31
|
-
- Dirty working tree: stop and name both recoveries
|
|
32
|
-
- On `main`: stop
|
|
33
|
-
- No commits ahead of main: stop
|
|
34
|
-
|
|
35
29
|
## Out of scope
|
|
36
30
|
|
|
37
|
-
- Partitioning a staged diff into commits, which `git-stage` owns
|
|
31
|
+
- Partitioning a staged diff into commits, which `git-stage` owns
|
|
38
32
|
- The message on each commit, which `git-commit` owns
|
|
39
|
-
- Merging, which stays the user's call. The skill states the order and stops.
|
|
@@ -7,33 +7,27 @@ description: What commit grouping is for, the gaps it closes, and how it differs
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, a staged diff spanning several concerns lands as one commit, so a later revert takes unrelated work with it. A renamed file staged as two
|
|
10
|
+
Without this skill, a staged diff spanning several concerns lands as one commit, so a later revert takes unrelated work with it. A renamed file staged as two paths records an add and a delete, and commits land in listing order rather than dependency order, so a bisect stops on a commit that cannot build.
|
|
11
11
|
|
|
12
|
-
The routing
|
|
12
|
+
The routing fails on top of that. A description claiming every commit request pulls in single-concern sets with nothing to group, and a hunk-level selection reaching the unstage comes back widened to whole files.
|
|
13
13
|
|
|
14
14
|
## Must
|
|
15
15
|
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
- Keep a rename pair in one group and restage both paths together, so git still detects the rename at commit time
|
|
22
|
-
- Unstage everything first, then restage per group, since the incoming staged set is one undifferentiated blob
|
|
23
|
-
- Count each subject against the length limit and shorten before executing
|
|
16
|
+
- Each message follows the commit format reference, derived from the staged diff with lockfiles excluded, with each subject counted against the length limit before executing
|
|
17
|
+
- Every staged file is accounted for in the preview, and no file the user did not stage is committed
|
|
18
|
+
- Commits are ordered so a dependency lands before the file that imports it
|
|
19
|
+
- A rename pair stays in one group, so git still detects the rename
|
|
20
|
+
- The description declines single-concern and hunk-level staged sets and names `git-commit` for both
|
|
24
21
|
|
|
25
22
|
## Must not
|
|
26
23
|
|
|
27
|
-
- Stage a file the user did not stage
|
|
24
|
+
- Stage a file the user did not stage
|
|
28
25
|
- Split a rename pair across groups
|
|
29
|
-
-
|
|
30
|
-
|
|
31
|
-
## Guards
|
|
32
|
-
|
|
33
|
-
- Nothing staged: stop and name the command that stages
|
|
26
|
+
- Run when nothing is staged
|
|
27
|
+
- Emit anything after the result line
|
|
34
28
|
|
|
35
29
|
## Out of scope
|
|
36
30
|
|
|
37
|
-
- Composing
|
|
38
|
-
- Splitting commits across branches, which `git-split` owns
|
|
31
|
+
- Composing one commit from the whole staged diff, which `git-commit` owns
|
|
32
|
+
- Splitting commits across branches, which `git-split` owns
|
|
39
33
|
- Pushing and opening the pull request, which `git-pr` owns
|
|
@@ -7,32 +7,28 @@ description: What worktree listing and cleanup is for, the gaps it closes, and w
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, linked worktrees accumulate past the point where any of them is remembered. Merge state does not appear in the worktree list, so a cleanup either removes a worktree still holding unmerged work or
|
|
10
|
+
Without this skill, linked worktrees accumulate past the point where any of them is remembered. Merge state does not appear in the worktree list, so a cleanup either removes a worktree still holding unmerged work or removes nothing.
|
|
11
|
+
|
|
12
|
+
A plain ancestry read misses the whole set, since `git branch --merged` decorates every branch checked out in a worktree. Removing a worktree also leaves its local branch behind, so the branch list keeps growing even when cleanup runs.
|
|
11
13
|
|
|
12
14
|
## Must
|
|
13
15
|
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
- Pick exactly one mode. Listing and removing are different requests and inferring both from one invocation removes worktrees the user meant to read about.
|
|
16
|
+
- Merge state comes from the pull request first and from local ancestry matched on the branch name alone when no pull request exists
|
|
17
|
+
- A worktree and its local branch are removed together
|
|
18
|
+
- The main root, the current session's worktree, a dirty tree, a worktree outside the prefix `session-worktree` creates under, and one a live session occupies are never removed
|
|
19
|
+
- Every skipped row carries a one-word reason, and an empty remove set says why each row was held
|
|
20
|
+
- Each run is exactly one of listing or removing
|
|
20
21
|
|
|
21
22
|
## Must not
|
|
22
23
|
|
|
23
|
-
- Enter or create a worktree
|
|
24
|
-
- Remove a
|
|
25
|
-
- Remove
|
|
26
|
-
-
|
|
24
|
+
- Enter or create a worktree
|
|
25
|
+
- Remove a dirty or occupied worktree, whatever its merge state
|
|
26
|
+
- Remove the worktree the session runs in
|
|
27
|
+
- Run outside a git repository
|
|
27
28
|
- Emit anything after the result line
|
|
28
29
|
|
|
29
|
-
## Guards
|
|
30
|
-
|
|
31
|
-
- Not a git repository: stop
|
|
32
|
-
- Remove set is empty: stop and say why every row was held back
|
|
33
|
-
|
|
34
30
|
## Out of scope
|
|
35
31
|
|
|
36
|
-
- Entering a worktree, which `session-worktree` owns
|
|
37
|
-
-
|
|
38
|
-
-
|
|
32
|
+
- Entering a worktree, which `session-worktree` owns
|
|
33
|
+
- Writing pull request state, which `git-pr` and `git-followup` own
|
|
34
|
+
- Deciding which features can run in parallel, which the planning skills own
|
|
@@ -7,38 +7,30 @@ description: Why the skill draws a deck as HTML in the project's tokens inside i
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, a
|
|
10
|
+
Without this skill, a session writes a deck into whatever path occurs to it, so a second deck overwrites the first and nothing lists either. It writes pptxgenjs code or hex colors, so the deck ignores the project's design. Every slide comes out as a title over bullets, which reads as a document rather than a deck.
|
|
11
11
|
|
|
12
|
-
A first render shipped unread hands the audience the overlap, the overflow, and every element the converter fell back to a picture for
|
|
12
|
+
It invents attributes the converter does not read, so a section, a chart, or an entrance silently goes missing. A first render shipped unread hands the audience the overlap, the overflow, and every element the converter fell back to a picture for.
|
|
13
13
|
|
|
14
14
|
## Must
|
|
15
15
|
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
- Shell out to the render command for the deck itself
|
|
22
|
-
- Read every fallback and refusal the render reports, run one QA pass over the rendered images, and fix what both report
|
|
16
|
+
- The existing decks and the slide format are read from the CLI before drawing, and a new deck takes a name no listed deck carries unless the request names one
|
|
17
|
+
- Each deck lands in its own folder under the slides record folder, one HTML file per slide in filename order, drawn with the project's custom properties
|
|
18
|
+
- The composition varies across the deck, and content fits the slide frame with short titles and tight lines
|
|
19
|
+
- The render command produces the deck itself
|
|
20
|
+
- Every fallback and refusal the render reports is read, one QA pass runs over the rendered images, and what both report is fixed once
|
|
23
21
|
|
|
24
22
|
## Must not
|
|
25
23
|
|
|
26
|
-
- Hardcode a deck name, an attribute, or a chart type,
|
|
27
|
-
- Reimplement the conversion, the master, or the packaging, which the CLI owns
|
|
24
|
+
- Hardcode a deck name, an attribute, or a chart type, or reimplement the conversion, the master, or the packaging the CLI owns
|
|
28
25
|
- Write a deck into the shared layouts folder, which is never listed as a deck
|
|
29
|
-
- Invent token values when the project has no token stylesheet
|
|
26
|
+
- Invent token values when the project has no token stylesheet, rather than saying the deck renders unstyled
|
|
30
27
|
- Write centered body text or content that overflows a slide
|
|
31
|
-
- Loop on aesthetics past a single fix pass
|
|
32
|
-
|
|
33
|
-
## Guards
|
|
34
|
-
|
|
35
|
-
- No token stylesheet: draw the deck anyway and say it renders unstyled.
|
|
36
|
-
- Image conversion tools missing: skip the image pass and say so. Do not fail the render over a verification step.
|
|
28
|
+
- Loop on aesthetics past a single fix pass, or fail the render when the image tools for the QA pass are missing
|
|
37
29
|
|
|
38
30
|
## Out of scope
|
|
39
31
|
|
|
40
32
|
- Converting HTML to PowerPoint, which the CLI owns end to end
|
|
41
|
-
- The project's palette and faces, which
|
|
42
|
-
- Writing the content the deck is about, which the caller
|
|
43
|
-
- Drafting a deck as a canvas page, which
|
|
33
|
+
- The project's palette and faces, which its token stylesheet owns
|
|
34
|
+
- Writing the content the deck is about, which the caller owns
|
|
35
|
+
- Drafting a deck as a canvas page, which no skill owns until that authoring surface is measured
|
|
44
36
|
- Recording a demo, which `script-screencast` owns
|
|
@@ -7,9 +7,9 @@ description: Why the markdown format rules travel in a skill, and where the boun
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, the markdown format rules
|
|
10
|
+
Without this skill, the markdown format rules sit in a standard that a session opens only when a rule tells it to. The banned characters and the structure rules are facts a scan settles, yet a session writes the whole document from memory and learns the result only from the audit's exit.
|
|
11
11
|
|
|
12
|
-
The rules also
|
|
12
|
+
The rules also have three carriers, a standard, a generated rule pointing at it, and a hand-written rule routing voice. Each states one routing and each drifts from the others.
|
|
13
13
|
|
|
14
14
|
## Must
|
|
15
15
|
|
|
@@ -20,4 +20,10 @@ The rules also had three carriers, a standard, a generated rule pointing at it,
|
|
|
20
20
|
## Must not
|
|
21
21
|
|
|
22
22
|
- Restate the banned characters in the body
|
|
23
|
-
- Carry voice, rhythm, or word guidance
|
|
23
|
+
- Carry voice, rhythm, or word guidance
|
|
24
|
+
|
|
25
|
+
## Out of scope
|
|
26
|
+
|
|
27
|
+
- Voice, rhythm, and word choice, which `write-human` owns
|
|
28
|
+
- A Mermaid fence or a figure, which `draw-figure` owns
|
|
29
|
+
- The banned-character scan itself, which `canon markdown audit` owns
|
|
@@ -7,37 +7,28 @@ description: What feature planning is for, the gaps it closes, and why it stops
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Implementation starts before anyone knows what it touches. A session rediscovers a settled constraint halfway through, and an ambiguity gets resolved silently in whichever direction the first edit went. A feature stacked into pull requests over the same files pays the review cost once per slice.
|
|
11
|
+
|
|
12
|
+
A constraint naming a surface to leave alone forbids two acts at once, conforming it and retargeting a pointer into it. A vague ask reaches the plan with no checkable criterion, and a decision rests on a practice recalled from memory.
|
|
11
13
|
|
|
12
14
|
## Must
|
|
13
15
|
|
|
14
|
-
- Read the project's
|
|
15
|
-
- Reframe a vague ask as observable
|
|
16
|
-
- Slice
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
- Name every file the work touches with the reason it is touched
|
|
20
|
-
- Place each new path against the layout guidance with a one-clause reason, loading that guidance only when the plan creates a file or folder, since the planner decides placement and the worker copies whatever path it is given
|
|
21
|
-
- Name how each outcome is proven and which input or state would break the change, so the executing session has a check to run and the reviewer has a place to look
|
|
22
|
-
- Surface each unresolved ambiguity as a numbered question carrying a suggested answer and an empty answer slot, so the plan is decision-ready in one pass
|
|
23
|
-
- State which act a constraint forbids when it names a surface to leave alone, since conforming that surface and retargeting a pointer into it are different acts and only one is out of scope
|
|
24
|
-
- Scale the output to the work. A two-file change with nothing to decide should not produce a plan file.
|
|
25
|
-
- Stop at the plan and wait to be told to continue
|
|
16
|
+
- Read the project's Claude setup before scanning source, and name every file the work touches with the reason it is touched
|
|
17
|
+
- Reframe a vague ask as observable success criteria, carry each into the plan's verification, and ask when none can be predicted
|
|
18
|
+
- Slice by user-visible path with the riskiest batch first, and fold a stacked batch sharing most of its files into its parent unless the plan says why they differ
|
|
19
|
+
- Quote the fetched passage behind each outside source, mark an unfetched one unverified, and place each new path against the layout guidance with a one-clause reason
|
|
20
|
+
- Surface each ambiguity as a numbered question with a suggested answer and an empty slot, and stop at the plan
|
|
26
21
|
|
|
27
22
|
## Must not
|
|
28
23
|
|
|
29
24
|
- Implement, or edit any file the plan describes
|
|
30
|
-
- Read directories speculatively
|
|
31
|
-
- Bundle independent concerns into one plan
|
|
32
|
-
- Restate the plan in chat during follow-up rounds
|
|
33
|
-
|
|
34
|
-
## Guards
|
|
35
|
-
|
|
36
|
-
- No feature description: stop and ask for one
|
|
37
|
-
- No predictable success criterion: ask before planning rather than guessing the goal
|
|
25
|
+
- Read directories speculatively, since context spent on files the feature does not touch is context the plan does not get
|
|
26
|
+
- Bundle independent concerns into one plan
|
|
27
|
+
- Restate the plan in chat during follow-up rounds, since the file is the source of truth
|
|
38
28
|
|
|
39
29
|
## Out of scope
|
|
40
30
|
|
|
41
|
-
- Executing the plan, which
|
|
42
|
-
-
|
|
43
|
-
- Reconciling the context entries after the work lands, which `context-fold` owns
|
|
31
|
+
- Executing the plan, which `auto-ship` owns
|
|
32
|
+
- Creating a task for the plan, which `task-board` owns
|
|
33
|
+
- Reconciling the context entries after the work lands, which `context-fold` owns
|
|
34
|
+
- Marking the board, which `task-complete` owns
|
|
@@ -7,43 +7,27 @@ description: Why a question that has not been measured gets a disposable folder
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
A question nobody has measured is answered with a plan. The session commits before the current state is known, and its reasoning compacts away with the conversation, so the next session re-measures what this one counted or states a figure from recall as current.
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
A track that closes with several separable findings writes only one task, and the rest have no stated route out of the folder. Without one, a finding sits until the operator asks whether filing it elsewhere is the next step, which is how a track that measured everything correctly still lost work between sessions.
|
|
12
|
+
A track fanning out to subagents returns findings without their reasoning. Under the project root, a fixture loads its instruction files, so the arm measures the repository instead of the question. When a closing track holds several findings, one task is written and the rest have no route out.
|
|
15
13
|
|
|
16
14
|
## Must
|
|
17
15
|
|
|
18
|
-
- Detect open, resume, and close from the folder itself, matching the topic against tracks
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
- Confine writes to the track folder, with the close-time task file, the experiment fixture, and the intake routing below as the only exceptions
|
|
24
|
-
- Route a closing-track finding the required task does not cover through `plan-intake`, rather than leaving it to be asked about. The route runs in the same session, so it is a write outside the folder rather than a handoff to a later one.
|
|
25
|
-
- Place the closing task's row through `task-board` Step 4 rather than writing `priority.md` or `backlog.md` directly
|
|
26
|
-
- Link every claim about a source outside the project, and list an unread source as a lead rather than citing it
|
|
27
|
-
- Put a fixture a headless run is pointed at outside the repository
|
|
28
|
-
- Write the next-session file self-contained, since backing the folder through `canon records push` and `canon records pull` holds only where a records remote is configured, protects only against the machine being lost even there, and never against a compaction dropping this session's reasoning before it has pushed
|
|
16
|
+
- Detect open, resume, and close from the folder itself, matching the topic against existing tracks first, and number a new folder past the highest ordinal across groundwork and intake
|
|
17
|
+
- Measure the current state now, carry a lean and the finding that would overturn it on every open question, link every outside claim, and end a pass with every question leaned on a plain retell
|
|
18
|
+
- Confine writes to the track folder, plus the close-time task file, the experiment fixture, and the intake routing
|
|
19
|
+
- Route a closing finding the task does not cover through `plan-intake` in the same session, and place the closing task's row through `task-board`
|
|
20
|
+
- Put a fixture a headless run is pointed at outside the repository, and write the next-session file self-contained
|
|
29
21
|
|
|
30
22
|
## Must not
|
|
31
23
|
|
|
32
24
|
- Write a feature plan, a source change, a standard, a rule, or a reference doc
|
|
33
|
-
- Dispatch subagents
|
|
34
|
-
- Close while an open question quietly fails an outcome,
|
|
35
|
-
-
|
|
36
|
-
- Match a topic against the shared scratch directory, which holds folders that were never tracks
|
|
37
|
-
- Pause for approval between steps, which the write scope is what makes safe
|
|
38
|
-
|
|
39
|
-
## Guards
|
|
40
|
-
|
|
41
|
-
- No topic given: stop rather than inferring one
|
|
42
|
-
- Fewer than two of the three qualifying conditions hold in open mode: stop and route to the planning skill, because the decision is already made
|
|
43
|
-
- Resume and close are exempt from that test by definition
|
|
25
|
+
- Dispatch subagents, since a search too large to run inline is a finding that the question is too broad
|
|
26
|
+
- Close while an open question quietly fails an outcome, or spawn more than three billed headless runs without asking
|
|
27
|
+
- Pause for approval between steps, or open a track with no topic or fewer than two of the three qualifying conditions
|
|
44
28
|
|
|
45
29
|
## Out of scope
|
|
46
30
|
|
|
47
31
|
- Writing the plan the track concludes toward, which `plan-feature` owns
|
|
48
|
-
-
|
|
49
|
-
-
|
|
32
|
+
- Filing a breadth dump, which `plan-intake` owns
|
|
33
|
+
- Placing a task row, which `task-board` owns
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: plan-groundwork
|
|
3
|
-
description: Opens and runs a numbered groundwork folder under `.canon/groundwork/<nn>-<slug>/` for a topic that has to be measured before it can be planned. Detects open, resume, and close from the folder itself. Use when asked to "research X", "dig into X", "work out what we should do about X", "measure this before we commit",
|
|
3
|
+
description: Opens and runs a numbered groundwork folder under `.canon/groundwork/<nn>-<slug>/` for a topic that has to be measured before it can be planned. Detects open, resume, and close from the folder itself. Use when asked to "research X", "dig into X", "work out what we should do about X", "measure this before we commit", "open a groundwork folder", or "retell the groundwork". Do NOT use to write a feature plan or to implement. That is `plan-feature`.
|
|
4
4
|
metadata:
|
|
5
5
|
family: decide
|
|
6
6
|
---
|
|
@@ -88,6 +88,7 @@ A matched folder routes on its own `<nn>-<slug>/`. Detect the mode from the fold
|
|
|
88
88
|
|
|
89
89
|
- Present without `06-decision.md`: resume
|
|
90
90
|
- Present and the user judges it ready: close
|
|
91
|
+
- Present and the user asks for a retell: read the track and end on the retell, measuring and writing nothing
|
|
91
92
|
|
|
92
93
|
## Step 2: orient
|
|
93
94
|
|
|
@@ -135,4 +136,6 @@ Aside from an experiment fixture, Steps 4 and 5 are the only ways close mode rea
|
|
|
135
136
|
|
|
136
137
|
## Output
|
|
137
138
|
|
|
138
|
-
Emit the full relative path from the project root for every file written or updated, since a bare filename names a file the reader cannot open. Read `${CLAUDE_SKILL_DIR}/references/output.md` on reaching this step for the open and resume template and the close template. A run that stops on a guard skips it.
|
|
139
|
+
Emit the full relative path from the project root for every file written or updated, since a bare filename names a file the reader cannot open. Read `${CLAUDE_SKILL_DIR}/references/output.md` on reaching this step for the open and resume template, the retell, and the close template. A run that stops on a guard skips it.
|
|
140
|
+
|
|
141
|
+
End on the retell in place of the open and resume template once every open question carries a lean. A question marked `none, needs measuring` keeps the open and resume template, unless the operator asks for a retell, which answers whatever the state. The retell lists written files under `**Written:**`, and close keeps its one-line report.
|