@erclx/canon 5.39.0 → 5.41.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/README.md +39 -22
- package/claude/.claude-plugin/plugin.json +1 -1
- package/claude/skills/auto-ship/REQUIREMENT.md +1 -0
- package/claude/skills/auto-ship/SKILL.md +6 -0
- package/claude/skills/auto-ship/references/fan-in.md +59 -0
- package/claude/skills/canvas-board/SKILL.md +1 -1
- package/claude/skills/create-skill/references/skill.md +1 -1
- package/claude/skills/decision-escalate/REQUIREMENT.md +1 -1
- package/claude/skills/decision-escalate/SKILL.md +1 -2
- package/claude/skills/draft-slides/SKILL.md +2 -3
- package/claude/skills/draft-slides/references/deck.md +183 -0
- package/claude/skills/git-branch/REQUIREMENT.md +17 -6
- package/claude/skills/git-branch/SKILL.md +63 -7
- package/claude/skills/git-pr/references/evidence.md +2 -2
- package/claude/skills/git-pr/references/final-command.md +1 -1
- package/claude/skills/git-pr/references/labels.md +1 -1
- package/claude/skills/git-pr/references/publish.md +1 -1
- package/claude/skills/plan-feature/references/batches.md +48 -1
- package/claude/skills/plan-feature/references/plan.md +2 -0
- package/claude/skills/plan-intake-answer/REQUIREMENT.md +1 -1
- package/claude/skills/plan-intake-answer/SKILL.md +1 -2
- package/claude/skills/review-address/references/rebase-conflicts.md +7 -0
- package/claude/skills/review-ui/SKILL.md +3 -0
- package/claude/skills/review-ui/references/close-out.md +47 -0
- package/claude/skills/review-ui/references/post.md +3 -1
- package/claude/skills/role-orchestrator/references/orchestrator-dispatch.md +1 -0
- package/claude/skills/role-orchestrator/references/orchestrator-handback.md +1 -1
- package/claude/skills/role-worker/REQUIREMENT.md +1 -0
- package/claude/skills/role-worker/SKILL.md +9 -0
- package/claude/skills/task-board/references/board.md +1 -1
- package/claude/skills/task-board/references/tasks.md +1 -1
- package/claude/skills/teach-workspace/REQUIREMENT.md +1 -1
- package/claude/skills/teach-workspace/SKILL.md +1 -2
- package/claude/skills/ux-measure/SKILL.md +1 -1
- package/docs/agents/audits.md +61 -60
- package/docs/agents/context-audit.md +40 -58
- package/docs/agents/index.md +5 -51
- package/docs/agents/install-and-sync.md +1 -0
- package/docs/agents/markdown-audit.md +53 -99
- package/docs/agents/records.md +37 -79
- package/docs/agents/sessions-transfer.md +26 -70
- package/docs/target/index.md +0 -1
- package/docs/target/migrations.md +57 -66
- package/docs/target/projects.md +36 -78
- package/docs/target/scenarios.md +9 -19
- package/docs/target/sync.md +27 -68
- package/docs/workflow/ai-workflow.md +22 -68
- package/docs/workflow/operating-model.md +32 -186
- package/docs/workflow/parallel-features.md +30 -66
- package/docs/workflow/skill-map-on-request.md +22 -24
- package/docs/workflow/skill-map.md +72 -76
- package/docs/workflow/visual-design-workflow.md +25 -118
- package/docs/workflow/zshrc-aliases.md +18 -37
- package/package.json +1 -1
- package/src/canvas/client/inspector/fields.css +4 -0
- package/src/canvas/index.html +6 -0
- package/src/claude/cases/git.ts +4 -0
- package/src/claude/skills-reach.ts +2 -2
- package/src/cli/ui.ts +3 -1
- package/src/commands/canvas.ts +23 -0
- package/src/commands/capture.ts +14 -0
- package/src/commands/claude.ts +13 -0
- package/src/commands/demo.ts +22 -0
- package/src/commands/deps.ts +6 -0
- package/src/commands/driver.ts +28 -2
- package/src/commands/gov.ts +52 -18
- package/src/commands/intake.ts +17 -0
- package/src/commands/labels.ts +38 -5
- package/src/commands/pr.ts +192 -52
- package/src/commands/records.ts +19 -3
- package/src/commands/secrets.ts +6 -0
- package/src/commands/sessions.ts +8 -0
- package/src/commands/tasks.ts +52 -0
- package/src/commands/teach.ts +13 -0
- package/src/commands/upstream.ts +25 -1
- package/src/commands/worktrees.ts +5 -0
- package/src/context/audit.ts +22 -4
- package/src/context/folders.ts +1 -1
- package/src/context/shape-gated.ts +5 -2
- package/src/counts/scan.ts +1 -1
- package/src/design/components.ts +1 -1
- package/src/design/document.ts +1 -1
- package/src/design/tokens.ts +1 -1
- package/src/gate/boundaries.ts +4 -1
- package/src/gate/measures.ts +1 -1
- package/src/gate/stages.ts +7 -7
- package/src/git/env.ts +6 -0
- package/src/markdown/scope.ts +11 -19
- package/src/pr/frames.ts +53 -9
- package/src/pr/lift.ts +153 -19
- package/src/pr/painted.ts +87 -0
- package/src/records/validate.ts +1 -0
- package/src/roots/record.ts +18 -1
- package/src/sandbox/census.ts +1 -1
- package/src/sandbox/headless/run.ts +3 -2
- package/src/sandbox/headless/watch.ts +3 -4
- package/src/slides/convert/master.ts +3 -0
- package/src/sync/format.ts +46 -0
- package/src/sync/stamp.ts +6 -0
- package/src/tasks/answers.ts +79 -2
- package/src/tasks/fan-in.ts +176 -0
- package/src/tasks/stack.ts +1 -1
- package/tooling/astro/reference.md +80 -39
- package/tooling/base/reference.md +63 -32
- package/tooling/base/seeds/canon/context/ci.md +7 -15
- package/tooling/base/seeds/canon/context/development.md +14 -14
- package/tooling/claude/reference.md +40 -22
- package/tooling/cloudflare/reference.md +31 -12
- package/tooling/go/reference.md +47 -23
- package/tooling/nextjs/reference.md +52 -19
- package/tooling/php/reference.md +35 -16
- package/tooling/python/reference.md +47 -30
- package/tooling/shell/reference.md +6 -5
- package/tooling/vite-react/reference.md +49 -21
- package/tooling/web/reference.md +131 -71
- package/docs/agents/canvas.md +0 -86
- package/docs/agents/capture.md +0 -65
- package/docs/agents/census.md +0 -23
- package/docs/agents/comments.md +0 -34
- package/docs/agents/context-audit-checks.md +0 -108
- package/docs/agents/context-classify.md +0 -101
- package/docs/agents/counts.md +0 -74
- package/docs/agents/demo.md +0 -140
- package/docs/agents/driver.md +0 -103
- package/docs/agents/gate.md +0 -90
- package/docs/agents/hooks.md +0 -78
- package/docs/agents/intake.md +0 -81
- package/docs/agents/key-changes.md +0 -116
- package/docs/agents/label-coverage.md +0 -86
- package/docs/agents/markdown-audit-density.md +0 -39
- package/docs/agents/markdown-audit-weight.md +0 -83
- package/docs/agents/pr-evidence-layout.md +0 -70
- package/docs/agents/pr-evidence.md +0 -273
- package/docs/agents/pr-frames.md +0 -131
- package/docs/agents/pr-lift.md +0 -132
- package/docs/agents/pr-local.md +0 -111
- package/docs/agents/pr-preview.md +0 -155
- package/docs/agents/pr-reads.md +0 -111
- package/docs/agents/pr-tick.md +0 -72
- package/docs/agents/records-push.md +0 -61
- package/docs/agents/records-stale.md +0 -40
- package/docs/agents/records-validate.md +0 -57
- package/docs/agents/restated.md +0 -83
- package/docs/agents/routing.md +0 -61
- package/docs/agents/rule-citations.md +0 -90
- package/docs/agents/sandbox.md +0 -126
- package/docs/agents/sessions.md +0 -128
- package/docs/agents/skills-audit.md +0 -120
- package/docs/agents/skills-reach.md +0 -64
- package/docs/agents/slides.md +0 -176
- package/docs/agents/state-scoped-risk.md +0 -105
- package/docs/agents/superseded.md +0 -85
- package/docs/agents/tasks-archive.md +0 -83
- package/docs/agents/tasks-plans.md +0 -152
- package/docs/agents/tasks-validate.md +0 -133
- package/docs/agents/tasks.md +0 -123
- package/docs/agents/teach-authoring.md +0 -118
- package/docs/agents/teach.md +0 -157
- package/docs/agents/test-order.md +0 -58
- package/docs/agents/upstream.md +0 -94
- package/docs/agents/worktrees.md +0 -118
- package/docs/target/standards-moved.md +0 -34
|
@@ -6,93 +6,57 @@ category: Workflow
|
|
|
6
6
|
|
|
7
7
|
# Parallel features
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Run independent features in parallel, one git worktree and one Claude Code session per feature.
|
|
10
10
|
|
|
11
11
|
## One worktree per feature
|
|
12
12
|
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
- For full autonomy per worktree, invoke `canon:auto-ship` instead of the manual chain. Approve the plan, walk away, come back to a pull request the chain marked as a draft and then read the flag back on. The mark says the work has had no review yet, and it holds no window, since readying a pull request to merge lifts it directly, an act reserved to the operator or to the controlling session that closed the review.
|
|
13
|
+
- Invoke `canon:plan-feature` in each session. Plans land at `.canon/plans/feature-<slug>.md` at the main root.
|
|
14
|
+
- `ui-checklist` writes a per-branch handoff at `tmp/handoff/ui-checklist/<slug>.md`, which `git-pr` posts and removes. The slug is the branch name minus its leading type segment.
|
|
15
|
+
- Ship each worktree with `canon:git-ship`, or `canon:auto-ship` for a draft pull request
|
|
16
|
+
- Only the operator or the controlling session readies a draft
|
|
18
17
|
|
|
19
18
|
## A coordinated flow
|
|
20
19
|
|
|
21
|
-
|
|
20
|
+
Assert the orchestrator role in one warm session with `canon:role-orchestrator`. It plans each feature or dispatches a cold planner under `canon:role-planner`, and dispatches a reviewer under `canon:role-reviewer` for each PR. The human launches workers and merges. See [operating model](operating-model.md).
|
|
22
21
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
See [operating model](operating-model.md) for what caps the worker tracks under it and what conflict holds one behind another. An operator caps a session's workers by saying so, and that cap binds for the session rather than standing as a number in a file.
|
|
28
|
-
|
|
29
|
-
Before a handoff, the orchestrator checks the plan against the tree rather than reading it: grep each construct it names and count the sites, confirm every phase label it cites is still open, and open each file it describes. A plan goes stale from whatever merged after it was written, and reading cannot catch that.
|
|
30
|
-
|
|
31
|
-
A constraint naming a track in flight carries the same problem past the handoff, so the block opens with the commit it was measured against. A worker re-tests before honoring one, fetching and then logging that commit against `origin/main` over the paths the constraint names, and any merge there means the track landed and the constraint is dead. An unstamped block reads as unverified rather than as live, which covers every plan written before the rule.
|
|
22
|
+
- Run one orchestrator at a time
|
|
23
|
+
- Execution order comes off `.canon/tasks/priority.md`
|
|
24
|
+
- Before a handoff, grep each construct the plan names and open each file it describes
|
|
25
|
+
- A constraint naming a track in flight opens with the commit it was measured against. A merge of that track into `origin/main` over the named paths kills the constraint.
|
|
32
26
|
|
|
33
27
|
## Records at the main root
|
|
34
28
|
|
|
35
|
-
`.canon/plans/` and `.canon/review/`
|
|
36
|
-
|
|
37
|
-
The plan's shape is fixed by `claude/skills/plan-feature/references/plan.md`: the section list, the filename, and the contract its questions keep. Its lifecycle, from the session that writes it to the archive, is `claude/skills/plan-feature/references/plan-lifecycle.md`. Every question carries a `- Suggested:` line and an empty `- Answer:` slot, and a blank answer accepts the suggestion at execution time. That default is what makes a plan decision-ready in one pass, and it is the opposite of the contract an intake folder keeps, where an empty slot means nobody reached the item.
|
|
38
|
-
|
|
39
|
-
An execution that picks other than the suggestion rewrites the `- Suggested:` line as `overridden at execution to <pick>,` followed by the measurement that moved it, and leaves the slot blank. That fixed phrase is how a reader of the archived plan tells an override from a suggestion the execution accepted, since an authored suggestion often carries a number of its own. The same deviation takes one line in the open task's `## Findings`, which is the register that survives the plan being archived. A deviation from a question somebody already answered goes back to whoever answered it instead, since a filled slot is a decision already made.
|
|
40
|
-
|
|
41
|
-
`canon records validate plans` reports where a plan and that standard disagree: a filename that is not `feature-<slug>.md`, a missing required section, a files-to-touch entry naming no file, and a question carrying a suggestion with no answer slot. The same verb takes `groundwork`, `intake`, and `teach`, which are governed the same way and were unreachable for the same reason. Nothing fires it automatically, because all four folders are gitignored and every check the repository runs reads changed files from git. It reports and never writes, since the folders are per-machine scratch with no history to recover a wrong repair from.
|
|
42
|
-
|
|
43
|
-
`canon records push` carries these folders off the disk they live on, and `canon records pull` brings them back. Every top-level entry under `.canon/` is backed except `tmp`, `ordinal-locks`, and `.records.git`, so a folder added later enters the payload on its own rather than waiting on a name written into a list. Push names each folder it carries the first time it sees it, which is what keeps a stray folder visible instead of silently entering the payload. It refuses the whole push, naming each path, when a new or changed file is over 25 MB or carries a credential `canon secrets scan` would report. The history lives in a second git directory at `.canon/.records.git` with `.canon/` as its work tree, so every path a task file cites stays where it is.
|
|
44
|
-
|
|
45
|
-
A person points it at a private repository once and both verbs refuse until they have, and `push` refuses when that origin is also a remote of the project, since the payload is the task board and the groundwork trails. `.husky/post-merge` runs the push after its archive loop, on every merge rather than only on one that closed a task. See [records push](../agents/records-push.md) for the refusal table.
|
|
46
|
-
|
|
47
|
-
`canon records size` reports what each of these folders holds, heaviest first, along with `.canon/tmp`. Each row carries the file count, the bytes, how many files were written in the last 7 and 30 days, and the dates of the least and most recently written one. Nothing fails on a number, because a record folder has no correct size. What the verb replaces is a reading somebody had to remember to take: a pen went from 44 entries to 236 between two counts made by hand a fortnight apart, and nothing reported the rate in between.
|
|
48
|
-
|
|
49
|
-
`canon records prune-tmp` reports scratch under `.canon/tmp` nobody has touched inside an age window, and deletes it only with `--write`. A `tmp/handoff/` folder and the live `tmp/pr/poll/` baseline are never offered, since a reader deletes a handoff once it is read and a poll baseline is state a session still needs. See [records](../agents/records.md) for the candidate shapes and the exit codes.
|
|
29
|
+
`.canon/plans/` and `.canon/review/` resolve at the main worktree root. File-editing tools refuse a main-root path from a worktree, so write a whole file through the shell and change an existing one through a `canon` verb.
|
|
50
30
|
|
|
51
|
-
`
|
|
31
|
+
`claude/skills/plan-feature/references/plan.md` fixes the plan's shape and `claude/skills/plan-feature/references/plan-lifecycle.md` its lifecycle. A blank `- Answer:` slot accepts the `- Suggested:` line.
|
|
52
32
|
|
|
53
|
-
|
|
33
|
+
- To pick otherwise, rewrite that line as `overridden at execution to <pick>,` plus the measurement, and add one line to the open task's `## Findings`
|
|
54
34
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
`canon
|
|
35
|
+
- `canon records validate plans` reports a plan breaking its standard, and takes `groundwork`, `intake`, and `teach`
|
|
36
|
+
- `canon records push` and `canon records pull` carry `.canon/` to and from a private repository. See [records](../agents/records.md).
|
|
37
|
+
- `canon records size`, `canon records prune-tmp`, and `canon records stale canonical` report folder size, idle scratch, and releases since the requirements review
|
|
38
|
+
- `canon tasks archive` moves a shipped plan to `.canon/plans/archive/` and retargets the task's `Plan:` line
|
|
58
39
|
|
|
59
40
|
## Shipping a fan-out
|
|
60
41
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
**Rebase profile.** Work confined to one domain directory, such as a new skill under its own folder or independent fixes in different subtrees of `scripts/`, rarely touches a sibling's files. A shared file does not hold a branch back, per the conflict test in [operating model](operating-model.md). These paths are shared hotspots, the ones a second branch should expect to rebase over and resolve:
|
|
64
|
-
|
|
65
|
-
- `CLAUDE.md`, since cross-domain behavior lives there
|
|
66
|
-
- `tooling/**`, since stack manifests, golden configs, and seeds are tightly coupled
|
|
67
|
-
- `canon/context/context-model.md` and `docs/agents/`, which several domains cross-reference
|
|
68
|
-
- Any folder's `index.md`, since `canon indexes regen` rewrites it and two worktrees adding files to a regen-covered folder race on it. Resolve its conflict by running the regen over the rebased tree rather than by hand.
|
|
69
|
-
|
|
70
|
-
Land any in-flight edit to a hotspot on `main` before fanning out where you can. A worktree on a stale `CLAUDE.md` costs more to rebase than it saved.
|
|
71
|
-
|
|
72
|
-
**Merge order.** Merge the branch with the smallest hotspot footprint first. A branch touching `CLAUDE.md`, a context entry, or a regenerated `index.md` merges last, and its siblings rebase on the new `main` once it lands.
|
|
73
|
-
|
|
74
|
-
**Rebase before the next merge.** After one squash-merge, each sibling is behind `main` and may carry a stale copy of a shared file. The branch merging second resolves, in the session that built it and after the first lands, never against a sibling still building: run `/review-address` there, which trial-merges against `origin/main` and rebases a branch that no longer merges or whose files `main` changed. Push, then merge. Never force-merge a stale branch.
|
|
42
|
+
Merge order matters only when two branches touch the same file. Expect to rebase over `CLAUDE.md`, `tooling/**`, `canon/context/context-model.md`, `docs/agents/`, and any folder's `index.md`. Resolve an `index.md` conflict with `canon indexes regen` over the rebased tree.
|
|
75
43
|
|
|
76
|
-
**
|
|
77
|
-
|
|
78
|
-
|
|
44
|
+
- **Fan-in.** Batches of one change sharing edge files ship as one pull request, opened by an integrator that merges each member branch. See `claude/skills/plan-feature/references/batches.md`.
|
|
45
|
+
- **Merge order.** Merge the smallest hotspot footprint first, and a branch touching `CLAUDE.md` or a context entry last.
|
|
46
|
+
- **Rebase.** The branch merging second runs `/review-address`, which trial-merges against `origin/main` and rebases. Push, then merge.
|
|
47
|
+
- **Clean up.** Run `/git-worktree cleanup` to remove merged worktrees. To start fresh, `ExitWorktree(action: "keep")`, then `/session-worktree <new-name>`.
|
|
48
|
+
- **Wrong call.** If a rebase needs a decision the tree does not carry, land one branch before starting the next.
|
|
79
49
|
|
|
80
50
|
## The task board
|
|
81
51
|
|
|
82
|
-
`.canon/tasks/` is gitignored and resolves at the main worktree root,
|
|
83
|
-
|
|
84
|
-
A hand-maintained `priority.md` sits beside the index carrying execution order and what each task is waiting on, which the alphabetical index cannot express.
|
|
85
|
-
|
|
86
|
-
`canon tasks validate` reads a row against its own table before it reads anything the row claims. A blank or prose line closes the table above it, so a row stranded there is checked against the line behind it rather than parsed as a continuation, and a row that clears that test still has its cell count checked against its header. A `## Needs a plan` row that states its own position, searched for `<ordinal> here` or the bare word `last` anywhere in the cell rather than at its start, is checked against where it actually sits, which is what catches a gap, a duplicate, and a sequence starting somewhere other than first alike.
|
|
87
|
-
|
|
88
|
-
Past that shape, it checks what a surviving row claims against what the tree holds: every plan pointer resolves, every task file is named by a board row or a backlog line and never by both, no task sits in two groups, and every row marked ready names its files. One check across both surfaces is what lets a task move between the board and the backlog without the move reading as a dropped file. Paths two ready rows share go to a `shared` array moving no exit code, the candidate list the orchestrator's conflict check reads. Blockers re-takes what a parked row waits on, reporting one whose cited task reached the trunk and one whose cited file nothing running still holds. A cited task settles the row by being archived, or by closing every outcome and naming a pull request the trunk carries, since the checkbox alone is marked while the branch is still in review. Both halves read a citation out of the blocker cell, so a row citing neither is reported as untested rather than counted clean, and so is a cited task the trunk could not answer for. It reports and never writes, because a row is the orchestrator's claim and a validator repairing one would assert the claim it exists to test. Nothing fires it automatically, since the board is gitignored per-machine scratch with no shared moment to hang a hook on, so the orchestrator's sweep calls it at the point the readiness claim is made and follows it with the parked re-test.
|
|
89
|
-
|
|
90
|
-
`canon:task-board` creates the file, holding the filename convention and the frontmatter contract so a malformed write cannot break the index for every sibling, and declines a task decided against. `canon:task-complete` marks a shipped task's outcomes and moves one the merge hook left to `.canon/tasks/archive/`. Creation is where the origin invariant is enforced: every task names a plan, a groundwork folder, an intake folder, or an issue, since a task with no origin is either lost context or work nobody decided to do.
|
|
52
|
+
`.canon/tasks/` is gitignored and resolves at the main worktree root, one file per task. A hook generates `index.md`, and `priority.md` carries execution order and blockers.
|
|
91
53
|
|
|
92
|
-
|
|
54
|
+
`canon tasks validate` reports and never writes:
|
|
93
55
|
|
|
94
|
-
|
|
56
|
+
- A row's cell count must match its header, and a `## Needs a plan` row stating its position is checked against where it sits
|
|
57
|
+
- Every plan pointer resolves, every task file is named once, and every ready row names its files
|
|
58
|
+
- A parked row is reported when its cited task reached the trunk
|
|
95
59
|
|
|
96
|
-
|
|
60
|
+
`canon:task-board` creates a task file, and `canon:task-complete` marks outcomes. The `post-merge` hook archives the task a merged pull request closed, with its plan, and a `post-rewrite` hook does the same for a rebase pull. Both archive only when the merge carried a PR number and the task is closed.
|
|
97
61
|
|
|
98
|
-
|
|
62
|
+
`CANON_SKIP_RECLAIM`, `CANON_SKIP_UPGRADE`, and `CANON_SKIP_PLUGIN_UPDATE` turn off the three hook steps that act on the machine.
|
|
@@ -6,34 +6,32 @@ category: Workflow
|
|
|
6
6
|
|
|
7
7
|
# Skill map on request
|
|
8
8
|
|
|
9
|
-
These
|
|
9
|
+
These skills serve a request rather than a moment. With the [skill map](skill-map.md) they cover every plugin skill once.
|
|
10
10
|
|
|
11
11
|
## Generate an artifact on demand
|
|
12
12
|
|
|
13
|
-
| Skill | When to use
|
|
14
|
-
| ------------------------- |
|
|
15
|
-
| `canon:create-rule` |
|
|
16
|
-
| `canon:create-skill` |
|
|
17
|
-
| `canon:draft-doc` |
|
|
18
|
-
| `canon:draft-ready` |
|
|
19
|
-
| `canon:draft-figure` |
|
|
20
|
-
| `canon:ci-workflow` |
|
|
21
|
-
| `canon:draft-slides` |
|
|
22
|
-
| `canon:draft-screencast` |
|
|
23
|
-
| `canon:record-screencast` |
|
|
24
|
-
| `canon:draft-identity` |
|
|
13
|
+
| Skill | When to use |
|
|
14
|
+
| ------------------------- | ------------------------------------------------- |
|
|
15
|
+
| `canon:create-rule` | A project rule the toolkit does not ship |
|
|
16
|
+
| `canon:create-skill` | A new `SKILL.md` |
|
|
17
|
+
| `canon:draft-doc` | A new `docs/` page, context entry, or `README.md` |
|
|
18
|
+
| `canon:draft-ready` | Finished files a worker should copy |
|
|
19
|
+
| `canon:draft-figure` | A figure or architecture view inside a doc |
|
|
20
|
+
| `canon:ci-workflow` | A GitHub Actions workflow file |
|
|
21
|
+
| `canon:draft-slides` | A deck rendered to editable PowerPoint |
|
|
22
|
+
| `canon:draft-screencast` | A recording script with beats seeded |
|
|
23
|
+
| `canon:record-screencast` | Recording a screencast draft into a finished mp4 |
|
|
24
|
+
| `canon:draft-identity` | A logo mark and social card |
|
|
25
25
|
|
|
26
26
|
## Answer a question at any point
|
|
27
27
|
|
|
28
|
-
| Skill | When to use
|
|
29
|
-
| --------------------------- |
|
|
30
|
-
| `canon:canon-cli` | To pick
|
|
31
|
-
| `canon:youtube-transcripts` |
|
|
32
|
-
| `canon:read-frames` | To read a recorded demo back frame by frame
|
|
33
|
-
| `canon:teach-workspace` | To learn a subject across sessions
|
|
34
|
-
| `canon:markdown-craft` | Before a substantial markdown edit
|
|
35
|
-
| `canon:write-human` | Before drafting or revising prose
|
|
28
|
+
| Skill | When to use |
|
|
29
|
+
| --------------------------- | ----------------------------------------------------- |
|
|
30
|
+
| `canon:canon-cli` | To pick a `canon` verb, or learn which can lose edits |
|
|
31
|
+
| `canon:youtube-transcripts` | A video transcript wanted as context |
|
|
32
|
+
| `canon:read-frames` | To read a recorded demo back frame by frame |
|
|
33
|
+
| `canon:teach-workspace` | To learn a subject across sessions |
|
|
34
|
+
| `canon:markdown-craft` | Before a substantial markdown edit |
|
|
35
|
+
| `canon:write-human` | Before drafting or revising prose |
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
A learning workspace produces two halves and only one of them leaves. A lesson is worked through once and stays in the workspace, and a reference page or a glossary carries no learner, so it belongs wherever the project already keeps prose on that subject. Asking `canon:teach-workspace` to promote sorts each durable page by who owns its subject, sending an Anthropic-owned subject to the wiki, an internal one to the matching context entry, and everything else, subject-neutral material included, to the public docs. It proposes and waits, because a promoted page is public prose that needs a line naming who owns the subject, and it writes nothing to a destination: each page the operator confirms goes to a handoff file that `canon:teach-workspace` folds in from a branch in its fold mode. A project with no wiki folder gets a refusal naming `canon wiki init` rather than a folder it never asked for.
|
|
37
|
+
Ask `canon:teach-workspace` to promote a learning workspace's reference pages and glossaries. It proposes a destination per page and waits. An Anthropic-owned subject goes to the wiki, an internal one to the matching context entry, and the rest to the public docs. A project with no wiki folder gets a refusal naming `canon wiki init`.
|
|
@@ -6,103 +6,99 @@ category: Workflow
|
|
|
6
6
|
|
|
7
7
|
# Skill map
|
|
8
8
|
|
|
9
|
-
Groups run in the order a project meets them.
|
|
10
|
-
|
|
11
|
-
This page and [skill map on request](skill-map-on-request.md) are the corpus the coverage claim is measured against: every name `canon claude skills list --names` reports takes exactly one row across the two. A skill serving two moments sits at the earlier one, this page counting as earlier than the sibling, and a mention on any other page is prose rather than routing. The sibling holds the groups that answer a request rather than mark a moment.
|
|
12
|
-
|
|
13
|
-
Each row sits under the group its skill's `metadata.family` names. The landing page's skills field groups by that field and reads each row's text from both pages, so its build refuses a skill with no row, a row naming no skill, a row filed under another group, and a heading on either page naming no family group, even one with no rows under it. A new group takes its vocabulary entry in `src/claude/skills-families.ts` before its heading lands here.
|
|
9
|
+
Groups run in the order a project meets them. Every name `canon claude skills list --names` reports takes one row across this page and [skill map on request](skill-map-on-request.md), under the group its `metadata.family` names.
|
|
14
10
|
|
|
15
11
|
## Set up a project
|
|
16
12
|
|
|
17
|
-
| Skill | When to use
|
|
18
|
-
| -------------------- |
|
|
19
|
-
| `canon:target-setup` | On a fresh scaffold, to
|
|
20
|
-
| `canon:deploy-app` |
|
|
13
|
+
| Skill | When to use |
|
|
14
|
+
| -------------------- | --------------------------------------------- |
|
|
15
|
+
| `canon:target-setup` | On a fresh scaffold, to run the install chain |
|
|
16
|
+
| `canon:deploy-app` | When a project is ready to publish |
|
|
21
17
|
|
|
22
18
|
## Decide what to build
|
|
23
19
|
|
|
24
|
-
| Skill | When to use
|
|
25
|
-
| -------------------------- |
|
|
26
|
-
| `canon:plan-intake` |
|
|
27
|
-
| `canon:plan-intake-answer` |
|
|
28
|
-
| `canon:backlog-triage` |
|
|
29
|
-
| `canon:plan-groundwork` |
|
|
30
|
-
| `canon:decision-escalate` |
|
|
31
|
-
| `canon:draft-and-pick` |
|
|
32
|
-
| `canon:canvas-board` |
|
|
33
|
-
| `canon:task-board` |
|
|
34
|
-
| `canon:plan-feature` |
|
|
35
|
-
| `canon:codebase-layout` |
|
|
20
|
+
| Skill | When to use |
|
|
21
|
+
| -------------------------- | -------------------------------------------------- |
|
|
22
|
+
| `canon:plan-intake` | The input is a pile of findings |
|
|
23
|
+
| `canon:plan-intake-answer` | An intake folder holds unread slots |
|
|
24
|
+
| `canon:backlog-triage` | The backlog needs pruning |
|
|
25
|
+
| `canon:plan-groundwork` | The state is unmeasured and approaches compete |
|
|
26
|
+
| `canon:decision-escalate` | Open decisions turn on your preference |
|
|
27
|
+
| `canon:draft-and-pick` | The call is taste, wanting candidates side by side |
|
|
28
|
+
| `canon:canvas-board` | A direction should be drawn as editable frames |
|
|
29
|
+
| `canon:task-board` | A decided item needs a file on the board |
|
|
30
|
+
| `canon:plan-feature` | The approach is settled and needs a plan |
|
|
31
|
+
| `canon:codebase-layout` | A change adds a file and needs a folder |
|
|
36
32
|
|
|
37
33
|
## Build the feature
|
|
38
34
|
|
|
39
|
-
| Skill | When to use
|
|
40
|
-
| ----------------------------- |
|
|
41
|
-
| `canon:session-worktree` | At
|
|
42
|
-
| `canon:auto-ship` | After plan approval, to chain implement
|
|
43
|
-
| `canon:test-first` | Before implementing a planned change
|
|
44
|
-
| `canon:test-craft` |
|
|
45
|
-
| `canon:build-in-slices` | While building
|
|
46
|
-
| `canon:api-design` |
|
|
47
|
-
| `canon:deprecation-migration` |
|
|
48
|
-
| `canon:code-craft` | Before writing a function, class, or module
|
|
49
|
-
| `canon:review-craft` |
|
|
50
|
-
| `canon:search-craft` | Before searching outside the project
|
|
51
|
-
| `canon:systematic-debugging` |
|
|
52
|
-
| `canon:design-taste` |
|
|
53
|
-
| `canon:video-craft` | Before composing or judging a video
|
|
54
|
-
| `canon:ui-checklist` | After a UI change, to
|
|
35
|
+
| Skill | When to use |
|
|
36
|
+
| ----------------------------- | -------------------------------------------------- |
|
|
37
|
+
| `canon:session-worktree` | At plan-to-execute, for an isolated tree |
|
|
38
|
+
| `canon:auto-ship` | After plan approval, to chain implement through PR |
|
|
39
|
+
| `canon:test-first` | Before implementing a planned change |
|
|
40
|
+
| `canon:test-craft` | Writing or changing a test |
|
|
41
|
+
| `canon:build-in-slices` | While building, to commit each slice |
|
|
42
|
+
| `canon:api-design` | Changing what a caller sees |
|
|
43
|
+
| `canon:deprecation-migration` | Deleting or replacing code something may call |
|
|
44
|
+
| `canon:code-craft` | Before writing a function, class, or module |
|
|
45
|
+
| `canon:review-craft` | Reviewing a change |
|
|
46
|
+
| `canon:search-craft` | Before searching outside the project |
|
|
47
|
+
| `canon:systematic-debugging` | A test fails or a bug surfaces |
|
|
48
|
+
| `canon:design-taste` | Drafting or judging an interface |
|
|
49
|
+
| `canon:video-craft` | Before composing or judging a video |
|
|
50
|
+
| `canon:ui-checklist` | After a UI change, to list what to check |
|
|
55
51
|
|
|
56
52
|
## Check the work before it leaves the branch
|
|
57
53
|
|
|
58
|
-
| Skill | When to use
|
|
59
|
-
| ----------------------- |
|
|
60
|
-
| `canon:document-health` |
|
|
61
|
-
| `canon:ux-audit` | To read UI source for missing states
|
|
62
|
-
| `canon:ux-measure` | To
|
|
54
|
+
| Skill | When to use |
|
|
55
|
+
| ----------------------- | ---------------------------------------------- |
|
|
56
|
+
| `canon:document-health` | Documents must answer for length and staleness |
|
|
57
|
+
| `canon:ux-audit` | To read UI source for missing states |
|
|
58
|
+
| `canon:ux-measure` | To measure paint, processor, and layout cost |
|
|
63
59
|
|
|
64
60
|
## Ship it
|
|
65
61
|
|
|
66
|
-
| Skill | When to use
|
|
67
|
-
| --------------------- |
|
|
68
|
-
| `canon:git-ship` | To run the
|
|
69
|
-
| `canon:context-fold` |
|
|
70
|
-
| `canon:task-complete` | After the fold, to mark
|
|
71
|
-
| `canon:docs-sync` |
|
|
72
|
-
| `canon:git-stage` |
|
|
73
|
-
| `canon:git-commit` |
|
|
74
|
-
| `canon:git-branch` |
|
|
75
|
-
| `canon:git-pr` |
|
|
62
|
+
| Skill | When to use |
|
|
63
|
+
| --------------------- | --------------------------------------------- |
|
|
64
|
+
| `canon:git-ship` | To run the post-feature chain through open PR |
|
|
65
|
+
| `canon:context-fold` | The diff left a context entry untrue |
|
|
66
|
+
| `canon:task-complete` | After the fold, to mark shipped outcomes |
|
|
67
|
+
| `canon:docs-sync` | A change left `README.md` or `docs/` stale |
|
|
68
|
+
| `canon:git-stage` | Staged changes span several concerns |
|
|
69
|
+
| `canon:git-commit` | Staged changes are one concern |
|
|
70
|
+
| `canon:git-branch` | A branch needs creating, naming, or renaming |
|
|
71
|
+
| `canon:git-pr` | A pull request needs a title and body |
|
|
76
72
|
|
|
77
73
|
## After the pull request opens
|
|
78
74
|
|
|
79
|
-
| Skill | When to use
|
|
80
|
-
| ---------------------- |
|
|
81
|
-
| `canon:review-pr` | From an independent session, to post findings
|
|
82
|
-
| `canon:review-ui` | Beside
|
|
83
|
-
| `canon:review-address` |
|
|
84
|
-
| `canon:git-followup` |
|
|
85
|
-
| `canon:git-split` |
|
|
86
|
-
| `canon:git-issue` |
|
|
87
|
-
| `canon:git-worktree` | After a
|
|
75
|
+
| Skill | When to use |
|
|
76
|
+
| ---------------------- | --------------------------------------------- |
|
|
77
|
+
| `canon:review-pr` | From an independent session, to post findings |
|
|
78
|
+
| `canon:review-ui` | Beside code review, to drive the checklist |
|
|
79
|
+
| `canon:review-address` | As the worker, to fix posted findings |
|
|
80
|
+
| `canon:git-followup` | A small edit on a branch with an open PR |
|
|
81
|
+
| `canon:git-split` | A branch carries unrelated commits |
|
|
82
|
+
| `canon:git-issue` | Something belongs on the tracker |
|
|
83
|
+
| `canon:git-worktree` | After a merge, to reclaim worktrees |
|
|
88
84
|
|
|
89
85
|
## Run several tracks at once
|
|
90
86
|
|
|
91
|
-
| Skill | When to use
|
|
92
|
-
| ------------------------- |
|
|
93
|
-
| `canon:role-orchestrator` | To assert the control session that
|
|
94
|
-
| `canon:role-planner` | To assert the
|
|
95
|
-
| `canon:role-reviewer` | To assert the
|
|
96
|
-
| `canon:role-worker` | To assert the
|
|
97
|
-
| `canon:session-relay` |
|
|
98
|
-
| `canon:session-resume` | At
|
|
99
|
-
| `canon:session-compact` | Before a compaction
|
|
100
|
-
| `canon:session-map` |
|
|
87
|
+
| Skill | When to use |
|
|
88
|
+
| ------------------------- | --------------------------------------------------- |
|
|
89
|
+
| `canon:role-orchestrator` | To assert the control session that dispatches |
|
|
90
|
+
| `canon:role-planner` | To assert the role of a session writing a plan |
|
|
91
|
+
| `canon:role-reviewer` | To assert the role of a session reviewing one PR |
|
|
92
|
+
| `canon:role-worker` | To assert the role of a session building one branch |
|
|
93
|
+
| `canon:session-relay` | This session owes another a message |
|
|
94
|
+
| `canon:session-resume` | At session start, to pick up a previous one |
|
|
95
|
+
| `canon:session-compact` | Before a compaction, to write a handoff |
|
|
96
|
+
| `canon:session-map` | When an orchestrating session closes |
|
|
101
97
|
|
|
102
98
|
## Keep the project current with the toolkit
|
|
103
99
|
|
|
104
|
-
| Skill | When to use
|
|
105
|
-
| ----------------------------- |
|
|
106
|
-
| `canon:target-check` | In a target
|
|
107
|
-
| `canon:canon-feedback` |
|
|
108
|
-
| `canon:canon-feedback-triage` | In the toolkit repo, to file
|
|
100
|
+
| Skill | When to use |
|
|
101
|
+
| ----------------------------- | ---------------------------------------------------- |
|
|
102
|
+
| `canon:target-check` | In a target, to compare each domain with the toolkit |
|
|
103
|
+
| `canon:canon-feedback` | The toolkit is broken, missing, or off |
|
|
104
|
+
| `canon:canon-feedback-triage` | In the toolkit repo, to file feedback issues |
|