@erclx/canon 5.52.0 → 5.53.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/README.md +1 -4
- package/claude/.claude-plugin/plugin.json +1 -1
- package/claude/skills/canon-cli/SKILL.md +0 -3
- package/claude/skills/context-fold/REQUIREMENT.md +0 -1
- package/claude/skills/design-taste/references/kinds.md +0 -1
- package/claude/skills/draw-figure/REQUIREMENT.md +2 -3
- package/claude/skills/draw-figure/SKILL.md +4 -5
- package/claude/skills/draw-figure/references/figures.md +0 -1
- package/claude/skills/draw-figure/references/hand-drawn.md +1 -1
- package/claude/skills/pick-by-eye/REQUIREMENT.md +0 -1
- package/claude/skills/pick-by-eye/SKILL.md +1 -1
- package/claude/skills/teach-craft/REQUIREMENT.md +30 -0
- package/claude/skills/teach-craft/SKILL.md +39 -0
- package/claude/skills/teach-craft/references/lesson-craft.md +52 -0
- package/claude/skills/{teach-workspace → teach-craft}/references/pedagogy.md +12 -4
- package/docs/agents/audits.md +0 -1
- package/docs/target/migrations.md +10 -1
- package/docs/workflow/parallel-features.md +1 -1
- package/docs/workflow/skill-map-on-request.md +10 -22
- package/docs/workflow/skill-map.md +12 -14
- package/package.json +1 -4
- package/scripts/core/regen-web-previews.ts +2 -67
- package/src/audits/catalog.ts +0 -1
- package/src/browser/engine.ts +3 -6
- package/src/capture/render.ts +1 -1
- package/src/claude/cases/authoring.ts +0 -12
- package/src/claude/cases/misc.ts +0 -17
- package/src/claude/cases/workflow.ts +2 -38
- package/src/claude/skills-audit.ts +0 -1
- package/src/cli/help.ts +0 -7
- package/src/cli.ts +0 -6
- package/src/commands/records.ts +0 -1
- package/src/commands/serve.ts +2 -2
- package/src/design/components.ts +8 -1514
- package/src/design/css.ts +5 -6
- package/src/design/fonts.ts +3 -5
- package/src/driver/drive.ts +3 -4
- package/src/driver/steps.ts +2 -5
- package/src/inventory/walk.ts +1 -1
- package/src/markdown/scope.ts +4 -31
- package/src/records/validate.ts +4 -176
- package/src/sandbox/equivalence.ts +0 -5
- package/claude/skills/draft-and-pick/REQUIREMENT.md +0 -26
- package/claude/skills/draft-and-pick/SKILL.md +0 -11
- package/claude/skills/draft-doc/REQUIREMENT.md +0 -26
- package/claude/skills/draft-doc/SKILL.md +0 -11
- package/claude/skills/draft-figure/REQUIREMENT.md +0 -26
- package/claude/skills/draft-figure/SKILL.md +0 -11
- package/claude/skills/draft-identity/REQUIREMENT.md +0 -26
- package/claude/skills/draft-identity/SKILL.md +0 -11
- package/claude/skills/draft-ready/REQUIREMENT.md +0 -26
- package/claude/skills/draft-ready/SKILL.md +0 -11
- package/claude/skills/draft-screencast/REQUIREMENT.md +0 -26
- package/claude/skills/draft-screencast/SKILL.md +0 -11
- package/claude/skills/draft-slides/REQUIREMENT.md +0 -26
- package/claude/skills/draft-slides/SKILL.md +0 -11
- package/claude/skills/make-deck/REQUIREMENT.md +0 -36
- package/claude/skills/make-deck/SKILL.md +0 -80
- package/claude/skills/make-deck/references/deck.md +0 -183
- package/claude/skills/read-frames/REQUIREMENT.md +0 -30
- package/claude/skills/read-frames/SKILL.md +0 -55
- package/claude/skills/record-screencast/REQUIREMENT.md +0 -35
- package/claude/skills/record-screencast/SKILL.md +0 -99
- package/claude/skills/script-screencast/REQUIREMENT.md +0 -34
- package/claude/skills/script-screencast/SKILL.md +0 -70
- package/claude/skills/script-screencast/references/beats-template.md +0 -119
- package/claude/skills/teach-workspace/REQUIREMENT.md +0 -34
- package/claude/skills/teach-workspace/SKILL.md +0 -196
- package/claude/skills/teach-workspace/references/glossary.md +0 -90
- package/claude/skills/teach-workspace/references/lesson-build.md +0 -106
- package/claude/skills/teach-workspace/references/lesson-craft.md +0 -135
- package/claude/skills/teach-workspace/references/promotion-fold.md +0 -35
- package/claude/skills/teach-workspace/references/promotion.md +0 -116
- package/claude/skills/teach-workspace/references/revisit.md +0 -28
- package/claude/skills/teach-workspace/references/teach.md +0 -211
- package/claude/skills/video-craft/REQUIREMENT.md +0 -35
- package/claude/skills/video-craft/SKILL.md +0 -96
- package/claude/skills/video-craft/references/adopted.md +0 -110
- package/src/commands/demo.ts +0 -542
- package/src/commands/slides.ts +0 -184
- package/src/commands/teach.ts +0 -1401
- package/src/demo/beats.ts +0 -135
- package/src/demo/compile.ts +0 -350
- package/src/demo/container.ts +0 -219
- package/src/demo/cursors.ts +0 -55
- package/src/demo/drive.ts +0 -442
- package/src/demo/pointer.ts +0 -178
- package/src/demo/theme.ts +0 -112
- package/src/demo/timeline.ts +0 -64
- package/src/slides/convert/chart.ts +0 -165
- package/src/slides/convert/deck.ts +0 -244
- package/src/slides/convert/export.ts +0 -567
- package/src/slides/convert/master.ts +0 -198
- package/src/slides/convert/shapes.ts +0 -804
- package/src/slides/convert/svg.ts +0 -38
- package/src/slides/convert/walk.ts +0 -671
- package/src/slides/decks.ts +0 -110
- package/src/slides/open.ts +0 -18
- package/src/slides/package/fonts.ts +0 -301
- package/src/slides/package/motion.ts +0 -316
- package/src/slides/package/test-face.ts +0 -113
- package/src/teach/browser/compile.ts +0 -44
- package/src/teach/browser/dismiss.ts +0 -76
- package/src/teach/browser/focus-line.ts +0 -19
- package/src/teach/browser/glossary-filter.ts +0 -44
- package/src/teach/browser/head.ts +0 -30
- package/src/teach/browser/quiz.ts +0 -19
- package/src/teach/browser/reload.ts +0 -9
- package/src/teach/browser/sidebar.ts +0 -233
- package/src/teach/browser/theme.ts +0 -18
- package/src/teach/components/code.tsx +0 -24
- package/src/teach/components/heading.tsx +0 -11
- package/src/teach/components/list.tsx +0 -17
- package/src/teach/components/paragraph.tsx +0 -29
- package/src/teach/components/refs.tsx +0 -28
- package/src/teach/cross-references.ts +0 -78
- package/src/teach/fonts.ts +0 -16
- package/src/teach/highlight.ts +0 -71
- package/src/teach/html/jsx-dev-runtime.ts +0 -13
- package/src/teach/html/jsx-runtime.ts +0 -113
- package/src/teach/html/raw.ts +0 -28
- package/src/teach/lesson.ts +0 -178
- package/src/teach/nav.ts +0 -1337
- package/src/teach/render.ts +0 -240
- package/src/teach/workspace.ts +0 -1164
- package/src/teach/write-if-changed.ts +0 -17
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: record-screencast
|
|
3
|
-
description: Why compiling and running a screencast draft needs a routed skill rather than an operator typing two verbs by hand, and why the unresolved-field refusal cannot be a suggestion
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Record screencast requirement
|
|
7
|
-
|
|
8
|
-
## Gap
|
|
9
|
-
|
|
10
|
-
Without this skill, nothing routes a session from a screencast draft to `canon demo compile` and `canon demo run`. An operator has to know both verbs, type them in order, and read the compile record for unresolved fields by hand.
|
|
11
|
-
|
|
12
|
-
A session that fills an unresolved field in on its own reproduces the failure `plan-unresolved` exists to catch, where nothing enforces it. A take with no composition ships raw, and an unguided one reaches for generic defaults.
|
|
13
|
-
|
|
14
|
-
## Must
|
|
15
|
-
|
|
16
|
-
- The default plan path resolves the way `canon demo compile` resolves it, and an existing plan there is run rather than recompiled, since its timing may be tuned by hand
|
|
17
|
-
- Every unresolved field from the compile or run record is reported and the run stops there
|
|
18
|
-
- Every path a run wrote is reported, skipping any the record carries as null
|
|
19
|
-
- The video craft guidance loads before composing, and a draft whose wrap section asks for anything becomes a finished mp4 through HyperFrames, checked before rendering and handed to `read-frames`
|
|
20
|
-
- A wrap section reading `none` throughout stops at the take, and an absent HyperFrames stops with its install command
|
|
21
|
-
|
|
22
|
-
## Must not
|
|
23
|
-
|
|
24
|
-
- Pass `--force` to compile, or guess what to compile when no draft path is given
|
|
25
|
-
- Guess or fill a target, a URL, or any other unresolved field
|
|
26
|
-
- Drive the application through anything other than `canon demo run`
|
|
27
|
-
- Install HyperFrames, vendor it, or restate its composition rules
|
|
28
|
-
- Assume anything reaches for this skill beyond `script-screencast`'s closing pointer or an operator, which a later review reads back
|
|
29
|
-
|
|
30
|
-
## Out of scope
|
|
31
|
-
|
|
32
|
-
- Drafting the beats, which `script-screencast` owns
|
|
33
|
-
- The captions, zoom, pointer, and audio judgment, which `video-craft` owns
|
|
34
|
-
- Reading the render back, which `read-frames` owns
|
|
35
|
-
- Filling an existing plan's target or URL, which the operator owns
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
---
|
|
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 `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
|
-
metadata:
|
|
5
|
-
family: generate
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Record screencast
|
|
9
|
-
|
|
10
|
-
## Guards
|
|
11
|
-
|
|
12
|
-
- If no draft path is given, stop: `❌ No draft path. Pass the path script-screencast printed.`
|
|
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
|
-
- Filling one in reproduces the failure `canon demo run`'s `plan-unresolved` reason exists to catch, one layer up where nothing enforces it
|
|
15
|
-
- Never pass `--force` to compile. A plan at the default output path may carry timing tuned by hand that the draft cannot reproduce.
|
|
16
|
-
- Drive the application through `canon demo run` alone. Never open a browser, click through the app, or write to the output paths some other way.
|
|
17
|
-
|
|
18
|
-
## Step 1: resolve the plan path
|
|
19
|
-
|
|
20
|
-
A draft lives at `demos/<slug>/beats.md`, so `<slug>` is the folder holding it and the plan sits beside it at `demos/<slug>/plan.json`. `demos/inline-edit/beats.md` resolves to `demos/inline-edit/plan.json`.
|
|
21
|
-
|
|
22
|
-
Pass `--slug <slug>` to compile, since its default reads the draft's filename and would name every demo `beats`. A plan compiled before the folder layout sits at `demos/<slug>.json`, so pass it to Step 3 by path when the caller names it.
|
|
23
|
-
|
|
24
|
-
## Step 2: compile only when no plan exists yet
|
|
25
|
-
|
|
26
|
-
Check whether the resolved plan path already exists.
|
|
27
|
-
|
|
28
|
-
- **It exists.** A person may have tuned it by hand since compiling. Skip compiling and go to Step 3 with this path.
|
|
29
|
-
- **It does not exist.** Run:
|
|
30
|
-
|
|
31
|
-
```bash
|
|
32
|
-
canon demo compile <draft> --slug <slug> --json
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
Branch on the record rather than the exit code:
|
|
36
|
-
- `reason: draft-missing` or `reason: draft-unreadable`: report the reason, plus the record's `message` when it carries one, and stop.
|
|
37
|
-
- No `reason` key, meaning the plan was written: read `unresolved` off the record.
|
|
38
|
-
- Non-empty: report the plan path and every field the array names, one per line, and stop. Do not proceed to Step 3.
|
|
39
|
-
- Empty: continue to Step 3 with the record's `plan` path.
|
|
40
|
-
|
|
41
|
-
## Step 3: run
|
|
42
|
-
|
|
43
|
-
Run:
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
canon demo run <plan> --json
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
Branch on the record's `reason`:
|
|
50
|
-
|
|
51
|
-
| `reason` | Do |
|
|
52
|
-
| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- |
|
|
53
|
-
| `plan-unresolved` | Report every field in `unresolved`, one per line, and stop. A pre-existing plan skipped Step 2's check. |
|
|
54
|
-
| `plan-missing`, `plan-unreadable`, `no-output-requested`, `cursor-unreadable`, `engine-missing`, `browser-missing` | Report the reason, plus the record's `message` or `install` line when it carries one, and stop |
|
|
55
|
-
| None, meaning the run wrote its output | Continue to Step 4 |
|
|
56
|
-
|
|
57
|
-
The take lands in `demos/<slug>/take/`, which git ignores.
|
|
58
|
-
|
|
59
|
-
## Step 4: compose when the draft asks for it
|
|
60
|
-
|
|
61
|
-
Read the draft's `## Wrap` section. When intro, outro, and music all say `none`, or the section is absent, stop at the take and go to Step 6, since an empty composition says nothing the take does not.
|
|
62
|
-
|
|
63
|
-
### Presence test
|
|
64
|
-
|
|
65
|
-
Otherwise confirm HyperFrames' `hyperframes` skill resolves. `bunx` would fetch the package on a machine without it, which installs by the back door, so the skill is the presence test.
|
|
66
|
-
|
|
67
|
-
- When it does not resolve, stop and report `bunx -y hyperframes init`, warning that init installs its skills machine-wide without asking
|
|
68
|
-
- Report the take's paths as Step 6 does, so the operator still holds the recording
|
|
69
|
-
- Never install it from here
|
|
70
|
-
|
|
71
|
-
### Build and render
|
|
72
|
-
|
|
73
|
-
When it resolves, load it, then load `canon:video-craft` for the captions, zoom, pointer, and audio judgment, reporting it rather than proceeding silently when it does not resolve. Those two skills own the composition rules, so this body states none.
|
|
74
|
-
|
|
75
|
-
Build `demos/<slug>/index.html` around the take with the intro, outro, and music the wrap names, aiming each zoom from the timeline the run wrote beside the take. Then run both from `demos/<slug>/`:
|
|
76
|
-
|
|
77
|
-
```bash
|
|
78
|
-
bunx -y hyperframes check
|
|
79
|
-
bunx -y hyperframes render --quality delivery --output renders/<slug>.mp4
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
Report a failing check, with the take's paths, and stop rather than rendering past it. The render sits in `demos/<slug>/renders/`, which git ignores.
|
|
83
|
-
|
|
84
|
-
## Step 5: read the render
|
|
85
|
-
|
|
86
|
-
Hand the render to `read-frames` as its video path, so the composed result is checked rather than only the raw take.
|
|
87
|
-
|
|
88
|
-
## Step 6: output
|
|
89
|
-
|
|
90
|
-
The record carries `video`, `mp4`, `gif`, `still`, and `timeline`, each a path or `null`. Report each one that is not `null`, one per line, and add the render path when Step 4 wrote one.
|
|
91
|
-
|
|
92
|
-
| Output | Name it as |
|
|
93
|
-
| ---------- | ----------------------------------------------------- |
|
|
94
|
-
| `mp4` | The deliverable |
|
|
95
|
-
| webm | The raw take |
|
|
96
|
-
| `gif` | The form for a host that strips video |
|
|
97
|
-
| `timeline` | The per-step timing a composition aims its zooms from |
|
|
98
|
-
|
|
99
|
-
Say so plainly if `canon demo compile` or `canon demo run` is not available, rather than driving the application some other way. Both ship with the CLI and this skill ships with the plugin, so a project carrying one and not the other is a real state.
|
|
@@ -1,34 +0,0 @@
|
|
|
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 blank fields, so the user fills a template instead of editing a draft. The opposite failure costs more. A session skipping discovery guesses the audience, the length, and the hero moment, and writes beats that get thrown away. What surrounds the take surfaces only at compose time.
|
|
11
|
-
|
|
12
|
-
A draft naming the recording software, the editing software, or the window manager pins the script to one person's setup. Re-invoking to refine silently overwrites the edits the user made in the file, which destroys work rather than wasting it.
|
|
13
|
-
|
|
14
|
-
## Must
|
|
15
|
-
|
|
16
|
-
- Project context and recent commits are read before proposing, and exactly four discovery questions each carry a default derived from them
|
|
17
|
-
- The run waits for answers rather than reading silence as acceptance
|
|
18
|
-
- Every section is pre-seeded with concrete content, so the draft ships as written and the user edits down
|
|
19
|
-
- The draft lands at `demos/<slug>/beats.md` at the project root, with the slug derived from the topic and the answers, and its path printed on its own line
|
|
20
|
-
- A wrap section names intro, outro, and music with a default each
|
|
21
|
-
|
|
22
|
-
## Must not
|
|
23
|
-
|
|
24
|
-
- Name recording software, editing software, fonts, or window managers
|
|
25
|
-
- Record, edit video, or generate captions
|
|
26
|
-
- Re-run against an existing draft to refine it, since re-running overwrites
|
|
27
|
-
- Infer the hero moment without asking, or guess the topic when none is given
|
|
28
|
-
|
|
29
|
-
## Out of scope
|
|
30
|
-
|
|
31
|
-
- Producing the recording, which `record-screencast` owns
|
|
32
|
-
- Slide decks, which `make-deck` owns
|
|
33
|
-
- Refining an existing draft, which a direct edit of the file owns
|
|
34
|
-
- Where the recording ships, which the user owns
|
|
@@ -1,70 +0,0 @@
|
|
|
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,119 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Beats template
|
|
3
|
-
description: The nine-section template script-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 `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
|
-
|
|
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
|
-
```
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: teach-workspace
|
|
3
|
-
description: Scope boundary for learning a subject across sessions, and the split between the disposable lesson and the durable reference page
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Teach workspace requirement
|
|
7
|
-
|
|
8
|
-
## Gap
|
|
9
|
-
|
|
10
|
-
Without this skill, a session asked to teach answers in the conversation, so everything dies with it. It teaches from recall, picks topics from the subject's order rather than the learner's errors, and asks nothing about what they know. A structure lesson points at a diagram and ships none.
|
|
11
|
-
|
|
12
|
-
A worked-through page and a looked-up page have different lifetimes, and merging them yields disposable material kept or durable material carrying a quiz. Opened by bare path, a lesson renders unstyled. A workspace resolved against the current directory forks per worktree, and the editing tools refuse a main-root write from one.
|
|
13
|
-
|
|
14
|
-
## Must
|
|
15
|
-
|
|
16
|
-
- Hold the workspace at the main worktree root, name the write route from a linked worktree, and route edits to an existing workspace file through a verb that resolves the root
|
|
17
|
-
- Ask the learner's starting point, research from sources chosen by the teach standard's ladder, and place each lesson from the learning records
|
|
18
|
-
- Split the output by lifetime into lessons and reference pages, record the wrong answer itself rather than a count, and decide each lesson's figure before its body
|
|
19
|
-
- Hand the learner a link to the workspace in a real browser on every run, read back from the verb that served it
|
|
20
|
-
- Propose each durable page's destination by who owns its subject, wait for the operator, and hand the page off through a named file a branch lands and deletes
|
|
21
|
-
|
|
22
|
-
## Must not
|
|
23
|
-
|
|
24
|
-
- Teach from recall without saying which claims rest on it
|
|
25
|
-
- Write to a destination surface outside the fold mode, or overwrite a file a promotion block routes to
|
|
26
|
-
- Promote a lesson at any age, since it is generated markup carrying a quiz
|
|
27
|
-
- Open a second workspace on a covered subject, or renumber anything
|
|
28
|
-
- Scaffold a wiki folder the project never chose
|
|
29
|
-
|
|
30
|
-
## Out of scope
|
|
31
|
-
|
|
32
|
-
- What the verbs do internally, which the `canon teach` CLI domain owns
|
|
33
|
-
- What a lesson renders as and how its quiz behaves, which the lesson-craft reference and the rendering layer own
|
|
34
|
-
- Firing on a description match, since opening a workspace is the learner's call
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: teach-workspace
|
|
3
|
-
description: Opens and runs a learning workspace on one subject, holding a mission, resources, numbered lessons, reference pages, a glossary, and learning records that survive across sessions, proposes where a durable page from one belongs once it outgrows the workspace, and lands the confirmed pages from a branch. Use when asked to "teach me X", "open a learning workspace", "I want to learn X", "quiz me on this", "continue the lesson", "resume my workspace on X", "promote this reference page", or "fold the promoted pages in". Do NOT use to write project documentation, which belongs to the surface owning that document, and do NOT use to answer one question, which is an ordinary reply. Do NOT auto-trigger.
|
|
4
|
-
argument-hint: <subject to learn, the topic of a workspace to resume or promote, or fold>
|
|
5
|
-
metadata:
|
|
6
|
-
family: answer
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Teach workspace
|
|
10
|
-
|
|
11
|
-
Run a learning workspace on one subject across sessions. The workspace holds what the learner has been through, so a session weeks later resumes from the folder rather than from the conversation.
|
|
12
|
-
|
|
13
|
-
## References
|
|
14
|
-
|
|
15
|
-
Read `${CLAUDE_SKILL_DIR}/references/teach.md` before writing anything into the folder, since it fixes the workspace's shape. The glossary answers to `${CLAUDE_SKILL_DIR}/references/glossary.md` wherever it lands.
|
|
16
|
-
|
|
17
|
-
The pedagogy sits in `${CLAUDE_SKILL_DIR}/references/pedagogy.md`, the lesson craft and its build in `${CLAUDE_SKILL_DIR}/references/lesson-craft.md` and `lesson-build.md`, the revisit schedule in `revisit.md`, and the promotion routing in `${CLAUDE_SKILL_DIR}/references/promotion.md`.
|
|
18
|
-
|
|
19
|
-
## Guards
|
|
20
|
-
|
|
21
|
-
- If the invocation names no subject and no existing workspace matches, stop: `❌ No subject. Invoke with the subject to learn, or the topic of a workspace to resume.`
|
|
22
|
-
- Never trust recall for what the subject says. Research first, cite what was read, and say what was not.
|
|
23
|
-
- Write nothing outside the workspace folder, apart from the one handoff file Step 6 names and the destinations the fold mode lands from that file
|
|
24
|
-
- A durable page stays in `reference/` until the operator confirms a destination, and only the fold mode copies it out, from a branch
|
|
25
|
-
|
|
26
|
-
### Workspaces and promotion
|
|
27
|
-
|
|
28
|
-
One subject takes one workspace, and only its reference pages ever leave it.
|
|
29
|
-
|
|
30
|
-
- Do not open a second workspace on a subject one already covers. Resume that one.
|
|
31
|
-
- Never promote a lesson. It is generated markup carrying a quiz and a learner, and no request makes it promotable.
|
|
32
|
-
- Never write a favicon link by hand. `canon teach nav` puts the toolkit's icon on every page and in a lesson's `style` region, so a hand-written one gives the page two.
|
|
33
|
-
|
|
34
|
-
## Step 0: let the CLI resolve the workspace root
|
|
35
|
-
|
|
36
|
-
Workspaces live at the main worktree root, never inside a linked worktree. A copy per worktree forks the learning records, and the learner is one person.
|
|
37
|
-
|
|
38
|
-
Every `canon teach` verb resolves that root in-process, so no step below composes a path to a workspace file. Read the folder through the CLI:
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
canon teach list --json
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
It reports every workspace with its path, its counts, and the ordinal a new one would take. A `no-teach` refusal means the project has opened none yet, which is Step 1's new-workspace path, and the open verb creates the folder.
|
|
45
|
-
|
|
46
|
-
Every path under the main root is a main-root write, routed the way `session-worktree` states. The route splits by what the write does to the file:
|
|
47
|
-
|
|
48
|
-
- Creating a whole file that does not exist yet, which is a lesson, a reference page, and a learning record, goes out as a heredoc
|
|
49
|
-
- Changing a line inside a file that already exists goes through the verb that owns it
|
|
50
|
-
|
|
51
|
-
## Step 1: open or resume
|
|
52
|
-
|
|
53
|
-
A topic the listing already carries is a resume, and anything else is a new workspace. Two invocations are neither.
|
|
54
|
-
|
|
55
|
-
- One asking to promote reads the named workspace through the listing and goes to Step 6, which teaches nothing and writes no lesson
|
|
56
|
-
- One asking to fold confirmed promotions in goes to `## Fold mode`
|
|
57
|
-
|
|
58
|
-
### On a resume
|
|
59
|
-
|
|
60
|
-
Run `canon teach list <topic> --json` for the files behind each count, then read the highest-numbered learning record and `GLOSSARY.md`, which carry where the learner stopped and what they got wrong.
|
|
61
|
-
|
|
62
|
-
- The record's `success` holds the mission's success lines, the exit criteria. Report them with what is already met before teaching anything.
|
|
63
|
-
- `due` lists what the learning records schedule, soonest first, each with its item, date, rung, `overdue` flag, and the two dates the next record could write
|
|
64
|
-
- Read `due` here, since `canon teach lesson` takes a `--slug` naming a choice already made. Report what is overdue before proposing a lesson.
|
|
65
|
-
- An empty `due` on a workspace holding records means no record scheduled anything, which is a gap in the records rather than a clear schedule
|
|
66
|
-
|
|
67
|
-
### On a new workspace
|
|
68
|
-
|
|
69
|
-
Settle the starting point first, by asking rather than by assuming. Difficulty with no floor under it teaches nobody, and the mission cannot be written without it. Then open the workspace, which derives the ordinal and writes all three required files:
|
|
70
|
-
|
|
71
|
-
```bash
|
|
72
|
-
canon teach open <topic> --json \
|
|
73
|
-
--subject "<one line stating the subject>" \
|
|
74
|
-
--starting-point "<what the learner already knows>" \
|
|
75
|
-
--success "<an observable thing the learner will be able to do>" \
|
|
76
|
-
--out-of-scope "<what this workspace does not cover>"
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
Repeat `--success` and `--out-of-scope` per line. The verb refuses a topic another workspace already covers, which is the guard against opening a second one on the same subject.
|
|
80
|
-
|
|
81
|
-
## Step 2: research before teaching
|
|
82
|
-
|
|
83
|
-
Read the subject from sources rather than from recall, chosen by the standard's `### Choosing sources` ladder, with a third-rung source's reason in its title. Record what was read and what was only found through the verb that owns the file:
|
|
84
|
-
|
|
85
|
-
```bash
|
|
86
|
-
canon teach resource <topic> --json \
|
|
87
|
-
--read "<title, naming which claims rest on it>=<url>" \
|
|
88
|
-
--lead "<title>=<url>"
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
Each flag repeats, and the pair splits on the first `=` so a URL carrying one survives. A listed URL is refused, but `--read` moves an opened lead.
|
|
92
|
-
|
|
93
|
-
A claim nothing was read for is the failure this step exists against. Where no source is reachable, say so in the lesson and mark what rests on recall.
|
|
94
|
-
|
|
95
|
-
## Step 3: place the learner
|
|
96
|
-
|
|
97
|
-
Pick the next lesson from the learning records rather than from the subject's own order. The target is the band immediately past what the learner can already do unaided, which `${CLAUDE_SKILL_DIR}/references/pedagogy.md` states in full.
|
|
98
|
-
|
|
99
|
-
- Open on what `due` reports as overdue, oldest date first, before anything new
|
|
100
|
-
- Where nothing is overdue, open on retrieval of what the last session got wrong. A learner who cannot retrieve the previous lesson is not ready for the next one.
|
|
101
|
-
- Never place from the last record alone, since a topic missed three sessions ago is invisible to that read and sits in `due` with a date already past
|
|
102
|
-
|
|
103
|
-
## Step 4: write the lesson and the reference
|
|
104
|
-
|
|
105
|
-
Two outputs with two lifetimes, and the split decides the format.
|
|
106
|
-
|
|
107
|
-
- A lesson is a self-contained page carrying its own quiz, a teach-back block, and feedback per question, embedding one shared stylesheet. It is disposable and never promoted.
|
|
108
|
-
- A reference page goes to `reference/<slug>.md`, written for a reader with no learner in it. It is the half that survives, so it passes the authoring gates a promotion applies.
|
|
109
|
-
- A lesson's `refs` pass the source ladder, and a learner's or organization's file goes in the body, labeled
|
|
110
|
-
- `canon teach nav` renders a reference to a `reference/<slug>.html` sibling, and a lesson links that sibling, since a served `.md` opens as plain text
|
|
111
|
-
|
|
112
|
-
### Resolve the lesson
|
|
113
|
-
|
|
114
|
-
Resolve the lesson before writing it, rather than composing its name or its quiz order by hand:
|
|
115
|
-
|
|
116
|
-
```bash
|
|
117
|
-
canon teach lesson <topic> --json \
|
|
118
|
-
--slug <kebab slug for what this lesson covers> \
|
|
119
|
-
--questions <how many questions the quiz carries> \
|
|
120
|
-
--options <how many options each question carries>
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
It writes nothing and reports three things:
|
|
124
|
-
|
|
125
|
-
- `lesson`, the numbered path the lesson takes. Write it there.
|
|
126
|
-
- `success`, the mission's success lines, carried here so Step 5 needs no second read.
|
|
127
|
-
- `quiz`, one entry per question, carrying `order` and `answer`.
|
|
128
|
-
|
|
129
|
-
Write the correct option first, then present the options in the order `order` reports, as authored indices where `0` is the correct one. Take the order as given, since a lesson that reorders by judgment puts the answer back in the first slot.
|
|
130
|
-
|
|
131
|
-
### The quiz, the teach-back block, and the lesson body
|
|
132
|
-
|
|
133
|
-
Read `${CLAUDE_SKILL_DIR}/references/lesson-craft.md` before writing the lesson. Its `## Quiz construction` and `## Teach back` fix the markup `canon teach nav`'s stepper gates on, and a quiz in any other shape shows every question at once with nothing reporting it.
|
|
134
|
-
|
|
135
|
-
- Then read `${CLAUDE_SKILL_DIR}/references/lesson-build.md` for the block list, the four marker pairs, the render, nav, stylesheet, and glossary verbs, and the rule against hand-composing any of them
|
|
136
|
-
- Keep every quiz answer the same length, so formatting leaks no clue about which one is correct
|
|
137
|
-
- Decide the figure first, by `## Diagrams` in `lesson-craft.md`
|
|
138
|
-
|
|
139
|
-
### Hand over a link, never a path
|
|
140
|
-
|
|
141
|
-
A lesson is a page carrying a script, and an editor preview cannot run it, so a path alone opens markup with no working quiz. Serve the teach root and give the learner a link. One verb refreshes every page's chrome and serves the folder from the main worktree root:
|
|
142
|
-
|
|
143
|
-
```bash
|
|
144
|
-
canon teach up <topic> --json
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
- Where the installed CLI predates `up`, run the line the `Open` step of `canon teach list <topic>` prints, with `--json` appended
|
|
148
|
-
- Never hand-write `canon serve .canon/teach`, which serves an absent folder from a linked worktree
|
|
149
|
-
- Start it in the background and read `url` off the record, since the verb walks past a port already in use and a guessed URL gets that port wrong
|
|
150
|
-
- Report the refusal and its `reason` when `ok` is false, and report it rather than proceeding silently when the verb does not resolve at all
|
|
151
|
-
- Do this on every run that opens or resumes a workspace, including one that writes no lesson, since the learner's route in is the same link
|
|
152
|
-
|
|
153
|
-
## Step 5: record what happened
|
|
154
|
-
|
|
155
|
-
Write `learning-records/<nnnn>-<slug>.md` before the session ends, carrying the lessons covered, what the learner retrieved unaided, what they got wrong with the wrong answer itself, and a `## Revisit` section.
|
|
156
|
-
|
|
157
|
-
- Record the wrong answer rather than the count. The next session places the learner from this file, and a tally carries no misconception to work against.
|
|
158
|
-
- Record what the teach-back left out under what the learner got wrong, naming the concept and where the explanation broke, since both are retrieval failures one section holds
|
|
159
|
-
- Read `${CLAUDE_SKILL_DIR}/references/revisit.md` before writing `## Revisit`, for the bullet shape, where each date and rung comes from, and an unscheduled item's first schedule
|
|
160
|
-
|
|
161
|
-
### Restate the mission
|
|
162
|
-
|
|
163
|
-
Restate the mission's success lines from the `success` the lesson verb reported, rather than from `MISSION.md` by eye. Report each line as met or not met, and name what the learner did that meets it.
|
|
164
|
-
|
|
165
|
-
A mission whose lines are all met is finished, and saying so is what closes a workspace.
|
|
166
|
-
|
|
167
|
-
## Step 6: propose where the durable half belongs
|
|
168
|
-
|
|
169
|
-
Run this when the invocation asks for it, or offer it in one line when a mission finishes, since its reference pages then stop changing. Never run it unasked mid-course.
|
|
170
|
-
|
|
171
|
-
Read `${CLAUDE_SKILL_DIR}/references/promotion.md` first. It carries what may be promoted, the routing test, the wiki folder and its refusal, each destination's expectations, and under `## Proposing and handing off` the proposal, the handoff file, and the fold instruction. Propose and wait, and write nothing to a destination here.
|
|
172
|
-
|
|
173
|
-
## Fold mode
|
|
174
|
-
|
|
175
|
-
Run this only when the invocation asks to fold, and only from a branch in a linked worktree, since every destination is a tracked file committing with the branch while the handoff sits in gitignored scratch at the main root.
|
|
176
|
-
|
|
177
|
-
Read `${CLAUDE_SKILL_DIR}/references/promotion-fold.md` for how each block lands, the overwrite refusal, the handoff delete, and the output lines, which replace the Output block below.
|
|
178
|
-
|
|
179
|
-
## Output
|
|
180
|
-
|
|
181
|
-
```plaintext
|
|
182
|
-
✅ <opened|resumed> .canon/teach/<nn>-<topic>/
|
|
183
|
-
Lesson: .canon/teach/<nn>-<topic>/lessons/<nnnn>-<slug>.html
|
|
184
|
-
Reference: .canon/teach/<nn>-<topic>/reference/<slug>.md
|
|
185
|
-
Record: .canon/teach/<nn>-<topic>/learning-records/<nnnn>-<slug>.md
|
|
186
|
-
Figure: <drawn through draw-figure, or the one-line reason prose carries it>
|
|
187
|
-
Progress: <n> of <m> success lines met
|
|
188
|
-
Open: [<the url the serve verb reported>](<the same url>)
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
- Omit the reference line where the lesson produced no durable page
|
|
192
|
-
- Never omit the open line, the learner's only route into the page. It carries what the serving verb reported, or names the refusal where the verb refused.
|
|
193
|
-
- Write that line as a markdown link with the URL as both text and target, never a bare URL or a code span the reader has to copy
|
|
194
|
-
- Emit every path from the project root, in the form the project's instruction file sets
|
|
195
|
-
|
|
196
|
-
A promotion pass reports the shape `${CLAUDE_SKILL_DIR}/references/promotion.md` gives at the end of `## Proposing and handing off` instead.
|