@erclx/canon 5.42.0 → 5.44.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/auto-ship/SKILL.md +3 -3
- package/claude/skills/backlog-triage/references/apply.md +6 -6
- package/claude/skills/canon-cli/SKILL.md +4 -4
- package/claude/skills/canvas-board/REQUIREMENT.md +1 -1
- package/claude/skills/canvas-board/SKILL.md +1 -1
- package/claude/skills/ci-workflow/REQUIREMENT.md +2 -1
- package/claude/skills/ci-workflow/SKILL.md +12 -2
- package/claude/skills/ci-workflow/references/workflows.md +12 -9
- package/claude/skills/context-fold/references/context.md +1 -1
- package/claude/skills/create-rule/SKILL.md +1 -0
- package/claude/skills/create-skill/REQUIREMENT.md +1 -1
- package/claude/skills/create-skill/SKILL.md +2 -2
- package/claude/skills/create-skill/references/skill-requirement.md +68 -9
- package/claude/skills/create-skill/references/skill.md +1 -1
- package/claude/skills/decision-escalate/SKILL.md +1 -2
- package/claude/skills/design-identity/REQUIREMENT.md +40 -0
- package/claude/skills/design-identity/SKILL.md +138 -0
- package/claude/skills/{draft-identity → design-identity}/references/card-route.md +2 -2
- package/claude/skills/design-taste/REQUIREMENT.md +4 -4
- package/claude/skills/design-taste/SKILL.md +2 -2
- package/claude/skills/design-taste/references/kinds.md +1 -1
- package/claude/skills/design-taste/references/preflight.md +1 -1
- package/claude/skills/document-health/references/axes.md +2 -1
- package/claude/skills/draft-and-pick/REQUIREMENT.md +8 -69
- package/claude/skills/draft-and-pick/SKILL.md +3 -153
- package/claude/skills/draft-doc/REQUIREMENT.md +9 -30
- package/claude/skills/draft-doc/SKILL.md +4 -76
- package/claude/skills/draft-figure/REQUIREMENT.md +8 -42
- package/claude/skills/draft-figure/SKILL.md +3 -77
- package/claude/skills/draft-identity/REQUIREMENT.md +8 -23
- package/claude/skills/draft-identity/SKILL.md +3 -130
- package/claude/skills/draft-ready/REQUIREMENT.md +8 -37
- package/claude/skills/draft-ready/SKILL.md +3 -128
- package/claude/skills/draft-screencast/REQUIREMENT.md +8 -23
- package/claude/skills/draft-screencast/SKILL.md +3 -62
- package/claude/skills/draft-slides/REQUIREMENT.md +8 -27
- package/claude/skills/draft-slides/SKILL.md +3 -72
- package/claude/skills/draw-figure/REQUIREMENT.md +59 -0
- package/claude/skills/draw-figure/SKILL.md +85 -0
- package/claude/skills/{draft-figure → draw-figure}/references/architecture-set.md +2 -2
- package/claude/skills/{draft-figure → draw-figure}/references/hand-drawn.md +2 -2
- package/claude/skills/{draft-figure → draw-figure}/references/mermaid-path.md +2 -2
- package/claude/skills/{draft-figure → draw-figure}/references/mermaid.md +1 -1
- package/claude/skills/git-commit/references/commit.md +1 -5
- package/claude/skills/git-pr/references/pr.md +1 -0
- package/claude/skills/make-deck/REQUIREMENT.md +44 -0
- package/claude/skills/make-deck/SKILL.md +80 -0
- package/claude/skills/markdown-craft/REQUIREMENT.md +1 -1
- package/claude/skills/markdown-craft/SKILL.md +2 -2
- package/claude/skills/pick-by-eye/REQUIREMENT.md +86 -0
- package/claude/skills/pick-by-eye/SKILL.md +161 -0
- package/claude/skills/plan-feature/SKILL.md +3 -2
- package/claude/skills/plan-feature/references/plan.md +25 -11
- package/claude/skills/plan-groundwork/SKILL.md +1 -1
- package/claude/skills/plan-intake/SKILL.md +1 -1
- package/claude/skills/plan-ready/REQUIREMENT.md +54 -0
- package/claude/skills/plan-ready/SKILL.md +136 -0
- package/claude/skills/{draft-ready → plan-ready}/references/assembly.md +1 -1
- package/claude/skills/{draft-ready → plan-ready}/references/ready.md +1 -1
- package/claude/skills/pr-evidence/references/evidence.md +1 -1
- package/claude/skills/record-screencast/REQUIREMENT.md +3 -3
- package/claude/skills/record-screencast/SKILL.md +2 -2
- package/claude/skills/role-orchestrator/REQUIREMENT.md +1 -1
- package/claude/skills/role-orchestrator/SKILL.md +2 -0
- package/claude/skills/role-orchestrator/references/orchestrator-dispatch.md +5 -2
- package/claude/skills/role-orchestrator/references/orchestrator-output.md +4 -0
- package/claude/skills/role-orchestrator/references/orchestrator-parked.md +2 -2
- package/claude/skills/role-orchestrator/references/orchestrator-refill.md +18 -13
- package/claude/skills/role-planner/REQUIREMENT.md +1 -1
- package/claude/skills/role-planner/SKILL.md +5 -4
- package/claude/skills/role-worker/REQUIREMENT.md +2 -0
- package/claude/skills/role-worker/SKILL.md +35 -2
- package/claude/skills/script-screencast/REQUIREMENT.md +40 -0
- package/claude/skills/script-screencast/SKILL.md +70 -0
- package/claude/skills/{draft-screencast → script-screencast}/references/beats-template.md +2 -2
- package/claude/skills/search-craft/REQUIREMENT.md +4 -4
- package/claude/skills/search-craft/SKILL.md +2 -2
- package/claude/skills/target-setup/SKILL.md +1 -0
- package/claude/skills/task-board/SKILL.md +11 -9
- package/claude/skills/task-board/references/board.md +15 -12
- package/claude/skills/teach-workspace/SKILL.md +1 -1
- package/claude/skills/teach-workspace/references/lesson-craft.md +2 -2
- package/claude/skills/ui-checklist/SKILL.md +2 -0
- package/claude/skills/write-doc/REQUIREMENT.md +46 -0
- package/claude/skills/write-doc/SKILL.md +83 -0
- package/claude/skills/{draft-doc → write-doc}/references/context.md +2 -2
- package/claude/skills/{draft-doc → write-doc}/references/docs.md +2 -2
- package/claude/skills/{draft-doc → write-doc}/references/readme.md +2 -2
- package/claude/skills/{draft-doc → write-doc}/references/wiki-kind.md +4 -4
- package/claude/skills/{draft-doc → write-doc}/references/wiki.md +1 -1
- package/docs/agents/audits.md +1 -0
- package/docs/agents/markdown-audit.md +4 -2
- package/docs/agents/migrate.md +13 -10
- package/docs/target/migrations.md +28 -4
- package/docs/target/projects.md +1 -1
- package/docs/workflow/parallel-features.md +3 -2
- package/docs/workflow/skill-map-on-request.md +18 -12
- package/docs/workflow/skill-map.md +13 -12
- package/docs/workflow/visual-design-workflow.md +2 -2
- package/governance/detect.toml +4 -0
- package/governance/ledger/framework/astro.md +73 -0
- package/governance/ledger/framework/fastapi.md +76 -0
- package/governance/ledger/framework/nextjs.md +86 -0
- package/governance/ledger/framework/react.md +83 -0
- package/governance/ledger/framework/shadcn.md +60 -0
- package/governance/ledger/framework/tailwind.md +55 -0
- package/governance/rules/canon/context.md +2 -1
- package/governance/rules/canon/plan.md +3 -5
- package/governance/rules/canon/scratch.md +3 -1
- package/governance/rules/canon/task-scope.md +2 -1
- package/governance/rules/canon/tasks.md +2 -1
- package/governance/rules/canon/worktrees.md +5 -2
- package/governance/rules/claude/output.md +7 -4
- package/governance/rules/claude/skill.md +6 -4
- package/governance/rules/framework/astro.md +12 -14
- package/governance/rules/framework/fastapi.md +20 -24
- package/governance/rules/framework/nextjs.md +19 -27
- package/governance/rules/framework/react.md +22 -33
- package/governance/rules/framework/shadcn.md +11 -15
- package/governance/rules/framework/tailwind.md +12 -14
- package/governance/rules/tooling/ci-workflow.md +6 -39
- package/governance/rules/ui/design-reference.md +37 -0
- package/governance/rules/writing/markdown.md +3 -2
- package/package.json +6 -6
- package/src/audits/catalog.ts +42 -0
- package/src/claude/cases/authoring.ts +15 -3
- package/src/claude/cases/misc.ts +12 -0
- package/src/claude/cases/workflow.ts +19 -1
- package/src/claude/settings.ts +8 -4
- package/src/claude/skills-audit.ts +113 -1
- package/src/commands/claude.ts +45 -12
- package/src/commands/demo.ts +1 -1
- package/src/commands/gov.ts +198 -0
- package/src/commands/markdown.ts +1 -1
- package/src/commands/migrate.ts +125 -2
- package/src/commands/pr.ts +34 -83
- package/src/commands/tasks.ts +383 -2
- package/src/commands/tooling.ts +3 -3
- package/src/commands/worktrees.ts +49 -0
- package/src/context/audit.ts +1 -1
- package/src/demo/beats.ts +1 -1
- package/src/gate/stages.ts +15 -0
- package/src/gov/audit.ts +441 -0
- package/src/listeners/belongs.ts +21 -0
- package/src/listeners/machine.ts +93 -0
- package/src/listeners/parse.ts +41 -0
- package/src/markdown/scope.ts +45 -35
- package/src/migrate/record-layout.ts +1 -1
- package/src/migrate/session-defaults.ts +138 -0
- package/src/migrate/skill-names.ts +68 -21
- package/src/pr/frames.ts +14 -3
- package/src/pr/local.ts +4 -69
- package/src/records/validate.ts +31 -0
- package/src/sync/check.ts +15 -0
- package/src/tasks/board.ts +854 -0
- package/src/tasks/record.ts +20 -1
- package/src/tasks/validate.ts +206 -9
- package/src/tooling/stamp.ts +56 -12
- package/src/worktrees/stop.ts +92 -0
- package/tooling/astro/configs/card-src/pages/og-card.astro +1 -1
- package/tooling/astro/reference.md +2 -2
- package/tooling/base/configs/.github/workflows/phase-label-gate.yml +6 -2
- package/tooling/base/configs/commitlint.config.js +0 -20
- package/tooling/base/reference.md +1 -1
- package/tooling/base/seeds/.github/workflows/verify.yml +4 -1
- package/tooling/claude/reference.md +13 -7
- package/tooling/claude/seeds/.claude/hooks/board-validate.sh +65 -0
- package/tooling/claude/seeds/.claude/settings.json +8 -0
- package/tooling/claude/user/settings.template.json +0 -4
- package/tooling/cloudflare/configs/.github/workflows/deploy.yml +5 -5
- package/tooling/public/configs/.github/dependabot.yml +12 -0
- package/tooling/public/configs/.github/workflows/release-please.yml +30 -0
- package/tooling/public/manifest.toml +8 -0
- package/tooling/public/reference.md +53 -0
- package/tooling/public/seeds/.github/ISSUE_TEMPLATE/bug.yml +48 -0
- package/tooling/public/seeds/.github/ISSUE_TEMPLATE/config.yml +5 -0
- package/tooling/public/seeds/.github/ISSUE_TEMPLATE/feature.yml +16 -0
- package/tooling/public/seeds/.release-please-manifest.json +3 -0
- package/tooling/public/seeds/CONTRIBUTING.md +50 -0
- package/tooling/public/seeds/LICENSE +21 -0
- package/tooling/public/seeds/SECURITY.md +13 -0
- package/tooling/public/seeds/release-please-config.json +12 -0
- package/tooling/shell/configs/.github/workflows/shell.yml +4 -1
- package/tooling/web/configs/.github/workflows/readme-screenshot.yml +6 -3
- package/tooling/web/configs/.github/workflows/verify.yml +15 -12
- /package/claude/skills/{draft-figure → draw-figure}/references/figures.md +0 -0
- /package/claude/skills/{draft-slides → make-deck}/references/deck.md +0 -0
- /package/claude/skills/{draft-and-pick → pick-by-eye}/references/live-arms.md +0 -0
- /package/claude/skills/{draft-doc → write-doc}/references/readme/agent-facing.md +0 -0
- /package/claude/skills/{draft-doc → write-doc}/references/readme/application.md +0 -0
- /package/claude/skills/{draft-doc → write-doc}/references/readme/cli.md +0 -0
- /package/claude/skills/{draft-doc → write-doc}/references/readme/library.md +0 -0
- /package/claude/skills/{draft-doc → write-doc}/references/readme/plugin.md +0 -0
- /package/claude/skills/{draft-doc → write-doc}/references/requirements.md +0 -0
|
@@ -1,85 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: draft-figure
|
|
3
|
-
description:
|
|
3
|
+
description: Renamed from `draft-figure` to `draw-figure`. Answers a typed invocation of the old figure skill name by pointing at the new one.
|
|
4
|
+
disable-model-invocation: true
|
|
4
5
|
metadata:
|
|
5
6
|
family: generate
|
|
6
7
|
---
|
|
7
8
|
|
|
8
9
|
# Draft figure
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
## Guards
|
|
13
|
-
|
|
14
|
-
- If no subject is given, stop: `❌ No subject given. Name the relationship, boundary, path, or before-and-after this figure should show.`
|
|
15
|
-
- If no destination document is given, stop: `❌ No destination given. Name the file this figure belongs in.`
|
|
16
|
-
|
|
17
|
-
## Step 1: read sources
|
|
18
|
-
|
|
19
|
-
Read these in parallel:
|
|
20
|
-
|
|
21
|
-
- `${CLAUDE_SKILL_DIR}/references/figures.md`: when a figure earns its place, the render-first policy, wrapping and captioning, and the color and accessibility rules
|
|
22
|
-
- `${CLAUDE_SKILL_DIR}/../markdown-craft/references/markdown.md`: formatting for the caption prose
|
|
23
|
-
- The `write-human` skill: voice and rhythm for the caption prose
|
|
24
|
-
|
|
25
|
-
## Step 2: does it earn its place
|
|
26
|
-
|
|
27
|
-
Apply the standard's bar: a relationship, a boundary, a path, or a before-and-after that prose or a list cannot carry as well. Stop when it does not: `❌ <subject> reads fine as prose. A figure adds nothing here.`
|
|
28
|
-
|
|
29
|
-
## Step 3: pick the path
|
|
30
|
-
|
|
31
|
-
Take the first that matches, and state which path was picked and why in one sentence:
|
|
32
|
-
|
|
33
|
-
1. **A teach lesson**, a page in a learning workspace's `lessons/` folder: the hand-drawn path, any shape. The renderer cannot load the lesson's hand font, so Mermaid labels measure narrow and clip.
|
|
34
|
-
2. **An architecture view**, meaning the request names system context, components, request flow, data pipeline, or deployment: the architecture set, then the Mermaid path.
|
|
35
|
-
3. **Graph-shaped**, meaning the relationship, boundary, or path is already what a flowchart or sequence diagram expresses: the Mermaid path.
|
|
36
|
-
4. **Anything else**, a spatial or physical arrangement no flowchart reduces to: the hand-drawn path.
|
|
37
|
-
|
|
38
|
-
The standard states this as a render-first policy rather than a ban on any tool-exported drawing, so outside a teach lesson a graph-shaped subject always routes through Mermaid even though that is itself an external renderer.
|
|
39
|
-
|
|
40
|
-
## Step 4: draw
|
|
41
|
-
|
|
42
|
-
Read the reference for the path Step 3 picked and follow it:
|
|
43
|
-
|
|
44
|
-
- Architecture set: shape the view per `${CLAUDE_SKILL_DIR}/references/architecture-set.md`, then draw, render, and read back per `${CLAUDE_SKILL_DIR}/references/mermaid-path.md`
|
|
45
|
-
- Mermaid path: read `${CLAUDE_SKILL_DIR}/references/mermaid-path.md`.
|
|
46
|
-
- Hand-drawn path: read `${CLAUDE_SKILL_DIR}/references/hand-drawn.md`.
|
|
47
|
-
|
|
48
|
-
## Step 5: wrap, caption, and verify
|
|
49
|
-
|
|
50
|
-
- Wrap the drawing in a `<figure>` element with a `<figcaption>` naming what to take from the figure, never what it shows. Let it run wider than the surrounding prose column.
|
|
51
|
-
- On the Mermaid path, run the read-back `mermaid-path.md` states before confirming.
|
|
52
|
-
- On every path, confirm the figure still reads once every color and font it depends on is stripped to its fallback, per the standard's own working-figure bar.
|
|
53
|
-
- On a rendered page, an HTML file a browser loads, the check that counts is the figure in the page, which Step 6 captures on either path. A markdown destination's whole check is the checks above.
|
|
54
|
-
|
|
55
|
-
## Step 6: confirm and write
|
|
56
|
-
|
|
57
|
-
Show the destination path, the decided path, and the full `<figure>` markup before writing. Confirm with the user, since the path decision and the render verdict are judgment calls with no diff to preview, then write the figure where the user named.
|
|
58
|
-
|
|
59
|
-
When the destination is a rendered page, read the `## Capture in the page` section of `${CLAUDE_SKILL_DIR}/references/hand-drawn.md` and run it, on the Mermaid path as well as the hand-drawn one, within the same two correction passes the read-back allows.
|
|
60
|
-
|
|
61
|
-
### Cleaning up
|
|
62
|
-
|
|
63
|
-
Renders and captures under `.canon/tmp/figures/` are verification artifacts. Delete the scratch PNGs, the stamps beside them, and the JSON config once the checks confirm, since only the SVG ships, and keep the `.mmd` source a later refresh redraws from.
|
|
64
|
-
|
|
65
|
-
## Output
|
|
66
|
-
|
|
67
|
-
### Preview
|
|
68
|
-
|
|
69
|
-
**Destination:** `<path>`
|
|
70
|
-
**Render path:** `<mermaid | architecture | freehand>`, `<one-sentence reason>`
|
|
71
|
-
|
|
72
|
-
```html
|
|
73
|
-
<drafted figure markup></drafted>
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
### After confirmation
|
|
77
|
-
|
|
78
|
-
Report the write in this shape.
|
|
79
|
-
|
|
80
|
-
```plaintext
|
|
81
|
-
✅ Drafted figure in <path>
|
|
82
|
-
Render path: <mermaid | architecture | freehand>
|
|
83
|
-
Verified <in page | as a standalone render>. <defect or skipped check, one line, omitted when clean>
|
|
84
|
-
<Font not embedded: run `canon design css --figures` to ship Virgil and Excalifont. Omitted when the project already ran it.>
|
|
85
|
-
```
|
|
11
|
+
This skill is now `draw-figure`. Run `/canon:draw-figure` instead, and change any file that still names this one.
|
|
@@ -1,40 +1,25 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: draft-identity
|
|
3
|
-
description: Why
|
|
3
|
+
description: Why a pointer answers under the old `draft-identity` name, and the test that retires it
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Draft identity requirement
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, a
|
|
11
|
-
|
|
12
|
-
A session building this without a shared loop restates `draft-and-pick`'s render, hand-off, pick, and loop mechanics from scratch, which drifts from the shipped one with nothing comparing the two copies. It also guesses at the icon size sequence and the output folder rather than reading what the project already declares, and it produces one raster per size through a separate render call per size, which multiplies capture invocations for no reason `canon capture` cannot already batch.
|
|
10
|
+
Without this skill, a person typing the old name after the rename to `design-identity` meets an unknown command with nothing naming where the skill went. A target that has not run `canon migrate skill-names` still holds files telling someone to type it, and a live gitignored record written before the rename still names it, since the sweep reads the tracked listing only.
|
|
13
11
|
|
|
14
12
|
## Must
|
|
15
13
|
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
- Draft every arm already composed inside the card frame, so one pick settles the mark's shape and its composition together
|
|
19
|
-
- Follow `draft-and-pick`'s Steps 2 through 5 for the render, hand-off, pick, and loop, rather than restating them
|
|
20
|
-
- Write the final mark as its own SVG source, not baked into a raster only
|
|
21
|
-
- Render every final size and the card in one capture call, by sharing one selector class across pages, each declared at half its target dimension to land on the literal size once the render engine's fixed 2x scale factor is applied
|
|
14
|
+
- Name `design-identity` as the skill to run, so a typed invocation of the old name reaches the new one in one step
|
|
15
|
+
- Carry `disable-model-invocation: true`, so routing never matches the old description against a request the new skill owns
|
|
22
16
|
|
|
23
17
|
## Must not
|
|
24
18
|
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
- Modify `draft-and-pick`, `canon capture`, or `canon design render`. This skill composes all three and extending any of them is a separate change.
|
|
28
|
-
- Assume this skill's own invocation frequency needs no check. Whether anything reaches for it beyond an operator typing its name has no answer at creation time, so a review pass some months in should read that back rather than take it on faith.
|
|
29
|
-
|
|
30
|
-
## Guards
|
|
31
|
-
|
|
32
|
-
- `canon` not on PATH: stop, since the render loop and the finalize step both need it
|
|
33
|
-
- Fires on a direct request only. A run offering a logo to a project that never asked for one spends a render nobody wanted.
|
|
19
|
+
- Carry any part of the logo and social card draft, which would give one behavior two bodies that drift apart
|
|
20
|
+
- Retire on a release number. Retire it when `canon migrate skill-names --json` reports zero citations in every target the rollout reaches and no live `.canon/` record names the old name, since a release number retires it on a date nothing measured.
|
|
34
21
|
|
|
35
22
|
## Out of scope
|
|
36
23
|
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
- Mutating an existing logo file directly, which is a direct edit rather than a skill
|
|
40
|
-
- Auditing an implemented UI against its tokens, which `ux-audit` owns
|
|
24
|
+
- The work itself, which `design-identity` owns
|
|
25
|
+
- Rewriting a stale citation, which `canon migrate skill-names` owns in a tracked file and the controlling session owns on the board
|
|
@@ -1,138 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: draft-identity
|
|
3
|
-
description:
|
|
3
|
+
description: Renamed from `draft-identity` to `design-identity`. Answers a typed invocation of the old identity skill name by pointing at the new one.
|
|
4
|
+
disable-model-invocation: true
|
|
4
5
|
metadata:
|
|
5
6
|
family: generate
|
|
6
7
|
---
|
|
7
8
|
|
|
8
9
|
# Draft identity
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
## Guards
|
|
13
|
-
|
|
14
|
-
- If `canon` is not on PATH, stop: `❌ canon CLI not found.`
|
|
15
|
-
- Draft no candidate for a mark the operator has not asked to make. This skill fires on a direct request, never on the model's own read that a project could use one.
|
|
16
|
-
|
|
17
|
-
## Step 1: read signal
|
|
18
|
-
|
|
19
|
-
Read these in parallel, skipping any that do not exist:
|
|
20
|
-
|
|
21
|
-
- `canon/DESIGN.md`: the `## Overview` paragraph and the role intents under `## Colors` and `## Typography`, read as `## Personality` and `## Color` in an older record
|
|
22
|
-
- The stylesheet `canon/DESIGN.md`'s lead names: the color and type values behind those roles
|
|
23
|
-
- `canon/REQUIREMENTS.md`: the `## Personality` paragraph, when `canon/DESIGN.md` carries none
|
|
24
|
-
- `CLAUDE.md`: the project's stated voice, when neither file above carries a personality signal
|
|
25
|
-
|
|
26
|
-
No signal from any of these is not a stop. Draft against a neutral default, and mark each guessed color and type value with a `/* ? verify */` comment beside its declaration in the `.mark` and `.card` markup, since the design document carries no value to tag.
|
|
27
|
-
|
|
28
|
-
## Step 2: detect the icon size sequence
|
|
29
|
-
|
|
30
|
-
Check the project's HTML entry points (`index.html`, `public/index.html`, `src/index.html`) for a `<link rel="icon">` or `<link rel="apple-touch-icon">` tag carrying a `sizes` attribute, and any `manifest.json` or `site.webmanifest` for an `icons` array. Take the union of every size found.
|
|
31
|
-
|
|
32
|
-
Fall back to the stated default when nothing is detected, since no `tooling/` stack scaffolds a `public/` folder, a favicon reference, or an `og:image` meta tag:
|
|
33
|
-
|
|
34
|
-
- `16x16`, `32x32`, `48x48`
|
|
35
|
-
- `180x180`
|
|
36
|
-
- `192x192`, `512x512`
|
|
37
|
-
|
|
38
|
-
This default set is raster-only, and Step 6 writes the vector source at `favicon.svg` on either branch. Announce which of the two decided the sequence.
|
|
39
|
-
|
|
40
|
-
## Step 3: detect the write folder
|
|
41
|
-
|
|
42
|
-
A root-only check misses a site kept in a subfolder, and a Next project keeps its favicon under the App Router with no `public/` at all. Both would fall through to the root while the announcement reads as detected, so walk one level down and know that convention.
|
|
43
|
-
|
|
44
|
-
Read both, from the project root:
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
find . -maxdepth 3 \( -name node_modules -o -name .git -o -name dist -o -name .astro \) -prune -o -type d \( -name public -o -name static \) -print | sort
|
|
48
|
-
find . -maxdepth 4 \( -name node_modules -o -name .git \) -prune -o -type d -path '*/src/app' -print | sort
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
Take the first tier that answers:
|
|
52
|
-
|
|
53
|
-
1. A root `public/` or `static/`.
|
|
54
|
-
2. A `public/` or `static/` one level down, such as `web/public/`. Of several, take the shallowest, then the one whose parent holds the project's framework config.
|
|
55
|
-
3. A `src/app/` folder, at the root or one level down, which is the Next App Router convention. Take the folder itself, not a `public/` beside it.
|
|
56
|
-
4. A stack-declared asset folder, where the project's own config names one.
|
|
57
|
-
5. The project root, which is the fallback rather than a detection.
|
|
58
|
-
|
|
59
|
-
Announce which tier decided, naming the tier rather than the path alone, so the operator can move the files where the project's convention differs. On tier 5 say the detection found nothing and the root is a fallback.
|
|
60
|
-
|
|
61
|
-
## Step 4: name the decision and the arms
|
|
62
|
-
|
|
63
|
-
Follow `${CLAUDE_SKILL_DIR}/../draft-and-pick/SKILL.md` Step 1, with the decision fixed rather than derived: "the project's logo mark and its composition into the social card." Vary the mark's shape or style across arms, keeping the card's type and layout fixed, per that skill's one-property rule.
|
|
64
|
-
|
|
65
|
-
- Draft each arm inside the full 1200x630 card frame, mark and type together, and add its canvas frame at `--width 1200 --height 630`, so one pick settles shape and composition
|
|
66
|
-
- Arm 0 is the current mark when the Step 3 folder already holds a logo file (`favicon.svg`, `favicon.ico`, `logo.svg`, or similar). Arms start at 1 otherwise.
|
|
67
|
-
- Structure every arm as a `.mark` element, the inline SVG alone, nested inside a `.card` element, the full composition, so Step 6 can address either
|
|
68
|
-
|
|
69
|
-
## Step 5: draft, render, pick, and loop
|
|
70
|
-
|
|
71
|
-
Follow `${CLAUDE_SKILL_DIR}/../draft-and-pick/SKILL.md` Steps 2 through 5 against the arms from Step 4: draft the arms as frames on a canvas page, render and hand off, take the pick, and loop on it.
|
|
72
|
-
|
|
73
|
-
The final icon and card renders below are not arms, so they stay off the canvas. Call the folder they render from `<dest>`, being `.canon/tmp/<slug>/` under the slug `draft-and-pick` Step 1 derived, which is where this project puts every temporary write.
|
|
74
|
-
|
|
75
|
-
## Step 6: finalize the mark and the icons
|
|
76
|
-
|
|
77
|
-
This step and Step 7 replace `draft-and-pick`'s own Step 6 items 1 and 2, since the pick here produces several final files rather than one applied surface. Its archive capture, its page delete, and its server stop still run, after Step 7.
|
|
78
|
-
|
|
79
|
-
1. Extract the picked arm's `.mark` markup as the final vector source. Write it to `<write-folder>/favicon.svg`.
|
|
80
|
-
2. Under `<dest>/render/`, write one `icon-<w>x<h>.html` page per Step 2 size, carrying the picked `.mark` markup in an element with the shared class `.render`.
|
|
81
|
-
3. Declare each `.render` element at `<w>/2` by `<h>/2`, since `canon capture` screenshots at a fixed 2x scale and the PNG then lands on the target size.
|
|
82
|
-
4. Declare no font on them. Each holds the mark alone, and `canon capture` skips the font check on an element with no text, where `system-ui` would be refused.
|
|
83
|
-
5. Render the batch:
|
|
84
|
-
|
|
85
|
-
```bash
|
|
86
|
-
canon capture <dest>/render --selector .render --out <write-folder>
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
6. Report each written file's path and the dimensions `canon capture` printed, confirming each equals its Step 2 target rather than half of it.
|
|
90
|
-
|
|
91
|
-
The card leaves this batch and takes Step 7 instead. An icon is the mark alone and a scratch page renders it faithfully, where the card composes the mark with the project's own type and color, which a scratch page can only copy.
|
|
92
|
-
|
|
93
|
-
## Step 7: write the card as a route and capture it through the server
|
|
94
|
-
|
|
95
|
-
A card captured from a page this run deletes leaves a PNG and nothing that produced it, so renaming the project means another pick loop to move one string. Write the composition into a route the project keeps, and capture it through a running server so it reads the real stylesheet, tokens, and fonts.
|
|
96
|
-
|
|
97
|
-
This is Astro-shaped for now, because Astro is the one web stack whose config gives a route a structural build exclusion. A project already holding the card route scaffold takes the route path, and everything else takes the page path. Say which one decided, since the two leave the project different things.
|
|
98
|
-
|
|
99
|
-
### The route path
|
|
100
|
-
|
|
101
|
-
Read `${CLAUDE_SKILL_DIR}/references/card-route.md` on reaching this path, for the scaffold check, the message to give when it is missing, and the write, serve, and capture sequence. A project with no scaffold skips it.
|
|
102
|
-
|
|
103
|
-
### The page path
|
|
104
|
-
|
|
105
|
-
Where the project holds no route to write into, write `og-image.html` into `<dest>/render/` with its `.render` wrapper sized 600x315, then capture that one page:
|
|
106
|
-
|
|
107
|
-
```bash
|
|
108
|
-
canon capture <dest>/render/og-image.html --selector .render --out <write-folder>
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
It takes its own call because Step 6's batch is already captured by the time this step picks a path. Say that the card shipped as a PNG with no source, and that the project gains one when it grows a route to hold the composition.
|
|
112
|
-
|
|
113
|
-
### Closing the scratch folder and the canvas
|
|
114
|
-
|
|
115
|
-
Delete `<dest>` once both captures land, then close the canvas through `draft-and-pick` Step 6 items 3 to 8, which archive every arm and delete the pages the run added. The route is not a leftover variant, since it holds the arm the operator picked.
|
|
116
|
-
|
|
117
|
-
A project whose card was generated before this route existed keeps its PNG. Say so rather than regenerating it, since the pick loop spends attention on a file nobody complained about, and the next real edit picks up the route.
|
|
118
|
-
|
|
119
|
-
## Response format
|
|
120
|
-
|
|
121
|
-
```plaintext
|
|
122
|
-
📝 Wrote <write-folder>/favicon.svg
|
|
123
|
-
📝 Wrote <write-folder>/icon-16x16.png (16x16)
|
|
124
|
-
📝 Wrote card-src/pages/og-card.astro (route path only)
|
|
125
|
-
📝 Wrote <write-folder>/og-image.png (1200x630)
|
|
126
|
-
|
|
127
|
-
Write folder: <tier that decided>. Move the files if this project's own convention differs.
|
|
128
|
-
Card source: <the route, captured through the card server|a scratch page, since this project holds no card route>.
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
## What this delegates
|
|
132
|
-
|
|
133
|
-
Cite these rather than restating them.
|
|
134
|
-
|
|
135
|
-
- `draft-and-pick` owns Steps 1 through 5 of the render-and-pick loop, cited above
|
|
136
|
-
- `canon:canvas-board` carries a picked direction into `canon/DESIGN.md`. This skill only reads it.
|
|
137
|
-
- `canon capture` owns the render mechanics, its font refusal, its fixed 2x scale, and its reported dimensions. It reads an `http(s)://` source, where `--out` names the PNG.
|
|
138
|
-
- The `astro` tooling stack owns the card route's scaffold, its second config, and the exclusion check, read with `canon tooling reference astro`. This skill writes into the route and never reshapes it.
|
|
11
|
+
This skill is now `design-identity`. Run `/canon:design-identity` instead, and change any file that still names this one.
|
|
@@ -1,54 +1,25 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: draft-ready
|
|
3
|
-
description: Why
|
|
3
|
+
description: Why a pointer answers under the old `draft-ready` name, and the test that retires it
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Draft ready requirement
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, a
|
|
11
|
-
|
|
12
|
-
- Writes the folder, the overview, the plan, and the task row as four separate hand writes, and the four drift from each other because nothing compares them.
|
|
13
|
-
- Lists a destination in the overview that the plan's `**Files to touch:**` omits, or the reverse. The omitted path is invisible to `plan-reach`, so a second track writes the same file and neither side finds out.
|
|
14
|
-
- Picks the next ordinal by reading only the live folder, and reuses a number an archived folder already spent, which the pull request that shipped it cites by name.
|
|
15
|
-
- Picks a phase label by scanning the live board alone, which is the scan that let two sessions hand out one label within minutes of each other.
|
|
16
|
-
- Reads the label bare, which reserves nothing and returns one a live claim already holds until that claim's task file lands.
|
|
17
|
-
- Leaves the plan's `**Constraints:**` without a line naming the folder as the verbatim source, so the worker reads the files as inspiration and writes its own version.
|
|
18
|
-
- Leaves a note, an alternate, or a draft passage in the folder beside the real files, so the worker guesses which one is the source.
|
|
19
|
-
- Writes into the main worktree root from a linked worktree with `Edit` or `Write`, which the isolation guard refuses, and takes the refusal's redirect into a second gitignored copy no later session reads.
|
|
20
|
-
- Reports the handoff as done while the archive move at the end, which no verb performs, is left for someone to remember.
|
|
10
|
+
Without this skill, a person typing the old name after the rename to `plan-ready` meets an unknown command with nothing naming where the skill went. A target that has not run `canon migrate skill-names` still holds files telling someone to type it, and a live gitignored record written before the rename still names it, since the sweep reads the tracked listing only.
|
|
21
11
|
|
|
22
12
|
## Must
|
|
23
13
|
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
- Take the phase label from `canon tasks next-label --claim` rather than from a scan of its own or a bare read, and stop on a binary that predates the flag rather than falling back.
|
|
27
|
-
- Derive the overview's `destinations` and the plan's `**Files to touch:**` from one list, and compare the two before reporting, so neither can name a path the other lacks.
|
|
28
|
-
- Write the plan's `**Constraints:**` line naming the folder as the verbatim source.
|
|
29
|
-
- Copy each finished file whole to its destination path inside the folder, and carry nothing else into it.
|
|
30
|
-
- Write the plan and the task through `canon tasks plan-link`, `canon records validate plans`, and `canon markdown audit` rather than by restating what those verbs check.
|
|
31
|
-
- Place the task's row by the three branches `task-board` Step 4 states, so a solo project never ends with a task file on no surface.
|
|
32
|
-
- Route a write at the main root from a linked worktree through `Bash`, the way `session-worktree` routes it.
|
|
33
|
-
- Name the archive move in the closing report, since the skill writes a folder that stays live until someone moves it.
|
|
14
|
+
- Name `plan-ready` as the skill to run, so a typed invocation of the old name reaches the new one in one step
|
|
15
|
+
- Carry `disable-model-invocation: true`, so routing never matches the old description against a request the new skill owns
|
|
34
16
|
|
|
35
17
|
## Must not
|
|
36
18
|
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
- Write `priority.md` or `backlog.md` where an orchestrator is on the roster or the session is a worker or planner, since one board writer at a time is what keeps a gitignored board safe. Those two cases report the row instead.
|
|
40
|
-
- Automate the archive move. No verb owns the relocation, and a skill doing it by hand would be the second copy of a step the standard already states.
|
|
41
|
-
- Dispatch or start the worker, which belongs to whoever runs the board.
|
|
42
|
-
|
|
43
|
-
## Guards
|
|
44
|
-
|
|
45
|
-
- No finished file named, stop: `❌ No finished file named. A ready folder carries text that already exists, so write the files first or use /canon:plan-feature.`
|
|
46
|
-
- A named file that does not resolve, stop: `❌ <path> does not exist. Name a file that is already written.`
|
|
19
|
+
- Carry any part of the ready folder packaging, which would give one behavior two bodies that drift apart
|
|
20
|
+
- Retire on a release number. Retire it when `canon migrate skill-names --json` reports zero citations in every target the rollout reaches and no live `.canon/` record names the old name, since a release number retires it on a date nothing measured.
|
|
47
21
|
|
|
48
22
|
## Out of scope
|
|
49
23
|
|
|
50
|
-
-
|
|
51
|
-
- `
|
|
52
|
-
- `task-board` creates a task file for a row with no ready folder. This writes the row it needs beside the folder and calls the same verbs.
|
|
53
|
-
- `git-ship` ships a branch, and a ready folder never reaches one.
|
|
54
|
-
- `references/ready.md` owns the folder's shape and lifecycle, and this skill owns the procedure that produces it, the way `write-human` and the `markdown` rule split.
|
|
24
|
+
- The work itself, which `plan-ready` owns
|
|
25
|
+
- Rewriting a stale citation, which `canon migrate skill-names` owns in a tracked file and the controlling session owns on the board
|
|
@@ -1,136 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: draft-ready
|
|
3
|
-
description:
|
|
3
|
+
description: Renamed from `draft-ready` to `plan-ready`. Answers a typed invocation of the old ready skill name by pointing at the new one.
|
|
4
|
+
disable-model-invocation: true
|
|
4
5
|
metadata:
|
|
5
6
|
family: generate
|
|
6
7
|
---
|
|
7
8
|
|
|
8
9
|
# Draft ready
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
Read these in parallel before writing:
|
|
13
|
-
|
|
14
|
-
- `${CLAUDE_SKILL_DIR}/references/ready.md`: the folder layout, the overview frontmatter, the mirrored tree, and the thin-plan contract
|
|
15
|
-
- `${CLAUDE_SKILL_DIR}/../plan-feature/references/plan.md`: the plan's sections and its answer contract
|
|
16
|
-
- `${CLAUDE_SKILL_DIR}/../task-board/references/tasks.md`: the task file's shape and origin lines
|
|
17
|
-
- `${CLAUDE_SKILL_DIR}/references/assembly.md`: the overview and thin-plan templates and the destination match check
|
|
18
|
-
|
|
19
|
-
## Guards
|
|
20
|
-
|
|
21
|
-
- If the operator named no finished file, stop: `❌ No finished file named. A ready folder carries text that already exists, so write the files first or use /canon:plan-feature.`
|
|
22
|
-
- If a named file does not resolve, stop: `❌ <path> does not exist. Name a file that is already written.`
|
|
23
|
-
- Resolve `<main-root>` as `git worktree list --porcelain | grep -m 1 '^worktree ' | cut -d' ' -f2-`. The folder, the plan, and the task all live there.
|
|
24
|
-
|
|
25
|
-
## Step 1: read the finished files
|
|
26
|
-
|
|
27
|
-
1. Take each finished file with the destination path the operator gave it. A file arriving with no destination is asked for once, since the mirrored tree cannot place it.
|
|
28
|
-
2. Read every file whole. The overview states what the worker still owns beyond copying, and that comes off the files, not off the operator's description of them.
|
|
29
|
-
3. Take the branch type from `${CLAUDE_SKILL_DIR}/../git-branch/references/branch.md`, never from a list carried here.
|
|
30
|
-
4. Derive one kebab slug for the change. The folder, the plan, and the task all carry it.
|
|
31
|
-
|
|
32
|
-
## Step 2: allocate the ordinal and the label
|
|
33
|
-
|
|
34
|
-
Read `<main-root>/.canon/ready/` and `<main-root>/.canon/ready/archive/` together and take the highest `<nn>` across both, plus one. A folder set with no entry takes `01`. Keep this skill-local. No verb allocates a ready ordinal, and two writers running at once can claim one number, so re-read the folder immediately before Step 3 writes.
|
|
35
|
-
|
|
36
|
-
Claim the label through the verb rather than reading it bare or scanning for it:
|
|
37
|
-
|
|
38
|
-
```bash
|
|
39
|
-
canon tasks next-label --claim --json
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
The claim reserves the label under `.canon/ordinal-locks/`, so a second session allocating at the same moment gets the next one. A bare read reserves nothing and can return a label a live claim already holds.
|
|
43
|
-
|
|
44
|
-
Branch on the record's `reason` rather than on the exit code, taking `label` from a record that carries one.
|
|
45
|
-
|
|
46
|
-
- `label-contended` means re-run the claim
|
|
47
|
-
- Report the verb as unavailable and stop when the binary carries no `next-label` subcommand, or prints no record for an unknown `--claim`, since it predates the flag
|
|
48
|
-
- Never fall back to a bare read or a label picked by hand, which reopens the collision the claim exists to prevent
|
|
49
|
-
|
|
50
|
-
## Step 3: write the overview
|
|
51
|
-
|
|
52
|
-
Write `<main-root>/.canon/ready/<nn>-<slug>/00-overview.md` from the template in `${CLAUDE_SKILL_DIR}/references/assembly.md`. Set `destinations` from the Step 1 list and nothing else, and state in prose what the worker still owns, or `nothing further` where the files are the whole change.
|
|
53
|
-
|
|
54
|
-
## Step 4: mirror the tree
|
|
55
|
-
|
|
56
|
-
Copy each finished file to `<main-root>/.canon/ready/<nn>-<slug>/<destination path>`, one command per file, so the tree mirrors the destinations exactly.
|
|
57
|
-
|
|
58
|
-
```bash
|
|
59
|
-
install -D -m 0644 <source> <main-root>/.canon/ready/<nn>-<slug>/<destination path>
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
- Copy whole and edit nothing. A change wanted now is made in the source file first and copied after.
|
|
63
|
-
- Carry no notes, alternates, or drafts into the folder. Anything else belongs in the plan or the pull request body.
|
|
64
|
-
- Write each of these at the main root, routed the way `session-worktree` states. Create a whole new file with a heredoc.
|
|
65
|
-
|
|
66
|
-
## Step 5: write the thin plan
|
|
67
|
-
|
|
68
|
-
Write `<main-root>/.canon/plans/feature-<slug>.md` from the template, by heredoc, per `${CLAUDE_SKILL_DIR}/../plan-feature/references/plan.md`.
|
|
69
|
-
|
|
70
|
-
- List every Step 1 destination under `**Files to touch:**`, each with one clause on why it changes, pointing at the folder's copy rather than restating it.
|
|
71
|
-
- Add a `**Constraints:**` line naming the ready folder as the verbatim source for those paths.
|
|
72
|
-
- Name the branch type from Step 1 in `## Summary`. Write `None identified.` under `**Questions:**` unless a call is genuinely the operator's.
|
|
73
|
-
|
|
74
|
-
Run the match check in `${CLAUDE_SKILL_DIR}/references/assembly.md` before going further. The two lists are one list, and a path in either without the other stops the run.
|
|
75
|
-
|
|
76
|
-
## Step 6: write the task
|
|
77
|
-
|
|
78
|
-
Write `<main-root>/.canon/tasks/<label>-<slug>.md` by heredoc from the label Step 2 claimed, never calling the verb again, which would claim another. Its frontmatter, H1, and `## Outcomes` follow `${CLAUDE_SKILL_DIR}/../task-board/references/tasks.md`.
|
|
79
|
-
|
|
80
|
-
Write a `Ready:` line beside the `Plan:` line pointing at the folder, then point the task at the plan through the verb:
|
|
81
|
-
|
|
82
|
-
```bash
|
|
83
|
-
canon tasks plan-link <task-stem> .canon/plans/feature-<slug>.md --json
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
Branch on the record rather than on the exit. The `Ready:` line orients a worker reading the task, and `canon tasks archive` reads it to move the folder on ship.
|
|
87
|
-
|
|
88
|
-
### Place the row
|
|
89
|
-
|
|
90
|
-
A task file with no row is a dropped task, so place the row in the same pass. The plan exists, so the row takes `## Run now`, per the tests in `${CLAUDE_SKILL_DIR}/../task-board/references/board.md`.
|
|
91
|
-
|
|
92
|
-
A path `canon tasks plan-reach` reports as claimed is a shared file rather than a hold. Name each one and its holder wherever the row is reported, so whoever controls the board decides whether a contract, a relocation, or a sweep moves the row to `## Up next`.
|
|
93
|
-
|
|
94
|
-
### Check the roster
|
|
95
|
-
|
|
96
|
-
Check the roster the way `canon:task-board` Step 4 does, reading `canon sessions list --self --json` for this session and `canon sessions list --json` for a same-repository row under another `sessionId` whose `name` starts with `orchestrator-`. A refused read counts as failed.
|
|
97
|
-
|
|
98
|
-
- **Orchestrator found.** Write neither file. Message that session with the row's title, the plan link, and the group with its reason, so two sessions never write the board at once.
|
|
99
|
-
- **Not found, and this session's name starts with `worker-` or `planner-`.** Write neither file, since both role bodies ban a board write. Report the row and its group in Step 8.
|
|
100
|
-
- **Not found otherwise, or the roster read fails.** Write the row into `priority.md` through the task file's `Bash` route, since a failed read looks like a solo project and stopping strands the task.
|
|
101
|
-
|
|
102
|
-
Say which branch fired in Step 8.
|
|
103
|
-
|
|
104
|
-
Regenerate the task index after writing, since a hook on `Write|Edit` never fires on `Bash`:
|
|
105
|
-
|
|
106
|
-
```bash
|
|
107
|
-
canon indexes regen .canon/tasks
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
## Step 7: validate
|
|
111
|
-
|
|
112
|
-
```bash
|
|
113
|
-
canon records validate plans --json
|
|
114
|
-
canon markdown audit <main-root>/.canon/ready/<nn>-<slug>/00-overview.md
|
|
115
|
-
canon markdown audit <main-root>/.canon/plans/feature-<slug>.md
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
Fix what the records name in the files this run wrote and re-run once. Report a finding on a file it did not write, such as a neighbor folder missing its overview, without repairing it.
|
|
119
|
-
|
|
120
|
-
## Step 8: report
|
|
121
|
-
|
|
122
|
-
```plaintext
|
|
123
|
-
✅ Ready folder written: .canon/ready/<nn>-<slug>/
|
|
124
|
-
Plan: .canon/plans/feature-<slug>.md
|
|
125
|
-
Task: .canon/tasks/<label>-<slug>.md
|
|
126
|
-
Row: <label> <title>, <written under ## Run now | reported to <orchestrator name> | left for the operator to place>, <reason>
|
|
127
|
-
Archive on ship: canon tasks archive moves the folder to .canon/ready/archive/<nn>-<slug>/
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
Name the archive move every time, so whoever ships knows the verb carries the folder and needs no step of their own.
|
|
131
|
-
|
|
132
|
-
## Rules
|
|
133
|
-
|
|
134
|
-
- Edit no finished file. The worker copies verbatim, so a change belongs in the source before this runs.
|
|
135
|
-
- Restate nothing the standards own. A shape question is answered by `ready.md` and a plan question by `plan.md`.
|
|
136
|
-
- Dispatch nothing. Starting the worker belongs to whoever runs the board.
|
|
11
|
+
This skill is now `plan-ready`. Run `/canon:plan-ready` instead, and change any file that still names this one.
|
|
@@ -1,40 +1,25 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: draft-screencast
|
|
3
|
-
description: Why a
|
|
3
|
+
description: Why a pointer answers under the old `draft-screencast` name, and the test that retires it
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Draft screencast requirement
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, a
|
|
11
|
-
|
|
12
|
-
A draft that names the recording software, the editing software, or the window manager pins the script to one machine and one person's setup, so it stops being reusable the moment anyone else records. And re-invoking to refine silently overwrites the edits the user made in the file, which is the one failure that destroys work rather than wasting it.
|
|
10
|
+
Without this skill, a person typing the old name after the rename to `script-screencast` meets an unknown command with nothing naming where the skill went. A target that has not run `canon migrate skill-names` still holds files telling someone to type it, and a live gitignored record written before the rename still names it, since the sweep reads the tracked listing only.
|
|
13
11
|
|
|
14
12
|
## Must
|
|
15
13
|
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
- Wait for answers rather than reading silence as acceptance
|
|
19
|
-
- Pre-seed every section with concrete content so the draft is shippable as written and the user edits down
|
|
20
|
-
- Derive the slug from the topic and the discovery answers
|
|
21
|
-
- Write to `demos/<slug>/beats.md` at the project root, the committed folder the rest of the demo lives in, and print that path on its own line
|
|
22
|
-
- Seed a wrap section naming intro, outro, and music with a default each, so the choice of what surrounds the take is made at draft time rather than discovered at compose time
|
|
14
|
+
- Name `script-screencast` as the skill to run, so a typed invocation of the old name reaches the new one in one step
|
|
15
|
+
- Carry `disable-model-invocation: true`, so routing never matches the old description against a request the new skill owns
|
|
23
16
|
|
|
24
17
|
## Must not
|
|
25
18
|
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
- Re-run against an existing draft to refine it, since re-running overwrites
|
|
29
|
-
- Infer the hero moment without asking, which is the beat the whole script is built around
|
|
30
|
-
|
|
31
|
-
## Guards
|
|
32
|
-
|
|
33
|
-
- No topic provided: stop rather than guessing what is being recorded
|
|
19
|
+
- Carry any part of the screencast script draft, which would give one behavior two bodies that drift apart
|
|
20
|
+
- Retire on a release number. Retire it when `canon migrate skill-names --json` reports zero citations in every target the rollout reaches and no live `.canon/` record names the old name, since a release number retires it on a date nothing measured.
|
|
34
21
|
|
|
35
22
|
## Out of scope
|
|
36
23
|
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
- Slide decks, which `draft-slides` owns
|
|
40
|
-
- Where the recording ships, which the draft lists and the user decides
|
|
24
|
+
- The work itself, which `script-screencast` owns
|
|
25
|
+
- Rewriting a stale citation, which `canon migrate skill-names` owns in a tracked file and the controlling session owns on the board
|