@erclx/canon 5.37.0 → 5.39.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/claude/.claude-plugin/plugin.json +1 -1
- package/claude/skills/api-design/SKILL.md +12 -9
- package/claude/skills/auto-ship/SKILL.md +43 -23
- package/claude/skills/backlog-triage/SKILL.md +62 -53
- package/claude/skills/backlog-triage/references/apply.md +69 -0
- package/claude/skills/build-in-slices/SKILL.md +8 -4
- package/claude/skills/canon-cli/SKILL.md +5 -1
- package/claude/skills/canon-feedback/SKILL.md +18 -8
- package/claude/skills/canon-feedback-triage/SKILL.md +10 -3
- package/claude/skills/canvas-board/SKILL.md +36 -17
- package/claude/skills/ci-workflow/SKILL.md +5 -4
- package/claude/skills/code-craft/SKILL.md +10 -6
- package/claude/skills/codebase-layout/SKILL.md +3 -5
- package/claude/skills/context-fold/REQUIREMENT.md +4 -4
- package/claude/skills/context-fold/SKILL.md +42 -23
- package/claude/skills/context-fold/references/context-refresh.md +4 -3
- package/claude/skills/context-fold/references/context.md +79 -64
- package/claude/skills/create-rule/SKILL.md +7 -3
- package/claude/skills/create-skill/SKILL.md +27 -7
- package/claude/skills/create-skill/references/skill-reference.md +41 -17
- package/claude/skills/decision-escalate/SKILL.md +8 -5
- package/claude/skills/deploy-app/SKILL.md +1 -1
- package/claude/skills/deprecation-migration/SKILL.md +12 -4
- package/claude/skills/design-taste/SKILL.md +17 -11
- package/claude/skills/docs-sync/REQUIREMENT.md +1 -0
- package/claude/skills/docs-sync/SKILL.md +17 -6
- package/claude/skills/docs-sync/references/docs.md +54 -21
- package/claude/skills/docs-sync/references/readme.md +32 -8
- package/claude/skills/document-health/SKILL.md +3 -4
- package/claude/skills/draft-and-pick/SKILL.md +73 -47
- package/claude/skills/draft-doc/SKILL.md +9 -4
- package/claude/skills/draft-doc/references/context.md +4 -4
- package/claude/skills/draft-doc/references/docs.md +1 -0
- package/claude/skills/draft-doc/references/wiki.md +3 -2
- package/claude/skills/draft-figure/SKILL.md +9 -7
- package/claude/skills/draft-identity/SKILL.md +24 -52
- package/claude/skills/draft-identity/references/card-route.md +46 -0
- package/claude/skills/draft-ready/SKILL.md +19 -7
- package/claude/skills/draft-screencast/SKILL.md +6 -112
- package/claude/skills/draft-screencast/references/beats-template.md +119 -0
- package/claude/skills/draft-slides/SKILL.md +7 -4
- package/claude/skills/git-branch/SKILL.md +3 -3
- package/claude/skills/git-commit/SKILL.md +5 -3
- package/claude/skills/git-followup/SKILL.md +16 -9
- package/claude/skills/git-issue/SKILL.md +6 -5
- package/claude/skills/git-issue/references/issue.md +11 -10
- package/claude/skills/git-pr/SKILL.md +56 -44
- package/claude/skills/git-ship/SKILL.md +43 -34
- package/claude/skills/git-ship/references/ci-watch.md +31 -0
- package/claude/skills/git-split/SKILL.md +28 -100
- package/claude/skills/git-split/references/independent.md +40 -0
- package/claude/skills/git-split/references/stacked.md +73 -0
- package/claude/skills/git-stage/SKILL.md +9 -7
- package/claude/skills/git-worktree/SKILL.md +27 -49
- package/claude/skills/git-worktree/references/cleanup.md +55 -0
- package/claude/skills/markdown-craft/SKILL.md +2 -2
- package/claude/skills/markdown-craft/references/markdown.md +82 -52
- package/claude/skills/plan-feature/SKILL.md +52 -46
- package/claude/skills/plan-feature/references/batches.md +46 -0
- package/claude/skills/plan-groundwork/SKILL.md +60 -74
- package/claude/skills/plan-groundwork/references/groundwork.md +53 -24
- package/claude/skills/plan-groundwork/references/output.md +48 -0
- package/claude/skills/plan-intake/SKILL.md +28 -21
- package/claude/skills/plan-intake-answer/SKILL.md +14 -13
- package/claude/skills/read-frames/SKILL.md +2 -0
- package/claude/skills/record-screencast/SKILL.md +31 -11
- package/claude/skills/review-address/SKILL.md +76 -158
- package/claude/skills/review-address/references/rebase-only.md +34 -0
- package/claude/skills/review-craft/SKILL.md +27 -11
- package/claude/skills/review-pr/SKILL.md +91 -40
- package/claude/skills/review-pr/references/post.md +1 -1
- package/claude/skills/review-ui/SKILL.md +62 -37
- package/claude/skills/review-ui/references/hosted-preview.md +30 -0
- package/claude/skills/role-orchestrator/SKILL.md +105 -74
- package/claude/skills/role-orchestrator/references/orchestrator-filing.md +26 -0
- package/claude/skills/role-orchestrator/references/orchestrator-parked.md +1 -1
- package/claude/skills/role-planner/SKILL.md +66 -64
- package/claude/skills/role-reviewer/SKILL.md +57 -46
- package/claude/skills/role-worker/SKILL.md +68 -63
- package/claude/skills/search-craft/SKILL.md +7 -5
- package/claude/skills/session-compact/SKILL.md +16 -11
- package/claude/skills/session-map/SKILL.md +31 -10
- package/claude/skills/session-relay/SKILL.md +32 -65
- package/claude/skills/session-resume/SKILL.md +18 -13
- package/claude/skills/session-worktree/SKILL.md +70 -42
- package/claude/skills/systematic-debugging/SKILL.md +6 -1
- package/claude/skills/target-check/SKILL.md +13 -6
- package/claude/skills/target-setup/SKILL.md +41 -30
- package/claude/skills/target-setup/references/verify.md +6 -5
- package/claude/skills/task-board/SKILL.md +68 -60
- package/claude/skills/task-board/references/create-report.md +36 -0
- package/claude/skills/task-board/references/tasks.md +3 -1
- package/claude/skills/task-complete/SKILL.md +20 -18
- package/claude/skills/teach-workspace/SKILL.md +61 -33
- package/claude/skills/test-craft/SKILL.md +2 -1
- package/claude/skills/test-first/SKILL.md +15 -9
- package/claude/skills/ui-checklist/SKILL.md +18 -16
- package/claude/skills/ux-audit/SKILL.md +9 -10
- package/claude/skills/ux-measure/SKILL.md +22 -18
- package/claude/skills/video-craft/SKILL.md +15 -7
- package/claude/skills/write-human/SKILL.md +9 -1
- package/claude/skills/youtube-transcripts/SKILL.md +2 -1
- package/docs/agents/context-audit-checks.md +19 -1
- package/docs/agents/context-audit.md +2 -2
- package/docs/agents/driver.md +1 -1
- package/docs/agents/hooks.md +21 -1
- package/docs/agents/index.md +10 -14
- package/docs/agents/indexes.md +25 -29
- package/docs/agents/install-and-sync.md +124 -235
- package/docs/agents/markdown-audit-density.md +39 -0
- package/docs/agents/markdown-audit-weight.md +9 -7
- package/docs/agents/markdown-audit.md +18 -14
- package/docs/agents/migrate.md +41 -16
- package/docs/agents/output-shape.md +60 -45
- package/docs/agents/overview.md +36 -12
- package/docs/agents/routing.md +1 -1
- package/docs/agents/rule-citations.md +1 -1
- package/docs/agents/skills-reach.md +1 -1
- package/docs/agents/targets.md +25 -77
- package/docs/target/migrations.md +1 -1
- package/docs/target/projects.md +3 -3
- package/docs/target/scenarios.md +1 -1
- package/docs/workflow/ai-workflow.md +2 -2
- package/docs/workflow/parallel-features.md +2 -2
- package/docs/workflow/skill-map.md +1 -1
- package/docs/workflow/visual-design-workflow.md +1 -1
- package/governance/detect.toml +6 -1
- package/package.json +6 -3
- package/scripts/core/install-check.sh +1 -1
- package/src/commands/claude.ts +1 -2
- package/src/commands/context.ts +106 -7
- package/src/commands/hooks.ts +63 -0
- package/src/commands/markdown.ts +169 -32
- package/src/commands/pr.ts +1 -1
- package/src/commands/records.ts +0 -1
- package/src/context/audit.ts +256 -5
- package/src/context/classify/prompts.ts +1 -1
- package/src/context/gate.ts +23 -7
- package/src/context/shape-gated.ts +28 -0
- package/src/design/document.ts +1 -1
- package/src/design/tokens.ts +1 -1
- package/src/docs/read.ts +15 -21
- package/src/gate/measures.ts +15 -190
- package/src/gate/stages.ts +21 -23
- package/src/hooks/reply-links.ts +110 -0
- package/src/markdown/density.ts +258 -0
- package/src/markdown/gate.ts +57 -18
- package/src/markdown/reference-shape.ts +103 -0
- package/src/markdown/scope.ts +174 -0
- package/src/markdown/structure.ts +10 -60
- package/src/sandbox/equivalence.ts +7 -9
- package/src/shipped/references.ts +1 -1
- package/src/teach/browser/head.ts +2 -2
- package/src/teach/browser/sidebar.ts +3 -3
- package/src/teach/browser/theme.ts +2 -2
- package/src/tooling/inject.ts +2 -2
- package/src/tooling/package.ts +15 -18
- package/src/tooling/verify-stack.ts +6 -3
- package/tooling/astro/configs/.oxfmtrc.json +8 -0
- package/tooling/astro/configs/.prettierrc +13 -0
- package/tooling/astro/manifest.toml +13 -0
- package/tooling/astro/reference.md +15 -5
- package/tooling/base/configs/.oxfmtrc.json +7 -0
- package/tooling/base/configs/scripts/verify.ts +1 -1
- package/tooling/base/manifest.toml +6 -6
- package/tooling/base/reference.md +12 -9
- package/tooling/base/seeds/.lintstagedrc +1 -3
- package/tooling/base/seeds/canon/context/ci.md +3 -3
- package/tooling/base/seeds/canon/context/development.md +2 -2
- package/tooling/claude/manifest.toml +5 -1
- package/tooling/claude/seeds/.claude/hooks/reply-links.sh +72 -0
- package/tooling/claude/seeds/.claude/hooks/standards-audit.sh +22 -1
- package/tooling/claude/seeds/.claude/settings.json +4 -0
- package/tooling/go/reference.md +2 -2
- package/tooling/nextjs/configs/.oxlintrc.json +223 -0
- package/tooling/nextjs/manifest.toml +2 -5
- package/tooling/nextjs/reference.md +4 -4
- package/tooling/php/manifest.toml +6 -1
- package/tooling/php/reference.md +2 -2
- package/tooling/python/manifest.toml +6 -1
- package/tooling/python/reference.md +4 -4
- package/tooling/vite-react/manifest.toml +1 -4
- package/tooling/vite-react/reference.md +3 -3
- package/tooling/web/configs/.oxlintrc.json +213 -0
- package/tooling/web/manifest.toml +9 -13
- package/tooling/web/reference.md +14 -14
- package/docs/agents/commands.md +0 -154
- package/docs/agents/docs.md +0 -27
- package/docs/agents/drift-surfaces.md +0 -201
- package/docs/agents/gov-detect.md +0 -47
- package/docs/agents/scripting.md +0 -142
- package/src/markdown/growth.ts +0 -43
- package/tooling/base/configs/.prettierrc +0 -12
- package/tooling/base/seeds/.prettierignore +0 -0
- package/tooling/nextjs/configs/eslint.config.js +0 -91
- package/tooling/web/configs/eslint.config.js +0 -82
|
@@ -41,7 +41,11 @@ canon tasks next-label --claim --json
|
|
|
41
41
|
|
|
42
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
43
|
|
|
44
|
-
Branch on the record's `reason` rather than on the exit code, taking `label` from a record that carries one.
|
|
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
|
|
45
49
|
|
|
46
50
|
## Step 3: write the overview
|
|
47
51
|
|
|
@@ -71,7 +75,9 @@ Run the match check in `${CLAUDE_SKILL_DIR}/references/assembly.md` before going
|
|
|
71
75
|
|
|
72
76
|
## Step 6: write the task
|
|
73
77
|
|
|
74
|
-
Write `<main-root>/.canon/tasks/<label>-<slug>.md` by heredoc
|
|
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:
|
|
75
81
|
|
|
76
82
|
```bash
|
|
77
83
|
canon tasks plan-link <task-stem> .canon/plans/feature-<slug>.md --json
|
|
@@ -79,13 +85,19 @@ canon tasks plan-link <task-stem> .canon/plans/feature-<slug>.md --json
|
|
|
79
85
|
|
|
80
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.
|
|
81
87
|
|
|
82
|
-
|
|
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
|
|
83
95
|
|
|
84
|
-
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
|
|
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.
|
|
85
97
|
|
|
86
|
-
- **Orchestrator found.** Write neither file. Message that session with the row's title, the plan link, and the group with its reason, so
|
|
87
|
-
- **Not found, and this session's name starts with `worker-` or `planner-`.** Write neither file, since both role bodies ban a board write
|
|
88
|
-
- **Not found otherwise, or the roster read fails.** Write the row into `priority.md` through the
|
|
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.
|
|
89
101
|
|
|
90
102
|
Say which branch fired in Step 8.
|
|
91
103
|
|
|
@@ -10,8 +10,9 @@ metadata:
|
|
|
10
10
|
## Guards
|
|
11
11
|
|
|
12
12
|
- If no topic is provided, stop: `❌ No screencast topic. Describe what you are recording.`
|
|
13
|
-
- Draft, then hand off. Do not edit video
|
|
14
|
-
- Stack-agnostic in the draft. Never name a recording tool, an editing tool, a font, or a window manager.
|
|
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
|
|
15
16
|
|
|
16
17
|
## Step 1: read the project context
|
|
17
18
|
|
|
@@ -45,118 +46,11 @@ Build a 2-to-4-word kebab-case slug from the topic and discovery answers. Exampl
|
|
|
45
46
|
|
|
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.
|
|
47
48
|
|
|
48
|
-
|
|
49
|
+
### Fill the template
|
|
49
50
|
|
|
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.
|
|
51
52
|
|
|
52
|
-
|
|
53
|
-
# Screencast: <short title>
|
|
54
|
-
|
|
55
|
-
## 1. Header
|
|
56
|
-
|
|
57
|
-
- Audience: <from discovery>
|
|
58
|
-
- Length: <from discovery>
|
|
59
|
-
- Hero moment: <from discovery>
|
|
60
|
-
- Pitch: <one sentence, derived from project context>
|
|
61
|
-
|
|
62
|
-
## 2. Pre-recording checklist
|
|
63
|
-
|
|
64
|
-
- [ ] Browser at 1920x1080 with notifications silenced
|
|
65
|
-
- [ ] Session storage and history cleared for the recorded surfaces
|
|
66
|
-
- [ ] Cursor highlighter on
|
|
67
|
-
- [ ] Live URLs and fixtures verified healthy
|
|
68
|
-
- [ ] <one or two project-specific items derived from context>
|
|
69
|
-
|
|
70
|
-
## 3. Beat sheet
|
|
71
|
-
|
|
72
|
-
Five beats. Each uses five fields. Add a sixth `Transition out` only when non-default.
|
|
73
|
-
|
|
74
|
-
### Beat 1: Cold open
|
|
75
|
-
|
|
76
|
-
- On screen: <derived from hero moment>
|
|
77
|
-
- Action: <one verb, derived>
|
|
78
|
-
- Watch for:
|
|
79
|
-
- Emphasis: zoom onto the action, scale and speed per `canon:video-craft`
|
|
80
|
-
- Caption:
|
|
81
|
-
|
|
82
|
-
### Beat 2: Setup
|
|
83
|
-
|
|
84
|
-
- On screen:
|
|
85
|
-
- Action:
|
|
86
|
-
- Watch for:
|
|
87
|
-
- Emphasis: none
|
|
88
|
-
- Caption:
|
|
89
|
-
|
|
90
|
-
### Beat 3: Hero moment
|
|
91
|
-
|
|
92
|
-
- On screen: <hero moment from discovery>
|
|
93
|
-
- Action:
|
|
94
|
-
- Watch for:
|
|
95
|
-
- Emphasis: highlight overlay
|
|
96
|
-
- Caption:
|
|
97
|
-
|
|
98
|
-
### Beat 4: Payoff
|
|
99
|
-
|
|
100
|
-
- On screen:
|
|
101
|
-
- Action:
|
|
102
|
-
- Watch for:
|
|
103
|
-
- Emphasis: none
|
|
104
|
-
- Caption:
|
|
105
|
-
|
|
106
|
-
### Beat 5: Outro
|
|
107
|
-
|
|
108
|
-
- On screen:
|
|
109
|
-
- Action:
|
|
110
|
-
- Watch for:
|
|
111
|
-
- Emphasis: zoom out to full frame
|
|
112
|
-
- Caption:
|
|
113
|
-
|
|
114
|
-
## 4. Sequencing notes
|
|
115
|
-
|
|
116
|
-
- Hover before click. The cursor needs a beat to register.
|
|
117
|
-
- Do not cut mid-reset. Let state changes complete on screen.
|
|
118
|
-
- Cut on action, not on stillness.
|
|
119
|
-
- <one or two project-specific gotchas derived from context>
|
|
120
|
-
|
|
121
|
-
## 5. Production notes
|
|
122
|
-
|
|
123
|
-
- Resolution: 1920x1080
|
|
124
|
-
- Frame rate: 30fps
|
|
125
|
-
- Container: mp4 H.264
|
|
126
|
-
- Zoom: only on an action too small to read at full frame, scale, speed, and dwell per `canon:video-craft`, zoomed out before every cut
|
|
127
|
-
- Highlight overlay: ~1.5s soft glow
|
|
128
|
-
|
|
129
|
-
## 6. Captions
|
|
130
|
-
|
|
131
|
-
- Each caption names what its beat's frame shows, at most two lines of 42 characters, per `canon:video-craft`
|
|
132
|
-
- Hold and reading rate per `canon:video-craft`, splitting a caption across beats rather than shortening its hold
|
|
133
|
-
- Placed off the element the beat acts on
|
|
134
|
-
|
|
135
|
-
## 7. Distribution
|
|
136
|
-
|
|
137
|
-
Where the recording ships. Strike rows that do not apply.
|
|
138
|
-
|
|
139
|
-
- [ ] Native upload to social platform
|
|
140
|
-
- [ ] Canonical host (long-form video platform)
|
|
141
|
-
- [ ] Linked from project README or release notes
|
|
142
|
-
|
|
143
|
-
## 8. Resolved decisions
|
|
144
|
-
|
|
145
|
-
Pre-seeded with the common picks. Strike or rewrite as needed.
|
|
146
|
-
|
|
147
|
-
- Audio: silent plus captions
|
|
148
|
-
- Language: English
|
|
149
|
-
- Chip order: <leave for user, derived from beats>
|
|
150
|
-
- Thumbnail: hero-moment frame
|
|
151
|
-
|
|
152
|
-
## 9. Wrap
|
|
153
|
-
|
|
154
|
-
What surrounds the take in the finished video. Each row carries a proposed default. Write `none` on every row to ship the raw take.
|
|
155
|
-
|
|
156
|
-
- Intro: <proposed title card of two to three seconds naming the subject, or `none`>
|
|
157
|
-
- Outro: <proposed closing card naming where to go next, or `none`>
|
|
158
|
-
- Music: none
|
|
159
|
-
```
|
|
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.
|
|
160
54
|
|
|
161
55
|
## Step 5: output
|
|
162
56
|
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Beats template
|
|
3
|
+
description: The nine-section template draft-screencast writes to demos/<slug>/beats.md, pre-seeded so the draft ships as-is
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Beats template
|
|
7
|
+
|
|
8
|
+
Applies to the draft `draft-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
|
+
|
|
10
|
+
## Template
|
|
11
|
+
|
|
12
|
+
```markdown
|
|
13
|
+
# Screencast: <short title>
|
|
14
|
+
|
|
15
|
+
## 1. Header
|
|
16
|
+
|
|
17
|
+
- Audience: <from discovery>
|
|
18
|
+
- Length: <from discovery>
|
|
19
|
+
- Hero moment: <from discovery>
|
|
20
|
+
- Pitch: <one sentence, derived from project context>
|
|
21
|
+
|
|
22
|
+
## 2. Pre-recording checklist
|
|
23
|
+
|
|
24
|
+
- [ ] Browser at 1920x1080 with notifications silenced
|
|
25
|
+
- [ ] Session storage and history cleared for the recorded surfaces
|
|
26
|
+
- [ ] Cursor highlighter on
|
|
27
|
+
- [ ] Live URLs and fixtures verified healthy
|
|
28
|
+
- [ ] <one or two project-specific items derived from context>
|
|
29
|
+
|
|
30
|
+
## 3. Beat sheet
|
|
31
|
+
|
|
32
|
+
Five beats. Each uses five fields. Add a sixth `Transition out` only when non-default.
|
|
33
|
+
|
|
34
|
+
### Beat 1: Cold open
|
|
35
|
+
|
|
36
|
+
- On screen: <derived from hero moment>
|
|
37
|
+
- Action: <one verb, derived>
|
|
38
|
+
- Watch for:
|
|
39
|
+
- Emphasis: zoom onto the action, scale and speed per `canon:video-craft`
|
|
40
|
+
- Caption:
|
|
41
|
+
|
|
42
|
+
### Beat 2: Setup
|
|
43
|
+
|
|
44
|
+
- On screen:
|
|
45
|
+
- Action:
|
|
46
|
+
- Watch for:
|
|
47
|
+
- Emphasis: none
|
|
48
|
+
- Caption:
|
|
49
|
+
|
|
50
|
+
### Beat 3: Hero moment
|
|
51
|
+
|
|
52
|
+
- On screen: <hero moment from discovery>
|
|
53
|
+
- Action:
|
|
54
|
+
- Watch for:
|
|
55
|
+
- Emphasis: highlight overlay
|
|
56
|
+
- Caption:
|
|
57
|
+
|
|
58
|
+
### Beat 4: Payoff
|
|
59
|
+
|
|
60
|
+
- On screen:
|
|
61
|
+
- Action:
|
|
62
|
+
- Watch for:
|
|
63
|
+
- Emphasis: none
|
|
64
|
+
- Caption:
|
|
65
|
+
|
|
66
|
+
### Beat 5: Outro
|
|
67
|
+
|
|
68
|
+
- On screen:
|
|
69
|
+
- Action:
|
|
70
|
+
- Watch for:
|
|
71
|
+
- Emphasis: zoom out to full frame
|
|
72
|
+
- Caption:
|
|
73
|
+
|
|
74
|
+
## 4. Sequencing notes
|
|
75
|
+
|
|
76
|
+
- Hover before click. The cursor needs a beat to register.
|
|
77
|
+
- Do not cut mid-reset. Let state changes complete on screen.
|
|
78
|
+
- Cut on action, not on stillness.
|
|
79
|
+
- <one or two project-specific gotchas derived from context>
|
|
80
|
+
|
|
81
|
+
## 5. Production notes
|
|
82
|
+
|
|
83
|
+
- Resolution: 1920x1080
|
|
84
|
+
- Frame rate: 30fps
|
|
85
|
+
- Container: mp4 H.264
|
|
86
|
+
- Zoom: only on an action too small to read at full frame, scale, speed, and dwell per `canon:video-craft`, zoomed out before every cut
|
|
87
|
+
- Highlight overlay: ~1.5s soft glow
|
|
88
|
+
|
|
89
|
+
## 6. Captions
|
|
90
|
+
|
|
91
|
+
- Each caption names what its beat's frame shows, at most two lines of 42 characters, per `canon:video-craft`
|
|
92
|
+
- Hold and reading rate per `canon:video-craft`, splitting a caption across beats rather than shortening its hold
|
|
93
|
+
- Placed off the element the beat acts on
|
|
94
|
+
|
|
95
|
+
## 7. Distribution
|
|
96
|
+
|
|
97
|
+
Where the recording ships. Strike rows that do not apply.
|
|
98
|
+
|
|
99
|
+
- [ ] Native upload to social platform
|
|
100
|
+
- [ ] Canonical host (long-form video platform)
|
|
101
|
+
- [ ] Linked from project README or release notes
|
|
102
|
+
|
|
103
|
+
## 8. Resolved decisions
|
|
104
|
+
|
|
105
|
+
Pre-seeded with the common picks. Strike or rewrite as needed.
|
|
106
|
+
|
|
107
|
+
- Audio: silent plus captions
|
|
108
|
+
- Language: English
|
|
109
|
+
- Chip order: <leave for user, derived from beats>
|
|
110
|
+
- Thumbnail: hero-moment frame
|
|
111
|
+
|
|
112
|
+
## 9. Wrap
|
|
113
|
+
|
|
114
|
+
What surrounds the take in the finished video. Each row carries a proposed default. Write `none` on every row to ship the raw take.
|
|
115
|
+
|
|
116
|
+
- Intro: <proposed title card of two to three seconds naming the subject, or `none`>
|
|
117
|
+
- Outro: <proposed closing card naming where to go next, or `none`>
|
|
118
|
+
- Music: none
|
|
119
|
+
```
|
|
@@ -38,15 +38,18 @@ Each slide is a full HTML document laid out at 1280 by 720 CSS pixels. Position
|
|
|
38
38
|
|
|
39
39
|
The render injects the project's token stylesheet ahead of each slide's own styles, so the deck takes the project's design rather than the toolkit's.
|
|
40
40
|
|
|
41
|
-
- Use the project's custom properties, such as `var(--color-accent)`, for every color, face, and spacing value
|
|
42
|
-
-
|
|
41
|
+
- Use the project's custom properties, such as `var(--color-accent)`, for every color, face, and spacing value, read from `.claude/design/base.css` and overrides under `.claude/design/project/`
|
|
42
|
+
- When neither exists, say the deck renders unstyled rather than inventing values to cover it
|
|
43
|
+
- Leave the `--color-*` roles to the stylesheet. The master reads its colors off the first slide's `<html>`, so a slide computing its own `--color-text` is reported, since the bands keep the master's.
|
|
43
44
|
- Vary the composition across slides. Never repeat a title over bullets on every slide. Reach for columns, a row of large numbers, a grid of cards, a chart, a pull quote, and section dividers.
|
|
44
45
|
|
|
45
46
|
### Fit and shapes
|
|
46
47
|
|
|
48
|
+
Text and shapes have to survive the conversion.
|
|
49
|
+
|
|
47
50
|
- Keep titles short and lines tight, so text fits its box at the size the design sets rather than overflowing the frame.
|
|
48
51
|
- Never write centered body text.
|
|
49
|
-
- Prefer CSS the converter maps to native shapes. An
|
|
52
|
+
- Prefer CSS the converter maps to native shapes. An unmappable property is drawn as a picture and reported on stderr, so a slide full of gradients and filters stops being editable.
|
|
50
53
|
|
|
51
54
|
## Render
|
|
52
55
|
|
|
@@ -64,7 +67,7 @@ Read every `✗` line the render prints. A picture fallback, a refused link, cha
|
|
|
64
67
|
|
|
65
68
|
Run this once after the first render, then stop.
|
|
66
69
|
|
|
67
|
-
1. Convert the deck
|
|
70
|
+
1. Convert the deck with `soffice --headless --convert-to pdf <deck>.pptx`, then `pdftoppm -r 90 -png <deck>.pdf slide`. If either is missing, skip the image pass and say so rather than fail the render.
|
|
68
71
|
2. Open and inspect every rendered image in this session, checking each slide for overlap, overflow, low contrast, and empty regions.
|
|
69
72
|
3. Fix the reported issues and the `✗` lines in the slide files once, re-render, and stop. Do not loop indefinitely on aesthetics.
|
|
70
73
|
|
|
@@ -31,6 +31,8 @@ Run these commands in parallel to gather git context:
|
|
|
31
31
|
|
|
32
32
|
### Preview
|
|
33
33
|
|
|
34
|
+
Output the preview first.
|
|
35
|
+
|
|
34
36
|
- **Current:** <current_branch>
|
|
35
37
|
- **Suggested:** <suggested_name>
|
|
36
38
|
- **Length:** <count>/50
|
|
@@ -55,8 +57,6 @@ git branch -m <current> <suggested>
|
|
|
55
57
|
|
|
56
58
|
## After execution
|
|
57
59
|
|
|
58
|
-
Respond with exactly one line:
|
|
60
|
+
Respond with exactly one line and add no other text:
|
|
59
61
|
|
|
60
62
|
`✅ Renamed: <current> → <suggested>`
|
|
61
|
-
|
|
62
|
-
Do not add any other text.
|
|
@@ -30,6 +30,8 @@ Run these commands in parallel to gather git context:
|
|
|
30
30
|
|
|
31
31
|
### Preview
|
|
32
32
|
|
|
33
|
+
Output the preview first.
|
|
34
|
+
|
|
33
35
|
- **Files:** <if ≤3 list all, if >3 show first 3 + "+N more">
|
|
34
36
|
- **Message:** `<type>(<scope>): <subject>`
|
|
35
37
|
- **Length:** <count>/72
|
|
@@ -38,14 +40,14 @@ After outputting the preview, execute the final command immediately. Claude Code
|
|
|
38
40
|
|
|
39
41
|
### Final command
|
|
40
42
|
|
|
43
|
+
Run it as soon as the preview is out.
|
|
44
|
+
|
|
41
45
|
```bash
|
|
42
46
|
git commit -m "<type>(<scope>): <subject>"
|
|
43
47
|
```
|
|
44
48
|
|
|
45
49
|
## After execution
|
|
46
50
|
|
|
47
|
-
Respond with exactly one line:
|
|
51
|
+
Respond with exactly one line and add no other text:
|
|
48
52
|
|
|
49
53
|
`✅ Committed: <type>(<scope>): <subject>`
|
|
50
|
-
|
|
51
|
-
Do not add any other text.
|
|
@@ -16,18 +16,25 @@ its own reply, so skip the comment in step 7. The push and body sync still run.
|
|
|
16
16
|
|
|
17
17
|
- If `git branch --show-current` returns `main`, stop: `❌ On main. Switch to a PR branch first.`
|
|
18
18
|
- If `git status --porcelain` is empty, stop: `❌ No changes to ship.`
|
|
19
|
-
- Resolve `<number>` once, here, through `canon pr head --json`, reading the record's `number`. Every later step names this `<number>` rather than resolving it again.
|
|
20
|
-
-
|
|
19
|
+
- Resolve `<number>` once, here, through `canon pr head --json`, reading the record's `number`. Every later step names this `<number>` rather than resolving it again.
|
|
20
|
+
- A record refusing with `ambiguous-pull` stops: `❌ Two open PRs on this branch. Name the one to update.`
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
gh api "repos/{owner}/{repo}/pulls?head={owner}:$(git branch --show-current | jq -Rr @uri)&state=open" --jq '.[].number'
|
|
24
|
-
```
|
|
22
|
+
### Fallback lookup
|
|
25
23
|
|
|
26
|
-
|
|
24
|
+
When no record comes back, or it carries no `number`, read the open pull requests on the branch over REST instead. The branch is encoded so a `/` in its name reaches the query as `%2F`:
|
|
27
25
|
|
|
28
|
-
|
|
26
|
+
```bash
|
|
27
|
+
gh api "repos/{owner}/{repo}/pulls?head={owner}:$(git branch --show-current | jq -Rr @uri)&state=open" --jq '.[].number'
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
- Nothing printed stops: `❌ No open PR for this branch. Use git-ship to open one.`
|
|
31
|
+
- More than one number takes the `ambiguous-pull` stop rather than the first, since two open pull requests on one head leave nothing to say which one this push updates
|
|
32
|
+
|
|
33
|
+
### REST and the tracking ref
|
|
34
|
+
|
|
35
|
+
Every read and write in this skill runs on REST, since the `gh pr` subcommands run on GraphQL and a cloud session's GitHub proxy refuses it. A cloud worker reaches this skill through `review-address`, so one GraphQL call breaks that whole leg.
|
|
29
36
|
|
|
30
|
-
A missing tracking ref is
|
|
37
|
+
A missing tracking ref is not a guard, since an open pull request proves the branch reached the remote. A branch created by worktree entry carries an open pull request with no tracking ref, so step 4 sets the ref instead.
|
|
31
38
|
|
|
32
39
|
## Sequence
|
|
33
40
|
|
|
@@ -40,7 +47,7 @@ A missing tracking ref is no longer a guard. An open pull request proves the bra
|
|
|
40
47
|
|
|
41
48
|
The lease is what stops the force from overwriting a commit this session never read. Run the ancestry test only where an upstream resolves, since it reads `@{u}`.
|
|
42
49
|
|
|
43
|
-
5. Post the evidence comparison
|
|
50
|
+
5. Post the evidence comparison on every invocation, `reply-owned` included, since it is not step 8's reply. Run `canon pr evidence <number> --json` and read `reason` rather than the exit code.
|
|
44
51
|
- `no-evidence`: nothing changed under an `evidence/` segment this push. Say nothing and move on.
|
|
45
52
|
- `ok`: write `body` to `.canon/tmp/pr/evidence/body-<number>.md` at the main worktree root (resolved the way `session-worktree` does), then post the comment with `gh api -X POST repos/{owner}/{repo}/issues/<number>/comments -F body=@<main-root>/.canon/tmp/pr/evidence/body-<number>.md --silent` when the record carries no `commentId`, or edit the existing one in place with `gh api -X PATCH repos/{owner}/{repo}/issues/comments/<commentId> -F body=@<main-root>/.canon/tmp/pr/evidence/body-<number>.md` when it does. Clean up the tmp file only after the call reports success.
|
|
46
53
|
- Any other reason is one of the mirrored git refusals (`gh-missing`, `gh-failed`, `no-base`, `unreadable-changes`, `would-empty`). Report it and continue without stopping the chain.
|
|
@@ -33,6 +33,8 @@ Then gather repo context in parallel:
|
|
|
33
33
|
|
|
34
34
|
### Preview
|
|
35
35
|
|
|
36
|
+
Output the preview first.
|
|
37
|
+
|
|
36
38
|
- **Title:** `<type>: <subject>`
|
|
37
39
|
- **Label:** <bug or enhancement>
|
|
38
40
|
- **Analysis:** <one line on what the issue captures>
|
|
@@ -41,9 +43,10 @@ After outputting the preview, execute the final command immediately. Claude Code
|
|
|
41
43
|
|
|
42
44
|
### Pre-publish scan
|
|
43
45
|
|
|
44
|
-
Before running the final command, run the scan in `${CLAUDE_SKILL_DIR}/../git-pr/references/publish.md` against the title and body
|
|
46
|
+
Before running the final command, run the scan in `${CLAUDE_SKILL_DIR}/../git-pr/references/publish.md` against the title and body, on top of the banned phrases in `${CLAUDE_SKILL_DIR}/references/issue.md`.
|
|
45
47
|
|
|
46
|
-
The
|
|
48
|
+
- The title and body go straight to the remote, and the `pull_request` check reads a pull request alone, so this scan is the only gate
|
|
49
|
+
- It covers the phase-label check as well as the characters, since both reach a reader who has no task board
|
|
47
50
|
|
|
48
51
|
### Final command
|
|
49
52
|
|
|
@@ -60,8 +63,6 @@ rm -rf .canon/tmp/issue
|
|
|
60
63
|
|
|
61
64
|
## After execution
|
|
62
65
|
|
|
63
|
-
Respond with exactly one line:
|
|
66
|
+
Respond with exactly one line and add no other text:
|
|
64
67
|
|
|
65
68
|
`✅ Issue: <url>`
|
|
66
|
-
|
|
67
|
-
Do not add any other text.
|
|
@@ -53,17 +53,18 @@ Does not govern:
|
|
|
53
53
|
### Feedback
|
|
54
54
|
|
|
55
55
|
- One `## Toolkit feedback` wrapper holds every field as a nested `###` heading. A flat `##` field is not recognized.
|
|
56
|
-
|
|
57
|
-
|
|
|
58
|
-
|
|
|
59
|
-
| `###
|
|
60
|
-
| `###
|
|
61
|
-
| `###
|
|
62
|
-
| `###
|
|
63
|
-
| `###
|
|
56
|
+
|
|
57
|
+
| Field | Holds |
|
|
58
|
+
| -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
|
|
59
|
+
| `### From project` (optional) | the reporting project's name or kind. |
|
|
60
|
+
| `### Surface` (required) | the toolkit surface and its type, and the specific file or name when known. |
|
|
61
|
+
| `### Observed` (required) | the observed behavior. |
|
|
62
|
+
| `### Expected` (optional) | the expected behavior, or `unclear`. |
|
|
63
|
+
| `### Repro` (optional) | repro details, or `none`. |
|
|
64
|
+
| `### Proposed fix` (required) | a proposed fix, or `open` when the session settled on no direction. |
|
|
64
65
|
| `### Suggested shape` (optional) | the template, output, or field list the change should take, inside a `<details>` block. Omit the heading when there is none. |
|
|
65
|
-
| `### Why` (optional)
|
|
66
|
-
| `### Links` (optional)
|
|
66
|
+
| `### Why` (optional) | the reasons for the fix, one bullet each. Omit the heading when there are none. |
|
|
67
|
+
| `### Links` (optional) | the issues, pull requests, or documents the report cites, one per line. Omit the heading when there are none. |
|
|
67
68
|
|
|
68
69
|
- A required field is refused when present but empty. Write the fallback literal for From project, Expected, and Repro rather than leaving one blank.
|
|
69
70
|
|