@erclx/canon 4.66.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.
- package/claude/.claude-plugin/plugin.json +1 -1
- package/claude/skills/{claude-autoship → auto-ship}/REQUIREMENT.md +3 -3
- package/claude/skills/{claude-autoship → auto-ship}/SKILL.md +36 -36
- package/claude/skills/canon-cli/REQUIREMENT.md +2 -2
- package/claude/skills/canon-cli/SKILL.md +2 -2
- package/claude/skills/canon-feedback-triage/REQUIREMENT.md +1 -1
- package/claude/skills/canon-feedback-triage/SKILL.md +3 -3
- package/claude/skills/canon-operator/REQUIREMENT.md +1 -1
- package/claude/skills/canon-operator/SKILL.md +4 -4
- package/claude/skills/canon-rollout/REQUIREMENT.md +6 -6
- package/claude/skills/canon-rollout/SKILL.md +7 -7
- package/claude/skills/{claude-design-extract → design-extract}/REQUIREMENT.md +4 -4
- package/claude/skills/{claude-design-extract → design-extract}/SKILL.md +1 -1
- package/claude/skills/{claude-docs → docs-fold}/REQUIREMENT.md +3 -3
- package/claude/skills/{claude-docs → docs-fold}/SKILL.md +14 -14
- package/claude/skills/{claude-docs → docs-fold}/references/anchor-sweep.md +1 -1
- package/claude/skills/{claude-docs → docs-fold}/references/wireframe-sweep.md +1 -1
- package/claude/skills/docs-sync/REQUIREMENT.md +3 -3
- package/claude/skills/docs-sync/SKILL.md +1 -1
- package/claude/skills/draft-and-pick/REQUIREMENT.md +4 -4
- package/claude/skills/draft-and-pick/SKILL.md +6 -6
- package/claude/skills/draft-context/REQUIREMENT.md +2 -2
- package/claude/skills/draft-context/SKILL.md +3 -3
- package/claude/skills/{claude-diagram → draft-diagram}/REQUIREMENT.md +4 -4
- package/claude/skills/{claude-diagram → draft-diagram}/SKILL.md +3 -3
- package/claude/skills/draft-docs/REQUIREMENT.md +1 -1
- package/claude/skills/draft-wireframes/REQUIREMENT.md +1 -1
- package/claude/skills/draft-wireframes/SKILL.md +2 -2
- package/claude/skills/git-followup/REQUIREMENT.md +1 -1
- package/claude/skills/git-followup/SKILL.md +1 -1
- package/claude/skills/git-pr/SKILL.md +3 -3
- package/claude/skills/git-ship/REQUIREMENT.md +2 -2
- package/claude/skills/git-ship/SKILL.md +8 -8
- package/claude/skills/git-worktree/REQUIREMENT.md +2 -2
- package/claude/skills/git-worktree/SKILL.md +3 -3
- package/claude/skills/identity/REQUIREMENT.md +2 -2
- package/claude/skills/identity/SKILL.md +3 -3
- package/claude/skills/{claude-markdown-propose → markdown-propose}/REQUIREMENT.md +8 -8
- package/claude/skills/{claude-markdown-propose → markdown-propose}/SKILL.md +5 -5
- package/claude/skills/{claude-markdown-propose → markdown-propose}/references/format.md +1 -1
- package/claude/skills/{claude-memory-capture → memory-capture}/REQUIREMENT.md +5 -5
- package/claude/skills/{claude-memory-capture → memory-capture}/SKILL.md +13 -13
- package/claude/skills/{claude-memory-review → memory-review}/REQUIREMENT.md +4 -4
- package/claude/skills/{claude-memory-review → memory-review}/SKILL.md +10 -10
- package/claude/skills/migration-context/SKILL.md +1 -1
- package/claude/skills/migration-standards-drop/REQUIREMENT.md +1 -1
- package/claude/skills/migration-superseded/REQUIREMENT.md +1 -1
- package/claude/skills/{claude-feature → plan-feature}/REQUIREMENT.md +4 -4
- package/claude/skills/{claude-feature → plan-feature}/SKILL.md +4 -4
- package/claude/skills/{claude-groundwork → plan-groundwork}/REQUIREMENT.md +5 -5
- package/claude/skills/{claude-groundwork → plan-groundwork}/SKILL.md +8 -8
- package/claude/skills/{claude-intake → plan-intake}/REQUIREMENT.md +6 -6
- package/claude/skills/{claude-intake → plan-intake}/SKILL.md +10 -10
- package/claude/skills/{claude-intake-answer → plan-intake-answer}/REQUIREMENT.md +4 -4
- package/claude/skills/{claude-intake-answer → plan-intake-answer}/SKILL.md +5 -5
- package/claude/skills/{claude-address-review → review-address}/REQUIREMENT.md +5 -5
- package/claude/skills/{claude-address-review → review-address}/SKILL.md +6 -6
- package/claude/skills/{claude-address-review → review-address}/references/rebase-conflicts.md +1 -1
- package/claude/skills/{claude-review → review-branch}/REQUIREMENT.md +4 -4
- package/claude/skills/{claude-review → review-branch}/SKILL.md +4 -4
- package/claude/skills/{claude-pr-review → review-pr}/REQUIREMENT.md +5 -5
- package/claude/skills/{claude-pr-review → review-pr}/SKILL.md +11 -11
- package/claude/skills/{claude-orchestrate → role-orchestrator}/REQUIREMENT.md +5 -5
- package/claude/skills/{claude-orchestrate → role-orchestrator}/SKILL.md +20 -20
- package/claude/skills/{claude-orchestrate → role-orchestrator}/references/orchestrator-dispatch.md +30 -30
- package/claude/skills/{claude-orchestrate → role-orchestrator}/references/orchestrator-handoff.md +2 -2
- package/claude/skills/{claude-orchestrate → role-orchestrator}/references/orchestrator-parked.md +8 -8
- package/claude/skills/{claude-orchestrate → role-orchestrator}/references/orchestrator-poll.md +8 -8
- package/claude/skills/{claude-orchestrate → role-orchestrator}/references/orchestrator-resume.md +1 -1
- package/claude/skills/{claude-orchestrate → role-orchestrator}/references/orchestrator-sweep.md +1 -1
- package/claude/skills/{claude-orchestrate → role-orchestrator}/scripts/poll.sh +6 -6
- package/claude/skills/{claude-planner → role-planner}/REQUIREMENT.md +12 -12
- package/claude/skills/{claude-planner → role-planner}/SKILL.md +4 -4
- package/claude/skills/{claude-worker → role-worker}/REQUIREMENT.md +8 -8
- package/claude/skills/{claude-worker → role-worker}/SKILL.md +6 -6
- package/claude/skills/{claude-seed-sync → seed-sync}/REQUIREMENT.md +2 -2
- package/claude/skills/{claude-seed-sync → seed-sync}/SKILL.md +3 -3
- package/claude/skills/session-map/REQUIREMENT.md +2 -2
- package/claude/skills/session-map/SKILL.md +2 -2
- package/claude/skills/session-resume/REQUIREMENT.md +2 -2
- package/claude/skills/session-resume/SKILL.md +2 -2
- package/claude/skills/{claude-worktree → session-worktree}/REQUIREMENT.md +3 -3
- package/claude/skills/{claude-worktree → session-worktree}/SKILL.md +6 -6
- package/claude/skills/setup-plugins/references/plugin-catalog.md +1 -1
- package/claude/skills/{claude-standards-audit → standards-audit}/REQUIREMENT.md +2 -2
- package/claude/skills/{claude-standards-audit → standards-audit}/SKILL.md +2 -2
- package/claude/skills/systematic-debugging/REQUIREMENT.md +1 -1
- package/claude/skills/{claude-tasks → task-board}/REQUIREMENT.md +3 -3
- package/claude/skills/{claude-tasks → task-board}/SKILL.md +7 -7
- package/claude/skills/{claude-teach → teach-workspace}/REQUIREMENT.md +2 -2
- package/claude/skills/{claude-teach → teach-workspace}/SKILL.md +4 -4
- package/claude/skills/test-first/REQUIREMENT.md +2 -2
- package/claude/skills/{claude-ui-test → ui-test}/REQUIREMENT.md +3 -3
- package/claude/skills/{claude-ui-test → ui-test}/SKILL.md +3 -3
- package/claude/skills/{claude-ux-audit → ux-audit}/REQUIREMENT.md +6 -6
- package/claude/skills/{claude-ux-audit → ux-audit}/SKILL.md +5 -5
- package/claude/skills/{claude-ux-measure → ux-measure}/REQUIREMENT.md +5 -5
- package/claude/skills/{claude-ux-measure → ux-measure}/SKILL.md +5 -5
- package/docs/agents/commands.md +4 -1
- package/docs/agents/install-and-sync.md +1 -1
- package/docs/agents/key-changes.md +3 -3
- package/docs/agents/markdown-audit.md +1 -1
- package/docs/agents/restated.md +1 -1
- package/docs/agents/review-classification.md +1 -1
- package/docs/agents/sessions.md +1 -1
- package/docs/agents/state-scoped-risk.md +1 -1
- package/docs/agents/targets.md +1 -1
- package/docs/agents/tasks.md +4 -4
- package/docs/agents/teach.md +1 -1
- package/docs/target-projects.md +28 -9
- package/docs/workflow/ai-workflow.md +84 -84
- package/docs/workflow/operating-model.md +17 -17
- package/docs/workflow/visual-design-workflow.md +6 -6
- package/governance/rules/core/045-memory.md +1 -1
- package/governance/rules/core/085-worktrees.md +1 -1
- package/package.json +1 -1
- package/scripts/core/regen-agent-fixture.sh +1 -1
- package/scripts/core/regen-hero.sh +7 -7
- package/snippets/claude/decision-memo.md +1 -1
- package/src/autoship/paths.ts +1 -1
- package/src/claude/cases/all.ts +2 -2
- package/src/claude/cases/{claude-workflow.ts → workflow.ts} +33 -33
- package/src/commands/migrate.ts +90 -13
- package/src/commands/sync.ts +3 -3
- package/src/design/components.ts +1157 -4
- package/src/design/css.ts +44 -17
- package/src/design/tokens.ts +1 -1
- package/src/gov/restated.ts +2 -2
- package/src/markdown/structure.ts +1 -1
- package/src/migrate/plan.ts +13 -5
- package/src/migrate/rename.ts +210 -94
- package/src/migrate/skill-names.ts +89 -0
- package/src/pr/bijection.ts +1 -1
- package/src/pr/paths.ts +2 -2
- package/src/shipped/references.ts +1 -1
- package/src/sync/seeds-report.ts +1 -1
- package/src/targets/pulls.ts +2 -2
- package/src/tasks/answers.ts +1 -1
- package/src/tasks/archive.ts +4 -4
- package/src/tasks/record.ts +2 -2
- package/src/tasks/validate.ts +1 -1
- package/src/teach/fonts.ts +28 -0
- package/src/teach/nav.ts +11 -1
- package/src/teach/workspace.ts +4 -1
- package/standards/groundwork.md +1 -1
- package/standards/snippets.md +1 -1
- package/standards/tasks.md +3 -3
- package/standards/teach.md +2 -2
- package/tooling/base/configs/.husky/post-merge +3 -3
- package/tooling/claude/reference.md +5 -5
- package/tooling/claude/seeds/.claude/hooks/pr-create-log.sh +2 -2
- /package/claude/skills/{claude-memory-review → memory-review}/references/receipt-format.md +0 -0
- /package/claude/skills/{claude-orchestrate → role-orchestrator}/scripts/watch.sh +0 -0
- /package/claude/skills/{claude-teach → teach-workspace}/references/lesson-craft.md +0 -0
- /package/claude/skills/{claude-teach → teach-workspace}/references/pedagogy.md +0 -0
- /package/claude/skills/{claude-teach → teach-workspace}/references/promotion.md +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: memory-review
|
|
3
3
|
description: What memory review is for, the gaps it closes, and why every action waits on approval
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# Memory review requirement
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
@@ -15,7 +15,7 @@ A pen the caller cannot face is the same gap wearing a different shape. Routing
|
|
|
15
15
|
|
|
16
16
|
- Treat the folder as a holding pen, so every entry in scope leaves it as a promotion, a handoff, or an archive rather than surviving by default
|
|
17
17
|
- Archive an entry out of the pen rather than deleting it, since nothing recovers a file from a gitignored folder
|
|
18
|
-
- Hand a fact a context entry owns to `
|
|
18
|
+
- Hand a fact a context entry owns to `docs-fold` through the routing file, rather than editing the entry here
|
|
19
19
|
- Verify the rule is not already stated or implied in the target before proposing a promotion, by reading the target rather than trusting the memory's claim about it
|
|
20
20
|
- Rewrite a rule into the destination's voice instead of moving it unchanged
|
|
21
21
|
- Write the proposal to a receipt on disk and take no action until the user decides per item
|
|
@@ -45,6 +45,6 @@ A pen the caller cannot face is the same gap wearing a different shape. Routing
|
|
|
45
45
|
|
|
46
46
|
## Out of scope
|
|
47
47
|
|
|
48
|
-
- Writing memories, which `
|
|
48
|
+
- Writing memories, which `memory-capture` owns
|
|
49
49
|
- Judging whether an entry should have been captured. That is a gate at capture time, and re-deciding it here would delete evidence the capture rule is wrong.
|
|
50
50
|
- Editing the governance rules a handoff points at
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: memory-review
|
|
3
3
|
description: Reviews `.canon/memory/` and proposes per-entry actions (promote to `CLAUDE.md`, move into a skill body, route to a context entry, hand off to governance, or retire as stale). Also runs the discuss, challenge, apply, and cleanup phases on an existing review file. Use when asked to "review memory", "discuss memory questions", "challenge the promotes", "apply memory decisions", "cleanup memory review", "promote memory", or "consolidate memories". Do NOT auto-apply. Output a grouped proposal and wait for block-by-block approval.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# Memory review
|
|
7
7
|
|
|
8
8
|
This skill drives the full memory review lifecycle in five phases. Pick the phase from what the user said and whether a review receipt already exists at `<main-root>/.canon/review/memory/memory-review-*.md`.
|
|
9
9
|
|
|
@@ -21,7 +21,7 @@ If the user re-pings the skill with no new phrase and a receipt exists, default
|
|
|
21
21
|
|
|
22
22
|
## Guards
|
|
23
23
|
|
|
24
|
-
- All `.canon/memory/` reads, edits, and archive moves resolve at the main worktree root, not the current worktree. Resolve that root the way `
|
|
24
|
+
- All `.canon/memory/` reads, edits, and archive moves resolve at the main worktree root, not the current worktree. Resolve that root the way `session-worktree` does.
|
|
25
25
|
- If no `.canon/memory/` directory exists at the main worktree root, stop: `❌ No .canon/memory/ directory found.`
|
|
26
26
|
- If `.canon/memory/` contains no `*.md` entries other than `index.md`, stop: `✅ No memory entries to review.`
|
|
27
27
|
- Cleanup is exempt from the two stops above. It works on receipts in `.canon/review/`, and a drained pen is the normal state once Apply has run, so a pen-shaped stop would strand the receipt it exists to delete.
|
|
@@ -34,7 +34,7 @@ Propose is the ship-time entry point. The ship skills run it right after capture
|
|
|
34
34
|
|
|
35
35
|
### Scope
|
|
36
36
|
|
|
37
|
-
- **Ship-scoped:** when a ship caller (`git-ship`, `
|
|
37
|
+
- **Ship-scoped:** when a ship caller (`git-ship`, `auto-ship`) names the entries captured this session, classify only those entries. Read the full pen for merge and absorbed comparison, but do not propose actions on carried entries the captures do not touch. Each carried entry was already proposed on in its own ship cycle.
|
|
38
38
|
- **Full sweep:** when invoked standalone with no named set, classify every entry in the pen, including entries carried from earlier sessions, so cross-session duplicates merge into one rule.
|
|
39
39
|
|
|
40
40
|
### Step 1: read the memory folder
|
|
@@ -58,14 +58,14 @@ Read in parallel from the project root. Skip any file or folder that does not ex
|
|
|
58
58
|
|
|
59
59
|
`.canon/memory/` is a holding pen. Default every entry to promote or retire on review. Skip is the rare exception, reserved for active task overlap or user-type memories with no in-repo target.
|
|
60
60
|
|
|
61
|
-
`
|
|
61
|
+
`memory-capture` routes a project fact naming a domain with a context entry to that entry, so a pen filled since routing shipped is mostly feedback: rules about how to work, which no context entry owns. Propose against what the pen holds rather than expecting the older mix. An entry carried from before routing may still name a domain that has a context entry, and that entry's action is **Promote to a context entry**, which hands it to `docs-fold` the same way capture does rather than editing the entry here.
|
|
62
62
|
|
|
63
63
|
For each in-scope entry (see Scope), pick one action:
|
|
64
64
|
|
|
65
65
|
- **Promote to `CLAUDE.md`**: the rule is cross-domain behavior or a design principle applied across the whole project.
|
|
66
66
|
- **Promote to a skill body**: the rule fires only when editing a specific path-scoped domain. Name the target skill.
|
|
67
67
|
- **Promote to a standards file**: the rule is an authoring reference that belongs in the project's own standards folder as `<domain>.md`.
|
|
68
|
-
- **Promote to a context entry**: the entry states a fact about a domain carrying an entry in `.claude/context/index.md`. Append it to `.canon/tmp/memory-routing/<slug>.md` at the main worktree root, in the format `
|
|
68
|
+
- **Promote to a context entry**: the entry states a fact about a domain carrying an entry in `.claude/context/index.md`. Append it to `.canon/tmp/memory-routing/<slug>.md` at the main worktree root, in the format `memory-capture` writes, and tell the user to run `/docs-fold` from a branch. Do not edit the context entry here.
|
|
69
69
|
- **Hand off to governance**: the rule is coding-standards class (typescript, testing, naming, error-handling, performance, logging, concurrency, planning). Do not author the rule file inline. Never edit the synced `.claude/rules/` copies of toolkit rules, because `canon gov sync` overwrites them. Stop at handoff.
|
|
70
70
|
- In the toolkit repo, point the user at `internal-governance` and `${CLAUDE_SKILL_DIR}/../../standards/rule.md`, which own the source-of-truth rules under `governance/rules/`.
|
|
71
71
|
- In a target project, point the user at the `create-rule` skill, which scaffolds a project-local rule under `.claude/rules/`.
|
|
@@ -132,7 +132,7 @@ Before applying any item, check the worktree state:
|
|
|
132
132
|
[ "$(git rev-parse --git-dir 2>/dev/null)" = "$(git rev-parse --git-common-dir 2>/dev/null)" ] && echo "MAIN" || echo "LINKED"
|
|
133
133
|
```
|
|
134
134
|
|
|
135
|
-
If the result is `MAIN`, stop and tell the user: `❌ Apply phase mutates tracked files. Run /
|
|
135
|
+
If the result is `MAIN`, stop and tell the user: `❌ Apply phase mutates tracked files. Run /session-worktree first.` Discuss and Challenge phases only touch `.canon/review/` scratch and run from anywhere.
|
|
136
136
|
|
|
137
137
|
Before applying a promote to root `CLAUDE.md`, load `internal-claude` so its seed-mirror rule fires on the edit.
|
|
138
138
|
|
|
@@ -150,7 +150,7 @@ Free-form text after the verb is a reason. Capture it in the receipt but do not
|
|
|
150
150
|
Action by action type:
|
|
151
151
|
|
|
152
152
|
- **Promote**: use `Edit` to insert the rewritten rule into the target surface, then archive the memory file.
|
|
153
|
-
- **Promote to a context entry**: append the fact to `.canon/tmp/memory-routing/<slug>.md` at the main worktree root, then archive the memory file. `
|
|
153
|
+
- **Promote to a context entry**: append the fact to `.canon/tmp/memory-routing/<slug>.md` at the main worktree root, then archive the memory file. `docs-fold` folds it in on its next run from a branch, which is what keeps one skill writing context entries.
|
|
154
154
|
- **Hand off**: do not edit governance. Archive the memory file only if the user confirmed the handoff explicitly. Otherwise leave it in place.
|
|
155
155
|
- **Retire**: archive the memory file.
|
|
156
156
|
|
|
@@ -178,7 +178,7 @@ Count the items still 📝 pending once the parse above has run. Apply leaves on
|
|
|
178
178
|
|
|
179
179
|
Leave the receipt in place when any remain. When none do, collect it per the collection rule in `${CLAUDE_SKILL_DIR}/../../standards/memory.md`, which owns what a fold writes and which entry types take one.
|
|
180
180
|
|
|
181
|
-
`
|
|
181
|
+
`docs-fold` Step 10 sweeps the same folder on the same rule once per shipped branch, and either may reach a receipt first. Whichever does, the other finds no file and moves on.
|
|
182
182
|
|
|
183
183
|
End with: `✅ Applied: <nums> | ⏭ Skipped: <nums> | 📝 Pending: <nums>`. Omit empty buckets. If anything is pending, remind the user they can refine `Decision:` lines and re-ping, run "discuss" for question items, or commit a skip with `skip <nums>` in chat.
|
|
184
184
|
|
|
@@ -186,7 +186,7 @@ End with: `✅ Applied: <nums> | ⏭ Skipped: <nums> | 📝 Pending: <nums>`. Om
|
|
|
186
186
|
|
|
187
187
|
Trigger: user says "cleanup" or "delete the receipt" after Apply has run.
|
|
188
188
|
|
|
189
|
-
Cleanup folds one receipt's skips and removes that receipt, and does nothing else. It is the fallback route now that Apply and `
|
|
189
|
+
Cleanup folds one receipt's skips and removes that receipt, and does nothing else. It is the fallback route now that Apply and `docs-fold` Step 10 each collect a resolved receipt on their own, so it reaches a file those two left behind rather than being the only collector. Apply is still the only phase that moves a memory entry out of the pen, and it does so per approved item into `.canon/tmp/memory-archive/`. A user asking to sweep stale memories wants Propose, which classifies entries and writes a decision slot per entry.
|
|
190
190
|
|
|
191
191
|
If no `.canon/review/memory/memory-review-*.md` exists at the main root, stop: `✅ No review receipt to clean up.` Every other refusal in this skill carries a message, and the phase reads a receipt before it does anything else.
|
|
192
192
|
|
|
@@ -47,7 +47,7 @@ The last is the name map. `prose` split into `markdown.md` plus the `write-human
|
|
|
47
47
|
- Classifying `CLAUDE.md` sections into the three-tier model: `migration-claude-md`
|
|
48
48
|
- Relocating `docs/` files by audience: `migration-context`
|
|
49
49
|
- Splitting a retired `.claude/` file into the folder that replaced it, which pairs one file against one folder rather than dropping a corpus: `migration-superseded`
|
|
50
|
-
- Reconciling a seed file against its source section by section: `
|
|
50
|
+
- Reconciling a seed file against its source section by section: `seed-sync`
|
|
51
51
|
- Applying the drop and the sweep, which the user does after reviewing
|
|
52
52
|
|
|
53
53
|
## Why it ships while its consumer row is parked
|
|
@@ -40,5 +40,5 @@ The last is the two-speed release skew arriving as a confident wrong answer. `su
|
|
|
40
40
|
|
|
41
41
|
- Classifying `CLAUDE.md` sections into the three-tier model: `migration-claude-md`
|
|
42
42
|
- Relocating `docs/` files by audience: `migration-context`
|
|
43
|
-
- Reconciling a seed file against its source section by section, which diffs two files rather than splitting one into a folder: `
|
|
43
|
+
- Reconciling a seed file against its source section by section, which diffs two files rather than splitting one into a folder: `seed-sync`
|
|
44
44
|
- Applying the split and running the untrack, which the user does after reviewing
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: plan-feature
|
|
3
3
|
description: What feature planning is for, the gaps it closes, and why it stops before implementing
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# Plan feature requirement
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
@@ -32,5 +32,5 @@ Without this skill, implementation starts before anyone knows what it touches. A
|
|
|
32
32
|
## Out of scope
|
|
33
33
|
|
|
34
34
|
- Executing the plan, which is the ship pipeline
|
|
35
|
-
- Task-board state, which `
|
|
36
|
-
- Reconciling the planning docs after the work lands, which `
|
|
35
|
+
- Task-board state, which `task-board` owns. A plan links to its task and does not create one.
|
|
36
|
+
- Reconciling the planning docs after the work lands, which `docs-fold` owns
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: plan-feature
|
|
3
3
|
description: Plans a feature by reading the project's Claude setup and scanning relevant source files. Outputs which files to touch, risks, and ambiguities, then stops. Use before implementing anything, or when asked to "implement X", "add X", "build X", or "I want to add X". Do NOT implement. Plan only.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# Plan feature
|
|
7
7
|
|
|
8
8
|
## Guards
|
|
9
9
|
|
|
@@ -91,7 +91,7 @@ Omit empty sections. Do not print `None identified.` in chat.
|
|
|
91
91
|
|
|
92
92
|
### Full mode
|
|
93
93
|
|
|
94
|
-
Derive a 2-to-4-word kebab-case slug from the feature description. Write the full plan to `.canon/plans/feature-<slug>.md` at the main worktree root, not the current worktree. Resolve that root the way `
|
|
94
|
+
Derive a 2-to-4-word kebab-case slug from the feature description. Write the full plan to `.canon/plans/feature-<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.
|
|
95
95
|
|
|
96
96
|
From a linked worktree, or from a background session sitting at the main root with none entered, the file-editing tools refuse that path, so the plan goes out through `Bash`. Send the `mkdir -p` and the heredoc as two plain commands rather than joining them with `&&`, which is refused as compound.
|
|
97
97
|
|
|
@@ -113,7 +113,7 @@ Then output in chat:
|
|
|
113
113
|
1. <question>
|
|
114
114
|
- Suggested: <pick>, <reason or tradeoff>
|
|
115
115
|
|
|
116
|
-
Next: /
|
|
116
|
+
Next: /session-worktree
|
|
117
117
|
```
|
|
118
118
|
|
|
119
119
|
Show only the path line and the `Next:` line when there are no questions. The `.canon/plans/` directory is gitignored. Do not stage or commit the file.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: plan-groundwork
|
|
3
3
|
description: Why a question that has not been measured gets a disposable folder instead of a plan, and the write scope that lets the track run without pausing
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# Plan groundwork requirement
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
@@ -21,8 +21,8 @@ A track that closes with several separable findings writes only one task, and th
|
|
|
21
21
|
- Measure the current state now rather than carrying a figure from a previous session
|
|
22
22
|
- Carry a lean and the finding that would overturn it on every open question, or admit that a measurement is missing
|
|
23
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 `
|
|
25
|
-
- Place the closing task's row through `
|
|
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
26
|
- Link every claim about a source outside the project, and list an unread source as a lead rather than citing it
|
|
27
27
|
- Put a fixture a headless run is pointed at outside the repository
|
|
28
28
|
- Write the next-session file self-contained, since the folder is unbacked and dies with the machine
|
|
@@ -44,6 +44,6 @@ A track that closes with several separable findings writes only one task, and th
|
|
|
44
44
|
|
|
45
45
|
## Out of scope
|
|
46
46
|
|
|
47
|
-
- Writing the plan the track concludes toward, which `
|
|
47
|
+
- Writing the plan the track concludes toward, which `plan-feature` owns
|
|
48
48
|
- Implementing anything the track recommends
|
|
49
49
|
- Persisting the folder. It is gitignored and disposable, which is what makes it the right container for an unanswered question.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
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", or "open a groundwork folder". Do NOT use to write a feature plan or to implement. That is `
|
|
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", or "open a groundwork folder". Do NOT use to write a feature plan or to implement. That is `plan-feature`.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# Plan groundwork
|
|
7
7
|
|
|
8
8
|
Groundwork gathers and weighs. A plan commits. A groundwork folder costs nothing to throw away, which is what makes it the right container for a question nobody has answered yet.
|
|
9
9
|
|
|
@@ -12,9 +12,9 @@ Read `${CLAUDE_SKILL_DIR}/../../standards/groundwork.md` before writing any file
|
|
|
12
12
|
## Guards
|
|
13
13
|
|
|
14
14
|
- If no topic is given, stop: `❌ No topic. Name what needs measuring.`
|
|
15
|
-
- Apply the qualifying test in open mode alone, after Step 1 resolves the mode and before the folder is created. Two of these three must hold: the current state is not known, more than one approach is live, and committing wrong costs more than a day of measuring. When one or fewer holds, stop: `❌ Already decided enough to plan. Run /
|
|
15
|
+
- Apply the qualifying test in open mode alone, after Step 1 resolves the mode and before the folder is created. Two of these three must hold: the current state is not known, more than one approach is live, and committing wrong costs more than a day of measuring. When one or fewer holds, stop: `❌ Already decided enough to plan. Run /plan-feature instead.`
|
|
16
16
|
- Resume and close are exempt from the test above. A track that has already been measured fails it by definition, since its current state is now known and its approaches have narrowed, so applying the test to either mode refuses the folder that same test admitted.
|
|
17
|
-
- A refused topic that is a broad dump rather than one question routes to `
|
|
17
|
+
- A refused topic that is a broad dump rather than one question routes to `plan-intake`, not to the planning skill the stop names. Intake dispositions many findings in breadth from what the repository already holds, and one folder holding dozens of unrelated threads is what forcing them past this guard produces.
|
|
18
18
|
- Do not pause for approval between steps. The write scope below is what makes that safe.
|
|
19
19
|
|
|
20
20
|
## Write scope
|
|
@@ -92,8 +92,8 @@ The standard sets the open question format and requires it inside a topic file a
|
|
|
92
92
|
1. Write `06-decision.md`. It states the problem once, names the goal, lists what to do, and lists what was considered and dropped.
|
|
93
93
|
2. Write `07-next-session.md` self-contained, so it survives a compaction that loses the conversation.
|
|
94
94
|
3. Update the file map in `README.md`.
|
|
95
|
-
4. Write one task file in `.canon/tasks/` recording what the track concluded, even when the conclusion is to do nothing. Follow `${CLAUDE_SKILL_DIR}/../../standards/tasks.md` for the filename and frontmatter. Place the row through `
|
|
96
|
-
5. When the task written in Step 4 does not cover every finding the track surfaced, route what it leaves out through `
|
|
95
|
+
4. Write one task file in `.canon/tasks/` recording what the track concluded, even when the conclusion is to do nothing. Follow `${CLAUDE_SKILL_DIR}/../../standards/tasks.md` for the filename and frontmatter. Place the row through `task-board` Step 4, which checks the roster for a live orchestrator before writing `priority.md` or `backlog.md` directly. Aside from an experiment fixture, this and the routing in Step 5 are the only ways close mode reaches outside the folder.
|
|
96
|
+
5. When the task written in Step 4 does not cover every finding the track surfaced, route what it leaves out through `plan-intake`. Skip this step when it does.
|
|
97
97
|
6. Report uncited external claims. Closing already reads every file in the folder, so list any statement about a source outside the project that carries neither a link nor a lead entry. Report and do not block, because judging whether a sentence makes an external claim is the call a checker gets wrong.
|
|
98
98
|
|
|
99
99
|
Do not close while an open question quietly fails an outcome. Resolve it, or record it in `06-decision.md` as knowingly accepted.
|
|
@@ -137,7 +137,7 @@ Close:
|
|
|
137
137
|
|
|
138
138
|
<the decision in one line>
|
|
139
139
|
|
|
140
|
-
Next: /
|
|
140
|
+
Next: /plan-feature
|
|
141
141
|
```
|
|
142
142
|
|
|
143
143
|
Omit the uncited-claims block when the count is zero.
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: plan-intake
|
|
3
3
|
description: Why a brain dump gets a filed inventory rather than ten plans, and why an empty operator slot means unread
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# Plan intake requirement
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, a brain dump reaches a session that has nowhere to put it. `
|
|
10
|
+
Without this skill, a brain dump reaches a session that has nowhere to put it. `plan-feature` answers with one plan per independent concern, so forty findings produce ten plan files before anything has been measured. `plan-groundwork` refuses a breadth pass outright, since its qualifying test asks whether the current state is unknown and most items are knowable by grep. What gets filed instead is a list of opinions, because nothing forces a count against the tree and a complaint reads the same whether it covers three sites or three hundred.
|
|
11
11
|
|
|
12
12
|
Two failure modes cost more than the rest. An operator's silence on an item reads as consent when the folder borrows the plan file's blank-means-accept contract, which ships changes nobody approved across a folder read over weeks. And a report naming only a path cannot distinguish three new items from one reworded sentence in a file that holds a dozen items, so every reader diffs it against memory to find out what moved.
|
|
13
13
|
|
|
@@ -43,7 +43,7 @@ A session with no numbering convention re-decides the folder shape per dump, so
|
|
|
43
43
|
|
|
44
44
|
## Out of scope
|
|
45
45
|
|
|
46
|
-
- Measuring one question in depth, which `
|
|
47
|
-
- Planning a promoted item, which `
|
|
48
|
-
- Promoting an item onto the board, which `
|
|
46
|
+
- Measuring one question in depth, which `plan-groundwork` owns
|
|
47
|
+
- Planning a promoted item, which `plan-feature` owns
|
|
48
|
+
- Promoting an item onto the board, which `task-board` owns
|
|
49
49
|
- Enforcing any of this. The folder is gitignored, so no check reaches its contents and every rule holds only while a session reads it.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
3
|
-
description: Files a raw brain dump into a numbered intake folder under `.canon/intake/<nn>-<slug>/`, one item per finding carrying a measured problem, a proposed fix, and a verdict. Use when asked to "file this dump", "triage my notes", "work through this list", "sort out this brain dump", or "run an intake pass". Do NOT use for one question that has to be measured before anyone can plan it. That is `
|
|
2
|
+
name: plan-intake
|
|
3
|
+
description: Files a raw brain dump into a numbered intake folder under `.canon/intake/<nn>-<slug>/`, one item per finding carrying a measured problem, a proposed fix, and a verdict. Use when asked to "file this dump", "triage my notes", "work through this list", "sort out this brain dump", or "run an intake pass". Do NOT use for one question that has to be measured before anyone can plan it. That is `plan-groundwork`.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# Plan intake
|
|
7
7
|
|
|
8
8
|
Intake dispositions many findings in breadth. A dump goes in, an inventory comes out, and every item carries a problem measured against the tree, one proposed fix, and a verdict. The item that turns out to be already settled is the highest-value output, and it is the one thing neither a plan nor a groundwork track has anywhere to put.
|
|
9
9
|
|
|
@@ -14,8 +14,8 @@ Read `${CLAUDE_SKILL_DIR}/../../standards/intake.md` before writing any file in
|
|
|
14
14
|
The test is one question. Can the item be answered by reading the repository today?
|
|
15
15
|
|
|
16
16
|
- Yes: intake owns it, and the cost is a session of grepping
|
|
17
|
-
- No, because it needs an experiment or a source outside the project: route it to `
|
|
18
|
-
- Already decided, with only the work left: route it to `
|
|
17
|
+
- No, because it needs an experiment or a source outside the project: route it to `plan-groundwork`, where the cost is measured in runs and days
|
|
18
|
+
- Already decided, with only the work left: route it to `plan-feature`
|
|
19
19
|
|
|
20
20
|
Apply the test per item rather than per dump. A dump of forty items typically yields one groundwork candidate, so routing the whole dump on its worst item buys a folder nobody can close.
|
|
21
21
|
|
|
@@ -24,13 +24,13 @@ Using the wrong one fails in two shapes. Intake on a question that needs measuri
|
|
|
24
24
|
## Guards
|
|
25
25
|
|
|
26
26
|
- If no dump is given, stop: `❌ No dump to file. Paste the notes or name what to triage.`
|
|
27
|
-
- If the dump is one question rather than a set of findings, stop: `❌ One question, not a dump. Run /
|
|
27
|
+
- If the dump is one question rather than a set of findings, stop: `❌ One question, not a dump. Run /plan-groundwork to measure it or /plan-feature to plan it.`
|
|
28
28
|
- Do not pause for approval between steps. The write scope below is what makes that safe.
|
|
29
29
|
|
|
30
30
|
## Write scope
|
|
31
31
|
|
|
32
32
|
- Write only inside `.canon/intake/<nn>-<slug>/`. A plan file, a task file, a source change, a standard, and a rule all live outside that folder, so this one rule forbids every one of them.
|
|
33
|
-
- There is no exception. Promoting an item onto the board runs through `
|
|
33
|
+
- There is no exception. Promoting an item onto the board runs through `task-board` after the operator has answered, which is a separate invocation.
|
|
34
34
|
- Reading is unrestricted inside the project. Measuring is the work.
|
|
35
35
|
- Treat the folder as gitignored and unbacked. No check reaches its contents, so every rule stated here holds only while a session reads it.
|
|
36
36
|
|
|
@@ -101,14 +101,14 @@ A file the pass only read gets no line, which is what keeps the block short.
|
|
|
101
101
|
|
|
102
102
|
**Open questions:** <N> awaiting your call
|
|
103
103
|
|
|
104
|
-
Next: /
|
|
105
|
-
into the files, then /
|
|
104
|
+
Next: /plan-intake-answer to answer the `You:` slots from here, or type them
|
|
105
|
+
into the files, then /task-board to promote what is ready
|
|
106
106
|
```
|
|
107
107
|
|
|
108
108
|
Use `📂 Resumed` in place of `📂 Opened` on a resume pass.
|
|
109
109
|
|
|
110
110
|
## Answering what this pass wrote
|
|
111
111
|
|
|
112
|
-
The slots this pass leaves empty are answered by editing each cluster file, or from chat through `
|
|
112
|
+
The slots this pass leaves empty are answered by editing each cluster file, or from chat through `plan-intake-answer`, which walks the unread items in batches and writes each selection back onto the item it answers. Name that route in the closing line so the operator finds it where they look for it.
|
|
113
113
|
|
|
114
114
|
Do not invoke it from here. It is operator-triggered, and a pass that files a dump and answers it in the same run decides items on silence.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: plan-intake-answer
|
|
3
3
|
description: Scope boundary for answering a filed intake from chat, and the write-back contract that keeps the file rather than the conversation as the record
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# Plan intake answer requirement
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
@@ -41,8 +41,8 @@ The batching fails a fifth way. A folder holding thirty unread items put as thir
|
|
|
41
41
|
|
|
42
42
|
## Out of scope
|
|
43
43
|
|
|
44
|
-
- Filing a dump and writing the items, which is `
|
|
45
|
-
- Promoting an answered item onto the board, which is `
|
|
44
|
+
- Filing a dump and writing the items, which is `plan-intake` and owns every other write into the folder
|
|
45
|
+
- Promoting an answered item onto the board, which is `task-board` and runs after the answers land
|
|
46
46
|
- The item format, the answer contract, and retrieval, which the toolkit's `standards/intake.md` owns and this skill cites
|
|
47
47
|
- The comparable answer slots in groundwork and feature plans, which carry their own contracts and are a separate measurement
|
|
48
48
|
- Deciding when to fire. The skill is user-invoked through `disable-model-invocation`, so answering is the operator's call rather than a description match.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
3
|
-
description: Walks an intake folder's unread items and puts them as batched questions in chat, writing each selection back onto the item it answers. Use when asked to "answer the intake", "work through the open items", "answer my intake questions", "go through the dump", or "let me answer these from here". Do NOT use to file a dump or write new items, which is `
|
|
2
|
+
name: plan-intake-answer
|
|
3
|
+
description: Walks an intake folder's unread items and puts them as batched questions in chat, writing each selection back onto the item it answers. Use when asked to "answer the intake", "work through the open items", "answer my intake questions", "go through the dump", or "let me answer these from here". Do NOT use to file a dump or write new items, which is `plan-intake`.
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
#
|
|
7
|
+
# Plan intake answer
|
|
8
8
|
|
|
9
9
|
Put an intake folder's unread items as batched questions, then land each selection in the slot it answers.
|
|
10
10
|
|
|
@@ -14,11 +14,11 @@ Read `${CLAUDE_SKILL_DIR}/../../standards/intake.md` before writing anything. It
|
|
|
14
14
|
|
|
15
15
|
## Guards
|
|
16
16
|
|
|
17
|
-
- If `canon intake list --json` reports no folder, stop: `❌ No intake to answer. Run /
|
|
17
|
+
- If `canon intake list --json` reports no folder, stop: `❌ No intake to answer. Run /plan-intake to file a dump first.`
|
|
18
18
|
- If the named folder has no unread item, stop: `❌ Every item in <slug> carries an answer. Nothing to ask.`
|
|
19
19
|
- Never fill a slot the operator did not answer. An abandoned batch leaves every unreached item unread, which is what the empty slot already means.
|
|
20
20
|
- Never infer an answer from the conversation having happened. A selection reaches the file through the verb or not at all.
|
|
21
|
-
- Do not promote an item, edit a verdict, or write outside the answer slots. Promoting runs through `
|
|
21
|
+
- Do not promote an item, edit a verdict, or write outside the answer slots. Promoting runs through `task-board` after the answers land.
|
|
22
22
|
|
|
23
23
|
## Step 1: pick the folder
|
|
24
24
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: review-address
|
|
3
3
|
description: What the review return leg is for, the gaps it closes, and why the push lands before the reply
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# Review address requirement
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
@@ -50,8 +50,8 @@ A declined finding fails on a third axis, which is where its reason ends up. A w
|
|
|
50
50
|
|
|
51
51
|
## Out of scope
|
|
52
52
|
|
|
53
|
-
- Writing the review, which `
|
|
53
|
+
- Writing the review, which `review-pr` owns. The split is by side of the channel: that one posts findings from an independent session and this one is the worker's return leg.
|
|
54
54
|
- Staging, committing, and pushing the follow-up, which `git-followup` owns under this skill's direction
|
|
55
|
-
- Refreshing the `.claude/` docs the fixes made stale, which `
|
|
55
|
+
- Refreshing the `.claude/` docs the fixes made stale, which `docs-fold` owns
|
|
56
56
|
- Re-reviewing its own fixes, which hands back to the orchestrator
|
|
57
|
-
- Re-reading a rewritten branch, which `
|
|
57
|
+
- Re-reading a rewritten branch, which `review-pr` absorbs by testing whether the prior reviewed commit still reaches the head and paying for a full pass when it does not
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
3
|
-
description: Pulls review findings and CI status on the current branch's open PR, fixes each in the working tree, refreshes any stale `.claude/` docs, replies with a summary comment, and pushes a follow-up commit. The worker's return leg after `
|
|
2
|
+
name: review-address
|
|
3
|
+
description: Pulls review findings and CI status on the current branch's open PR, fixes each in the working tree, refreshes any stale `.claude/` docs, replies with a summary comment, and pushes a follow-up commit. The worker's return leg after `review-pr`. Use when asked to "address the review", "fix the PR comments", "respond to review", or after an orchestrator posts findings. Do NOT use to write a review. That is `review-pr`.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# Review address
|
|
7
7
|
|
|
8
|
-
The worker's half of the review channel. `
|
|
8
|
+
The worker's half of the review channel. `review-pr` posts findings to
|
|
9
9
|
the PR from an independent session. This skill consumes them: fix, reply, push.
|
|
10
10
|
|
|
11
11
|
## Guards
|
|
@@ -46,7 +46,7 @@ Do not push a red follow-up.
|
|
|
46
46
|
|
|
47
47
|
## Step 4: refresh stale docs
|
|
48
48
|
|
|
49
|
-
The fixes may have changed or added behavior that `.claude/` context entries, docs, or wireframes describe. Refresh them with the `
|
|
49
|
+
The fixes may have changed or added behavior that `.claude/` context entries, docs, or wireframes describe. Refresh them with the `docs-fold` skill, which maps the changed files to the entries that reference them and rewrites the stale sections. Do not reimplement that mapping here. When a fix adds a new capability with no existing entry, `docs-fold` flags it rather than creating one.
|
|
50
50
|
|
|
51
51
|
## Step 5: rebase a stale branch
|
|
52
52
|
|
|
@@ -245,7 +245,7 @@ Do not merge. Hand back to the orchestrator for re-review.
|
|
|
245
245
|
|
|
246
246
|
Not everything worth reaching the reviewing session surfaces inside the numbered flow above. A worker that settled a risk, filed a follow-up, or found something else worth reporting after Step 7 already closed the review posts it directly rather than waiting on a review pass that has nothing left to trigger it. Write the body the way Step 6 writes a reply: load `write-human` for voice, follow `${CLAUDE_SKILL_DIR}/../../standards/markdown.md` for the banned words, and run the `${CLAUDE_SKILL_DIR}/../../standards/publish.md` scan before posting with `canon labels scan --body-file .canon/tmp/address-review/reply-<number>.md`.
|
|
247
247
|
|
|
248
|
-
Open with `## Post-review findings` rather than `## Review response`, since nothing on the thread is being answered. `
|
|
248
|
+
Open with `## Post-review findings` rather than `## Review response`, since nothing on the thread is being answered. `review-pr` states the full heading set this belongs to and routes it the same as a response: `role-orchestrator`'s poll picks it up and sends the reviewing session back for a pass. Close the body with `🤖 Addressed by Claude Code` on its own line, matching the reply's footer.
|
|
249
249
|
|
|
250
250
|
```bash
|
|
251
251
|
gh pr comment <number> --body-file .canon/tmp/address-review/reply-<number>.md
|
package/claude/skills/{claude-address-review → review-address}/references/rebase-conflicts.md
RENAMED
|
@@ -5,7 +5,7 @@ description: The stash-and-rebase sequence, the conflict resolution rules, and t
|
|
|
5
5
|
|
|
6
6
|
# Rebase a stale branch
|
|
7
7
|
|
|
8
|
-
Mechanics for Step 5 of `
|
|
8
|
+
Mechanics for Step 5 of `review-address` once `git merge-tree` exits non-zero. A branch that still merges skips this file entirely, which is the ordinary run.
|
|
9
9
|
|
|
10
10
|
## The sequence
|
|
11
11
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: review-branch
|
|
3
3
|
description: What local review is for, the gaps it closes, and why it reports without fixing
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# Review branch requirement
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
@@ -34,6 +34,6 @@ Without this skill, a branch ships on the confidence of the session that wrote i
|
|
|
34
34
|
|
|
35
35
|
## Out of scope
|
|
36
36
|
|
|
37
|
-
- Reviewing an open pull request, which `
|
|
37
|
+
- 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.
|
|
38
38
|
- Deciding whether the findings block the ship. This skill grades and the caller gates.
|
|
39
|
-
- Fixing anything it found, which `
|
|
39
|
+
- Fixing anything it found, which `review-address` owns once the work is on a pull request
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: review-branch
|
|
3
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
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# Review branch
|
|
7
7
|
|
|
8
8
|
## Guards
|
|
9
9
|
|
|
@@ -114,7 +114,7 @@ If nothing is wrong, use: `✅ No findings.`
|
|
|
114
114
|
|
|
115
115
|
Derive `<slug>` per `${CLAUDE_SKILL_DIR}/../../standards/slug.md`. Fall back to `latest` on an empty result.
|
|
116
116
|
|
|
117
|
-
Write the full report directly to `.canon/review/branch/review-<slug>.md` at the main worktree root, not the current worktree. Resolve that root the way `
|
|
117
|
+
Write the full report directly to `.canon/review/branch/review-<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.
|
|
118
118
|
|
|
119
119
|
From a linked worktree the file-editing tools refuse that path, so the report goes out through `Bash`. Send the `mkdir -p` and the heredoc as two plain commands rather than joining them with `&&`, which is refused as compound.
|
|
120
120
|
|
|
@@ -122,7 +122,7 @@ If there are no findings, write `✅ No findings.` to the file with a timestamp.
|
|
|
122
122
|
|
|
123
123
|
The `.canon/review/` directory is gitignored. Do not stage or commit the file.
|
|
124
124
|
|
|
125
|
-
The report is disposable. It outlives the ship chain that reads it, and `
|
|
125
|
+
The report is disposable. It outlives the ship chain that reads it, and `docs-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.
|
|
126
126
|
|
|
127
127
|
### Chat output
|
|
128
128
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: review-pr
|
|
3
3
|
description: What the independent pull request review is for, the gaps it closes, and why it posts until nothing is open
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# Review PR requirement
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
@@ -30,7 +30,7 @@ A request written under `## For the reviewer` also reached no reader. The author
|
|
|
30
30
|
|
|
31
31
|
- Merge. Review and post, and leave the gate to the human.
|
|
32
32
|
- Publish a claim the skill did not check. A failed fetch and a rebase both strand the prior commit, and only one of them is a rebase.
|
|
33
|
-
- Invent a heading beyond the two it posts and the response heading `
|
|
33
|
+
- Invent a heading beyond the two it posts and the response heading `review-address` owns, or append a number GitHub already renders
|
|
34
34
|
- Review local uncommitted changes
|
|
35
35
|
- Lecture on process. The lenses land as findings, not as asides.
|
|
36
36
|
|
|
@@ -42,6 +42,6 @@ A request written under `## For the reviewer` also reached no reader. The author
|
|
|
42
42
|
|
|
43
43
|
## Out of scope
|
|
44
44
|
|
|
45
|
-
- Fixing what it finds, which `
|
|
46
|
-
- Reviewing local uncommitted work, which `
|
|
45
|
+
- Fixing what it finds, which `review-address` owns. The split is by side of the channel: this one posts findings from an independent session and that one consumes them.
|
|
46
|
+
- Reviewing local uncommitted work, which `review-branch` owns. That one writes to disk for the session that wrote the code, and this one posts to a pull request it did not write.
|
|
47
47
|
- Merging, which stays the human's decision
|