@erclx/canon 5.53.0 → 5.55.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.
Files changed (127) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +10 -9
  3. package/claude/.claude-plugin/plugin.json +1 -1
  4. package/claude/skills/canon-cli/SKILL.md +5 -5
  5. package/claude/skills/create-skill/SKILL.md +1 -1
  6. package/claude/skills/design-identity/REQUIREMENT.md +2 -2
  7. package/claude/skills/design-identity/SKILL.md +6 -6
  8. package/claude/skills/design-record/REQUIREMENT.md +2 -2
  9. package/claude/skills/design-record/SKILL.md +4 -4
  10. package/claude/skills/design-record/references/folder.md +1 -1
  11. package/claude/skills/design-taste/REQUIREMENT.md +1 -1
  12. package/claude/skills/document-health/SKILL.md +6 -6
  13. package/claude/skills/document-repair/SKILL.md +5 -5
  14. package/claude/skills/draw-figure/REQUIREMENT.md +1 -1
  15. package/claude/skills/draw-figure/SKILL.md +1 -1
  16. package/claude/skills/pick-by-eye/REQUIREMENT.md +4 -4
  17. package/claude/skills/pick-by-eye/SKILL.md +34 -41
  18. package/claude/skills/pick-by-eye/references/board.md +42 -0
  19. package/claude/skills/pick-by-eye/references/live-arms.md +3 -3
  20. package/claude/skills/plan-groundwork/SKILL.md +1 -1
  21. package/claude/skills/target-check/SKILL.md +6 -8
  22. package/claude/skills/target-check/references/domains.md +1 -4
  23. package/claude/skills/target-setup/SKILL.md +8 -8
  24. package/claude/skills/target-update/SKILL.md +5 -5
  25. package/claude/skills/teach-craft/REQUIREMENT.md +1 -1
  26. package/claude/skills/teach-craft/SKILL.md +32 -1
  27. package/claude/skills/teach-craft/references/adopted.md +113 -0
  28. package/claude/skills/teach-craft/references/lesson-craft.md +10 -2
  29. package/claude/skills/teach-craft/references/pedagogy.md +29 -2
  30. package/docs/agents/install-and-sync.md +2 -10
  31. package/docs/agents/output-shape.md +11 -10
  32. package/docs/target/migrations.md +8 -3
  33. package/docs/target/projects.md +1 -1
  34. package/docs/target/sync.md +1 -1
  35. package/docs/workflow/skill-map.md +0 -1
  36. package/docs/workflow/visual-design-workflow.md +1 -4
  37. package/governance/detect.toml +1 -6
  38. package/governance/renames.toml +0 -1
  39. package/package.json +2 -5
  40. package/scripts/core/install-check.sh +1 -1
  41. package/scripts/lib/ui.sh +12 -65
  42. package/src/audits/run.ts +1 -1
  43. package/src/claude/cases/misc.ts +0 -5
  44. package/src/claude/routing.ts +1 -1
  45. package/src/claude/skills-audit.ts +1 -0
  46. package/src/cli/help.ts +0 -3
  47. package/src/cli/run.ts +5 -6
  48. package/src/cli/ui.ts +87 -28
  49. package/src/cli.ts +6 -2
  50. package/src/commands/claude.ts +2 -3
  51. package/src/commands/design.ts +20 -324
  52. package/src/commands/gate.ts +5 -3
  53. package/src/commands/gov.ts +11 -21
  54. package/src/commands/labels.ts +1 -1
  55. package/src/commands/pr.ts +1 -1
  56. package/src/commands/sync.ts +5 -6
  57. package/src/commands/tooling.ts +5 -8
  58. package/src/commands/transcripts.ts +6 -11
  59. package/src/design/regen.ts +5 -32
  60. package/src/design/render.ts +1 -1
  61. package/src/design/tokens.ts +3 -2
  62. package/src/gate/sequencer.ts +1 -1
  63. package/src/gate/stages.ts +4 -20
  64. package/src/gov/audit.ts +1 -6
  65. package/src/hooks/post-merge.ts +2 -5
  66. package/src/markdown/scope.ts +2 -4
  67. package/src/process/harness.ts +3 -4
  68. package/src/sandbox/equivalence.ts +0 -1
  69. package/src/sandbox/provision.ts +8 -13
  70. package/src/sandbox/scenario.ts +6 -12
  71. package/src/shipped/references.ts +1 -2
  72. package/src/sync/check.ts +4 -29
  73. package/src/sync/engine.ts +3 -8
  74. package/src/sync/stamp.ts +6 -6
  75. package/src/sync/target.ts +1 -4
  76. package/src/sync/workflow.ts +3 -5
  77. package/src/tooling/verify-stack.ts +1 -1
  78. package/tooling/base/configs/.husky/post-merge +6 -10
  79. package/tooling/claude/reference.md +1 -1
  80. package/tooling/claude/seeds/canon/DESIGN.md +1 -1
  81. package/claude/skills/canvas-board/REQUIREMENT.md +0 -35
  82. package/claude/skills/canvas-board/SKILL.md +0 -143
  83. package/claude/skills/canvas-board/references/canvas.md +0 -170
  84. package/governance/rules/ui/canvas.md +0 -13
  85. package/scripts/core/check-color-source.sh +0 -51
  86. package/src/canvas/address.ts +0 -227
  87. package/src/canvas/arrange.ts +0 -66
  88. package/src/canvas/capture.ts +0 -391
  89. package/src/canvas/client/app.tsx +0 -188
  90. package/src/canvas/client/inspector/align-grid.tsx +0 -162
  91. package/src/canvas/client/inspector/color-field.tsx +0 -398
  92. package/src/canvas/client/inspector/color-inputs.tsx +0 -139
  93. package/src/canvas/client/inspector/color-picker.tsx +0 -668
  94. package/src/canvas/client/inspector/color-space.ts +0 -240
  95. package/src/canvas/client/inspector/field.tsx +0 -263
  96. package/src/canvas/client/inspector/fields.css +0 -763
  97. package/src/canvas/client/inspector/section.tsx +0 -27
  98. package/src/canvas/client/inspector/size-field.tsx +0 -69
  99. package/src/canvas/client/inspector/token-select.tsx +0 -109
  100. package/src/canvas/client/inspector/values.ts +0 -297
  101. package/src/canvas/client/inspector.tsx +0 -692
  102. package/src/canvas/client/keys.ts +0 -71
  103. package/src/canvas/client/layers.tsx +0 -118
  104. package/src/canvas/client/main.tsx +0 -71
  105. package/src/canvas/client/pages-panel.tsx +0 -212
  106. package/src/canvas/client/panel-handle.tsx +0 -90
  107. package/src/canvas/client/selection.tsx +0 -199
  108. package/src/canvas/client/shell.css +0 -762
  109. package/src/canvas/client/state.ts +0 -792
  110. package/src/canvas/client/surface.tsx +0 -803
  111. package/src/canvas/client/theme-panel.tsx +0 -55
  112. package/src/canvas/client/tools.tsx +0 -153
  113. package/src/canvas/content.ts +0 -781
  114. package/src/canvas/edit.ts +0 -575
  115. package/src/canvas/editing.ts +0 -203
  116. package/src/canvas/fit.ts +0 -238
  117. package/src/canvas/global.d.ts +0 -15
  118. package/src/canvas/history.ts +0 -116
  119. package/src/canvas/index.html +0 -20
  120. package/src/canvas/server.ts +0 -766
  121. package/src/canvas/tokens.ts +0 -221
  122. package/src/commands/canvas.ts +0 -1097
  123. package/src/design/adapter.ts +0 -59
  124. package/src/design/base.css +0 -203
  125. package/src/design/brand-favicon.ts +0 -18
  126. package/src/design/neutral.ts +0 -127
  127. package/src/design/project-fonts.ts +0 -392
@@ -37,7 +37,7 @@ Write only inside `.canon/groundwork/<nn>-<slug>/`. A feature plan, source chang
37
37
 
38
38
  What a spike produces stays inside the track, under `.canon/groundwork/<nn>-<slug>/evidence/`, which the first rule already permits. Mode detection matches only top-level entries, so a nested folder cannot be mistaken for a track, and scratch holds only what can be deleted without loss.
39
39
 
40
- A `pick-by-eye` run invoked from inside a live track follows its own branch for this. It writes its renders to `evidence/` here, and drafts its candidates as canvas pages under `.canon/canvas/` that its close deletes.
40
+ A `pick-by-eye` run invoked from inside a live track follows its own branch for this. It writes its renders to `evidence/` here, and drafts its candidates as pages on the Frameboard board at `.canon/canvas/` that its close deletes.
41
41
 
42
42
  ### Reading and backing
43
43
 
@@ -17,7 +17,7 @@ Six domains carry the report. Five answer from a verb that already exists and th
17
17
  - No `.claude/` directory at the working root: stop. `❌ No .claude/ here, so nothing is installed to check. Run canon init first.`
18
18
  - A `claude/skills/` folder at the root, no leading dot: stop. `❌ This is the toolkit itself rather than a target. Ask the orchestrator for a worker per repository to take a change out to the targets.`
19
19
  - A target receives skills at `.claude/skills/` and authors none, so the spelling without the dot separates the source from what it installs into
20
- - Run every command under `CANON_NON_INTERACTIVE=1` and prompt at no point, since every caller is a dispatched worker with nobody to answer
20
+ - Prompt at no point, since every caller is a dispatched worker with nobody to answer. A call with no terminal on stdin already runs headless, so no command takes a prefix.
21
21
  - Branch on each record's own fields rather than on an exit status. A shell function wrapping `canon` can report every refusal as success.
22
22
 
23
23
  ## Step 1: read the reports
@@ -25,25 +25,23 @@ Six domains carry the report. Five answer from a verb that already exists and th
25
25
  Run these from the target root, in parallel:
26
26
 
27
27
  ```bash
28
- CANON_NON_INTERACTIVE=1 canon sync --check . --json
29
- CANON_NON_INTERACTIVE=1 canon context audit --json
28
+ canon sync --check . --json
29
+ canon context audit --json
30
30
  ```
31
31
 
32
32
  The first answers five domains from one read, being `skew`, `domains`, `seeds`, `tooling`, and the layout fields `unmigrated`, `superseded`, `unmovedSurfaces`, and `reverse`. The second deepens a domain that first read only counts.
33
33
 
34
- Then run `CANON_NON_INTERACTIVE=1 canon records validate <kind> --json` once per record folder the target carries, taking `<kind>` from what is present under the record root rather than from a list held here.
34
+ Then run `canon records validate <kind> --json` once per record folder the target carries, taking `<kind>` from what is present under the record root rather than from a list held here.
35
35
 
36
36
  ### The tooling read takes a stack, always
37
37
 
38
38
  The tooling comparison runs last, because it needs a value the first read returns. Take `<stack>` from the first name in the report's `tooling.chain`, which records the stack nearest the target, and pass it:
39
39
 
40
40
  ```bash
41
- CANON_NON_INTERACTIVE=1 canon tooling sync --check <stack>
41
+ canon tooling sync --check <stack>
42
42
  ```
43
43
 
44
- Refuse the domain and report it unread when `chain` names nothing, rather than running the command bare. A bare call reaches the stack prompt, which the non-interactive variable resolves to the catalog's first option instead of refusing.
45
-
46
- Every target would then be compared against whichever stack sorts first, on every run, and the drift reported would be an artifact of the wrong comparison rather than anything the target did.
44
+ Refuse the domain and report it unread when `chain` names nothing, rather than running the command bare. A bare call reaches the stack prompt, which refuses a headless caller, so it would report nothing about the domain.
47
45
 
48
46
  ### Domains come from the report
49
47
 
@@ -72,10 +72,7 @@ Read the `tooling` block off the report first, because the comparison command ne
72
72
 
73
73
  ### The comparison
74
74
 
75
- On a measured report, take `<stack>` from the first name in `chain` and run `canon tooling sync --check <stack>`. Never run it bare.
76
-
77
- - Omitting the stack reaches a prompt the non-interactive variable resolves to the catalog's first entry rather than refusing
78
- - That compares the target against a stack it does not use and reports the difference as drift
75
+ On a measured report, take `<stack>` from the first name in `chain` and run `canon tooling sync --check <stack>`. Never run it bare, since omitting the stack reaches a prompt that refuses a headless caller and compares nothing.
79
76
 
80
77
  ### Verdicts
81
78
 
@@ -33,9 +33,9 @@ rather than a step within it, so the full chain never runs it separately.
33
33
 
34
34
  ## Non-interactive path
35
35
 
36
- Every phase runs under `CANON_NON_INTERACTIVE=1` with no TTY. Three phases
37
- otherwise pause, and each takes an argument that answers its prompt ahead of
38
- time:
36
+ Every phase runs headless with no prefix, since a call with no terminal on
37
+ stdin is already headless. Three phases otherwise pause, and each takes an
38
+ argument that answers its prompt ahead of time:
39
39
 
40
40
  | Phase | Pauses to | Answered ahead by | With neither and no TTY |
41
41
  | ------------------- | ------------------------------------------ | ---------------------------------------------------------- | ----------------------------------------------------- |
@@ -91,7 +91,7 @@ target project's current directory. Do not cd into the toolkit source tree. The
91
91
  Step 1: `canon init` installs base tooling, claude seeds, and governance rules.
92
92
 
93
93
  ```bash
94
- CANON_NON_INTERACTIVE=1 canon init \
94
+ canon init \
95
95
  --stack <stack> \
96
96
  --add <rules> \
97
97
  <target>
@@ -106,7 +106,7 @@ Step 2: `canon tooling sync <tooling-stack> --write` installs stack deps, script
106
106
  - A fresh target has nothing to lose, so pass `--write` directly rather than reading a report first
107
107
 
108
108
  ```bash
109
- CANON_NON_INTERACTIVE=1 canon tooling sync <tooling-stack> <target> --write
109
+ canon tooling sync <tooling-stack> <target> --write
110
110
  ```
111
111
 
112
112
  ### Monorepo with multiple language roots
@@ -114,8 +114,8 @@ CANON_NON_INTERACTIVE=1 canon tooling sync <tooling-stack> <target> --write
114
114
  Run `canon init` once at the repo root so `base` (husky, oxfmt, commitlint, CI) lands once, then sync each subtree with `--skip base`. Take the subtree commands from the preview's per-root rows rather than picking folders by hand.
115
115
 
116
116
  ```bash
117
- CANON_NON_INTERACTIVE=1 canon tooling sync vite-react ./frontend --skip base --write
118
- CANON_NON_INTERACTIVE=1 canon tooling sync python ./backend --skip base --write
117
+ canon tooling sync vite-react ./frontend --skip base --write
118
+ canon tooling sync python ./backend --skip base --write
119
119
  ```
120
120
 
121
121
  - Without `--skip base`, each subtree re-drops husky, and git honors only one `core.hooksPath`, so the extra hook dirs silently break
@@ -139,7 +139,7 @@ Resolve exactly as the detect reference states, confirm the proposed extras
139
139
  there, then run:
140
140
 
141
141
  ```bash
142
- CANON_NON_INTERACTIVE=1 canon gov install <stack> --add <extras> <target>
142
+ canon gov install <stack> --add <extras> <target>
143
143
  ```
144
144
 
145
145
  Report the rule count installed, the target path, and any rules that failed to
@@ -24,7 +24,7 @@ Stop with the line beside each state.
24
24
 
25
25
  Then hold two rules for every verb this body runs.
26
26
 
27
- - Run it under `CANON_NON_INTERACTIVE=1` from the target root
27
+ - Run it from the target root with no prefix, since a call with no terminal on stdin already runs headless
28
28
  - Branch on its record's fields rather than its exit, which a shell function wrapping `canon` can flatten
29
29
 
30
30
  ## Step 1: bring the binary and plugin forward
@@ -38,12 +38,12 @@ Both write to the machine rather than the target, and the preview needs the verb
38
38
  Run these in parallel from the target root:
39
39
 
40
40
  ```bash
41
- CANON_NON_INTERACTIVE=1 canon changelog --json
42
- CANON_NON_INTERACTIVE=1 canon migrate status --json
43
- CANON_NON_INTERACTIVE=1 canon sync --check . --json
41
+ canon changelog --json
42
+ canon migrate status --json
43
+ canon sync --check . --json
44
44
  ```
45
45
 
46
- Then take `<stack>` from the first name in the report's `tooling.chain` and run `canon tooling diff <stack> . --json`. Never run it bare, since the stack prompt resolves to the catalog's first entry under the non-interactive variable. Report tooling unmeasured when `tooling.measured` is false or `chain` names nothing.
46
+ Then take `<stack>` from the first name in the report's `tooling.chain` and run `canon tooling diff <stack> . --json`. Never run it bare, since the stack prompt refuses a headless caller. Report tooling unmeasured when `tooling.measured` is false or `chain` names nothing.
47
47
 
48
48
  ### When a read refuses
49
49
 
@@ -17,6 +17,7 @@ Its quizzes leak the answer through option length or position, and nothing tests
17
17
  - Ask the learner's starting point and read the subject from sources, saying which claims rest on recall
18
18
  - State quiz design that leaks no answer, and pair a quiz with a teach-back
19
19
  - Hold that the wrong answer itself is what the next session places from
20
+ - Cite an opened source in the ledger for every kept rule, or label it house judgment with the reason it stays, then close on excuses, red flags, and a checklist
20
21
 
21
22
  ## Must not
22
23
 
@@ -27,4 +28,3 @@ Its quizzes leak the answer through option length or position, and nothing tests
27
28
  ## Out of scope
28
29
 
29
30
  - Where a lesson is stored or how it renders, which belongs to whatever surface the session writes to
30
- - A cited source ledger for the practice family, which is a follow-on task
@@ -7,7 +7,7 @@ metadata:
7
7
 
8
8
  # Teach craft
9
9
 
10
- A session asked to teach explains, and a smooth explanation reads as a lesson learned. It is fluency, which decays within days. This skill carries what turns teaching into retention: test before telling, space the returns, and grade only what the learner produced unaided.
10
+ A session asked to teach explains, and a smooth explanation reads as a lesson learned. It is fluency, which does not survive a delay. This skill carries what turns teaching into retention: test before telling, space the returns, and grade only what the learner produced unaided.
11
11
 
12
12
  It produces nothing of its own. The lesson lands wherever the session already writes, being the conversation, a file, or a page.
13
13
 
@@ -18,6 +18,8 @@ It produces nothing of its own. The lesson lands wherever the session already wr
18
18
 
19
19
  Read `pedagogy.md` before picking what to teach next, and `lesson-craft.md` before writing a quiz or a lesson.
20
20
 
21
+ Read `${CLAUDE_SKILL_DIR}/references/adopted.md` only when extending this guidance or arguing against a rule in it. It records the research each rule rests on, the passage relied on, and which rules stand as house judgment.
22
+
21
23
  ## Before teaching
22
24
 
23
25
  - Ask what the learner already knows rather than assuming it. Difficulty with no floor under it teaches nobody.
@@ -37,3 +39,32 @@ Read `pedagogy.md` before picking what to teach next, and `lesson-craft.md` befo
37
39
  | They followed the explanation, so move on | Following is fluency. Advance on a retrieval the learner passed unaided. |
38
40
  | Review the last lesson before testing it | Review rebuilds the fluency the test would have measured. Test first, then fill what missed. |
39
41
  | The answer is obvious from the options | Then the distractors are not misconceptions anyone holds. Rewrite them. |
42
+
43
+ ## Red flags
44
+
45
+ - You are about to explain a topic and the learner has not yet tried to answer anything on it.
46
+ - The learner said it makes sense and you are moving to the next topic.
47
+ - A returning learner's session opens on new material.
48
+
49
+ ### Quizzes and records
50
+
51
+ These flags fire on what the session has written.
52
+
53
+ - The correct options in a quiz are the longest ones, or sit in the same slot.
54
+ - You are writing a claim about the subject with no source open.
55
+ - The learning record you are about to write holds a score and no wrong answer.
56
+
57
+ ## Before handing over
58
+
59
+ Check each line against the lesson and the record the session produced.
60
+
61
+ - Every advance followed a retrieval the learner passed unaided, not a smooth explanation.
62
+ - The lesson carries a quiz and a teach-back with a named audience.
63
+ - Every quiz keeps its options to one length and rotates the correct slot by question number.
64
+ - Every claim names the source it was read from, or says it rests on recall.
65
+ - The learning record names each wrong answer and the next revisit from the ladder.
66
+
67
+ ## What this delegates
68
+
69
+ - Finding and opening the sources a lesson is read from: `search-craft`
70
+ - Where a lesson is stored and how it renders, which belongs to the surface the session writes to
@@ -0,0 +1,113 @@
1
+ ---
2
+ title: Adopted and declined
3
+ description: Which learning-science sources this skill's rules rest on, the passage each one was taken from, what was declined, and which rules stand as house judgment with no opened source behind them
4
+ ---
5
+
6
+ # Adopted and declined
7
+
8
+ The field is learning science and cognitive psychology, with educational measurement for quiz construction. Every source below was opened, the papers through the PubMed API and the practice guide as a PDF. Each entry quotes the passage relied on, and a later session extends this file rather than re-arguing an item settled here.
9
+
10
+ ## Contents
11
+
12
+ - [Adopted](#adopted)
13
+ - [Declined](#declined)
14
+ - [House judgment](#house-judgment)
15
+
16
+ ## Adopted
17
+
18
+ ### Retrieval over restudy, and fluency against retention
19
+
20
+ [Roediger and Karpicke 2006, Test-enhanced learning](https://pubmed.ncbi.nlm.nih.gov/16507066/) backs testing before reviewing, and the rule that confidence says nothing about retention.
21
+
22
+ - Passage: "prior testing produced substantially greater retention than studying, even though repeated studying increased students' confidence in their ability to remember the material"
23
+ - The same abstract: "When the final test was given after 5 min, repeated studying improved recall relative to repeated testing"
24
+ - Adopted in `pedagogy.md` as the fluency and retrieval sections, and in the body's excuses table
25
+
26
+ ### Failing an attempt before the answer
27
+
28
+ [Kornell, Hays and Bjork 2009, Unsuccessful retrieval attempts enhance subsequent learning](https://pubmed.ncbi.nlm.nih.gov/19586265/) backs asking before telling and letting the learner fail first.
29
+
30
+ - Passage: in the test condition "participants attempted to answer the question before being shown the answer", and "Unsuccessful retrieval attempts enhanced learning with both types of materials"
31
+ - The read-only condition it beat is "the question and answer were presented together"
32
+ - Adopted as the rule to open on the question, and in `lesson-craft.md` as feedback after the attempt rather than beside the question
33
+
34
+ ### Spacing, and the gap growing with the interval
35
+
36
+ [Cepeda et al. 2006, Distributed practice in verbal recall tasks](https://pubmed.ncbi.nlm.nih.gov/16719566/) backs spacing, and the best gap growing with how long the material has to last.
37
+
38
+ - Passage: "the ISI producing maximal retention increased as retention interval increased"
39
+ - Adopted as the spacing section's principle. It names no schedule and reports no result for expanding gaps, so the ladder is house judgment.
40
+
41
+ [Pashler et al. 2007, IES practice guide NCER 2007-2004](https://ies.ed.gov/ncee/wwc/Docs/PracticeGuide/20072004.pdf) backs the same at classroom scale, and its panel rates the evidence moderate.
42
+
43
+ - Passage: key concepts seen on at least two occasions, "separated by a period of several weeks to several months"
44
+ - Adopted as the rule to revisit once forgetting has begun rather than while the material is fresh
45
+
46
+ ### Quizzing at every phase
47
+
48
+ The same IES guide, in Recommendation 5, backs carrying a quiz in every lesson. Its panel rates quizzes that re-expose key content as strong evidence and pre-questions as low.
49
+
50
+ - Passage: "Use quizzing with active retrieval of information at all phases of the learning process"
51
+ - Adopted as the rule to carry a quiz. Opening on a question rests on Kornell, Hays and Bjork above, with this as weak support.
52
+
53
+ ### Worked examples while acquiring
54
+
55
+ The IES guide's Recommendation 2 backs worked examples for a learner taking on a procedure, rated moderate.
56
+
57
+ - Passage: students "learn more by alternating between studying examples of worked-out problem solutions and solving similar problems on their own"
58
+ - Adopted as the clause introducing new material through worked examples. The wider split between skill and knowledge is house judgment below.
59
+
60
+ ### Interleaving exemplars
61
+
62
+ [Kornell and Bjork 2008, Learning concepts and categories](https://pubmed.ncbi.nlm.nih.gov/18578849/) backs mixing related items within a session, and names the fluency trap of blocked practice.
63
+
64
+ - Passage: paintings "presented consecutively (massed) or interleaved with other artists' paintings (spaced)", and induction profited from the interleaved order
65
+ - The same abstract: "Participants rated massing as more effective than spacing"
66
+ - Adopted as the claim that blocked practice feels better and teaches less. The study mixes exemplars of categories, so mixing topics is an extension, recorded below.
67
+
68
+ ### Feedback on a quiz
69
+
70
+ [Butler and Roediger 2008, Feedback and multiple-choice testing](https://pubmed.ncbi.nlm.nih.gov/18491500/) backs giving feedback on a multiple-choice quiz.
71
+
72
+ - Passage: "The selection of lures can lead students to acquire false knowledge", and feedback "reduced the proportion of intrusions"
73
+ - Adopted as the rule to write feedback for every question. It tests feedback against none, not where distractors come from or how feedback explains them.
74
+ - It found immediate and delayed feedback both help, so the timing rule rests on Kornell, Hays and Bjork instead
75
+
76
+ ### The teach-back
77
+
78
+ [Nestojko et al. 2014, Expecting to teach](https://pubmed.ncbi.nlm.nih.gov/24845756/) backs asking the learner to explain to an audience.
79
+
80
+ - Passage: "Participants expecting to teach produced more complete and better organized free recall of the passage"
81
+ - Adopted as the teach-back block and its named audience
82
+ - The participants expected to teach and never taught. The finding backs framing the ask as teaching, not a gain from the explanation itself.
83
+
84
+ ## Declined
85
+
86
+ ### A fixed schedule from the literature
87
+
88
+ Cepeda's synthesis and the IES guide each tie the best gap to how long the material has to last, and neither names a sequence of days. Neither is cited for the ladder, so the ladder does not read as sourced.
89
+
90
+ ### Dunlosky et al. 2013
91
+
92
+ [Improving students' learning](https://journals.sagepub.com/doi/10.1177/1529100612453266) refused with a 403. It stays a lead, never cited, and is the first source to open when extending the retrieval or spacing rules.
93
+
94
+ ### Leads not opened
95
+
96
+ Bjork on desirable difficulties, Vygotsky on the zone of proximal development, and Haladyna, Downing and Rodriguez 2002 on item writing were each searched for and not opened. The item-writing review refused with a 403 at the publisher, and Crossref carries no abstract for it. Each rule it would back is labeled below.
97
+
98
+ ## House judgment
99
+
100
+ These rules stay with no opened source behind them, each for the reason given.
101
+
102
+ - **The review ladder.** The 1, 3, 7, 16, and 35 day rungs, and moving a rung on each hit or miss, are a house schedule. An author told to widen a gap settles on whatever feels right.
103
+ - **Forgetting as the mechanism of spacing.** It explains why the gap matters, and no opened source tests it.
104
+ - **Production over selection, and no cue in the question.** Both studies above compare testing with restudy, and neither compares a recognition test.
105
+ - **Misconception distractors, explained one by one.** A distractor nobody holds removes itself, and Butler tests only feedback against none.
106
+ - **Interleaving topics rather than exemplars.** This extends Kornell and Bjork and the IES worked-example finding. It stays because working out which approach a problem calls for carries over.
107
+ - **Never interleaving an unseen topic.** Telling two things apart needs something on each side.
108
+ - **Where difficulty helps and hurts.** The split stays because it changes what a lesson withholds. Kornell, Hays and Bjork back difficulty at retrieval, and IES backs worked examples while acquiring.
109
+ - **The zone of proximal development.** Placing the learner just past what they can do unaided is how a session picks the next step from the learning record.
110
+ - **Equal option length.** A longer option reads as the considered one, and a session can check the rule by counting.
111
+ - **Rotating the correct slot.** An author varying position by judgment settles on the first slot.
112
+ - **Restraint and what makes a lesson worth returning to.** Both are editorial judgment about a page rather than claims about memory.
113
+ - **The sourcing ladder.** It is this toolkit's rule for what a lesson cites, not a finding about learning.
@@ -5,7 +5,7 @@ description: Restraint, quiz design, teach back, and what makes a lesson worth r
5
5
 
6
6
  # Lesson craft reference
7
7
 
8
- Judgment rather than shape. This file covers what makes a lesson worth opening twice, whatever surface it renders on.
8
+ Judgment rather than shape. This file covers what makes a lesson worth opening twice, whatever surface it renders on. Each section names its research or says it is house judgment, and `adopted.md` beside this file carries the passages.
9
9
 
10
10
  ## Contents
11
11
 
@@ -23,6 +23,8 @@ Every element competes with the material for attention.
23
23
  - Do not animate anything the learner did not trigger
24
24
  - Prefer whitespace over rules and boxes to separate sections
25
25
 
26
+ This section is house judgment, an editorial call about a page rather than a claim about memory.
27
+
26
28
  ## Quiz design
27
29
 
28
30
  The quiz is the retrieval, so a leak in its construction turns it into a reading test.
@@ -35,18 +37,24 @@ The quiz is the retrieval, so a leak in its construction turns it into a reading
35
37
 
36
38
  One feedback block reads as an explanation where a block per option reads as four verdicts, and only the explanation names what separates a wrong option from the answer. Name the correct option in the feedback text, since it is what a learner reads to find out whether they were right.
37
39
 
40
+ Butler and Roediger 2008 back giving feedback on a multiple-choice quiz, since its lures can teach false knowledge. Kornell, Hays and Bjork 2009 back giving it after the attempt. Misconception distractors, explaining each one, equal option length, and the slot rotation are house judgment.
41
+
38
42
  ## Teach back
39
43
 
40
- A quiz is recognition and a teach-back is production, which is the form retrieval practice prefers. Carry both: the quiz places the learner against options someone could hold, and the teach-back is where the learner finds out what they cannot say without help.
44
+ A quiz is recognition and a teach-back is production, which this skill prefers as house judgment. Carry both: the quiz places the learner against options someone could hold, and the teach-back is where the learner finds out what they cannot say without help.
41
45
 
42
46
  - Ask for an explanation to a named audience rather than for an answer. Telling a non-programmer why a lazy quantifier is not an optional one has a floor, and "explain lazy quantifiers" has none.
43
47
  - Ask about the thing the lesson was for, not a detail beside it. A teach-back on a footnote tests attention rather than the material.
44
48
  - Carry a self-check, hidden until the learner opens it, listing what a complete explanation covers. A learner with no session in the room otherwise cannot grade the ask, and hidden leaks nothing.
45
49
  - Write the self-check as what the explanation has to cover rather than as the explanation itself. A model answer is read instead of produced, which turns the block back into reading.
46
50
 
51
+ Nestojko et al. 2014 back framing the ask as teaching a named audience. The self-check rules are house judgment.
52
+
47
53
  ## What makes a lesson worth returning to
48
54
 
49
55
  - The worked example is complete. A learner returning for the example finds the whole thing rather than a fragment they have to reconstruct.
50
56
  - The lesson states what it assumes. A returning reader can tell in one line whether they are in the right place.
51
57
  - The hard part is named as the hard part. Material that flattens everything to one difficulty gives a returning reader nothing to navigate by.
52
58
  - Nothing depends on the session it was written in. A lesson referring to what was discussed is unreadable a week later.
59
+
60
+ This section is house judgment, like restraint above.
@@ -7,15 +7,29 @@ description: Fluency against storage strength, retrieval practice, spacing, inte
7
7
 
8
8
  The rules a lesson is built from. Read this before picking what to teach next.
9
9
 
10
+ Each section names the research behind it or says it is house judgment. The passage each source was taken from, and the reason each house rule stays, sit in `adopted.md` beside this file.
11
+
12
+ ## Contents
13
+
14
+ - [Fluency is not storage strength](#fluency-is-not-storage-strength)
15
+ - [Retrieval practice](#retrieval-practice)
16
+ - [Spacing](#spacing)
17
+ - [Interleaving](#interleaving)
18
+ - [The zone of proximal development](#the-zone-of-proximal-development)
19
+ - [Where difficulty helps and where it hurts](#where-difficulty-helps-and-where-it-hurts)
20
+ - [Sourcing](#sourcing)
21
+
10
22
  ## Fluency is not storage strength
11
23
 
12
- A learner who follows an explanation smoothly has demonstrated that the explanation was clear. That is fluency, and it decays within days. Storage strength is whether the material can be retrieved later without the explanation present, and the two move independently.
24
+ A learner who follows an explanation smoothly has demonstrated that the explanation was clear. That is fluency, and it does not last. Storage strength is whether the material can be retrieved later without the explanation present, and the two move independently.
13
25
 
14
26
  The practical consequence is that a lesson cannot report its own success. Only a later retrieval can, which is why the learning record exists and why every session opens by testing the last one rather than by reviewing it.
15
27
 
16
28
  - Treat a learner's confidence as evidence about the lesson, never about their retention
17
29
  - Never advance on the strength of a smooth session. Advance on a retrieval the learner passed unaided.
18
30
 
31
+ Roediger and Karpicke 2006 back this section. Restudying won on a test five minutes later and lost on the delayed tests, while it raised the learners' confidence.
32
+
19
33
  ## Retrieval practice
20
34
 
21
35
  Pulling an answer out of memory strengthens it far more than reading it again. Recognition is the weak form: a learner who picks the right option from four has done less work than one who produced the answer from nothing.
@@ -24,6 +38,7 @@ Pulling an answer out of memory strengthens it far more than reading it again. R
24
38
  - Prefer a question the learner has to produce an answer to over one they select from
25
39
  - Let the learner fail an attempt before correcting it. A failed retrieval followed by the answer beats being told first.
26
40
  - Do not cue the answer in the question. A question restating the material tests reading rather than memory.
41
+ - Asking first and the failed attempt rest on Kornell, Hays and Bjork 2009. Production over selection and the no-cue rule are house judgment, since no opened study compared a recognition test.
27
42
 
28
43
  The teach-back block is the production form this section prefers, which is why a lesson carries one beside its quiz. A quiz is recognition, so a lesson offering only one tests the weak form and reports it as retrieval.
29
44
 
@@ -33,6 +48,8 @@ Explaining the material to somebody who lacks it makes the learner produce the w
33
48
  - Name the audience the explanation is for, since an explanation with no reader has no floor to sit above
34
49
  - Record what the explanation left out under what the learner got wrong. A missed production and a missed selection are both retrieval failures, and two sections would split one placement input.
35
50
 
51
+ Nestojko et al. 2014 found that expecting to teach produced fuller and better organized recall. Its participants never taught, so the finding backs framing the ask as teaching.
52
+
36
53
  ## Spacing
37
54
 
38
55
  The same total time spread across days beats the same time in one sitting. Forgetting between sessions is the mechanism rather than the cost, because effortful retrieval is what strengthens the trace.
@@ -41,10 +58,14 @@ The same total time spread across days beats the same time in one sitting. Forge
41
58
  - Widen the gap each time a topic is retrieved correctly, and shorten it after a miss
42
59
  - Name what to revisit and when in the learning record, so the next session has a schedule rather than a guess
43
60
 
61
+ Cepeda et al. 2006 found the best gap grew with how long the material had to last, and the IES practice guide recommends spacing at classroom scale. Forgetting as the mechanism, and widening or shortening the gap after each retrieval, are house judgment.
62
+
44
63
  The ladder is 1, 3, 7, 16, and 35 days. A topic retrieved unaided moves up a rung and a miss drops it back one, held inside the ladder at either end, so a topic the learner keeps missing stays on the shortest gap rather than restarting a sequence.
45
64
 
46
65
  - Apply the ladder as written rather than picking a gap by judgment, since an author told to widen a gap settles on whatever feels right
47
66
 
67
+ The ladder is house judgment. No opened source names a sequence of days or tests a gap that widens after each correct retrieval.
68
+
48
69
  ## Interleaving
49
70
 
50
71
  Mixing related topics within a session beats finishing one before starting the next. Blocked practice inflates in-session performance and hurts what survives it, because the learner stops having to work out which approach a problem calls for.
@@ -53,6 +74,8 @@ Mixing related topics within a session beats finishing one before starting the n
53
74
  - Keep problems in a mixed set close enough that telling them apart is the work
54
75
  - Do not interleave a topic the learner has never seen. Interleaving discriminates between things already known.
55
76
 
77
+ Kornell and Bjork 2008 found interleaved paintings taught each artist's style better, while learners rated blocked study as more effective. The study mixed exemplars of categories, so mixing topics and the unseen-topic clause are house judgment.
78
+
56
79
  ## The zone of proximal development
57
80
 
58
81
  The productive band is what the learner cannot do alone and can do with support. Below it the session is review, and above it the support carries the whole task and nothing transfers.
@@ -62,6 +85,8 @@ The productive band is what the learner cannot do alone and can do with support.
62
85
  - Withdraw support as the learner succeeds, and restore it on a miss rather than repeating the lesson
63
86
  - Where the records show nothing, ask. A guessed starting point misses in both directions.
64
87
 
88
+ This section is house judgment. Vygotsky's account was not opened, so the band rests on how a session picks the next step from the record rather than on a citation.
89
+
65
90
  ## Where difficulty helps and where it hurts
66
91
 
67
92
  Difficulty is not uniformly good. It helps skill acquisition, where the learner is building a procedure they will execute, and it hurts knowledge acquisition, where the learner is taking on facts and structure they do not have yet.
@@ -70,9 +95,11 @@ Difficulty is not uniformly good. It helps skill acquisition, where the learner
70
95
  - Add difficulty once the learner is practicing rather than acquiring: withhold the worked step, vary the surface of the problem, delay the feedback
71
96
  - Never confuse a hard explanation with a hard problem. A confusing explanation adds load that teaches nothing.
72
97
 
98
+ The split between skill and knowledge acquisition is house judgment. The IES guide backs worked examples while a learner acquires a procedure, and Kornell, Hays and Bjork back difficulty at retrieval.
99
+
73
100
  ## Sourcing
74
101
 
75
- Parametric recall is confident where it is wrong, and a learner cannot audit it. Every claim in a lesson traces to something read.
102
+ Parametric recall is confident where it is wrong, and a learner cannot audit it. Every claim in a lesson traces to something read. This section is the toolkit's rule for what a lesson cites rather than a finding about memory.
76
103
 
77
104
  - Read the subject from sources before teaching, and record each one with its link
78
105
  - Mark any claim resting on recall as resting on recall, in the lesson itself
@@ -15,8 +15,8 @@ Any flag skips the confirmation prompt, but the `base` default of `--stack` does
15
15
 
16
16
  ## Governance install
17
17
 
18
- - `canon gov install <stack> [target]` needs the stack under `CANON_NON_INTERACTIVE=1`, else lists the valid names on stderr and exits 1
19
- - `--yes` answers the install confirm with no TTY and no env var. Without it, a headless call refuses and the message names `--yes`. It does not pick a stack.
18
+ - `canon gov install <stack> [target]` needs the stack on a call with no terminal, else lists the valid names on stderr and exits 1
19
+ - A headless call takes Yes at the install confirm, and `--yes` answers it at a terminal too. Neither picks a stack.
20
20
  - It refuses the toolkit root and a missing path
21
21
  - `--add <rules>` with no stack installs into the one positional, or the current directory, keeping the recorded chain. Pass `./node` for a target named like a stack.
22
22
 
@@ -70,14 +70,6 @@ After a rename the new name shows as `missing` when the stamp records a stack, a
70
70
 
71
71
  `canon tooling inject` and `prune-gitignore` apply one stack with no scan or prompt, and the latter prints the number removed on stdout. Use `sync` unless scripting provisioning, and pass `--nested` inside an open frame.
72
72
 
73
- ## Design
74
-
75
- - `canon design install` copies `base.css` to `.claude/design/` and creates no override
76
- - Project overrides live in `.claude/design/project/`, which `design sync` never touches
77
- - `canon design fonts add <file> --family <name>` copies a `woff2`, `woff`, `ttf`, or `otf` face into `project/fonts/` with its `fonts.css` rule, and refuses mismatched bytes as `invalid-font`
78
- - `fonts list --json` flags a missing or out-of-folder file as a `problem`
79
- - `canon sync` skips the domain where `design install` never ran
80
-
81
73
  ## Whole-project sync
82
74
 
83
75
  `canon sync [path]` runs every installed domain sync, then offers a commit and pull request. Headlessly it applies the syncs, refuses the git workflow, reports what it would have made, and exits 0. It refuses a dirty working tree.
@@ -22,18 +22,19 @@ Data goes to stdout. UI and logs go to stderr. Help is the exception and prints
22
22
  - `└` closes the frame on stderr
23
23
  - An error renders as `│ ✗ message` inside the frame, never as a lone line
24
24
  - Help skips the banner and puts `Usage:` directly on `├`
25
+ - A stderr that is not a terminal gets plain lines instead, with the banner and section titles bare and each item behind its mark alone
25
26
 
26
27
  A help request naming an unknown subcommand, under a group taking no operand, writes its refusal to stderr and exits 1.
27
28
 
28
29
  ## JSON and names modes
29
30
 
30
- `--json` and `--names` keep stdout pure data. The frame still renders on stderr, and diagnostics reach stderr in every mode. A JSON refusal carries an action and a reason, so branch on the record rather than on stderr.
31
+ `--json` and `--names` keep stdout pure data. A `--json` run writes no progress to stderr, only its warnings and errors, since diagnostics reach stderr in every mode. A JSON refusal carries an action and a reason, so branch on the record rather than on stderr.
31
32
 
32
33
  A shell profile may wrap `canon` in a function that takes its status from a later command. Where a verb documents a record field, read the field rather than the exit.
33
34
 
34
35
  ## Color
35
36
 
36
- Escape sequences reach a destination that renders them and nowhere else, decided per stream. `NO_COLOR` set to any non-empty value turns color off, and so does a destination that is not a terminal. The frame glyphs and the `✓ ! + - ✗` marks survive both.
37
+ Escape sequences reach a destination that renders them and nowhere else, decided per stream. `NO_COLOR` set to any non-empty value turns color off, and so does a destination that is not a terminal. The `✓ ! + - ✗` marks survive both. The frame glyphs need a terminal.
37
38
 
38
39
  ## Exit discipline
39
40
 
@@ -59,16 +60,16 @@ Discover names at runtime rather than hardcoding them.
59
60
 
60
61
  ## Headless invocation
61
62
 
62
- Set `CANON_NON_INTERACTIVE=1` to refuse every prompt.
63
+ A call with no terminal on stdin is headless and needs no prefix. Each prompt takes its documented default or refuses and names the flag to pass.
63
64
 
64
65
  ```bash
65
- CANON_NON_INTERACTIVE=1 canon init --stack node --skip records /path/to/project
66
- CANON_NON_INTERACTIVE=1 canon sync /path/to/project
67
- CANON_NON_INTERACTIVE=1 canon gov install node --add astro,shadcn /path/to/project
68
- CANON_NON_INTERACTIVE=1 canon gov sync /path/to/project
69
- CANON_NON_INTERACTIVE=1 canon gov build /path/to/project
70
- CANON_NON_INTERACTIVE=1 canon tooling diff astro /path/to/project
71
- CANON_NON_INTERACTIVE=1 canon tooling sync astro /path/to/project --write
66
+ canon init --stack node --skip records /path/to/project
67
+ canon sync /path/to/project
68
+ canon gov install node --add astro,shadcn /path/to/project
69
+ canon gov sync /path/to/project
70
+ canon gov build /path/to/project
71
+ canon tooling diff astro /path/to/project
72
+ canon tooling sync astro /path/to/project --write
72
73
  canon tooling inject base /path/to/project --configs --seeds
73
74
  canon tooling prune-gitignore base /path/to/project
74
75
  canon tooling verify vite-react
@@ -121,7 +121,7 @@ From the registry the walk reports `historyUnavailable`, so check both paths by
121
121
  | ----------------- | ------------------------------------------------------------- |
122
122
  | `task-board` | `board`, `tasks`, `tasks-decline` |
123
123
  | `context-fold` | `context` |
124
- | `canvas-board` | `canvas`, `design` |
124
+ | `canvas-board` | `canvas`, `design` <!-- canon-keep-retired --> |
125
125
  | `docs-sync` | `docs`, `readme` |
126
126
  | `draw-figure` | `figures`, `mermaid` |
127
127
  | `create-rule` | `rule` |
@@ -150,12 +150,17 @@ The wireframes record is retired, and nothing deletes what a project holds.
150
150
 
151
151
  ## Keep or delete the retired product files, your call
152
152
 
153
- The learning workspace, the deck renderer, and the app recorder are retired with their verbs and skills, and nothing deletes what a project holds.
153
+ The learning workspace, deck renderer, app recorder, canvas, and design install are retired with their verbs, and nothing deletes what a project holds.
154
154
 
155
- - `.canon/teach/` holds rendered HTML that opens as it is, so it needs nothing <!-- canon-keep-retired -->
155
+ - `.canon/teach/` holds HTML that opens as it is <!-- canon-keep-retired -->
156
156
  - `.canon/slides/` and a `demos/` folder hold sources nothing renders any more, so delete them once nothing cites them <!-- canon-keep-retired -->
157
+ - Move the `.claude/design/project/` values, `fonts/`, and `fonts.css` to the stylesheet your `canon/DESIGN.md` lead names, then delete `.claude/design/`
158
+
159
+ A reference to a retired skill takes a hand edit.
160
+
157
161
  - Replace a `canon:teach-workspace` reference with `canon:teach-craft` by hand, since `canon migrate skill-names` does not rewrite it <!-- canon-keep-retired -->
158
162
  - Delete a `canon:make-deck`, `canon:script-screencast`, `canon:record-screencast`, `canon:read-frames`, or `canon:video-craft` reference, since none has a successor <!-- canon-keep-retired -->
163
+ - Delete a `canon:canvas-board` reference too. Frameboard, which `canon:pick-by-eye` drives, reads each `.canon/canvas/` folder as a project, so move a kept page under one <!-- canon-keep-retired -->
159
164
 
160
165
  ## Move decisions out of a held architecture record, once
161
166
 
@@ -56,7 +56,7 @@ Keep the `## Scripts` table in `canon/context/development/local-loop.md` current
56
56
  Before the first feature session:
57
57
 
58
58
  1. Fill `canon/REQUIREMENTS.md` with the problem, goals, and non-goals. The seed's 600-word cap gates under `canon context audit`.
59
- 2. For a UI project, write `canon/DESIGN.md` from the seed and name the stylesheet in its lead, or work the direction out with `canon:canvas-board`
59
+ 2. For a UI project, write `canon/DESIGN.md` from the seed and name the stylesheet in its lead, or work the direction out with `canon:pick-by-eye`
60
60
  3. Optionally invoke `canon:draw-figure` for an architecture view. The Mermaid CLI downloads on first use.
61
61
  4. Start the feature loop in [AI workflow](../workflow/ai-workflow.md)
62
62
 
@@ -51,4 +51,4 @@ Try a scenario from [sandbox](../../canon/context/development/sandbox.md) before
51
51
 
52
52
  ## Running sync from an agent session
53
53
 
54
- `canon sync .` applies every domain sync, then offers a commit and pull request that needs a terminal. Under `CANON_NON_INTERACTIVE=1` the syncs apply, the git step is refused, and the command exits 0. Commit yourself. Sync refuses a dirty working tree, and `canon sync --check .` does not.
54
+ `canon sync .` applies every domain sync, then offers a commit and pull request that needs a terminal. With no terminal on stdin the syncs apply, the git step is refused, and the command exits 0. Commit yourself. Sync refuses a dirty working tree, and `canon sync --check .` does not.
@@ -25,7 +25,6 @@ Groups run in the order a project meets them. Every name `canon claude skills li
25
25
  | `canon:plan-groundwork` | The state is unmeasured and approaches compete |
26
26
  | `canon:decision-escalate` | Open decisions turn on your preference |
27
27
  | `canon:pick-by-eye` | The call is taste, wanting candidates side by side |
28
- | `canon:canvas-board` | A direction should be drawn as editable frames |
29
28
  | `canon:task-board` | A decided item needs a file on the board |
30
29
  | `canon:plan-feature` | The approach is settled and needs a plan |
31
30
  | `canon:codebase-layout` | A change adds a file and needs a folder |
@@ -13,14 +13,11 @@ Three tiers run from prose-only design docs to a graphical source of truth, and
13
13
  The default. `canon/DESIGN.md` holds visual intent as one Overview paragraph, at most three one-line rules a section, and a table naming each color and shape role, with a lead naming the stylesheet. Claude Code alone suffices, and [`test-craft`](../../claude/skills/test-craft/SKILL.md) says which layer a Playwright journey belongs at.
14
14
 
15
15
  - The seed is `tooling/claude/seeds/canon/DESIGN.md`, and its column headers stay verbatim
16
- - `canon design render` previews it in `.canon/tmp/render/design/`
17
- - `canon design install` copies a neutral base to `.claude/design/base.css`, so override values in `.claude/design/project/`. See `canon/context/features/design.md`.
18
16
 
19
17
  These skills cover the tier:
20
18
 
21
19
  - `canon:ui-checklist`, `canon:ux-audit`, and `canon:ux-measure` review and measure a UI
22
- - `canon:pick-by-eye` drafts candidates as frames on the canvas and takes your pick
23
- - `canon:canvas-board` works a direction out as HTML frames you edit in the browser, and hands the pick on
20
+ - `canon:pick-by-eye` drafts candidates as frames on a [Frameboard](https://www.npmjs.com/package/frameboard) board and takes your pick
24
21
  - `canon:design-record` lands a pick in `canon/design/` and carries its values into `canon/DESIGN.md`
25
22
  - `canon:design-identity` drafts a logo mark and social card
26
23