@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
|
@@ -7,7 +7,7 @@ description: Why compiling and running a screencast draft needs a routed skill r
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, `
|
|
10
|
+
Without this skill, `script-screencast` writes a draft and names `canon demo compile` as the next step, and nothing after that routes a session there or to `canon demo run`. An operator has to know both verbs, type them in order, and read the compile record for unresolved fields by hand. A session that fills one in on its own reproduces the exact failure `canon demo run`'s `plan-unresolved` reason exists to catch, one layer up where nothing enforces it.
|
|
11
11
|
|
|
12
12
|
## Must
|
|
13
13
|
|
|
@@ -25,7 +25,7 @@ Without this skill, `draft-screencast` writes a draft and names `canon demo comp
|
|
|
25
25
|
- Guess or fill a target, a URL, or any other unresolved field
|
|
26
26
|
- Drive the application through anything other than `canon demo run`
|
|
27
27
|
- Install HyperFrames, vendor it, or restate its composition rules, which its own skills own
|
|
28
|
-
- Assume this skill's own invocation frequency needs no check. `
|
|
28
|
+
- Assume this skill's own invocation frequency needs no check. `script-screencast`'s closing block names it by hand, but whether anything else reaches for it beyond that pointer or 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
29
|
|
|
30
30
|
## Guards
|
|
31
31
|
|
|
@@ -33,6 +33,6 @@ Without this skill, `draft-screencast` writes a draft and names `canon demo comp
|
|
|
33
33
|
|
|
34
34
|
## Out of scope
|
|
35
35
|
|
|
36
|
-
- Drafting the beats, which `
|
|
36
|
+
- Drafting the beats, which `script-screencast` owns
|
|
37
37
|
- Filling an existing plan's target or URL, which is the operator's own edit
|
|
38
38
|
- Verifying a recording beyond its own caption, which nothing in the toolkit does yet
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: record-screencast
|
|
3
|
-
description: Drives a screencast draft through to a recording. Compiles it with `canon demo compile` when no plan exists yet at the default path, skipping compile when one is already there, runs `canon demo run` once nothing is unresolved, then composes the take into a finished mp4 through HyperFrames when the draft's wrap section asks for anything. Reports every unresolved field from the compile or run record and stops rather than guessing one. Use when asked to "record the screencast", "run the demo", "compile and record this draft", or right after `
|
|
3
|
+
description: Drives a screencast draft through to a recording. Compiles it with `canon demo compile` when no plan exists yet at the default path, skipping compile when one is already there, runs `canon demo run` once nothing is unresolved, then composes the take into a finished mp4 through HyperFrames when the draft's wrap section asks for anything. Reports every unresolved field from the compile or run record and stops rather than guessing one. Use when asked to "record the screencast", "run the demo", "compile and record this draft", or right after `script-screencast` prints its next-step line. Do NOT use to draft the beats, which is `script-screencast`, or to fill in a plan's target or URL, which is the operator's own edit.
|
|
4
4
|
metadata:
|
|
5
5
|
family: generate
|
|
6
6
|
---
|
|
@@ -9,7 +9,7 @@ metadata:
|
|
|
9
9
|
|
|
10
10
|
## Guards
|
|
11
11
|
|
|
12
|
-
- If no draft path is given, stop: `❌ No draft path. Pass the path
|
|
12
|
+
- If no draft path is given, stop: `❌ No draft path. Pass the path script-screencast printed.`
|
|
13
13
|
- Never guess or fill an unresolved field, a target, a URL, or anything else the compile or run record names. Report it and stop.
|
|
14
14
|
- Filling one in reproduces the failure `canon demo run`'s `plan-unresolved` reason exists to catch, one layer up where nothing enforces it
|
|
15
15
|
- Never pass `--force` to compile. A plan at the default output path may carry timing tuned by hand that the draft cannot reproduce.
|
|
@@ -79,7 +79,7 @@ Dispatch parts from what it checked in three ways. The gate and the worker each
|
|
|
79
79
|
- Name each self-dispatched worker explicitly with the `worker-` prefix, since that is the role the name marks and a client-derived name is a fragment of the session's identifier
|
|
80
80
|
- Carry the dispatcher's `sessionId` in the launch prompt, since a worker owed two messages has no property on the roster that resolves a controller and a name goes stale inside the window it builds in
|
|
81
81
|
- Report each self-dispatch and the row it fired against loudly enough to follow, since a person no longer watches the launch step happen
|
|
82
|
-
- Stop dispatching once `##
|
|
82
|
+
- Stop dispatching once `## Up next` is empty or every row left in it is held, rather than waking again to fire on a board nobody is clearing
|
|
83
83
|
- Launch a planner or worker the operator will talk with from the talk shape, with the `-talk` suffix and the brief sentence that tells it so, since a cold launch retires the session the moment its delivery lands while the operator still wants the conversation
|
|
84
84
|
- Retire a talk session only on the operator's word and report it as held open until then, since its delivery says nothing about whether the conversation is over
|
|
85
85
|
- Dispatch every non-release pull request's review to `role-reviewer`, leave each round's messages to it and the worker, and keep one cross-branch pass per wave here, since any pass or relay run here bills the context the wave shares
|
|
@@ -132,6 +132,8 @@ A worker is a separate process the controller can steer, and scope reaches it th
|
|
|
132
132
|
- Do not edit tracked files from this session, at any size. The boundary offers no proportionality exception and nothing enforces it.
|
|
133
133
|
- Do not hand a worker anything but a plan, which carries exact diffs only when already known and otherwise states scope and open questions
|
|
134
134
|
|
|
135
|
+
A late ask about a building row is a follow-up filed through `task-board`, with the ask as its origin and the running task cited in the intro. Amend the plan only on the operator's word, naming the re-review cost, and message the worker.
|
|
136
|
+
|
|
135
137
|
The tracked-file boundary collides with `CLAUDE.md`, which says to handle a small edit immediately, and this rule wins wherever the two meet. A session that writes a change cannot review it independently afterwards, which is the separation `review-pr` exists to supply.
|
|
136
138
|
|
|
137
139
|
### Filing a row
|
|
@@ -3,7 +3,7 @@ title: Orchestrator dispatch runbook
|
|
|
3
3
|
description: The plan-answer gate, the collision check before a self-dispatch, the conflict check against the tracks in flight and the evidence it rests on, the branch the launch names, the one model test applied to each role, the fallback to a human launch, and the loop's stopping condition
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
Run this at loop step 4, for a `##
|
|
6
|
+
Run this at loop step 4, for a `## Up next` row whose plan is verified, in place of handing the worktree to a human. The conflict check below is where that row is tested against every track in flight, and it is the one statement of what holds a row there.
|
|
7
7
|
|
|
8
8
|
## Contents
|
|
9
9
|
|
|
@@ -40,6 +40,7 @@ Never shorten a non-conforming slug here, since a rename parts the branch from t
|
|
|
40
40
|
|
|
41
41
|
Run `canon tasks plan-answers <plan> --json` and read `launchable` off the record. Branch on `launchable` rather than on the exit code, which a wrapping shell function can flatten to zero and so read a held row as clear.
|
|
42
42
|
|
|
43
|
+
- Hold a row whose `Waiting on` has not cleared, which no other check reads
|
|
43
44
|
- `launchable: true`: the plan answers itself, so proceed to the branch check.
|
|
44
45
|
- `launchable: false`: report every entry in `open`, each with its question label and stated reason, and hand the row to the human-launch line below
|
|
45
46
|
- Never fill the slot on the operator's behalf, the one move the plan standard forbids outright
|
|
@@ -152,6 +153,8 @@ A row qualifies for that pick when its plan carries no open question and touches
|
|
|
152
153
|
|
|
153
154
|
Read `${CLAUDE_SKILL_DIR}/references/orchestrator-launch.md` once every check above clears, and launch from its build template, which sits beside the review-address and planning shapes that skip these checks. A cloud row launches from `${CLAUDE_SKILL_DIR}/references/orchestrator-cloud-launch.md`, since the VM shares no plugin or board.
|
|
154
155
|
|
|
156
|
+
Once the launch succeeds, run `canon tasks promote <stem>`.
|
|
157
|
+
|
|
155
158
|
## Fall back to the human
|
|
156
159
|
|
|
157
160
|
Hand the row to the human-launch line in step 4 instead of dispatching when any of these hold, and name which one. A shared file alone is not listed.
|
|
@@ -171,4 +174,4 @@ Hand the person one command, `/canon:auto-ship <plan>`, naming the row, the plan
|
|
|
171
174
|
|
|
172
175
|
## Stop the loop
|
|
173
176
|
|
|
174
|
-
Wrapped in `/loop`, re-run the check against `##
|
|
177
|
+
Wrapped in `/loop`, re-run the check against `## Up next` on each wake, and stop once the group is empty or every row left in it is held. Report that once, on the wake that finds it, rather than polling a board nobody is clearing, the reasoning `orchestrator-poll.md` carries for the review trigger.
|
|
@@ -65,5 +65,9 @@ Keep the detail below the block and keep it skippable. A decision reached at the
|
|
|
65
65
|
|
|
66
66
|
- Reuse the vocabulary above rather than inventing a second one
|
|
67
67
|
- Keep a file set on the row claiming it, so the reader can check a hold or a shared-path claim instead of taking it
|
|
68
|
+
- Name a session by its launch name in any line sending the operator into it, such as `claude attach worker-frameboard-design-reference-set`, with the id in parentheses
|
|
69
|
+
- A bare id tells the operator nothing about which session it is
|
|
70
|
+
- A rename leaves the launch name matching nothing, so read the current name off `canon sessions list --json` when the line is written
|
|
71
|
+
- `claude rm` takes the id alone, so that line carries the id
|
|
68
72
|
|
|
69
73
|
Write no shape for a correction. A correction is a sentence, and a format for admitting error invites ceremony where plainness is the whole value.
|
|
@@ -55,7 +55,7 @@ Every measurement this pass takes decides whether a row can start rather than ho
|
|
|
55
55
|
|
|
56
56
|
Write the result into the row, since a re-test reported in chat is lost at the next compaction and measured again.
|
|
57
57
|
|
|
58
|
-
- Rewrite a blocker cell whose test no longer holds
|
|
58
|
+
- Rewrite a blocker cell whose test no longer holds through `canon tasks block <stem> "<blocker>"`, and move the row to the group its new state puts it in through `canon tasks place`
|
|
59
59
|
- Record the measurement in the task's `## Findings` as a line labeled with this session and the date, per `${CLAUDE_SKILL_DIR}/../task-board/references/tasks.md`
|
|
60
60
|
- `### Writing the board` in `role-orchestrator` owns the method, and `canon tasks validate` runs once the board is rewritten and before the report
|
|
61
61
|
|
|
@@ -69,7 +69,7 @@ A backlog row carries no blocker cell, since `${CLAUDE_SKILL_DIR}/../task-board/
|
|
|
69
69
|
|
|
70
70
|
### Moving a cleared row
|
|
71
71
|
|
|
72
|
-
A cleared row moves out of `backlog.md` onto the bottom of `## Needs a plan
|
|
72
|
+
A cleared row moves out of `backlog.md` onto the bottom of `## Needs a plan` in one call, `canon tasks place <stem> --group needs-a-plan --bottom --waiting "<what changed>. Last"`.
|
|
73
73
|
|
|
74
74
|
- `canon tasks validate`'s ordering check reads `last` as the ordinal the bottom placement claims
|
|
75
75
|
- A cell stating only what changed matches neither the ordinal nor the rank reading, raising a finding against the pass's own row
|
|
@@ -25,7 +25,7 @@ The third trigger reaches a window the first two cannot. A session with three wo
|
|
|
25
25
|
- Run `task-complete` to archive one the hook left in place
|
|
26
26
|
- A task whose outcomes are standing policy never closes, so hand it to a worker to encode the policy where it is enforced, then cut the outcomes with the reason and archive once that branch merges
|
|
27
27
|
- Encoding it from this session would write a tracked file, which `## Boundaries` in the skill body forbids
|
|
28
|
-
4. Read `.canon/tasks/priority.md` and count
|
|
28
|
+
4. Read `.canon/tasks/priority.md` and count the `## Up next` rows whose `Waiting on` has cleared, since a blocked row is no reserve. `## Run now` is what is running, so keep one in reserve beyond it.
|
|
29
29
|
5. Promote from the top of `## Needs a plan`, where the last sweep recorded what to plan next.
|
|
30
30
|
- Depart from that order when something changed under it and say what, since a position nobody honors is the ordering going stale
|
|
31
31
|
- The order is set by whether a task establishes functionality, so prefer one that adds or proves a mechanism over one that trims, tidies, or audits
|
|
@@ -53,27 +53,32 @@ That block is the detail. Lead the reply with the three slots under `## Every la
|
|
|
53
53
|
|
|
54
54
|
## Writing the board
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
Write `.canon/tasks/priority.md` through the `canon tasks` verbs alone, each reading the file once, rendering every table, and writing it once. Beside this session, `canon tasks archive` drops a shipped row and `plan-link` promotes a parked one.
|
|
57
57
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
| Move | Verb |
|
|
59
|
+
| ----------------------------------------- | ---------------------------------------------------------- |
|
|
60
|
+
| A backlog row onto the board, or across | `canon tasks place <stem> --group <group> --waiting "..."` |
|
|
61
|
+
| A planned row to `## Run now` on dispatch | `canon tasks promote <stem>` |
|
|
62
|
+
| A row up or down inside its group | `canon tasks move <stem> --before <stem>` |
|
|
63
|
+
| What a row waits on, or why it sits there | `canon tasks block <stem> "<reason>"` |
|
|
64
|
+
|
|
65
|
+
- `place` removes the task's backlog line in the same call, so a row never sits on both surfaces or on neither
|
|
66
|
+
- Demoting a row to `backlog.md` has no verb yet. Add the backlog line first, then delete the row with the file-editing tool, which errors on a non-match.
|
|
67
|
+
- Put the reason a row sits where it does in its Waiting on cell through `block`, since a row promoted with the cell left alone carries an order the next sweep cannot check
|
|
68
|
+
- Run `canon tasks validate` after any move, which reports a hand edit the verbs would have refused
|
|
62
69
|
|
|
63
70
|
### Columns and read-back
|
|
64
71
|
|
|
65
|
-
|
|
72
|
+
The verbs derive the Task, Touches, and Plan cells from the task file and its live plans, so a later reader checks them rather than reasoning again.
|
|
66
73
|
|
|
67
|
-
-
|
|
68
|
-
-
|
|
69
|
-
-
|
|
70
|
-
- Re-resolve every Plan pointer after anything archives a plan
|
|
71
|
-
- Read the file back after writing it, since the row that lands is the row a worker acts on
|
|
74
|
+
- `place` and `promote` refuse a row the target group's test fails, so a Plan cell never leads `auto-ship` to no plan and spends a dispatch
|
|
75
|
+
- A Touches cell differing from its plan's list is `touches-stale`. Change the plan's list rather than the cell, and step 6's hold call reads the result.
|
|
76
|
+
- Read the board back after a write, since the row that lands is the row a worker acts on
|
|
72
77
|
|
|
73
78
|
### Stale plan pointers
|
|
74
79
|
|
|
75
80
|
A Plan pointer goes stale from a merge this board never sees. The `post-merge` hook moves a plan to `.canon/plans/archive/` through `canon tasks archive` and rewrites the citation in the archived task file alone.
|
|
76
81
|
|
|
77
|
-
- A row for a task still on the board keeps pointing into `.canon/plans/` at a file that has moved
|
|
82
|
+
- A row for a task still on the board keeps pointing into `.canon/plans/` at a file that has moved, until the next verb call re-derives every Plan cell from the live plans
|
|
78
83
|
- `task-complete` marks outcomes on each worker's branch and moves nothing, so the move lands at the merge
|
|
79
84
|
- The board then reads as correct until a pointer is followed
|
|
@@ -61,7 +61,7 @@ four carried at least one, caught only because the planner ran
|
|
|
61
61
|
- Owe an announcement when the record lands, carrying the path and what the row got wrong, since the controller cannot watch the read happen
|
|
62
62
|
- Owe a message before a block becomes an interactive prompt, since a session already waiting on input never reaches the tool round an inbound message drains at
|
|
63
63
|
- Keep correcting the dispatcher a first-class move carrying its evidence, since a trial corrected a brief's premise, planned every row anyway, and carried the consequence into a plan question
|
|
64
|
-
- Carry a talk clause for a launch whose operator is in the session, putting each open question to them, recording a settled pick in place, and owing a close message when they end the conversation, since a cold planner's halting rules contradict a brief that asks it to talk
|
|
64
|
+
- Carry a talk clause for a launch whose operator is in the session, putting each open question to them, recording a settled pick in place, sending an ask about a row now building to the controller rather than the worker, and owing a close message when they end the conversation, since a cold planner's halting rules contradict a brief that asks it to talk
|
|
65
65
|
- Point at each of the three skills for its record's shape and the steps that write it
|
|
66
66
|
- Defer the addressee resolution to `session-relay` and keep only the last-rung inference, which discriminates differently here than it does for a worker because a session in this role holds no feature branch either
|
|
67
67
|
|
|
@@ -72,7 +72,8 @@ The plan standard fixes that block for a feature plan, and a groundwork or intak
|
|
|
72
72
|
|
|
73
73
|
## The board is read-only
|
|
74
74
|
|
|
75
|
-
- Never write `.canon/tasks/priority.md` or `.canon/tasks/backlog.md
|
|
75
|
+
- Never write `.canon/tasks/priority.md` or `.canon/tasks/backlog.md` by hand. Both are gitignored, so an overwrite drops a row with no history to recover it from.
|
|
76
|
+
- `canon tasks plan-link` is the one board write this role makes. It moves the row out of `## Needs a plan` once the plan is linked, in one read and one write a hand edit cannot match.
|
|
76
77
|
- Never write the task file. The record is the whole output, and a row edited from here changes what the controller reads back as the board's state.
|
|
77
78
|
- Report what the row got wrong rather than repairing it, such as a stale count or a dead path, in the record and the handback. The controller decides which carries the correction.
|
|
78
79
|
- Leave the cross-feature call alone. `priority.md` shows enough to write a confident merge order off a partial picture, which is the failure this boundary prevents.
|
|
@@ -101,10 +102,10 @@ One rung stays here because it differs between roles. Inference takes the sessio
|
|
|
101
102
|
|
|
102
103
|
A launch whose brief says it is a talk session puts the operator in this one. Everything above holds, and the clause below changes how questions are answered and when the role ends. A launch carrying no such sentence takes none of this.
|
|
103
104
|
|
|
104
|
-
- Put each open question to the operator through the structured question surface before writing the record
|
|
105
|
-
-
|
|
105
|
+
- Put each open question to the operator through the structured question surface before writing the record
|
|
106
|
+
- Record each pick per `### Overrides and settled questions` in `${CLAUDE_SKILL_DIR}/../plan-feature/references/plan.md`
|
|
106
107
|
- Keep answering under `plan-feature`'s discussion rounds after the record lands, since the operator launched this session to keep talking.
|
|
107
|
-
- Owe the landing announcement as usual, plus a close message when the operator ends the conversation.
|
|
108
|
+
- Owe the landing announcement as usual, plus a close message when the operator ends the conversation. Send an ask about a building row to the controller, never the worker.
|
|
108
109
|
- Skip the before-prompt block message for a question put to the operator in the session. Keep it for a block the operator cannot answer, since a controller learns of a stall only from a message.
|
|
109
110
|
|
|
110
111
|
The operator being present is an assumption the launch carries. A talk planner whose operator has walked away waits silently on its first question, so say what the session is waiting on in the turn it stops.
|
|
@@ -35,6 +35,8 @@ The draft mark fails from both ends. On 2026-08-31 four sessions re-drafted a pu
|
|
|
35
35
|
- Keep refusing a dispatcher a first-class move carrying its evidence, since the halts measured so far were correct and the cost of each fell where it belonged
|
|
36
36
|
- State that a held body may be older than the branch under it, since a plugin skill loads from the marketplace cache rather than from the working tree
|
|
37
37
|
- Carry a talk clause for a launch whose operator is in the session, asking them at a judgment call and sending a close message when they end the conversation, since a cold worker's halt-toward-the-controller and merge-ends-the-role rules contradict a brief that asks it to talk
|
|
38
|
+
- Freeze the plan's scope at dispatch, sorting a late ask into a defect to fix, a follow-up row to report, or an addition the operator's word admits with its re-review cost stated, since intake 155 measured about four UI review rounds on one pull request from late asks, each re-running both reviews
|
|
39
|
+
- Own the local preview server for a painted diff, started as a tracked background command before the pull request opens, since a `no-server` read leaves the evidence comment and the UI reviewer without an address on the one path nobody watched being built (erclx/frameboard#1 and erclx/frameboard#4)
|
|
38
40
|
- Point at `session-worktree`, `auto-ship`, and `review-address` for the steps each already owns
|
|
39
41
|
|
|
40
42
|
## Must not
|
|
@@ -36,9 +36,41 @@ A ready folder and the draft mark each carry work another session already did, s
|
|
|
36
36
|
|
|
37
37
|
### Overriding a plan question
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
Follow `### Overrides and settled questions` in `${CLAUDE_SKILL_DIR}/../plan-feature/references/plan.md` when this build decides against a suggestion.
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
Open the task's `## Findings` line for an override with the bold source-and-date label `${CLAUDE_SKILL_DIR}/../task-board/references/tasks.md` fixes.
|
|
42
|
+
|
|
43
|
+
### The preview server
|
|
44
|
+
|
|
45
|
+
A painted pull request needs a server in this worktree for `canon pr local` to find, and this session is the one with a lifetime to own it. `auto-ship` Step 5 decides whether the diff is painted, so this body restates no file test.
|
|
46
|
+
|
|
47
|
+
- Run `canon pr local --json` first and start nothing when `reason` reads `ok`
|
|
48
|
+
- Otherwise start the stack's `dev` script as a background command from the worktree root before the pull request step. `dev` follows the worktree, so a `review-address` fix shows on the same link.
|
|
49
|
+
- Wait up to 60 seconds for the verb to read `ok`, then ship either way. A stack with no `dev` script gets no start, and `pr-evidence` reports `no-server`.
|
|
50
|
+
- Never detach it with `nohup`, `setsid`, or `disown`, since the owning session is the stop. `canon worktrees reclaim` ends any listener left in a worktree it removes.
|
|
51
|
+
|
|
52
|
+
A hand-run `git-ship` or `git-pr` starts no server, since only a worker has a lifetime to own one.
|
|
53
|
+
|
|
54
|
+
### Building against a design reference
|
|
55
|
+
|
|
56
|
+
A plan carrying a `**Design references:**` section names the accepted design for the surface it changes. Open it before building, since the build matches it and a worker that reads the dark image alone ships a light theme nobody saw.
|
|
57
|
+
|
|
58
|
+
- Open each cited folder's light and dark images and its frame HTML before the first edit to that surface
|
|
59
|
+
- Take sizes, spacing, and colors from the frame HTML rather than from the image
|
|
60
|
+
- Report a reference that does not resolve in the working tree, naming the path, rather than building without it
|
|
61
|
+
- Leave `None identified.` as it stands and build without a reference
|
|
62
|
+
|
|
63
|
+
## Scope after dispatch
|
|
64
|
+
|
|
65
|
+
The plan is the scope from the dispatch on. A late ask restarts both reviews, and one pull request took about four UI review rounds from asks that arrived mid-build.
|
|
66
|
+
|
|
67
|
+
Sort each ask that arrives after dispatch three ways:
|
|
68
|
+
|
|
69
|
+
- A defect is a failed outcome or a regression in what the plan builds. Fix it in this build, and take every review finding on the pull request through `review-address` the same way.
|
|
70
|
+
- Anything else is a follow-up row. Do not build it. Reply with the follow-up wording, and report the row to the controller with its title, origin, and surface.
|
|
71
|
+
- Add it to this pull request only on the operator's word, never a bare controller or planner message without an amended plan. Before the commit, say that both reviews run again.
|
|
72
|
+
|
|
73
|
+
When the operator approves an addition through the controller, the controller amends the plan in place and sends the pointer, so the added scope stays checkable against the diff. Fall back to `session-relay`'s copyable block when no controller is live, and never drop the row.
|
|
42
74
|
|
|
43
75
|
## The board is read-only
|
|
44
76
|
|
|
@@ -107,6 +139,7 @@ A launch whose brief says it is a talk session puts the operator in this one. Ev
|
|
|
107
139
|
|
|
108
140
|
- Ask the operator in the session through the structured question surface at a judgment call, rather than halting toward the controller
|
|
109
141
|
- Put a plan question written as needing the operator's call to them directly
|
|
142
|
+
- Sort a late ask from the operator in place under the scope rule above, and send the controller the follow-up row rather than relaying the ask
|
|
110
143
|
- Send the controller a close message when the operator ends the conversation, beside the announcements the channel above owes.
|
|
111
144
|
- Keep the before-prompt block message for a block the operator cannot answer. A question put to the operator who is in the session needs none.
|
|
112
145
|
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: script-screencast
|
|
3
|
+
description: Why a recording script ships pre-seeded rather than blank, what the four discovery questions buy, and why the draft stays stack-agnostic
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Script screencast requirement
|
|
7
|
+
|
|
8
|
+
## Gap
|
|
9
|
+
|
|
10
|
+
Without this skill, a recording plan arrives as a wall of blank fields, so the user fills a template instead of editing a draft and the work the skill was meant to do lands back on them. The opposite failure costs more. A session that skips discovery guesses the audience, the length, and the hero moment, then writes five beats for a video nobody asked for, and every one of them has to be thrown away rather than edited.
|
|
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.
|
|
13
|
+
|
|
14
|
+
## Must
|
|
15
|
+
|
|
16
|
+
- Read project context and recent commits before proposing, since what shipped recently is usually the subject
|
|
17
|
+
- Ask exactly four discovery questions, each carrying a default derived from that context
|
|
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
|
|
23
|
+
|
|
24
|
+
## Must not
|
|
25
|
+
|
|
26
|
+
- Name recording software, editing software, fonts, or window managers
|
|
27
|
+
- Record, edit video, or generate captions
|
|
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
|
|
34
|
+
|
|
35
|
+
## Out of scope
|
|
36
|
+
|
|
37
|
+
- Producing the recording, which `record-screencast` owns
|
|
38
|
+
- Refining an existing draft, which is a direct edit of the file
|
|
39
|
+
- Slide decks, which `make-deck` owns
|
|
40
|
+
- Where the recording ships, which the draft lists and the user decides
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: script-screencast
|
|
3
|
+
description: Drafts a screencast script with pre-seeded beats, defaults, and decisions to `demos/<slug>/beats.md`. Reads project context, asks four discovery questions with proposed defaults, then writes a shippable draft. Use when asked to "draft a screencast", "write a recording script", "plan a demo video", or "scaffold a screencast for X". Do NOT re-invoke to refine an existing draft. Re-running overwrites. Edit the draft file directly.
|
|
4
|
+
metadata:
|
|
5
|
+
family: generate
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Script screencast
|
|
9
|
+
|
|
10
|
+
## Guards
|
|
11
|
+
|
|
12
|
+
- If no topic is provided, stop: `❌ No screencast topic. Describe what you are recording.`
|
|
13
|
+
- Draft, then hand off. Do not edit video, generate captions, or drive the application, since a recording is `record-screencast`'s job. Name it as the next step and stop.
|
|
14
|
+
- Stack-agnostic in the draft. Never name a recording tool, an editing tool, a font, or a window manager.
|
|
15
|
+
- Keep selectors, URLs, wait conditions, and timings out of the beats, since the compiler adds those four in a plan of its own and a beat carrying them stops being readable
|
|
16
|
+
|
|
17
|
+
## Step 1: read the project context
|
|
18
|
+
|
|
19
|
+
Read these in parallel from the project root, skipping any that do not exist:
|
|
20
|
+
|
|
21
|
+
- `CLAUDE.md`: behavior rules and project pitch
|
|
22
|
+
- `canon/REQUIREMENTS.md`: feature scope, non-goals, audience hints
|
|
23
|
+
- `.canon/tasks/index.md`: current scope
|
|
24
|
+
- Recent commits via `git log --oneline -20 2>/dev/null || echo "FALLBACK"`: what shipped recently is usually the recording subject.
|
|
25
|
+
|
|
26
|
+
## Step 2: discovery with proposed defaults
|
|
27
|
+
|
|
28
|
+
Ask exactly four questions in chat. Each carries a proposed default derived from Step 1. The user confirms, overrides, or says "use defaults" to accept all.
|
|
29
|
+
|
|
30
|
+
```markdown
|
|
31
|
+
**Discovery:**
|
|
32
|
+
|
|
33
|
+
1. Audience: proposing technical peers. Override?
|
|
34
|
+
2. Length: proposing 75-90s. Override?
|
|
35
|
+
3. Hero moment: proposing <best guess from context, or "the single thing that has to land">. Override?
|
|
36
|
+
4. What to cut: proposing <best guess, or "anything that is not the hero moment">. Override?
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Wait for answers before drafting. Do not infer silence as acceptance.
|
|
40
|
+
|
|
41
|
+
## Step 3: derive the slug
|
|
42
|
+
|
|
43
|
+
Build a 2-to-4-word kebab-case slug from the topic and discovery answers. Examples: `auth-flow-redesign`, `cli-onboarding`, `inline-edit-launch`.
|
|
44
|
+
|
|
45
|
+
## Step 4: write the draft
|
|
46
|
+
|
|
47
|
+
Create `demos/<slug>/beats.md` at the project root, creating the folder if it does not exist. The file is committed with the rest of the demo's sources, so a recording can be rebuilt from the folder alone.
|
|
48
|
+
|
|
49
|
+
### Fill the template
|
|
50
|
+
|
|
51
|
+
Write all nine sections from `${CLAUDE_SKILL_DIR}/references/beats-template.md`, read on reaching this step. Pre-seed every section with concrete content so the draft ships as-is, and the user edits down rather than fills blanks. A run stopped at discovery skips it.
|
|
52
|
+
|
|
53
|
+
Load `canon:video-craft` for every zoom and caption value the draft names, and report it rather than proceeding silently when it does not resolve.
|
|
54
|
+
|
|
55
|
+
## Step 5: output
|
|
56
|
+
|
|
57
|
+
Print the file path on its own line and a one-line summary. Do not paraphrase the path into prose.
|
|
58
|
+
|
|
59
|
+
```markdown
|
|
60
|
+
📝 Wrote demos/<slug>/beats.md
|
|
61
|
+
|
|
62
|
+
Draft has 5 beats and pre-seeded defaults. Edit the beats, the resolved decisions, and the wrap.
|
|
63
|
+
|
|
64
|
+
To record it rather than shoot it by hand:
|
|
65
|
+
record-screencast demos/<slug>/beats.md
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Name the skill and stop there. Do not compile the draft, do not run it, and do not generate captions. The operator edits the beats first, and the compiler reports which selectors and URLs they still owe it.
|
|
69
|
+
|
|
70
|
+
Say so plainly if `canon demo compile` is not available, rather than driving the application some other way. The command ships with the CLI and the skills ship with the plugin, so a project carrying one and not the other is a real state.
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Beats template
|
|
3
|
-
description: The nine-section template
|
|
3
|
+
description: The nine-section template script-screencast writes to demos/<slug>/beats.md, pre-seeded so the draft ships as-is
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Beats template
|
|
7
7
|
|
|
8
|
-
Applies to the draft `
|
|
8
|
+
Applies to the draft `script-screencast` Step 4 writes. Fill every placeholder from the project context and the discovery answers. The template states no zoom or caption value, since each traces to a source `canon:video-craft` records.
|
|
9
9
|
|
|
10
10
|
## Template
|
|
11
11
|
|
|
@@ -7,7 +7,7 @@ description: Why a session needs a thinking step before an outside search, deriv
|
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, a session reaching outside the project runs one generic `WebSearch` and takes what ranks highest. Nothing in the toolkit says how to search, and the two procedures that require an outside source, `plan-groundwork` and `
|
|
10
|
+
Without this skill, a session reaching outside the project runs one generic `WebSearch` and takes what ranks highest. Nothing in the toolkit says how to search, and the two procedures that require an outside source, `plan-groundwork` and `write-doc`'s wiki kind, give no route to one.
|
|
11
11
|
|
|
12
12
|
The miss is measured. On 2026-10-02 two queries ran twice each with identical text, once open and once with `allowed_domains` set to authorities the session derived itself with no list to consult.
|
|
13
13
|
|
|
@@ -30,7 +30,7 @@ Access is a second gap a session cannot derive. Probed on 2026-10-02, Reddit ref
|
|
|
30
30
|
- Prefer a public API over a fetched and summarized page where one exists, since the API returns the dates, authors, and identifiers a citation needs
|
|
31
31
|
- Carry a dated access note grown only from a failure a session hit, and stop to ask the operator before any paid or logged-in route
|
|
32
32
|
- Close with the practice skill's excuses, red flags, and closing checklist, answering "the model already knows the good sites" and "one search was enough"
|
|
33
|
-
- Be loaded from the sourcing steps of `plan-groundwork` and `
|
|
33
|
+
- Be loaded from the sourcing steps of `plan-groundwork` and `write-doc`'s wiki kind, each reporting when the skill does not resolve
|
|
34
34
|
|
|
35
35
|
## Must not
|
|
36
36
|
|
|
@@ -42,7 +42,7 @@ Access is a second gap a session cannot derive. Probed on 2026-10-02, Reddit ref
|
|
|
42
42
|
## Out of scope
|
|
43
43
|
|
|
44
44
|
- The form a citation takes: the procedure or standard writing it
|
|
45
|
-
- A Claude Code subject:
|
|
45
|
+
- A Claude Code subject: a direct fetch of `https://code.claude.com/docs/llms.txt` and the `.md` page it names, as `write-doc`'s wiki sourcing step already does
|
|
46
46
|
- Image generation, which makes a picture rather than finding a source
|
|
47
47
|
- Loading on every web search rather than on a research-shaped request: a hook matching `WebSearch`, planned on its own
|
|
48
48
|
- Whether a session already scopes searches without the skill, which only a run on a fresh research request without it would show
|
|
@@ -54,4 +54,4 @@ Access is a second gap a session cannot derive. Probed on 2026-10-02, Reddit ref
|
|
|
54
54
|
- No `Skill` call fired, so the description did not route a plain research request to the body.
|
|
55
55
|
- The run searched four times with no domain filter, naming authors and journals from recall, then fetched the papers' own pages. It never named the field, so the scenario's field pattern failed and the arm went red on one of its assertions.
|
|
56
56
|
|
|
57
|
-
The arm shows the trigger is the gap rather than the body: a session that never loads the skill cannot follow it. The pointers from `plan-groundwork` and `
|
|
57
|
+
The arm shows the trigger is the gap rather than the body: a session that never loads the skill cannot follow it. The pointers from `plan-groundwork` and `write-doc`'s wiki kind reach only those procedures, and the hook matching `WebSearch` is the route for every other search. One run on one model shows the miss exists and does not size it.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: search-craft
|
|
3
|
-
description: Carries the thinking step a session takes before it searches outside the project, naming the field, deriving who that field treats as authoritative, and running a search scoped to those sources beside an open one, plus a dated note on which sites refuse access. Use before any outside search for evidence, papers, documentation, statistics, or opinion, when a procedure loads it at its sourcing step, or when asked "find me the strongest evidence on X", "where should I look for this", "what does the research say", "find papers on", "look up the docs for", or "what are people saying about". Do NOT use to format a citation, which belongs to the surface writing it, to source a Claude Code subject, which is
|
|
3
|
+
description: Carries the thinking step a session takes before it searches outside the project, naming the field, deriving who that field treats as authoritative, and running a search scoped to those sources beside an open one, plus a dated note on which sites refuse access. Use before any outside search for evidence, papers, documentation, statistics, or opinion, when a procedure loads it at its sourcing step, or when asked "find me the strongest evidence on X", "where should I look for this", "what does the research say", "find papers on", "look up the docs for", or "what are people saying about". Do NOT use to format a citation, which belongs to the surface writing it, to source a Claude Code subject, which is a direct fetch of Anthropic's docs index, or to generate an image, which is not search.
|
|
4
4
|
metadata:
|
|
5
5
|
family: build
|
|
6
6
|
---
|
|
@@ -87,6 +87,6 @@ These flags fire after the search has run.
|
|
|
87
87
|
## What this delegates
|
|
88
88
|
|
|
89
89
|
- The form a citation takes: the surface writing it, such as the standard the procedure writes to
|
|
90
|
-
- A Claude Code subject:
|
|
90
|
+
- A Claude Code subject: a direct fetch of `https://code.claude.com/docs/llms.txt` and the `.md` page it names, as `write-doc`'s wiki sourcing step does
|
|
91
91
|
- Generating an image: whatever draws the surface, since making one is not search
|
|
92
92
|
- Access code a session needs repeatedly: a `canon` verb, never a script in this skill
|
|
@@ -183,6 +183,7 @@ After the chain, report as well:
|
|
|
183
183
|
- Any domains or scripts that failed
|
|
184
184
|
- Any detection gaps surfaced during resolve
|
|
185
185
|
- Claude Code plugins as an onboarding step this chain does not cover, so a clean result does not read as onboarding complete
|
|
186
|
+
- `/canon:write-doc README.md` when the root `README.md` is missing or carries no H1 naming the project, and nothing when it is authored
|
|
186
187
|
|
|
187
188
|
A resolved name and a fallback read alike once written, so the preview marks the
|
|
188
189
|
fallback rather than this report. The preview is the last point before the first
|
|
@@ -67,10 +67,12 @@ Write `.canon/tasks/vXX.Y-<slug>.md` under the claimed label, reading the file f
|
|
|
67
67
|
|
|
68
68
|
A task file with no row is a dropped task, so name its surface in the same pass that creates it. The test and both file shapes are in `${CLAUDE_SKILL_DIR}/references/board.md`.
|
|
69
69
|
|
|
70
|
-
| Task | Surface
|
|
71
|
-
| ------------------------------------------- |
|
|
72
|
-
| Plausibly planned within the next few waves | A row under `## Needs a plan` in `.canon/tasks/priority.md`,
|
|
73
|
-
| Anything else | A line in `.canon/tasks/backlog.md`, which is unordered
|
|
70
|
+
| Task | Surface |
|
|
71
|
+
| ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
|
|
72
|
+
| Plausibly planned within the next few waves | A row under `## Needs a plan` in `.canon/tasks/priority.md`, through `canon tasks place <stem> --group needs-a-plan --waiting "<reason>"` |
|
|
73
|
+
| Anything else | A line in `.canon/tasks/backlog.md`, which is unordered |
|
|
74
|
+
|
|
75
|
+
Position the row against its siblings with `--before <stem>` or `--after <stem>`, and state what it ranks against in the reason.
|
|
74
76
|
|
|
75
77
|
### Check for a live orchestrator
|
|
76
78
|
|
|
@@ -80,11 +82,11 @@ Check the roster before writing either file. Read `canon sessions list --self --
|
|
|
80
82
|
- Its `name` starts with `orchestrator-`, the convention every hand-launched controller here uses, which excludes every `worker-` and `planner-` session
|
|
81
83
|
- Treat a refusal from either call the same as a roster read that failed
|
|
82
84
|
|
|
83
|
-
| Roster read | Act
|
|
84
|
-
| -------------------------------------------------------------------------- |
|
|
85
|
-
| **Found** | Write neither file. Report the surface and reason, and message that session so it places the row itself
|
|
86
|
-
| **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 surface.
|
|
87
|
-
| **Not found otherwise**, or the read fails |
|
|
85
|
+
| Roster read | Act |
|
|
86
|
+
| -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
|
|
87
|
+
| **Found** | Write neither file. Report the surface and reason, and message that session so it places the row itself |
|
|
88
|
+
| **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 surface. |
|
|
89
|
+
| **Not found otherwise**, or the read fails | Place the row through `canon tasks place`. A failed read looks like a solo project. |
|
|
88
90
|
|
|
89
91
|
Say which branch fired and why in the report. A placement with no stated reason is one the next sweep re-derives from nothing.
|
|
90
92
|
|
|
@@ -70,28 +70,31 @@ Group tasks by readiness rather than by status, one row per task, under the colu
|
|
|
70
70
|
|
|
71
71
|
Readiness is three groups under fixed headings, `## Run now`, `## Up next`, and `## Needs a plan`, in that order. A task belongs to exactly one, and the tests are read in order.
|
|
72
72
|
|
|
73
|
-
| Group | Test
|
|
74
|
-
| ----------------- |
|
|
75
|
-
| `## Run now` | A
|
|
76
|
-
| `## Up next` | A written plan exists, and
|
|
77
|
-
| `## Needs a plan` | Everything else. No plan, or a plan that no longer describes the work
|
|
73
|
+
| Group | Test |
|
|
74
|
+
| ----------------- | ------------------------------------------------------------------------------------ |
|
|
75
|
+
| `## Run now` | A worker was dispatched on it, under a written plan covering every open outcome |
|
|
76
|
+
| `## Up next` | A written plan exists and no worker holds it yet, and `Waiting on` names what is due |
|
|
77
|
+
| `## Needs a plan` | Everything else. No plan, or a plan that no longer describes the work |
|
|
78
78
|
|
|
79
79
|
The names are the contract. A board grouped by readiness under names of its own reads as empty to anything counting rows under a heading, so add no fourth group.
|
|
80
80
|
|
|
81
|
+
### Writing the board
|
|
82
|
+
|
|
83
|
+
Every write goes through `canon tasks place`, `promote`, `move`, or `block`, each reading the file once, rendering the columns the template fixes, and writing it once. `plan-link` promotes a parked row the same way. Only `Waiting on` is typed, since every other cell derives from the task and its live plans.
|
|
84
|
+
|
|
81
85
|
### What blocks a run
|
|
82
86
|
|
|
83
87
|
A collision with running work blocks a task only where no merge settles it, being a contract, a relocation, or a sweep. A shared file alone is none, since the branch merging second rebases.
|
|
84
88
|
|
|
85
|
-
- A
|
|
86
|
-
- Each group's columns follow from its test. Neither half of the `##
|
|
89
|
+
- A dispatcher picks from `## Up next` and runs `canon tasks promote` once the launch succeeds
|
|
90
|
+
- Each group's columns follow from its test. Neither half of the `## Up next` test is checkable without the file set and the plan beside the task.
|
|
87
91
|
|
|
88
92
|
### The `Touches` cell
|
|
89
93
|
|
|
90
|
-
A `Touches` cell is
|
|
94
|
+
A `Touches` cell is the first three paths of its plan's `**Files to touch:**` and a count of the rest, the union in line order for a sliced task. It states what the branch sets out to write, and a running branch outgrows it.
|
|
91
95
|
|
|
92
|
-
-
|
|
93
|
-
-
|
|
94
|
-
- The row's owner writes the correction. A worker never edits this board.
|
|
96
|
+
- `canon tasks plan-reach <plan>` reads the current reach off the branch's diff
|
|
97
|
+
- Change the plan's list to change the cell. A worker never edits this board.
|
|
95
98
|
|
|
96
99
|
### Cell width
|
|
97
100
|
|
|
@@ -118,7 +121,7 @@ The `Waiting on` column under `## Up next` carries the reason in one of three fo
|
|
|
118
121
|
| Sibling task | That task |
|
|
119
122
|
| External condition | The condition and what would satisfy it |
|
|
120
123
|
|
|
121
|
-
Naming what would satisfy a condition separates a blocked row from one nobody examined, so a condition with no way out fails the test. The header text is the contract, since a reader resolves the column by header rather than position.
|
|
124
|
+
Naming what would satisfy a condition separates a blocked row from one nobody examined, so a condition with no way out fails the test. The header text is the contract, since a reader resolves the column by header rather than position. A cell renders at most 120 characters, a link counting as its label alone, and the verbs refuse a longer one.
|
|
122
125
|
|
|
123
126
|
### The needs-a-plan cell
|
|
124
127
|
|
|
@@ -183,7 +183,7 @@ Read `${CLAUDE_SKILL_DIR}/references/promotion-fold.md` for how each block lands
|
|
|
183
183
|
Lesson: .canon/teach/<nn>-<topic>/lessons/<nnnn>-<slug>.html
|
|
184
184
|
Reference: .canon/teach/<nn>-<topic>/reference/<slug>.md
|
|
185
185
|
Record: .canon/teach/<nn>-<topic>/learning-records/<nnnn>-<slug>.md
|
|
186
|
-
Figure: <drawn through
|
|
186
|
+
Figure: <drawn through draw-figure, or the one-line reason prose carries it>
|
|
187
187
|
Progress: <n> of <m> success lines met
|
|
188
188
|
Open: [<the url the serve verb reported>](<the same url>)
|
|
189
189
|
```
|