@erclx/canon 5.52.0 → 5.54.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 +17 -0
- package/README.md +11 -13
- package/claude/.claude-plugin/plugin.json +1 -1
- package/claude/skills/canon-cli/SKILL.md +5 -8
- package/claude/skills/context-fold/REQUIREMENT.md +0 -1
- package/claude/skills/design-identity/REQUIREMENT.md +2 -2
- package/claude/skills/design-identity/SKILL.md +6 -6
- package/claude/skills/design-record/REQUIREMENT.md +2 -2
- package/claude/skills/design-record/SKILL.md +4 -4
- package/claude/skills/design-record/references/folder.md +1 -1
- package/claude/skills/design-taste/REQUIREMENT.md +1 -1
- package/claude/skills/design-taste/references/kinds.md +0 -1
- package/claude/skills/draw-figure/REQUIREMENT.md +3 -4
- package/claude/skills/draw-figure/SKILL.md +5 -6
- 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 +4 -5
- package/claude/skills/pick-by-eye/SKILL.md +34 -41
- package/claude/skills/pick-by-eye/references/board.md +42 -0
- package/claude/skills/pick-by-eye/references/live-arms.md +3 -3
- package/claude/skills/plan-groundwork/SKILL.md +1 -1
- package/claude/skills/teach-craft/REQUIREMENT.md +30 -0
- package/claude/skills/teach-craft/SKILL.md +70 -0
- package/claude/skills/teach-craft/references/adopted.md +113 -0
- package/claude/skills/teach-craft/references/lesson-craft.md +60 -0
- package/claude/skills/{teach-workspace → teach-craft}/references/pedagogy.md +41 -6
- package/docs/agents/audits.md +0 -1
- package/docs/agents/install-and-sync.md +0 -8
- package/docs/target/migrations.md +16 -2
- package/docs/target/projects.md +1 -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 +11 -14
- package/docs/workflow/visual-design-workflow.md +1 -4
- package/governance/detect.toml +1 -6
- package/governance/renames.toml +0 -1
- package/package.json +2 -8
- 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 -22
- package/src/claude/cases/workflow.ts +2 -38
- package/src/claude/skills-audit.ts +1 -1
- package/src/cli/help.ts +0 -10
- package/src/cli.ts +0 -8
- package/src/commands/design.ts +16 -315
- package/src/commands/records.ts +0 -1
- package/src/commands/serve.ts +2 -2
- package/src/commands/sync.ts +4 -5
- package/src/design/components.ts +8 -1514
- package/src/design/css.ts +5 -6
- package/src/design/fonts.ts +3 -5
- package/src/design/regen.ts +5 -32
- package/src/design/render.ts +1 -1
- package/src/design/tokens.ts +3 -2
- package/src/driver/drive.ts +3 -4
- package/src/driver/steps.ts +2 -5
- package/src/gate/stages.ts +4 -10
- package/src/gov/audit.ts +1 -6
- package/src/inventory/walk.ts +1 -1
- package/src/markdown/scope.ts +6 -35
- package/src/records/validate.ts +4 -176
- package/src/sandbox/equivalence.ts +0 -5
- package/src/shipped/references.ts +1 -2
- package/src/sync/check.ts +4 -29
- package/src/sync/stamp.ts +6 -6
- package/src/sync/target.ts +1 -4
- package/tooling/claude/reference.md +1 -1
- package/tooling/claude/seeds/canon/DESIGN.md +1 -1
- package/claude/skills/canvas-board/REQUIREMENT.md +0 -35
- package/claude/skills/canvas-board/SKILL.md +0 -143
- package/claude/skills/canvas-board/references/canvas.md +0 -170
- 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/governance/rules/ui/canvas.md +0 -13
- package/src/canvas/address.ts +0 -227
- package/src/canvas/arrange.ts +0 -66
- package/src/canvas/capture.ts +0 -391
- package/src/canvas/client/app.tsx +0 -188
- package/src/canvas/client/inspector/align-grid.tsx +0 -162
- package/src/canvas/client/inspector/color-field.tsx +0 -398
- package/src/canvas/client/inspector/color-inputs.tsx +0 -139
- package/src/canvas/client/inspector/color-picker.tsx +0 -668
- package/src/canvas/client/inspector/color-space.ts +0 -240
- package/src/canvas/client/inspector/field.tsx +0 -263
- package/src/canvas/client/inspector/fields.css +0 -763
- package/src/canvas/client/inspector/section.tsx +0 -27
- package/src/canvas/client/inspector/size-field.tsx +0 -69
- package/src/canvas/client/inspector/token-select.tsx +0 -109
- package/src/canvas/client/inspector/values.ts +0 -297
- package/src/canvas/client/inspector.tsx +0 -692
- package/src/canvas/client/keys.ts +0 -71
- package/src/canvas/client/layers.tsx +0 -118
- package/src/canvas/client/main.tsx +0 -71
- package/src/canvas/client/pages-panel.tsx +0 -212
- package/src/canvas/client/panel-handle.tsx +0 -90
- package/src/canvas/client/selection.tsx +0 -199
- package/src/canvas/client/shell.css +0 -762
- package/src/canvas/client/state.ts +0 -792
- package/src/canvas/client/surface.tsx +0 -803
- package/src/canvas/client/theme-panel.tsx +0 -55
- package/src/canvas/client/tools.tsx +0 -153
- package/src/canvas/content.ts +0 -781
- package/src/canvas/edit.ts +0 -575
- package/src/canvas/editing.ts +0 -203
- package/src/canvas/fit.ts +0 -238
- package/src/canvas/global.d.ts +0 -15
- package/src/canvas/history.ts +0 -116
- package/src/canvas/index.html +0 -20
- package/src/canvas/server.ts +0 -766
- package/src/canvas/tokens.ts +0 -221
- package/src/commands/canvas.ts +0 -1097
- 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/design/adapter.ts +0 -59
- package/src/design/base.css +0 -203
- package/src/design/brand-favicon.ts +0 -18
- package/src/design/neutral.ts +0 -127
- package/src/design/project-fonts.ts +0 -392
- 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
package/governance/detect.toml
CHANGED
|
@@ -9,8 +9,7 @@
|
|
|
9
9
|
# root and in every folder to depth two. `files` are globs matched against the
|
|
10
10
|
# target's git-listed paths to depth two, and against each folder on those
|
|
11
11
|
# paths, so `.github/workflows` matches a folder holding a workflow. A glob with
|
|
12
|
-
# no wildcard is also tested on disk, which reaches a gitignored path
|
|
13
|
-
# `.canon/canvas`.
|
|
12
|
+
# no wildcard is also tested on disk, which reaches a gitignored path.
|
|
14
13
|
#
|
|
15
14
|
# Every rule no stack reaches needs a table here, which the `unreferenced-rules`
|
|
16
15
|
# gate stage checks, along with every key naming a live rule. A table for a rule
|
|
@@ -201,10 +200,6 @@ files = ["index.html", "*/index.html"]
|
|
|
201
200
|
deps = ["react", "vue", "svelte", "astro", "next", "solid-js", "preact"]
|
|
202
201
|
files = ["index.html", "*/index.html"]
|
|
203
202
|
|
|
204
|
-
["canvas"]
|
|
205
|
-
deps = []
|
|
206
|
-
files = [".canon/canvas"]
|
|
207
|
-
|
|
208
203
|
["design-reference"]
|
|
209
204
|
deps = []
|
|
210
205
|
files = ["canon/design/*/"]
|
package/governance/renames.toml
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@erclx/canon",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "5.
|
|
4
|
+
"version": "5.54.0",
|
|
5
5
|
"description": "Runs your agent's work and keeps its code good, on one setup for every repo.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"bin": {
|
|
@@ -51,14 +51,9 @@
|
|
|
51
51
|
"web:e2e": "cd web && playwright test"
|
|
52
52
|
},
|
|
53
53
|
"dependencies": {
|
|
54
|
-
"@preact/signals": "^2.11.3",
|
|
55
54
|
"commander": "^13.1.0",
|
|
56
55
|
"execa": "^9.5.2",
|
|
57
|
-
"
|
|
58
|
-
"jszip": "^3.10.1",
|
|
59
|
-
"playwright-core": "1.64.1",
|
|
60
|
-
"pptxgenjs": "^4.0.1",
|
|
61
|
-
"preact": "^11.0.0"
|
|
56
|
+
"playwright-core": "1.64.1"
|
|
62
57
|
},
|
|
63
58
|
"devDependencies": {
|
|
64
59
|
"@astrojs/check": "^0.9.8",
|
|
@@ -71,7 +66,6 @@
|
|
|
71
66
|
"@types/bun": "^1.2.10",
|
|
72
67
|
"@types/micromatch": "^4.0.10",
|
|
73
68
|
"astro": "^6.1.9",
|
|
74
|
-
"happy-dom": "^20.14.5",
|
|
75
69
|
"husky": "^9.1.7",
|
|
76
70
|
"micromatch": "^4.0.8",
|
|
77
71
|
"oxfmt": "0.73.0",
|
|
@@ -2,19 +2,14 @@
|
|
|
2
2
|
* Writes `web/public/previews/design-tokens/index.html` and `design.css` by
|
|
3
3
|
* calling `renderDesignDoc` directly, the in-process pattern
|
|
4
4
|
* `regen-web-favicon.ts` already takes rather than spawning a subprocess.
|
|
5
|
-
* Writes `web/public/previews/teach-workspace/` the same way, calling
|
|
6
|
-
* `generateNav` over an isolated copy of one workspace.
|
|
7
5
|
*
|
|
8
|
-
*
|
|
6
|
+
* It is embedded live in a landing section as an `<iframe>` rather than a
|
|
9
7
|
* screenshot, since `web/e2e/home.spec.ts` asserts no `<img>` renders inside
|
|
10
8
|
* `<main>`.
|
|
11
9
|
*/
|
|
12
|
-
import {
|
|
13
|
-
import { tmpdir } from 'node:os'
|
|
14
|
-
import { join } from 'node:path'
|
|
10
|
+
import { readFileSync } from 'node:fs'
|
|
15
11
|
import { DESIGN_DOCUMENT } from '@/design/regen'
|
|
16
12
|
import { renderDesignDoc } from '@/design/render'
|
|
17
|
-
import { generateNav } from '@/teach/nav'
|
|
18
13
|
|
|
19
14
|
const root = new URL('../..', import.meta.url).pathname
|
|
20
15
|
|
|
@@ -33,63 +28,3 @@ if (!/--(color|space|type|radius)-/.test(css)) {
|
|
|
33
28
|
}
|
|
34
29
|
|
|
35
30
|
console.log('regen-web-previews: wrote web/public/previews/design-tokens/')
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* The workspace ships alone, on its own isolated nav tree, rather than
|
|
39
|
-
* copied straight out of `.canon/teach/`. That folder cross-links every
|
|
40
|
-
* sibling workspace by relative path, including the operator's own personal
|
|
41
|
-
* study notes, so a copy carrying its live chrome would ship either dead
|
|
42
|
-
* links or a path into content never meant to be public. Regenerating the
|
|
43
|
-
* chrome over a scratch copy holding this one workspace alone is what keeps
|
|
44
|
-
* the jump menus from naming anything else.
|
|
45
|
-
*
|
|
46
|
-
* `.canon/teach/` is gitignored session scratch, per `claude/skills/teach-workspace/references/teach.md`, so
|
|
47
|
-
* it exists on the machine that authored the lesson and nowhere else,
|
|
48
|
-
* including CI. `web/public/previews/teach-workspace/` is therefore the
|
|
49
|
-
* durable copy: committed once the workspace exists, regenerated here as a
|
|
50
|
-
* local convenience when authoring continues, and left untouched by a build
|
|
51
|
-
* that cannot see the source, the same way a target without Playwright still
|
|
52
|
-
* builds against a committed capture.
|
|
53
|
-
*/
|
|
54
|
-
const TEACH_SLUG = '04-governance-rule-loading'
|
|
55
|
-
const teachSource = `${root}.canon/teach/${TEACH_SLUG}`
|
|
56
|
-
|
|
57
|
-
if (!existsSync(teachSource)) {
|
|
58
|
-
console.log(
|
|
59
|
-
`regen-web-previews: no workspace at .canon/teach/${TEACH_SLUG} on this machine, leaving the committed web/public/previews/teach-workspace/ as is`,
|
|
60
|
-
)
|
|
61
|
-
} else {
|
|
62
|
-
const scratchRoot = mkdtempSync(join(tmpdir(), 'canon-teach-preview-'))
|
|
63
|
-
try {
|
|
64
|
-
cpSync(teachSource, join(scratchRoot, '.canon', 'teach', TEACH_SLUG), {
|
|
65
|
-
recursive: true,
|
|
66
|
-
})
|
|
67
|
-
|
|
68
|
-
const nav = await generateNav(scratchRoot)
|
|
69
|
-
if (!nav.ok) {
|
|
70
|
-
console.error(`regen-web-previews: ${nav.message}`)
|
|
71
|
-
process.exit(1)
|
|
72
|
-
}
|
|
73
|
-
if (nav.lessons === 0) {
|
|
74
|
-
console.error(
|
|
75
|
-
'regen-web-previews: teach-workspace render carries no lesson, refusing an empty preview',
|
|
76
|
-
)
|
|
77
|
-
process.exit(1)
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
const dest = `${root}web/public/previews/teach-workspace`
|
|
81
|
-
rmSync(dest, { recursive: true, force: true })
|
|
82
|
-
cpSync(join(scratchRoot, '.canon', 'teach'), dest, {
|
|
83
|
-
recursive: true,
|
|
84
|
-
// Only the rendered chrome ships. MISSION.md, RESOURCES.md, and
|
|
85
|
-
// GLOSSARY.md carry links relative to `.canon/teach/`, which resolve to
|
|
86
|
-
// nothing once copied under `web/public/`, and nothing links to them
|
|
87
|
-
// from the rendered pages anyway.
|
|
88
|
-
filter: (path) => !path.endsWith('.md'),
|
|
89
|
-
})
|
|
90
|
-
} finally {
|
|
91
|
-
rmSync(scratchRoot, { recursive: true, force: true })
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
console.log('regen-web-previews: wrote web/public/previews/teach-workspace/')
|
|
95
|
-
}
|
package/src/audits/catalog.ts
CHANGED
package/src/browser/engine.ts
CHANGED
|
@@ -7,9 +7,8 @@
|
|
|
7
7
|
* The two absences are different states with different remedies. A package that
|
|
8
8
|
* never resolved means the target installed the CLI without the engine, and a
|
|
9
9
|
* binary that was never downloaded means the engine is present and its browser
|
|
10
|
-
* is not.
|
|
11
|
-
*
|
|
12
|
-
* local.
|
|
10
|
+
* is not. Every command driving a browser reads both, so they sit here rather
|
|
11
|
+
* than beside one caller.
|
|
13
12
|
*/
|
|
14
13
|
|
|
15
14
|
/** Fetches the browser revision the pinned engine expects. */
|
|
@@ -72,9 +71,7 @@ export interface KeyboardPage {
|
|
|
72
71
|
* browser in pointer modality, where that rule does not match, so a reader
|
|
73
72
|
* calling it alone reports every correctly styled element as unstyled.
|
|
74
73
|
*
|
|
75
|
-
* It moved here when `@/driver/probes/focus` became the second call site
|
|
76
|
-
* matching how the launch-failure split moved out of `src/demo/` once
|
|
77
|
-
* `canon inventory` became the second command driving a browser. One press
|
|
74
|
+
* It moved here when `@/driver/probes/focus` became the second call site. One press
|
|
78
75
|
* covers the page rather than the element that happens to hold focus, so it
|
|
79
76
|
* survives the blur every reader takes next.
|
|
80
77
|
*/
|
package/src/capture/render.ts
CHANGED
|
@@ -16,7 +16,7 @@ import { formatStamp, hashSource, stampPath } from '@/capture/stamp'
|
|
|
16
16
|
* `src/commands/capture.ts` reaches it through a dynamic import so `src/cli.ts`
|
|
17
17
|
* never resolves the engine at startup.
|
|
18
18
|
*
|
|
19
|
-
* It ships, like `@/
|
|
19
|
+
* It ships, like `@/inventory/walk` and `@/driver/drive`.
|
|
20
20
|
* Regenerating this repository's own committed images was the reason it stayed
|
|
21
21
|
* behind, and it was a reason about one caller rather than about the mechanism:
|
|
22
22
|
* a target renders its own generated pages and proves its own fonts resolved,
|
|
@@ -24,23 +24,11 @@ export const AUTHORING_CASES: readonly SkillCase[] = [
|
|
|
24
24
|
'Write a brand-new docs page for the capture command, nothing under docs/ covers it yet.',
|
|
25
25
|
expect: 'write-doc',
|
|
26
26
|
},
|
|
27
|
-
{
|
|
28
|
-
prompt:
|
|
29
|
-
'I typed draft-doc and it said the doc skill was renamed to write-doc.', // canon-keep-retired
|
|
30
|
-
// The pointer answers under its old name on purpose. canon-keep-retired
|
|
31
|
-
expect: 'draft-doc',
|
|
32
|
-
},
|
|
33
27
|
{
|
|
34
28
|
prompt:
|
|
35
29
|
'I already wrote the finished skill files, package them as a ready folder with a plan and a task for a worker to copy.',
|
|
36
30
|
expect: 'plan-ready',
|
|
37
31
|
},
|
|
38
|
-
{
|
|
39
|
-
prompt:
|
|
40
|
-
'I typed draft-ready and it said the ready skill was renamed to plan-ready.', // canon-keep-retired
|
|
41
|
-
// The pointer answers under its old name on purpose. canon-keep-retired
|
|
42
|
-
expect: 'draft-ready',
|
|
43
|
-
},
|
|
44
32
|
{
|
|
45
33
|
prompt: 'This project has no README.md at all, write one from scratch.',
|
|
46
34
|
expect: 'write-doc',
|
package/src/claude/cases/misc.ts
CHANGED
|
@@ -12,12 +12,6 @@ export const MISC_CASES: readonly SkillCase[] = [
|
|
|
12
12
|
'Show me a few different treatments for this callout so I can pick one by looking.',
|
|
13
13
|
expect: 'pick-by-eye',
|
|
14
14
|
},
|
|
15
|
-
{
|
|
16
|
-
prompt:
|
|
17
|
-
'I typed draft-and-pick and it said the pick skill was renamed to pick-by-eye.', // canon-keep-retired
|
|
18
|
-
// The pointer answers under its old name on purpose. canon-keep-retired
|
|
19
|
-
expect: 'draft-and-pick',
|
|
20
|
-
},
|
|
21
15
|
{
|
|
22
16
|
prompt:
|
|
23
17
|
'Which layer of this landing page should I settle first, and what has to stay constant across it?',
|
|
@@ -28,17 +22,6 @@ export const MISC_CASES: readonly SkillCase[] = [
|
|
|
28
22
|
'This project has no logo yet. Draft one and give me a social card to go with it.',
|
|
29
23
|
expect: 'design-identity',
|
|
30
24
|
},
|
|
31
|
-
{
|
|
32
|
-
prompt:
|
|
33
|
-
'I typed draft-identity and it said the identity skill was renamed to design-identity.', // canon-keep-retired
|
|
34
|
-
// The pointer answers under its old name on purpose. canon-keep-retired
|
|
35
|
-
expect: 'draft-identity',
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
prompt:
|
|
39
|
-
'Draw the signup screen as a frame on the canvas, then restyle the element I just selected there.',
|
|
40
|
-
expect: 'canvas-board',
|
|
41
|
-
},
|
|
42
25
|
{
|
|
43
26
|
prompt:
|
|
44
27
|
'The operator picked the new settings panel, so land it in canon/design with an index row for it.',
|
|
@@ -97,11 +80,6 @@ export const MISC_CASES: readonly SkillCase[] = [
|
|
|
97
80
|
'Find me the strongest evidence on whether rent control reduces housing supply. Where should I look?',
|
|
98
81
|
expect: 'search-craft',
|
|
99
82
|
},
|
|
100
|
-
{
|
|
101
|
-
prompt:
|
|
102
|
-
'The composed demo video looks generic and the zoom drags. What should the captions say, and how fast should the push-in be?',
|
|
103
|
-
expect: 'video-craft',
|
|
104
|
-
},
|
|
105
83
|
{
|
|
106
84
|
prompt:
|
|
107
85
|
"I've got the plan approved and it touches the parser, the command, and the docs. How should I build it so I don't end up with one giant diff?",
|
|
@@ -24,12 +24,6 @@ export const WORKFLOW_CASES: readonly SkillCase[] = [
|
|
|
24
24
|
prompt: 'Draw me a diagram of how the pieces of this system connect.',
|
|
25
25
|
expect: 'draw-figure',
|
|
26
26
|
},
|
|
27
|
-
{
|
|
28
|
-
prompt:
|
|
29
|
-
'I typed draft-figure and it said the figure skill was renamed to draw-figure.', // canon-keep-retired
|
|
30
|
-
// The pointer answers under its old name on purpose. canon-keep-retired
|
|
31
|
-
expect: 'draft-figure',
|
|
32
|
-
},
|
|
33
27
|
{
|
|
34
28
|
prompt:
|
|
35
29
|
'This onboarding doc needs a hand-drawn picture of the signup-to-active path, sketch it in and make sure it actually renders correctly.',
|
|
@@ -45,11 +39,6 @@ export const WORKFLOW_CASES: readonly SkillCase[] = [
|
|
|
45
39
|
'Sketch out a plan for adding this new capability before we touch any code.',
|
|
46
40
|
expect: 'plan-feature',
|
|
47
41
|
},
|
|
48
|
-
{
|
|
49
|
-
prompt:
|
|
50
|
-
'The video just finished recording. Read it back and tell me what each part shows.',
|
|
51
|
-
expect: 'read-frames',
|
|
52
|
-
},
|
|
53
42
|
{
|
|
54
43
|
prompt:
|
|
55
44
|
'We need to measure this properly before committing to an approach.',
|
|
@@ -92,11 +81,6 @@ export const WORKFLOW_CASES: readonly SkillCase[] = [
|
|
|
92
81
|
'I pushed another commit to the open PR. Update the screenshot comparison on it so the reviewer sees the current head.',
|
|
93
82
|
expect: 'pr-evidence',
|
|
94
83
|
},
|
|
95
|
-
{
|
|
96
|
-
prompt:
|
|
97
|
-
'The screencast draft is finished. Turn it into an actual video now.',
|
|
98
|
-
expect: 'record-screencast',
|
|
99
|
-
},
|
|
100
84
|
{
|
|
101
85
|
prompt:
|
|
102
86
|
'What should a review of a change look for beyond bugs, and how much evidence does a finding need?',
|
|
@@ -112,26 +96,6 @@ export const WORKFLOW_CASES: readonly SkillCase[] = [
|
|
|
112
96
|
'Our backlog only ever grows, measure each row and suggest which to decline.',
|
|
113
97
|
expect: 'backlog-triage',
|
|
114
98
|
},
|
|
115
|
-
{
|
|
116
|
-
prompt: 'Draft me a script with beats for a screencast recording.',
|
|
117
|
-
expect: 'script-screencast',
|
|
118
|
-
},
|
|
119
|
-
{
|
|
120
|
-
prompt:
|
|
121
|
-
'I typed draft-screencast and it said the screencast skill was renamed to script-screencast.', // canon-keep-retired
|
|
122
|
-
// The pointer answers under its old name on purpose. canon-keep-retired
|
|
123
|
-
expect: 'draft-screencast',
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
prompt: 'Turn this topic into a slide deck I can render.',
|
|
127
|
-
expect: 'make-deck',
|
|
128
|
-
},
|
|
129
|
-
{
|
|
130
|
-
prompt:
|
|
131
|
-
'I typed draft-slides and it said the slides skill was renamed to make-deck.', // canon-keep-retired
|
|
132
|
-
// The pointer answers under its old name on purpose. canon-keep-retired
|
|
133
|
-
expect: 'draft-slides',
|
|
134
|
-
},
|
|
135
99
|
// Rot across documents nobody changed is what this reads, rather than a
|
|
136
100
|
// stated rule broken on a given line. It is also not `target-check`, which
|
|
137
101
|
// asks whether a document exists and holds its sections rather than whether
|
|
@@ -168,8 +132,8 @@ export const WORKFLOW_CASES: readonly SkillCase[] = [
|
|
|
168
132
|
expect: 'task-complete',
|
|
169
133
|
},
|
|
170
134
|
{
|
|
171
|
-
prompt: '
|
|
172
|
-
expect: 'teach-
|
|
135
|
+
prompt: 'Quiz me on what we covered about regular expressions yesterday.',
|
|
136
|
+
expect: 'teach-craft',
|
|
173
137
|
},
|
|
174
138
|
{
|
|
175
139
|
prompt:
|
|
@@ -55,7 +55,7 @@ export const PRACTICE_SKILLS: readonly string[] = [
|
|
|
55
55
|
join(SHIPPED_CORPUS, 'build-in-slices'),
|
|
56
56
|
join(SHIPPED_CORPUS, 'deprecation-migration'),
|
|
57
57
|
join(SHIPPED_CORPUS, 'search-craft'),
|
|
58
|
-
join(SHIPPED_CORPUS, '
|
|
58
|
+
join(SHIPPED_CORPUS, 'teach-craft'),
|
|
59
59
|
]
|
|
60
60
|
|
|
61
61
|
/**
|
package/src/cli/help.ts
CHANGED
|
@@ -38,15 +38,11 @@ export const COMMAND_GROUPS: { title: string; rows: CommandRow[] }[] = [
|
|
|
38
38
|
title: 'Author and render',
|
|
39
39
|
rows: [
|
|
40
40
|
['design [cmd]', 'Design system'],
|
|
41
|
-
['slides [cmd]', 'Slide decks'],
|
|
42
41
|
['capture [source]', 'Render HTML capture sources to PNG'],
|
|
43
42
|
['serve [dir]', 'Serve a directory on localhost, print the link'],
|
|
44
|
-
['demo [cmd]', 'Record a running app'],
|
|
45
43
|
['inventory [subj]', 'Report one computed property across every route'],
|
|
46
44
|
['drive <url> <run>', 'Walk a page through interactions, measure each'],
|
|
47
45
|
['transcripts <url>', 'Fetch a YouTube transcript with frontmatter'],
|
|
48
|
-
['teach [cmd]', 'Learning workspaces'],
|
|
49
|
-
['canvas [cmd]', 'Local canvas of pages and frames'],
|
|
50
46
|
],
|
|
51
47
|
},
|
|
52
48
|
{
|
|
@@ -101,12 +97,7 @@ const EXAMPLES = [
|
|
|
101
97
|
'canon indexes regen --dry-run --json',
|
|
102
98
|
'canon docs list --json',
|
|
103
99
|
'canon docs agents',
|
|
104
|
-
'canon design render',
|
|
105
|
-
'canon canvas list --json',
|
|
106
|
-
'canon slides render',
|
|
107
|
-
'canon slides list --json',
|
|
108
100
|
'canon capture assets/captures/install.html --selector .window --out assets/frames',
|
|
109
|
-
'canon serve .canon/teach',
|
|
110
101
|
'canon inventory focus --json',
|
|
111
102
|
'canon drive http://localhost:4173 run.json --json',
|
|
112
103
|
'pbpaste | canon feedback',
|
|
@@ -114,7 +105,6 @@ const EXAMPLES = [
|
|
|
114
105
|
'canon tasks --help --all',
|
|
115
106
|
'canon tasks archive --pull-request 673 --json',
|
|
116
107
|
'canon intake list toolkit-overview --unread --json',
|
|
117
|
-
'canon teach list --json',
|
|
118
108
|
'canon comments scan src --json',
|
|
119
109
|
'canon context audit --json',
|
|
120
110
|
'canon markdown audit .claude/rules --json',
|
package/src/cli.ts
CHANGED
|
@@ -10,18 +10,14 @@ import { register as claude } from '@/commands/claude'
|
|
|
10
10
|
import { register as indexes } from '@/commands/indexes'
|
|
11
11
|
import { register as docs } from '@/commands/docs'
|
|
12
12
|
import { register as design } from '@/commands/design'
|
|
13
|
-
import { register as slides } from '@/commands/slides'
|
|
14
13
|
import { register as capture } from '@/commands/capture'
|
|
15
14
|
import { register as serve } from '@/commands/serve'
|
|
16
|
-
import { register as demo } from '@/commands/demo'
|
|
17
15
|
import { register as inventory } from '@/commands/inventory'
|
|
18
16
|
import { register as driver } from '@/commands/driver'
|
|
19
17
|
import { register as feedback } from '@/commands/feedback'
|
|
20
18
|
import { register as transcripts } from '@/commands/transcripts'
|
|
21
19
|
import { register as tasks } from '@/commands/tasks'
|
|
22
20
|
import { register as intake } from '@/commands/intake'
|
|
23
|
-
import { register as teach } from '@/commands/teach'
|
|
24
|
-
import { register as canvas } from '@/commands/canvas'
|
|
25
21
|
import { register as comments } from '@/commands/comments'
|
|
26
22
|
import { register as context } from '@/commands/context'
|
|
27
23
|
import { register as markdown } from '@/commands/markdown'
|
|
@@ -71,18 +67,14 @@ claude(program)
|
|
|
71
67
|
indexes(program)
|
|
72
68
|
docs(program)
|
|
73
69
|
design(program)
|
|
74
|
-
slides(program)
|
|
75
70
|
capture(program)
|
|
76
71
|
serve(program)
|
|
77
|
-
demo(program)
|
|
78
72
|
inventory(program)
|
|
79
73
|
driver(program)
|
|
80
74
|
feedback(program)
|
|
81
75
|
transcripts(program)
|
|
82
76
|
tasks(program)
|
|
83
77
|
intake(program)
|
|
84
|
-
teach(program)
|
|
85
|
-
canvas(program)
|
|
86
78
|
comments(program)
|
|
87
79
|
context(program)
|
|
88
80
|
markdown(program)
|