@erclx/canon 5.68.0 → 5.70.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/CHANGELOG.md +36 -0
- package/README.md +33 -159
- package/assets/brand/mark.svg +17 -9
- package/claude/.claude-plugin/plugin.json +1 -1
- package/claude/skills/app-drive/REQUIREMENT.md +5 -5
- package/claude/skills/app-drive/SKILL.md +17 -6
- package/claude/skills/app-drive/references/drive-record.md +61 -8
- package/claude/skills/app-drive/references/isolate.md +1 -1
- package/claude/skills/canon-cli/SKILL.md +2 -2
- package/claude/skills/canon-feedback/REQUIREMENT.md +1 -1
- package/claude/skills/canon-feedback/SKILL.md +1 -1
- package/claude/skills/design-identity/REQUIREMENT.md +4 -4
- package/claude/skills/design-identity/SKILL.md +7 -7
- package/claude/skills/{pick-by-eye → design-pick}/REQUIREMENT.md +6 -6
- package/claude/skills/{pick-by-eye → design-pick}/SKILL.md +19 -10
- package/claude/skills/{pick-by-eye → design-pick}/references/board.md +17 -11
- package/claude/skills/design-pick/references/design-config.md +33 -0
- package/claude/skills/design-record/REQUIREMENT.md +2 -2
- package/claude/skills/design-record/SKILL.md +1 -1
- package/claude/skills/design-taste/REQUIREMENT.md +2 -2
- package/claude/skills/design-taste/SKILL.md +3 -3
- package/claude/skills/design-taste/references/preflight.md +1 -1
- package/claude/skills/git-issue/REQUIREMENT.md +1 -1
- package/claude/skills/git-issue/references/issue.md +1 -1
- package/claude/skills/plan-feature/SKILL.md +1 -1
- package/claude/skills/plan-feature/references/plan.md +21 -6
- package/claude/skills/plan-groundwork/SKILL.md +1 -1
- package/claude/skills/pr-evidence/references/evidence.md +2 -2
- package/claude/skills/role-orchestrator/references/orchestrator-launch.md +3 -3
- package/claude/skills/role-orchestrator/references/orchestrator-parked.md +1 -1
- package/claude/skills/role-orchestrator/references/orchestrator-planning-wait.md +24 -0
- package/claude/skills/role-planner/SKILL.md +4 -2
- package/claude/skills/role-worker/SKILL.md +5 -6
- package/claude/skills/task-board/references/tasks.md +1 -1
- package/claude/skills/task-complete/references/receipt-sweep.md +1 -1
- package/claude/skills/{ux-audit → ui-audit}/REQUIREMENT.md +3 -3
- package/claude/skills/{ux-audit → ui-audit}/SKILL.md +7 -7
- package/claude/skills/ui-checklist/REQUIREMENT.md +1 -1
- package/claude/skills/ui-craft/SKILL.md +1 -1
- package/claude/skills/ui-craft/references/copy.md +4 -1
- package/claude/skills/{ui-record → ui-film}/REQUIREMENT.md +6 -4
- package/claude/skills/{ui-record → ui-film}/SKILL.md +26 -13
- package/claude/skills/ui-film/references/compose-craft.md +81 -0
- package/claude/skills/{ui-record → ui-film}/references/config.md +9 -4
- package/claude/skills/{ui-record → ui-film}/references/handoff.md +17 -7
- package/claude/skills/{ui-record → ui-film}/references/pr-clip.md +5 -5
- package/claude/skills/{ui-record → ui-film}/references/take-craft.md +28 -2
- package/claude/skills/{ux-measure → ui-measure}/REQUIREMENT.md +3 -3
- package/claude/skills/{ux-measure → ui-measure}/SKILL.md +6 -6
- package/docs/agents/audits.md +1 -1
- package/docs/agents/migrate.md +13 -13
- package/docs/index.md +1 -0
- package/docs/migrations/by-hand.md +107 -0
- package/docs/migrations/by-verb.md +118 -0
- package/docs/migrations/index.md +14 -0
- package/docs/target/index.md +1 -2
- package/docs/target/projects.md +3 -3
- package/docs/target/sync.md +23 -3
- package/docs/workflow/ai-workflow.md +1 -1
- package/docs/workflow/skill-map-on-request.md +1 -2
- package/docs/workflow/skill-map.md +9 -10
- package/docs/workflow/visual-design-workflow.md +6 -1
- package/governance/ledger/claude/background.md +26 -0
- package/governance/ledger/skills/ui-craft/copy.md +8 -4
- package/governance/rules/claude/background.md +19 -0
- package/governance/stacks/base.toml +1 -0
- package/package.json +6 -4
- package/scripts/ci/install-playwright-deps.sh +52 -0
- package/scripts/core/design-sync.ts +204 -0
- package/scripts/core/regen-web-favicon.ts +27 -12
- package/scripts/core/regen-web-previews.ts +8 -1
- package/scripts/core/render-film.ts +179 -0
- package/src/capture/frame-values.ts +12 -12
- package/src/claude/cases/authoring.ts +2 -2
- package/src/claude/cases/misc.ts +1 -1
- package/src/claude/cases/setup.ts +0 -5
- package/src/claude/cases/workflow.ts +6 -6
- package/src/commands/fixtures/gh.sh +64 -0
- package/src/commands/gov.ts +33 -3
- package/src/commands/migrate.ts +12 -2
- package/src/commands/records.ts +3 -2
- package/src/commands/sandbox.ts +9 -2
- package/src/commands/take.ts +159 -11
- package/src/commands/tasks.ts +183 -0
- package/src/design/favicon.ts +85 -13
- package/src/design/reference.ts +98 -0
- package/src/design/render.ts +16 -14
- package/src/design/tokens.ts +4 -3
- package/src/gate/stages.ts +8 -2
- package/src/gov/audit.ts +48 -11
- package/src/gov/detect.ts +1 -1
- package/src/init/steps.ts +2 -2
- package/src/markdown/scope.ts +9 -14
- package/src/migrate/record-layout.ts +5 -3
- package/src/migrate/skill-names.ts +21 -4
- package/src/migrate/status.ts +3 -3
- package/src/records/validate.ts +15 -2
- package/src/sandbox/expect.ts +32 -0
- package/src/sandbox/headless/dispatch-shim.sh +15 -0
- package/src/sandbox/headless/dispatch.ts +12 -14
- package/src/sandbox/headless/run.ts +6 -3
- package/src/sandbox/stub-gh.sh +26 -0
- package/src/sandbox/stub-remote.ts +8 -29
- package/src/sync/engine.ts +1 -1
- package/src/take/camera.ts +100 -11
- package/src/take/film.ts +55 -4
- package/src/take/fixtures/input.html +138 -0
- package/src/take/keys.ts +193 -0
- package/src/take/log.ts +94 -1
- package/src/take/perform.ts +165 -10
- package/src/take/plan.ts +101 -6
- package/src/take/pointer.ts +2 -1
- package/src/take/screencast.ts +28 -3
- package/src/take/stepper.ts +141 -23
- package/src/take/zoom/NOTICE.md +1 -1
- package/src/tasks/launch-wait.ts +160 -0
- package/tooling/claude/reference.md +1 -1
- package/claude/skills/canon-feedback-triage/REQUIREMENT.md +0 -34
- package/claude/skills/canon-feedback-triage/SKILL.md +0 -98
- package/claude/skills/plan-ready/REQUIREMENT.md +0 -35
- package/claude/skills/plan-ready/SKILL.md +0 -136
- package/claude/skills/plan-ready/references/assembly.md +0 -75
- package/claude/skills/plan-ready/references/ready.md +0 -128
- package/docs/target/migrations.md +0 -203
- /package/claude/skills/{pick-by-eye → design-pick}/references/live-arms.md +0 -0
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Ready reference
|
|
3
|
-
description: Folder layout, ordinal naming, the overview frontmatter, the thin-plan contract, and the archive lifecycle for a finished-file handoff
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Ready reference
|
|
7
|
-
|
|
8
|
-
Applies to a ready folder at `.canon/ready/<nn>-<slug>/`. A warm session that has already written a finished file uses it to hand the exact text to the worker that ships it, since a cold worker reading a plan's description writes the file again from scratch.
|
|
9
|
-
|
|
10
|
-
The folder holds the finished files at their destination paths, so the worker copies rather than authors. It is gitignored, which is why the archive step below is a move rather than a cleanup.
|
|
11
|
-
|
|
12
|
-
- Where a records remote is configured, `canon records push` and `canon records pull` protect it against the machine being lost
|
|
13
|
-
- Where none is, they refuse with `no-remote`
|
|
14
|
-
- Neither protects a folder deleted before anyone has pushed
|
|
15
|
-
|
|
16
|
-
## Contents
|
|
17
|
-
|
|
18
|
-
- [Scope](#scope)
|
|
19
|
-
- [What a working ready folder looks like](#what-a-working-ready-folder-looks-like)
|
|
20
|
-
- [Folder name](#folder-name)
|
|
21
|
-
- [00-overview.md](#00-overviewmd) <!-- canon-allow-reference: a heading anchor, not a pull request number -->
|
|
22
|
-
- [The mirrored tree](#the-mirrored-tree)
|
|
23
|
-
- [The thin-plan contract](#the-thin-plan-contract)
|
|
24
|
-
- [Lifecycle](#lifecycle)
|
|
25
|
-
- [Anti-patterns](#anti-patterns)
|
|
26
|
-
- [Template](#template)
|
|
27
|
-
|
|
28
|
-
## Scope
|
|
29
|
-
|
|
30
|
-
The `plan-ready` skill owns the procedure, and this standard owns the shape. It governs a ready folder under `.canon/ready/<nn>-<slug>/`, being its layout, ordinal naming, the overview's frontmatter, what the mirrored tree holds, the thin-plan contract that ships it, and the lifecycle from the live folder to the archive.
|
|
31
|
-
|
|
32
|
-
Does not govern:
|
|
33
|
-
|
|
34
|
-
- The thin plan itself, its filename, its sections, and its suggested-and-answer contract: `plan.md`
|
|
35
|
-
- The task file that reaches a ready folder through a plan, and the origin line pointing back at it: `tasks.md`
|
|
36
|
-
- Voice, rhythm, and sentence construction: the `write-human` skill
|
|
37
|
-
- Headings, punctuation, word choice, and file references: `markdown.md`
|
|
38
|
-
- Whether a change earns a ready folder over a plan a worker builds from scratch, which belongs to the warm session deciding how to hand off its own work
|
|
39
|
-
|
|
40
|
-
## What a working ready folder looks like
|
|
41
|
-
|
|
42
|
-
A ready folder works when a worker that has never seen the warm session's conversation can copy from it alone:
|
|
43
|
-
|
|
44
|
-
- Which destination path does each file land at, and does the folder hold nothing else?
|
|
45
|
-
- What is the worker still responsible for that the files themselves do not carry, such as a docs sync, a sandbox scenario, or a test?
|
|
46
|
-
- What branch type does the change take?
|
|
47
|
-
- Is every path the folder mirrors also declared in the thin plan's `## Files to touch`?
|
|
48
|
-
|
|
49
|
-
A ready folder failing these is non-conforming even when it satisfies every shape rule below.
|
|
50
|
-
|
|
51
|
-
## Folder name
|
|
52
|
-
|
|
53
|
-
- Name the folder `<nn>-<slug>`, a two-digit zero-padded ordinal followed by a kebab-case slug matching the plan's own slug.
|
|
54
|
-
- The ordinal marks a folder per handoff, opened once by the warm session that writes it
|
|
55
|
-
- It runs on its own sequence, separate from groundwork and intake's shared one, since a ready folder is not a measurement track
|
|
56
|
-
- The first folder opened takes `01`. After that, read the highest existing `.canon/ready/<nn>-*/` folder, including the archive, and take the next integer.
|
|
57
|
-
- Never renumber an existing folder. The ordinal is the order it opened, and the pull request that shipped it cites the folder by that name.
|
|
58
|
-
|
|
59
|
-
## 00-overview.md
|
|
60
|
-
|
|
61
|
-
Every ready folder carries `00-overview.md` at its root, beside the mirrored tree. It orients the worker and states what the files themselves cannot.
|
|
62
|
-
|
|
63
|
-
- `title` (required): the change in sentence case
|
|
64
|
-
- `description` (required): one line naming what the handoff carries
|
|
65
|
-
- `type` (required): the branch type the plan should take, one of the types `branch.md` fixes
|
|
66
|
-
- `destinations` (required): the list of destination paths the folder mirrors, matching the thin plan's `## Files to touch` exactly
|
|
67
|
-
|
|
68
|
-
```yaml
|
|
69
|
-
---
|
|
70
|
-
title: <Change in sentence case>
|
|
71
|
-
description: <one line naming what the handoff carries>
|
|
72
|
-
type: <feat | fix | chore | ...>
|
|
73
|
-
destinations:
|
|
74
|
-
- <path/to/file>
|
|
75
|
-
---
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
Below the frontmatter, state in prose what the worker still owns beyond copying the files: a docs sync, a sandbox scenario update, a test the files do not include, or "nothing further" where the files are the whole of the change.
|
|
79
|
-
|
|
80
|
-
The overview body and the thin plan both hold to the six structure criteria under `### Structure` in `${CLAUDE_SKILL_DIR}/../plan-feature/references/plan.md`. The mirrored files are exempt, since each lands as its destination's own standard fixes.
|
|
81
|
-
|
|
82
|
-
## The mirrored tree
|
|
83
|
-
|
|
84
|
-
Every other file in the folder sits at the same relative path its destination has in the project.
|
|
85
|
-
|
|
86
|
-
- For example, `standards/ready.md` in the destination tree sits at `<nn>-<slug>/standards/ready.md` in the ready folder <!-- canon-allow-reference: a target tree -->
|
|
87
|
-
- Carry no file the destination tree would not carry. The folder is a source for `git mv`-shaped copies, never a scratch pad, and anything else goes in the plan or the pull request body.
|
|
88
|
-
- Write each file exactly as it should land. The worker copies verbatim and edits only what the gate or the overview's list requires, so a placeholder ships as written.
|
|
89
|
-
|
|
90
|
-
## The thin-plan contract
|
|
91
|
-
|
|
92
|
-
- A ready folder ships through an ordinary task row and a plan at `.canon/plans/feature-<slug>.md`, per `plan.md`. No new plan shape exists for it.
|
|
93
|
-
- Name the ready folder in the plan's `## Constraints`, stating that the folder's files are the verbatim source for the paths the plan's `## Files to touch` lists.
|
|
94
|
-
- List every destination path in `## Files to touch`, matching `00-overview.md`'s `destinations` field
|
|
95
|
-
- A path the plan omits is invisible to `plan-reach`'s collision check, so a mismatch between the two lists is a defect in the plan, not a variant
|
|
96
|
-
- Keep the plan thin. Its `## Files to touch` entries may point at the folder's copy for the reason behind each file, since the overview and the files carry that detail.
|
|
97
|
-
|
|
98
|
-
## Lifecycle
|
|
99
|
-
|
|
100
|
-
- Write the ready folder in the same session that writes the files it carries. A folder assembled later from memory is a plan with extra steps, not a handoff.
|
|
101
|
-
- Leave the move to `canon tasks archive`, which carries the folder to `.canon/ready/archive/<nn>-<slug>/` with its plan when the shipping task archives, retargeting its `Ready:` line
|
|
102
|
-
- A plan another live task still cites keeps its folder
|
|
103
|
-
- Never delete a ready folder. The archived copy sits beside the merged pull request as the exact text that shipped, the way an archived plan sits beside the reasoning that produced it.
|
|
104
|
-
|
|
105
|
-
## Anti-patterns
|
|
106
|
-
|
|
107
|
-
- **The folder with an undeclared destination.** A file the plan's `## Files to touch` omits passes the collision check unseen, so a second track can write the same path with neither side finding out.
|
|
108
|
-
- **The rewritten copy.** A worker that reads the folder's files as inspiration and writes its own version loses the exact text the handoff exists to carry.
|
|
109
|
-
- **The folder as scratch.** Notes, alternates, or draft passages left in the folder beside the real files leave the worker guessing which is the source.
|
|
110
|
-
- **The folder left live after shipping.** An unmoved folder reads as unshipped work to the next session listing it. The verb skips one whose task has no `Ready:` line and whose plan cites no folder.
|
|
111
|
-
|
|
112
|
-
## Template
|
|
113
|
-
|
|
114
|
-
```markdown
|
|
115
|
-
.canon/ready/<nn>-<slug>/
|
|
116
|
-
├── 00-overview.md
|
|
117
|
-
└── <path/to/file> # mirrors the destination tree, one entry per file
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
```yaml
|
|
121
|
-
---
|
|
122
|
-
title: <Change in sentence case>
|
|
123
|
-
description: <one line naming what the handoff carries>
|
|
124
|
-
type: <feat | fix | chore | ...>
|
|
125
|
-
destinations:
|
|
126
|
-
- <path/to/file>
|
|
127
|
-
---
|
|
128
|
-
```
|
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Target migrations
|
|
3
|
-
description: One-time moves a project scaffolded under an older toolkit runs before its next sync
|
|
4
|
-
category: Agent surface
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Target migrations
|
|
8
|
-
|
|
9
|
-
Each section is a move a project runs once, when it was scaffolded before the change it names. Run `canon upgrade` first, then `canon migrate status --json` to list the moves a project still needs in the order to run them. The recurring sync that follows is in [target sync](sync.md).
|
|
10
|
-
|
|
11
|
-
`canon:target-update` is the guided path through both. It runs the moves in that order once you approve its preview.
|
|
12
|
-
|
|
13
|
-
## Move the records first, once
|
|
14
|
-
|
|
15
|
-
Gitignored session records, being the task board, plans, review reports, and scratch, moved from `.claude/` to `.canon/`. Run these from inside the project, and read the `ok` field of the `--json` record rather than the exit code.
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
canon tooling sync claude . --write
|
|
19
|
-
canon migrate records --json
|
|
20
|
-
canon migrate records --write --json
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
The first line takes the `.canon/` ignore entry. The second reports and the third applies, repointing files that cite a moved folder and deleting a `.gitignore` line `.canon/` covers, as `dropped`. A line naming an old path keeps it via `canon-keep-record-root` on that line or the nearest non-blank one above.
|
|
24
|
-
|
|
25
|
-
Then sweep the citations inside the records, which the verb above never reaches.
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
canon migrate record-tree --json
|
|
29
|
-
canon migrate record-tree --write --json
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
It covers `diagrams`, `memory`, `plans`, `proposals`, `review`, `tasks`, and `teach`. Read the report before `--write`. The record tree is untracked, and a wrong rewrite has no undo.
|
|
33
|
-
|
|
34
|
-
## Back records up off this machine, once
|
|
35
|
-
|
|
36
|
-
Run `canon records push` once a private repository exists. It prints the one-time setup command when it finds none, and `canon init` prints the same reminder.
|
|
37
|
-
|
|
38
|
-
## Move rules off the flat layout, once
|
|
39
|
-
|
|
40
|
-
Installed rules moved from `.claude/rules/<subdir>/` to `.claude/rules/canon/<subdir>/`. On the flat layout `canon gov sync` exits 0 reporting `No governance surfaces found in target`, and `canon gov install` lands a second copy.
|
|
41
|
-
|
|
42
|
-
```bash
|
|
43
|
-
canon migrate rule-layout --json
|
|
44
|
-
canon migrate rule-layout --write --json
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
Run it once, ahead of `canon gov sync` or `canon gov install`.
|
|
48
|
-
|
|
49
|
-
## Rename the skill citations, once
|
|
50
|
-
|
|
51
|
-
Plugin skills dropped their `claude-` prefix, so `canon:claude-docs` answers as `canon:context-fold` and `canon:claude-tasks` as `canon:task-board`. The five per-kind drafters merged into `write-doc`, and no pointer under an old name ships. <!-- canon-keep-retired -->
|
|
52
|
-
|
|
53
|
-
The seven `draft-` skills took verb-first names for what each makes. `canon migrate skill-names --write` carries a project across, and a pointer under each old name answers a typed invocation until it retires.
|
|
54
|
-
|
|
55
|
-
| Old name | New name |
|
|
56
|
-
| ------------------ | ----------------------------------------------- |
|
|
57
|
-
| `draft-doc` | `write-doc` <!-- canon-keep-retired --> |
|
|
58
|
-
| `draft-figure` | `draw-figure` <!-- canon-keep-retired --> |
|
|
59
|
-
| `draft-identity` | `design-identity` <!-- canon-keep-retired --> |
|
|
60
|
-
| `draft-slides` | `make-deck` <!-- canon-keep-retired --> |
|
|
61
|
-
| `draft-and-pick` | `pick-by-eye` <!-- canon-keep-retired --> |
|
|
62
|
-
| `draft-ready` | `plan-ready` <!-- canon-keep-retired --> |
|
|
63
|
-
| `draft-screencast` | `script-screencast` <!-- canon-keep-retired --> |
|
|
64
|
-
|
|
65
|
-
Replace a citation of a skill with no successor by hand, or delete the sentence.
|
|
66
|
-
|
|
67
|
-
- `canvas` is now `canvas-board`. The sweep rewrites only `canon:canvas` and `skills/canvas`, so replace a bare prose mention by hand. <!-- canon-keep-retired -->
|
|
68
|
-
- `draft-ready` is rewritten only as `canon:draft-ready` and `skills/draft-ready`, since bare it also describes a pull request. Replace a bare mention of the skill by hand. <!-- canon-keep-retired -->
|
|
69
|
-
- `design-extract` and `sketch-design` are replaced by `canon:canvas-board`. <!-- canon-keep-retired -->
|
|
70
|
-
- `review-branch`, `seed-sync`, `restate-plainly`, `bash-cli-script`, `canon-operator`, and `canon-rollout` have no successor <!-- canon-keep-retired -->
|
|
71
|
-
- `create-standard`, `markdown-propose`, `memory-review`, `project-commands`, `repo-metadata`, and `ux-walkthrough` have no successor <!-- canon-keep-retired -->
|
|
72
|
-
|
|
73
|
-
The `memory` record kind left `canon records`, so `canon records validate memory` refuses as an unknown kind and `canon records migrate` is gone.
|
|
74
|
-
|
|
75
|
-
- `canon repo metadata`, `canon autoship`, and the `120-bash` rule are gone, and `canon gov sync` removes the rule <!-- canon-keep-retired -->
|
|
76
|
-
- `memory-capture`, the `603-memory` rule, and the `memory` standard are gone, so send a lesson to the context entry that owns the fact <!-- canon-keep-retired -->
|
|
77
|
-
|
|
78
|
-
Two held files run, `.husky/post-merge` and `.claude/hooks/pr-create-log.sh`, and a stale copy calls a missing binary or names a removed skill. Resync what the toolkit owns before sweeping what the project wrote, and run the second line once per stack, naming a held hook with `--replace`.
|
|
79
|
-
|
|
80
|
-
```bash
|
|
81
|
-
canon gov sync
|
|
82
|
-
canon tooling sync <stack> . --write
|
|
83
|
-
canon migrate skill-names --json
|
|
84
|
-
canon migrate skill-names --write --json
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
## Rename the pull request template headings, once
|
|
88
|
-
|
|
89
|
-
The template headings are now `## Key changes` and `## Technical context`, and `canon labels scan` compares case exactly. Rename them in `.github/pull_request_template.md`, or delete it and run `canon tooling sync base . --write`.
|
|
90
|
-
|
|
91
|
-
## Move the surfaces off `.claude/`, once
|
|
92
|
-
|
|
93
|
-
`context/`, `wireframes/`, `ARCHITECTURE.md`, `REQUIREMENTS.md`, `DESIGN.md`, and the install stamp folder, now `canon/config/`, moved under `canon/`. `rules/`, `skills/`, `hooks/`, and `settings.json` stay where Claude Code reads them.
|
|
94
|
-
|
|
95
|
-
```bash
|
|
96
|
-
canon migrate surface-roots --json
|
|
97
|
-
canon migrate surface-roots --write --json
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
It moves each surface with `git mv` and repoints every tracked citation. No other command notices a surface left at `.claude/`.
|
|
101
|
-
|
|
102
|
-
## Delete the retired snippets, once
|
|
103
|
-
|
|
104
|
-
A project scaffolded while snippets installed may hold `.claude/snippets/` or a root `snippets/`.
|
|
105
|
-
|
|
106
|
-
```bash
|
|
107
|
-
canon sync --check . --json | jq '.reverse'
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
- `dropped` is the toolkit's copy, unchanged, so delete it
|
|
111
|
-
- `unattributed` is often an edited copy, so read what changed first
|
|
112
|
-
- `project` is the project's own content, so leave it
|
|
113
|
-
|
|
114
|
-
From the registry the walk reports `historyUnavailable`, so check both paths by hand.
|
|
115
|
-
|
|
116
|
-
## Stop calling the standards verb, once
|
|
117
|
-
|
|
118
|
-
`canon standards <name>` is gone, and a call now fails with a too-many-arguments error. Replace each call with the skill that owns the standard, at `references/<name>.md`. <!-- canon-allow-reference: verb retired -->
|
|
119
|
-
|
|
120
|
-
| Skill | Standards |
|
|
121
|
-
| ----------------- | ------------------------------------------------------------- |
|
|
122
|
-
| `task-board` | `board`, `tasks`, `tasks-decline` |
|
|
123
|
-
| `context-fold` | `context` |
|
|
124
|
-
| `canvas-board` | `canvas`, `design` <!-- canon-keep-retired --> |
|
|
125
|
-
| `docs-sync` | `docs`, `readme` |
|
|
126
|
-
| `draw-figure` | `figures`, `mermaid` |
|
|
127
|
-
| `create-rule` | `rule` |
|
|
128
|
-
| `create-skill` | `skill`, `skill-paths`, `skill-practice`, `skill-requirement` |
|
|
129
|
-
| `git-branch` | `branch`, `slug` |
|
|
130
|
-
| `git-commit` | `commit`, `versioning` |
|
|
131
|
-
| `git-pr` | `pr`, `publish` |
|
|
132
|
-
| `markdown-craft` | `markdown` |
|
|
133
|
-
| `teach-workspace` | `glossary`, `teach` <!-- canon-keep-retired --> |
|
|
134
|
-
| `plan-groundwork` | `groundwork`, `groundwork-spikes` |
|
|
135
|
-
| `plan-intake` | `intake` |
|
|
136
|
-
| `plan-feature` | `plan`, `plan-lifecycle` |
|
|
137
|
-
| `plan-ready` | `ready` |
|
|
138
|
-
| `write-doc` | `requirements`, `wiki` |
|
|
139
|
-
| `session-map` | `session` |
|
|
140
|
-
|
|
141
|
-
The `standard` name became `skill-reference.md` in `create-skill`.
|
|
142
|
-
|
|
143
|
-
## Keep or delete the wireframes folder, your call
|
|
144
|
-
|
|
145
|
-
The wireframes record is retired, and nothing deletes what a project holds.
|
|
146
|
-
|
|
147
|
-
- `canon/wireframes/` stays yours and unaudited. Keep it as notes or delete it.
|
|
148
|
-
- Delete the `@canon/wireframes/index.md` line in your `CLAUDE.md` with the folder. `canon claude sync` does not rewrite it.
|
|
149
|
-
- `canon gov sync` removes `.claude/rules/canon/standards/wireframes.md`
|
|
150
|
-
|
|
151
|
-
## Keep or delete the retired product files, your call
|
|
152
|
-
|
|
153
|
-
The learning workspace, deck renderer, app recorder, canvas, and design install are retired with their verbs, and nothing deletes what a project holds.
|
|
154
|
-
|
|
155
|
-
- `.canon/teach/` holds HTML that opens as it is <!-- canon-keep-retired -->
|
|
156
|
-
- `.canon/slides/` and a `demos/` folder hold sources nothing renders any more, so delete them once nothing cites them <!-- canon-keep-retired -->
|
|
157
|
-
- Move the `.claude/design/project/` values, `fonts/`, and `fonts.css` to the stylesheet your `canon/DESIGN.md` lead names, then delete `.claude/design/`
|
|
158
|
-
|
|
159
|
-
A reference to a retired skill takes a hand edit.
|
|
160
|
-
|
|
161
|
-
- Replace a `canon:teach-workspace` reference with `canon:teach-craft` by hand, since `canon migrate skill-names` does not rewrite it <!-- canon-keep-retired -->
|
|
162
|
-
- Delete a `canon:make-deck`, `canon:script-screencast`, `canon:record-screencast`, `canon:read-frames`, or `canon:video-craft` reference, since none has a successor <!-- canon-keep-retired -->
|
|
163
|
-
- Delete a `canon:canvas-board` reference too. Frameboard, which `canon:pick-by-eye` drives, reads each `.canon/canvas/` folder as a project, so move a kept page under one <!-- canon-keep-retired -->
|
|
164
|
-
|
|
165
|
-
## Move decisions out of a held architecture record, once
|
|
166
|
-
|
|
167
|
-
The toolkit no longer seeds `canon/ARCHITECTURE.md`, and a held file and its `CLAUDE.md` import stay. Move a trap a session would hit into that domain's `## Gotchas`, then delete the file and its `@canon/ARCHITECTURE.md` line.
|
|
168
|
-
|
|
169
|
-
## Deny subagents and merges, and turn auto memory off, once
|
|
170
|
-
|
|
171
|
-
The seeded `.claude/settings.json` now denies the `Agent` and `Task` tools and both merge commands, and sets `autoMemoryEnabled` to `false`. `canon claude sync` never rewrites a settings file you hold, so it warns while the file holds no default or lacks a merge entry. Removing `Agent` and `Task` later draws no warning.
|
|
172
|
-
|
|
173
|
-
```bash
|
|
174
|
-
canon migrate session-defaults --json
|
|
175
|
-
canon migrate session-defaults --write --json
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
The verb only adds a key that is absent. A person who wants auto memory back sets it in their own `.claude/settings.local.json`.
|
|
179
|
-
|
|
180
|
-
The verb adds `Bash(canon pr merge:*)` and `Bash(gh pr merge:*)` so a session cannot merge. A project migrated before them runs `--write` once more, which also restores `Agent` and `Task` for a person who removed them to allow subagents, so remove them again after.
|
|
181
|
-
|
|
182
|
-
## Move the capture cases out of the harness, once
|
|
183
|
-
|
|
184
|
-
A web project's `e2e/screenshot.ts` is a config. It now loads `CASES` from a seeded `e2e/capture/cases.ts` that sync copies once and never overwrites. A harness you edited is held on `--write`, so the new one lands only once you pass `--replace e2e/screenshot.ts`.
|
|
185
|
-
|
|
186
|
-
- Copy your cases from the old `e2e/screenshot.ts` into `e2e/capture/cases.ts`, then sync with `--replace e2e/screenshot.ts`.
|
|
187
|
-
- Evidence now defaults to `e2e/evidence/`. Set `export const EVIDENCE_ROOT = 'evidence'` in `e2e/capture/cases.ts` to keep a committed baseline at the old path.
|
|
188
|
-
- A run from a folder with no `e2e/capture/cases.ts` exits 1 and names the file.
|
|
189
|
-
|
|
190
|
-
## Fold the ui rules onto one pointer, once
|
|
191
|
-
|
|
192
|
-
Eleven ui rules moved unchanged into the `ui-craft` skill, being `a11y`, `keyboard`, `pointer`, `forms`, `motion`, `ux-controls`, `ux-completeness`, `surface-capture`, `copy`, `interface-casing`, and `link-behavior`. Update the plugin, then sync, which folds each one you hold and `design-taste.md` onto one `craft.md` pointer without local edits.
|
|
193
|
-
|
|
194
|
-
```bash
|
|
195
|
-
canon gov sync .
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
## Group a long paths section in `CLAUDE.md`, once
|
|
199
|
-
|
|
200
|
-
The `## Key paths` section of `CLAUDE.md` now keeps to 5 bullets in a row, and every other section stays exempt. `canon claude sync` never rewrites a `CLAUDE.md` you hold, so it warns with the line of each longer run.
|
|
201
|
-
|
|
202
|
-
- Regroup the section by hand under H3s, each opening on a one-sentence lead.
|
|
203
|
-
- List `CLAUDE.md` in `canon/config/markdown.toml` to gate it from then on.
|
|
File without changes
|