@erclx/canon 5.78.0 → 5.80.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 (104) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/claude/.claude-plugin/plugin.json +1 -1
  3. package/claude/skills/app-drive/REQUIREMENT.md +12 -0
  4. package/claude/skills/app-drive/SKILL.md +44 -8
  5. package/claude/skills/app-drive/references/config.md +18 -8
  6. package/claude/skills/app-drive/references/drive-record.md +4 -0
  7. package/claude/skills/auto-ship/REQUIREMENT.md +1 -1
  8. package/claude/skills/auto-ship/SKILL.md +5 -4
  9. package/claude/skills/auto-ship/references/draft-mark.md +33 -15
  10. package/claude/skills/auto-ship/references/failure-recovery.md +4 -2
  11. package/claude/skills/canon-cli/SKILL.md +13 -10
  12. package/claude/skills/design-pick/SKILL.md +8 -0
  13. package/claude/skills/design-pick/references/design-config.md +9 -6
  14. package/claude/skills/design-references/REQUIREMENT.md +32 -0
  15. package/claude/skills/design-references/SKILL.md +120 -0
  16. package/claude/skills/design-references/references/films.md +90 -0
  17. package/claude/skills/design-references/references/sites.md +36 -0
  18. package/claude/skills/design-taste/SKILL.md +16 -4
  19. package/claude/skills/design-taste/references/adopted.md +5 -1
  20. package/claude/skills/design-taste/references/kinds.md +1 -0
  21. package/claude/skills/design-taste/references/preflight.md +27 -1
  22. package/claude/skills/design-taste/references/tells.md +2 -0
  23. package/claude/skills/git-followup/SKILL.md +1 -0
  24. package/claude/skills/git-pr/REQUIREMENT.md +2 -0
  25. package/claude/skills/git-pr/SKILL.md +2 -0
  26. package/claude/skills/git-pr/references/final-command.md +34 -2
  27. package/claude/skills/git-pr/references/pr.md +1 -1
  28. package/claude/skills/git-ship/REQUIREMENT.md +2 -2
  29. package/claude/skills/git-ship/SKILL.md +16 -11
  30. package/claude/skills/git-ship/references/ci-watch.md +28 -4
  31. package/claude/skills/markdown-craft/references/markdown.md +4 -4
  32. package/claude/skills/plan-feature/references/plan.md +2 -0
  33. package/claude/skills/review-address/SKILL.md +2 -1
  34. package/claude/skills/review-pr/references/key-changes.md +2 -1
  35. package/claude/skills/review-ui/references/driving.md +33 -1
  36. package/claude/skills/role-orchestrator/REQUIREMENT.md +1 -1
  37. package/claude/skills/role-orchestrator/SKILL.md +2 -2
  38. package/claude/skills/role-orchestrator/references/orchestrator-hand-launch.md +2 -0
  39. package/claude/skills/role-orchestrator/references/orchestrator-handback.md +1 -1
  40. package/claude/skills/role-orchestrator/references/orchestrator-limit-stops.md +47 -0
  41. package/claude/skills/role-orchestrator/references/orchestrator-sweep.md +3 -1
  42. package/claude/skills/role-worker/SKILL.md +1 -1
  43. package/claude/skills/search-craft/REQUIREMENT.md +3 -3
  44. package/claude/skills/search-craft/SKILL.md +12 -1
  45. package/claude/skills/target-scaffold/REQUIREMENT.md +31 -0
  46. package/claude/skills/target-scaffold/SKILL.md +44 -0
  47. package/claude/skills/target-setup/SKILL.md +5 -1
  48. package/claude/skills/task-board/SKILL.md +1 -0
  49. package/claude/skills/task-board/references/tasks.md +1 -0
  50. package/claude/skills/ui-checklist/SKILL.md +5 -1
  51. package/claude/skills/ui-craft/SKILL.md +9 -9
  52. package/claude/skills/ui-craft/references/adopted.md +4 -2
  53. package/claude/skills/ui-craft/references/capture.md +8 -0
  54. package/claude/skills/ui-craft/references/controls.md +6 -0
  55. package/claude/skills/ui-craft/references/motion.md +6 -0
  56. package/claude/skills/ui-film/references/take-craft.md +2 -0
  57. package/docs/agents/output-shape.md +2 -1
  58. package/docs/target/projects.md +2 -2
  59. package/docs/workflow/ai-workflow.md +1 -1
  60. package/docs/workflow/parallel-features.md +2 -1
  61. package/docs/workflow/skill-map.md +7 -5
  62. package/docs/workflow/visual-design-workflow.md +4 -0
  63. package/governance/ledger/skills/design-references/SKILL.md +38 -0
  64. package/governance/ledger/skills/design-taste/SKILL.md +36 -30
  65. package/governance/ledger/skills/design-taste/kinds.md +1 -0
  66. package/governance/ledger/skills/design-taste/tells.md +22 -20
  67. package/governance/ledger/skills/search-craft/SKILL.md +6 -0
  68. package/governance/ledger/skills/ui-craft/capture.md +10 -0
  69. package/governance/ledger/skills/ui-craft/controls.md +8 -0
  70. package/governance/ledger/skills/ui-craft/motion.md +9 -1
  71. package/package.json +3 -3
  72. package/src/capture/render.ts +154 -2
  73. package/src/capture/sections.ts +257 -0
  74. package/src/claude/cases/misc.ts +5 -0
  75. package/src/claude/cases/setup.ts +7 -0
  76. package/src/commands/capture.ts +149 -4
  77. package/src/commands/pr.ts +138 -15
  78. package/src/commands/sessions.ts +88 -6
  79. package/src/commands/tasks.ts +41 -2
  80. package/src/commands/tooling.ts +72 -0
  81. package/src/git/files.ts +5 -2
  82. package/src/indexes/frontmatter.ts +27 -6
  83. package/src/indexes/render.ts +21 -3
  84. package/src/markdown/colons.ts +14 -4
  85. package/src/markdown/heading-case.ts +9 -2
  86. package/src/pr/bijection.ts +8 -0
  87. package/src/pr/evidence.ts +38 -9
  88. package/src/pr/health.ts +63 -15
  89. package/src/pr/links.ts +160 -0
  90. package/src/pr/local.ts +17 -4
  91. package/src/pr/paths.ts +20 -2
  92. package/src/sessions/stop.ts +145 -0
  93. package/src/sessions/transfer/bundle.ts +1 -1
  94. package/src/take/encode.ts +16 -42
  95. package/src/take/frame-clock.ts +46 -0
  96. package/src/take/perform.ts +29 -4
  97. package/src/take/screencast.ts +114 -11
  98. package/src/tasks/holders.ts +198 -0
  99. package/src/tasks/validate.ts +148 -0
  100. package/src/tooling/list.ts +3 -0
  101. package/src/tooling/scaffold.ts +193 -0
  102. package/tooling/cloudflare/manifest.toml +1 -1
  103. package/tooling/cloudflare/reference.md +8 -0
  104. /package/src/sessions/{transfer/transcript.ts → transcript.ts} +0 -0
@@ -36,8 +36,8 @@ To develop against a checkout, run `claude --plugin-dir <toolkit>/claude`.
36
36
 
37
37
  ## Scaffold
38
38
 
39
- 1. Run the framework's own scaffold if the project needs one, such as `bun init` or `npm create vite`
40
- 2. Invoke `canon:target-setup` in Claude Code. It detects the stack, previews the chain with the opt-in rules `canon gov detect` proposes, and runs it on your confirmation.
39
+ 1. In an empty folder, invoke `canon:target-scaffold`. It asks for the stack, runs the stack's starter, and hands off to `canon:target-setup`.
40
+ 2. Otherwise invoke `canon:target-setup` in Claude Code. It detects the stack, previews the chain with the opt-in rules `canon gov detect` proposes, and runs it on your confirmation.
41
41
 
42
42
  The chain runs these phases:
43
43
 
@@ -57,7 +57,7 @@ Run independent features in parallel, one worktree and one session each. See [pa
57
57
 
58
58
  On a mature stack, approve the plan and invoke `canon:auto-ship` to implement, verify, and ship in one session.
59
59
 
60
- - It stops on a verify failure after one fix attempt, or on a hook failure, and you resume with `/git-ship`
60
+ - It stops on a verify failure after one fix attempt, or on a hook failure, and you resume with `/git-ship --draft`, which keeps the pull request a draft
61
61
  - Skip it for auth, migrations, security-sensitive changes, or an uncertain plan
62
62
 
63
63
  ### Review
@@ -55,7 +55,8 @@ Merge order matters only when two branches touch the same file. Expect to rebase
55
55
 
56
56
  - A row's cell count must match its header, and a `## Needs a plan` row stating its position is checked against where it sits
57
57
  - Every plan pointer resolves, every task file is named once, and every ready row names its files
58
- - A parked row is reported when its cited task reached the trunk, whether the cell links it or names its bare label
58
+ - A task file whose frontmatter block will not parse as YAML is reported with the parser's message, as with a lone apostrophe inside the single-quoted title
59
+ - A parked row is reported when its cited task reached the trunk, whether the cell links it or names its bare label, and with `--live` when a live session or an open pull request holds it
59
60
  - A group header must be the columns the group owns, a `Touches` cell must match its plan, and a `Waiting on` cell renders at most 120 characters
60
61
 
61
62
  `canon:task-board` creates a task file, and `canon:task-complete` marks outcomes. The `post-merge` hook archives the task a merged pull request closed, with its plan, and a `post-rewrite` hook does the same for a rebase pull. Both archive a closed task whose merge carried a PR number, and a slice merged before then moves only its own plan.
@@ -10,10 +10,11 @@ Groups run in the order a project meets them. Every name `canon claude skills li
10
10
 
11
11
  ## Set up a project
12
12
 
13
- | Skill | When to use |
14
- | -------------------- | --------------------------------------------- |
15
- | `canon:target-setup` | On a fresh scaffold, to run the install chain |
16
- | `canon:deploy-app` | When a project is ready to publish |
13
+ | Skill | When to use |
14
+ | ----------------------- | ------------------------------------------------- |
15
+ | `canon:target-scaffold` | In an empty folder, to start a project on a stack |
16
+ | `canon:target-setup` | On a fresh scaffold, to run the install chain |
17
+ | `canon:deploy-app` | When a project is ready to publish |
17
18
 
18
19
  ## Decide what to build
19
20
 
@@ -26,6 +27,7 @@ Groups run in the order a project meets them. Every name `canon claude skills li
26
27
  | `canon:plan-groundwork` | The state is unmeasured and approaches compete |
27
28
  | `canon:decision-escalate` | Open decisions turn on your preference |
28
29
  | `canon:proposal-critique` | A proposal needs questioning before it is built |
30
+ | `canon:design-references` | A design round has no real site to look at |
29
31
  | `canon:design-pick` | The call is taste, wanting candidates side by side |
30
32
  | `canon:task-board` | A decided item needs a file on the board |
31
33
  | `canon:plan-feature` | The approach is settled and needs a plan |
@@ -44,7 +46,7 @@ Groups run in the order a project meets them. Every name `canon claude skills li
44
46
  | `canon:deprecation-migration` | Deleting or replacing code something may call |
45
47
  | `canon:code-craft` | Before writing a function, class, or module |
46
48
  | `canon:review-craft` | Reviewing a change |
47
- | `canon:search-craft` | Before searching outside the project |
49
+ | `canon:search-craft` | Before searching outside or quoting a source |
48
50
  | `canon:systematic-debugging` | A test fails or a bug surfaces |
49
51
  | `canon:design-taste` | Drafting or judging an interface |
50
52
  | `canon:ui-craft` | Building or judging a component's behavior |
@@ -75,10 +75,14 @@ A close posts as `## UI review closed`. The reviewers lift the draft mark on the
75
75
 
76
76
  Most projects author design in the loop above and need nothing more. Start with `canon:design-pick`, which drafts candidates as frames on a [Frameboard](https://www.npmjs.com/package/frameboard) board and takes your pick, then record the pick with `canon:design-record`. `canon:design-identity` drafts a logo mark and social card the same way.
77
77
 
78
+ - Run `canon:design-references` first when a round has nothing real to look at, with a site address or bare to capture the project's list and then a default one.
79
+ - It fills a `references` page on the same board with section shots at each width, a filmed scroll, and a few hovers, each frame naming its source.
80
+
78
81
  A pick round drafts on `.canon/board/` unless the project names another board in `canon/config/design.toml`.
79
82
 
80
83
  - Set `board` when your design sync reads another Frameboard board, so the picked frame lands without a redraw.
81
84
  - Leave `project` unset to keep rounds in their own `picks` project on that board.
85
+ - Set `references` to an array of site addresses to replace the default list `canon:design-references` captures when you name no site.
82
86
 
83
87
  A graphical tool earns its place when design is the product, a designer owns it, and it changes more often than code. Then the tool is the source of truth, and `canon/DESIGN.md` carries a top note naming the upstream project.
84
88
 
@@ -0,0 +1,38 @@
1
+ ---
2
+ title: Design references skill ledger
3
+ description: Sources for claude/skills/design-references/SKILL.md, being the copy-structure rule, the DESIGN.md collection and its license, and the capture and film decisions behind the steps
4
+ ---
5
+
6
+ # Design references skill ledger
7
+
8
+ The field is design practice and content licensing. A reference library's own terms carry where copying stops, and the community DESIGN.md collection's license carries what a run may fetch and read. The capture and film steps rest on measurements a groundwork track took against four live sites, so their rows are house choices naming the failure each prevents.
9
+
10
+ The skill is not a practice skill, so this ledger cites the rules a reader would contest rather than every bullet. Steps that call a verb route to it and take no row.
11
+
12
+ ## What a draft may take
13
+
14
+ | Bullet | Source | Read |
15
+ | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- |
16
+ | Take layout, rhythm, and shape | [Mobbin MCP](https://mobbin.com/mcp): "Do not copy protected designs, branding, text, or assets verbatim." | 2026-11-08 |
17
+ | Never another product's text or marks | [Mobbin MCP](https://mobbin.com/mcp): the same line, read as the boundary a reference library sets for a draft drawn from it | 2026-11-08 |
18
+ | Never a value named as a value | House choice: a draft taking another site's colors, sizes, and fonts ships that site's brand, and a value written into a caption is copied by the next arm that reads it | 2026-11-08 |
19
+ | Name the source on every frame | House choice: a frame with no source on a board of designs reads as a design, so a later round lands a reference in the record as though the project drew it | 2026-11-08 |
20
+
21
+ ## Name what the shots show
22
+
23
+ | Bullet | Source | Read |
24
+ | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- |
25
+ | The community collection | [VoltAgent awesome-design-md, License](https://github.com/VoltAgent/awesome-design-md/blob/fcc70284932276d085f01ef9f83edde90b1258cb/README.md#license): MIT, and "The extracted design tokens represent publicly visible CSS values." | 2026-11-08 |
26
+ | Vocabulary alone, no value | [VoltAgent awesome-design-md, License](https://github.com/VoltAgent/awesome-design-md/blob/fcc70284932276d085f01ef9f83edde90b1258cb/README.md#license): "We do not claim ownership of any site's visual identity." The tokens stay the site's brand, so a run reads names only | 2026-11-08 |
27
+ | Pinned commit, bumped by hand | House choice: a moving head changes the vocabulary between two runs of one site, so two references pages read in different words. The pin is the head on the read date | 2026-11-08 |
28
+ | An absent file never stops it | House choice: the collection covers about eighty sites, so most sites an operator names have no file, and a run stopping there captures nothing | 2026-11-08 |
29
+
30
+ ## Capture and film
31
+
32
+ | Bullet | Source | Read |
33
+ | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
34
+ | One shot per section | House choice: a full-page image of a long site cannot be scanned, and sections cut where a designer would name them came back on Notion, Vercel, and Linear in a groundwork spike | 2026-11-08 |
35
+ | Film a scroll rather than trust a still | House choice: a still at one scroll position painted Notion's scroll-linked logo strip over its hero in a groundwork spike, and a filmed scroll showed it where a visitor sees it | 2026-11-08 |
36
+ | Hovers at desktop alone | House choice: a phone has no hover, and a mobile session reported `(hover: hover)` false in a groundwork spike | 2026-11-08 |
37
+ | One hover per take | House choice: a take refuses whole on one missing target, so a hover picked from a snapshot that misses would otherwise cost every film beside it | 2026-11-08 |
38
+ | No browser script of its own | House choice: a fix to how a page is shot lands once in `canon capture` or `canon take` rather than in every session's script | 2026-11-08 |
@@ -5,35 +5,39 @@ description: Sources for claude/skills/design-taste/SKILL.md, one row per bullet
5
5
 
6
6
  # Design taste skill ledger
7
7
 
8
- The field is visual design judgment. Jesse James Garrett's planes carry the layer order, the Nielsen Norman Group carries redesign strategy and tone, and Josh Comeau carries shadow lighting. The ten defaults are catalog observations, as in the `tells.md` ledger, recording model output and never cited as an authority. `## What this delegates` routes, so it takes no table.
8
+ The field is visual design judgment. Garrett's planes carry the layer order, NN/g carries redesign, tone, and control consistency, Apple carries motion, and Comeau carries shadow lighting. The ten defaults are catalog observations, as in the `tells.md` ledger, recording model output and never cited as an authority. `## What this delegates` routes, so it takes no table.
9
9
 
10
- No outside authority takes a side on the four grey-box rules, three layer rules, the focus ring lock, or the greenfield mode. Each of those nine rows is a house choice naming the failure it prevents.
10
+ No outside authority takes a side on the four grey-box rules, four layer rules, the focus ring lock, or the greenfield mode. Each of those ten rows is a house choice naming the failure it prevents. The row leading story and content cites Garrett for the order and names its in-round half as a house choice.
11
11
 
12
12
  ## The defaults you are reaching past
13
13
 
14
- | Bullet | Source | Read |
15
- | ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
16
- | Three equal cards | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Three equal card columns as feature row. This is the most generic AI layout." | 2026-10-24 |
17
- | The centered hero | Catalog observation, [Taste-Skill tells](https://github.com/leonxlnx/taste-skill/blob/main/skills/taste-skill/references/tells.md): "Centred headline, subtitle, two buttons, screenshot below" | 2026-10-24 |
18
- | The violet-to-blue accent | Catalog observation, [Taste-Skill tells](https://github.com/leonxlnx/taste-skill/blob/main/skills/taste-skill/references/tells.md): "Violet / indigo gradients on hero, buttons and glows" are banned, reached past with "flat colour" | 2026-10-24 |
19
- | Numbered labels | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): "Step 1 / Step 2 / Step 3" is banned, since "The actual step content is the label" | 2026-10-24 |
20
- | The scroll cue | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): "Scroll cues are banned." | 2026-10-24 |
21
- | A dot before every item | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): a dot is "Only acceptable when conveying real semantic state" | 2026-10-24 |
22
- | A glow for elevation | Catalog observation, [Impeccable craft floor](https://github.com/pbakaus/impeccable/blob/main/skill/reference/craft-floor.md): "shadows carry an offset and a soft blur. A zero-offset colored halo is decoration." | 2026-10-24 |
23
- | A screenshot built of shapes | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): "NO div-based fake product UI in the hero" | 2026-10-24 |
24
- | Placeholder that announces | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Placeholder company names like "Acme Corp"", replaced with "contextual, believable brand names" | 2026-10-24 |
25
- | Warm verbs over meaning | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Never use "Elevate", "Seamless", "Unleash"", and "Write plain, specific language" | 2026-10-24 |
14
+ | Bullet | Source | Read |
15
+ | ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
16
+ | Three equal cards | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Three equal card columns as feature row. This is the most generic AI layout." | 2026-10-24 |
17
+ | The centered hero | Catalog observation, [Taste-Skill tells](https://github.com/leonxlnx/taste-skill/blob/main/skills/taste-skill/references/tells.md): "Centred headline, subtitle, two buttons, screenshot below" | 2026-10-24 |
18
+ | The violet-to-blue accent | Catalog observation, [Taste-Skill tells](https://github.com/leonxlnx/taste-skill/blob/main/skills/taste-skill/references/tells.md): "Violet / indigo gradients on hero, buttons and glows" are banned, reached past with "flat colour" | 2026-10-24 |
19
+ | Numbered labels | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): "Step 1 / Step 2 / Step 3" is banned, since "The actual step content is the label" | 2026-10-24 |
20
+ | The scroll cue | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): "Scroll cues are banned." | 2026-10-24 |
21
+ | A dot before every item | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): a dot is "Only acceptable when conveying real semantic state" | 2026-10-24 |
22
+ | A glow for elevation | Catalog observation, [Impeccable craft floor](https://github.com/pbakaus/impeccable/blob/main/skill/reference/craft-floor.md): "shadows carry an offset and a soft blur. A zero-offset colored halo is decoration." | 2026-10-24 |
23
+ | A screenshot built of shapes | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): "NO div-based fake product UI in the hero" | 2026-10-24 |
24
+ | Placeholder that announces | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Placeholder company names like "Acme Corp"", replaced with "contextual, believable brand names", and "Lorem Ipsum. Never use placeholder latin text. Write real draft copy." | 2026-10-24 |
25
+ | Warm verbs over meaning | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Never use "Elevate", "Seamless", "Unleash"", and "Write plain, specific language" | 2026-10-24 |
26
26
 
27
27
  ## The layers, and the order they settle
28
28
 
29
- | Bullet | Source | Read |
30
- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- |
31
- | A higher layer over a broken lower one | [Garrett, The Elements of User Experience, ch. 2](http://www.jjg.net/elements/pdf/elements_ch02.pdf): "the choices available to us on each plane are constrained by the decisions we make about issues on the planes below it" | 2026-10-24 |
32
- | A lower layer through a finished one | House choice: a finished palette, type, and imagery hide a weak composition or layout, so the round judges the wrong layer and passes it | 2026-10-24 |
33
- | A round varies one layer | House choice: a round varying several layers yields a pick that cannot say which difference decided it, so the next round repeats the question | 2026-10-24 |
34
- | Never settle a higher layer first | [Garrett, The Elements of User Experience, ch. 2](http://www.jjg.net/elements/pdf/elements_ch02.pdf): "Each plane is dependent on the planes below it." | 2026-10-24 |
35
- | Real copy before the composition sets | House choice: a composition settled against stand-in copy breaks once real copy of another length and tone runs through it | 2026-10-24 |
36
- | Check the layers below the complaint | [Garrett, The Elements of User Experience, ch. 2](http://www.jjg.net/elements/pdf/elements_ch02.pdf): "When the choices we make don't align with those above and below, projects often derail" | 2026-10-24 |
29
+ | Bullet | Source | Read |
30
+ | -------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
31
+ | A higher layer over a broken lower one | [Garrett, The Elements of User Experience, ch. 2](http://www.jjg.net/elements/pdf/elements_ch02.pdf): "the choices available to us on each plane are constrained by the decisions we make about issues on the planes below it" | 2026-10-24 |
32
+ | A lower layer through a finished one | House choice: a finished palette, type, and imagery hide a weak composition or layout, so the round judges the wrong layer and passes it | 2026-10-24 |
33
+ | A round varies one layer | House choice: a round varying several layers yields a pick that cannot say which difference decided it, so the next round repeats the question | 2026-10-24 |
34
+ | Never settle a higher layer first | [Garrett, The Elements of User Experience, ch. 2](http://www.jjg.net/elements/pdf/elements_ch02.pdf): "Each plane is dependent on the planes below it." | 2026-10-24 |
35
+ | Story and content lead, in words | [Garrett, The Elements of User Experience, ch. 2](http://www.jjg.net/elements/pdf/elements_ch02.pdf): "decisions on the strategy plane will have a sort of "ripple effect" all the way up the chain." Settling them inside the requested round is a house choice, since words drawn as arms give a pick no visual difference to compare | 2026-11-08 |
36
+ | Check the layers below the complaint | [Garrett, The Elements of User Experience, ch. 2](http://www.jjg.net/elements/pdf/elements_ch02.pdf): "When the choices we make don't align with those above and below, projects often derail" | 2026-10-24 |
37
+ | The story settles once per page | [Garrett, The Elements of User Experience, ch. 2](http://www.jjg.net/elements/pdf/elements_ch02.pdf): strategy covers "what the people running the site want to get out of it but what the users want to get out of the site as well" | 2026-11-08 |
38
+ | An arc only where the kind requires it | House choice: an arc demanded of an application surface orders tools as an argument nobody reads, while a marketing page with none orders its claims by template | 2026-11-08 |
39
+ | Sort a fact by deleting its section | House choice: a page-wide fact written into each card drifts between sections, so the voice reads differently in the seventh section than in the first | 2026-11-08 |
40
+ | One content card per section | [Garrett, The Elements of User Experience, ch. 2](http://www.jjg.net/elements/pdf/elements_ch02.pdf): "scope takes the form of content requirements: a description of the various content elements that will be required." | 2026-11-08 |
37
41
 
38
42
  ## Grey-box when judging layers 1 to 4
39
43
 
@@ -46,14 +50,16 @@ No outside authority takes a side on the four grey-box rules, three layer rules,
46
50
 
47
51
  ## Lock what must not vary across a surface
48
52
 
49
- | Bullet | Source | Read |
50
- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- |
51
- | One accent | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "More than one accent color. Pick one. Remove the rest." | 2026-10-24 |
52
- | One radius system | Catalog observation, [Taste-Skill tells](https://github.com/leonxlnx/taste-skill/blob/main/skills/taste-skill/references/tells.md): "One medium border radius (12–16px) on everything" is reached past with "Square or fully round, chosen once" | 2026-10-24 |
53
- | One theme | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "A single dark-background section breaking an otherwise light page looks like a copy-paste accident." | 2026-10-24 |
54
- | One copy register | [NN/g, The Four Dimensions of Tone of Voice](https://www.nngroup.com/articles/tone-of-voice-dimensions/): "Keep your brand personality consistent", the part that backs one register per composition | 2026-10-24 |
55
- | One light source | [Comeau, Designing Beautiful Shadows in CSS](https://www.joshwcomeau.com/css/designing-shadows/): "we should decide on a single light source for all elements on the page", and black shadow "also desaturates it quite a bit" | 2026-10-24 |
56
- | One focus ring weight | House choice: a focus ring varying by component reads as several products on one surface. The `ui-craft` skill owns the visibility floor | 2026-10-24 |
53
+ | Bullet | Source | Read |
54
+ | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
55
+ | One accent | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "More than one accent color. Pick one. Remove the rest." | 2026-10-24 |
56
+ | One radius system | Catalog observation, [Taste-Skill tells](https://github.com/leonxlnx/taste-skill/blob/main/skills/taste-skill/references/tells.md): "One medium border radius (12–16px) on everything" is reached past with "Square or fully round, chosen once" | 2026-10-24 |
57
+ | One theme | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "A single dark-background section breaking an otherwise light page looks like a copy-paste accident." | 2026-10-24 |
58
+ | One copy register | [NN/g, The Four Dimensions of Tone of Voice](https://www.nngroup.com/articles/tone-of-voice-dimensions/): "Keep your brand personality consistent", the part that backs one register per composition | 2026-10-24 |
59
+ | One light source | [Comeau, Designing Beautiful Shadows in CSS](https://www.joshwcomeau.com/css/designing-shadows/): "we should decide on a single light source for all elements on the page", and black shadow "also desaturates it quite a bit" | 2026-10-24 |
60
+ | One focus ring weight | House choice: a focus ring varying by component reads as several products on one surface. The `ui-craft` skill owns the visibility floor | 2026-10-24 |
61
+ | One control style per job | [NN/g, Consistency and Standards](https://www.nngroup.com/articles/consistency-and-standards/): "they should use the same patterns everywhere inside the system" | 2026-11-08 |
62
+ | One motion model per kind | [Apple HIG, Motion](https://developer.apple.com/design/human-interface-guidelines/motion): "Many system components automatically include motion, letting you offer familiar and consistent experiences throughout your app or game." The three model names are a house choice, since the source names none | 2026-11-08 |
57
63
 
58
64
  ## Working on something that already exists
59
65
 
@@ -15,6 +15,7 @@ Impeccable's three mode references sort a surface by what the visitor came to do
15
15
  | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
16
16
  | Optimizes for comprehension | Catalog observation, [Impeccable persuade mode](https://github.com/pbakaus/impeccable/blob/main/skill/reference/mode-persuade.md): "the opening must make the offer intelligible and desirable, expose a clear action" | 2026-10-24 |
17
17
  | Composition carries the weight | House choice: a palette round run against a flat composition changes nothing a stranger notices, since section order is what they judge first | 2026-10-24 |
18
+ | The story carries an arc | House choice: a page with no stated arc orders its sections by template, so a stranger meets the proof before the claim it backs | 2026-11-08 |
18
19
  | Vary the section shape | Catalog observation, [Taste-Skill tells](https://github.com/leonxlnx/taste-skill/blob/main/skills/taste-skill/references/tells.md): "Every section the same layout family" is a structural tell, reached past with "Different composition per section" | 2026-10-24 |
19
20
  | Low density | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Dense layouts work for data dashboards, not for marketing pages." | 2026-10-24 |
20
21
  | Every claim names a real thing | Catalog observation, [Impeccable persuade mode](https://github.com/pbakaus/impeccable/blob/main/skill/reference/mode-persuade.md): the opening must "demonstrate something only this product can prove" | 2026-10-24 |
@@ -21,29 +21,31 @@ The main catalog is Taste-Skill's v2 experimental skill, which its author moved
21
21
 
22
22
  ## Composition
23
23
 
24
- | Bullet | Source | Read |
25
- | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
26
- | The three equal cards | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Three equal card columns as feature row. This is the most generic AI layout." | 2026-10-24 |
27
- | One section shape repeated | Catalog observation, [Taste-Skill tells](https://github.com/leonxlnx/taste-skill/blob/main/skills/taste-skill/references/tells.md): "Every section the same layout family" is a structural tell, reached past with "Different composition per section" | 2026-10-24 |
28
- | The centered hero | Catalog observation, [Taste-Skill tells](https://github.com/leonxlnx/taste-skill/blob/main/skills/taste-skill/references/tells.md): "Centred headline, subtitle, two buttons, screenshot below" | 2026-10-24 |
29
- | Decoration as structure | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): "NO crosshair / hairline grid lines as decoration", kept "only when they organize real content" | 2026-10-24 |
30
- | The corner floater | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): "a small explainer paragraph floating with no clear alignment to anything else. That floater is the Tell." | 2026-10-24 |
24
+ | Bullet | Source | Read |
25
+ | --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
26
+ | The three equal cards | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Three equal card columns as feature row. This is the most generic AI layout." | 2026-10-24 |
27
+ | One section shape repeated | Catalog observation, [Taste-Skill tells](https://github.com/leonxlnx/taste-skill/blob/main/skills/taste-skill/references/tells.md): "Every section the same layout family" is a structural tell, reached past with "Different composition per section" | 2026-10-24 |
28
+ | The centered hero | Catalog observation, [Taste-Skill tells](https://github.com/leonxlnx/taste-skill/blob/main/skills/taste-skill/references/tells.md): "Centred headline, subtitle, two buttons, screenshot below" | 2026-10-24 |
29
+ | Decoration as structure | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): "NO crosshair / hairline grid lines as decoration", kept "only when they organize real content" | 2026-10-24 |
30
+ | A figure of identical parts | [Wikipedia, Chartjunk](https://en.wikipedia.org/wiki/Chartjunk), quoting Tufte: "The interior decoration of graphics generates a lot of ink that does not tell the viewer anything new." | 2026-11-08 |
31
+ | The corner floater | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): "a small explainer paragraph floating with no clear alignment to anything else. That floater is the Tell." | 2026-10-24 |
31
32
 
32
33
  ## Content and labels
33
34
 
34
- | Bullet | Source | Read |
35
- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- |
36
- | Enumerated eyebrows | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): generic step labels are banned, since "The actual step content is the label" | 2026-10-24 |
37
- | Poetic section labels | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): "Field notes" and "On our desks" style labels read "as performative-craftsman. Use plain functional labels" | 2026-10-24 |
38
- | Atmospheric strips | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): "NO weather / locale strips" and "NO version footers on marketing pages" | 2026-10-24 |
39
- | Scroll cues | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): "Scroll cues are banned." Readers "know what scroll is." | 2026-10-24 |
40
- | Decorative status dots | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): a dot is "Only acceptable when conveying real semantic state" and "limited to one per page section" | 2026-10-24 |
41
- | Filler verbs | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Never use 'Elevate', 'Seamless', 'Unleash', 'Next-Gen'", and "Write plain, specific language." | 2026-10-24 |
42
- | Placeholder as placeholder | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Generic names like 'John Doe'" and "Placeholder company names like 'Acme Corp'" | 2026-10-24 |
43
- | Invented precision | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): "Fake-precise numbers are flagged", passing only when they "Come from real data" or "Are explicitly labeled as mock" | 2026-10-24 |
44
- | The fake screenshot | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): "NO div-based fake product UI in the hero", which it ranks first among the tells | 2026-10-24 |
45
- | Copy nobody re-read | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): "re-read every visible string on the page", since "AI-generated cute copy is worse than boring copy" | 2026-10-24 |
46
- | What the re-read rewrites | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): the re-read flags a string that is "Grammatically broken", "Has unclear referents", or carries "cute-but-wrong wordplay" | 2026-10-24 |
35
+ | Bullet | Source | Read |
36
+ | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
37
+ | Enumerated eyebrows | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): generic step labels are banned, since "The actual step content is the label" | 2026-10-24 |
38
+ | Poetic section labels | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): "Field notes" and "On our desks" style labels read "as performative-craftsman. Use plain functional labels" | 2026-10-24 |
39
+ | Atmospheric strips | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): "NO weather / locale strips" and "NO version footers on marketing pages" | 2026-10-24 |
40
+ | Scroll cues | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): "Scroll cues are banned." Readers "know what scroll is." | 2026-10-24 |
41
+ | Decorative status dots | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): a dot is "Only acceptable when conveying real semantic state" and "limited to one per page section" | 2026-10-24 |
42
+ | Filler verbs | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Never use 'Elevate', 'Seamless', 'Unleash', 'Next-Gen'", and "Write plain, specific language." | 2026-10-24 |
43
+ | Placeholder as placeholder | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Generic names like 'John Doe'" and "Placeholder company names like 'Acme Corp'" | 2026-10-24 |
44
+ | Template token in a mock | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Lorem Ipsum. Never use placeholder latin text. Write real draft copy." The copied real id is a House choice: in a mock it reads as a reference a reader may follow | 2026-11-08 |
45
+ | Invented precision | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): "Fake-precise numbers are flagged", passing only when they "Come from real data" or "Are explicitly labeled as mock" | 2026-10-24 |
46
+ | The fake screenshot | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): "NO div-based fake product UI in the hero", which it ranks first among the tells | 2026-10-24 |
47
+ | Copy nobody re-read | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): "re-read every visible string on the page", since "AI-generated cute copy is worse than boring copy" | 2026-10-24 |
48
+ | What the re-read rewrites | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): the re-read flags a string that is "Grammatically broken", "Has unclear referents", or carries "cute-but-wrong wordplay" | 2026-10-24 |
47
49
 
48
50
  ## Surface and palette
49
51
 
@@ -45,6 +45,12 @@ The access note's Reddit and X rows record refusals, so they are measurements re
45
45
  | A public API over a summarized page | [Crossref REST API](https://www.crossref.org/documentation/retrieve-metadata/rest-api/): "Our publicly available REST API exposes the scholarly metadata that members and trusted sources deposit with Crossref" | 2026-10-28 |
46
46
  | A plain request rather than a wrapper | [claude-research-stack](https://github.com/aghori3004/claude-research-stack): "The skill talks to the CLIs and MCPs directly, on purpose", listing "No wrapper scripts" among what it leaves out | 2026-10-28 |
47
47
 
48
+ ## Quote what was read
49
+
50
+ | Bullet | Source | Read |
51
+ | ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
52
+ | Quote only what was read | [Caulfield, SIFT (The Four Moves)](https://hapgood.us/2019/06/19/sift-the-four-moves/): "trace the claim, quote, or media back to the source, so you can see it in it's original context" | 2026-11-08 |
53
+
48
54
  ## Access note
49
55
 
50
56
  | Bullet | Source | Read |
@@ -45,6 +45,16 @@ The rule states canon's own evidence procedure for a rendered change, so most ro
45
45
  | State case at one width, driven | House choice: a case driving a menu open tests the state, and repeating it at every layout width multiplies the evidence with no layout to compare, and an initial render reports nothing about a menu that opens, an answer that is chosen, or a rail that tracks scrolling | 2026-10-18 |
46
46
  | Case lives with the surface | House choice: a surface with no case ships uncaptured, and a case left after its surface goes fails every later capture run | 2026-10-18 |
47
47
 
48
+ ## What a moving change owes
49
+
50
+ | Bullet | Source | Read |
51
+ | ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------- |
52
+ | Real input at each width | House choice: on a proximity-snap page, `scrollIntoView` reached section 3 while six spaced wheel notches left `scrollY` at 0, so a scripted scroll passed a page a wheel could not move | 2026-11-08 |
53
+ | Notches at two paces | House choice: on the same page, six notches one call apart stayed at 0 and six notches 50 ms apart reached 522, so each pace catches a stall the other misses | 2026-11-08 |
54
+ | Keyboard through the same | [Understanding Keyboard](https://www.w3.org/WAI/WCAG22/Understanding/keyboard.html): "all functionality of the content is operable through a keyboard interface". Arrow keys and Page Down reached 783 and 1566 on the snap page | 2026-11-08, WCAG 2.2 |
55
+ | Sample at fixed steps | House choice: a read taken only at the end reports where the page settled and hides a notch that moved nothing, which a read after each notch shows | 2026-11-08 |
56
+ | Touch and hover in touch mode | House choice: a desktop session refused a tap and kept `(hover: hover)` true when resized, while a mobile session reported hover false and took the tap | 2026-11-08 |
57
+
48
58
  ## Sharing a capture
49
59
 
50
60
  | Bullet | Source | Read |
@@ -23,9 +23,17 @@ The field is interaction design, and the authorities are the Nielsen Norman Grou
23
23
  | Declare `color-scheme` | [MDN, color-scheme](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/color-scheme): the user agent adapts "The default colors of scrollbars and other interaction UI" and "The default colors of form controls", and the page opts in by declaring it on the `:root` element | 2026-10-23 |
24
24
  | No intermediate flash | [Cumulative Layout Shift](https://web.dev/articles/cls): "Unexpected layout shifts can disrupt the user experience", caused by content "dynamically added to the page before existing content" | 2026-10-18 |
25
25
 
26
+ ## Signifiers
27
+
28
+ | Bullet | Source | Read |
29
+ | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
30
+ | No control look without an action | [Beyond Blue Links](https://www.nngroup.com/articles/clickable-elements/): "Conversely, don't make nonclickable items look like buttons." [Flat UI Elements Attract Less Attention](https://www.nngroup.com/articles/flat-ui-less-attention-cause-uncertainty/): "UIs with weak signifiers required more user effort than strong ones" | 2026-11-08 |
31
+ | Default cursor on decorative chrome | [MDN, cursor](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor): `pointer` is "a pointer that indicates a link", and `default` is "The platform-dependent default cursor" | 2026-11-08 |
32
+
26
33
  ## Hover and focus effects
27
34
 
28
35
  | Bullet | Source | Read |
29
36
  | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------- |
30
37
  | Hover and focus content | [Understanding Content on Hover or Focus](https://www.w3.org/WAI/WCAG22/Understanding/content-on-hover-or-focus.html): additional content is "Dismissible" without moving hover or focus, "Hoverable" so the pointer can move over it, and "Persistent" until "the hover or focus trigger is removed, the user dismisses it, or its information is no longer valid" | 2026-10-23, WCAG 2.2 |
31
38
  | No change of context on focus or input | [Understanding On Focus](https://www.w3.org/WAI/WCAG22/Understanding/on-focus.html): "When any user interface component receives focus, it does not initiate a change of context". [Understanding On Input](https://www.w3.org/WAI/WCAG22/Understanding/on-input.html): changing a setting does not cause one "unless the user has been advised of the behavior before using the component" | 2026-10-23, WCAG 2.2 |
39
+ | Hover behind a hover query | [MDN, hover](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/hover): `none` covers devices where "many mobile devices emulate hovering when the user performs an inconvenient long tap", and `hover` means "The primary input mechanism can conveniently hover over elements." | 2026-11-08 |
@@ -5,7 +5,7 @@ description: Sources for claude/skills/ui-craft/references/motion.md, one row pe
5
5
 
6
6
  # Motion reference ledger
7
7
 
8
- The field is web accessibility, and the authorities are the W3C, through WCAG 2.2 and the ARIA Authoring Practices Guide, and MDN for the media feature.
8
+ The fields are web accessibility, interaction design, and web performance. The W3C, through WCAG 2.2 and the ARIA Authoring Practices Guide, and MDN for the media feature back the accessibility rows. Shneiderman's direct manipulation paper and Material's motion system back reader-paced motion, and web.dev backs the held size.
9
9
 
10
10
  ## Moving content
11
11
 
@@ -15,6 +15,14 @@ The field is web accessibility, and the authorities are the W3C, through WCAG 2.
15
15
  | Halt rotation on focus or hover | [Carousel pattern](https://www.w3.org/WAI/ARIA/apg/patterns/carousel/): a rotating carousel "Stops rotating when keyboard focus enters the carousel" and "whenever the mouse is hovering over the carousel" | 2026-10-18, APG |
16
16
  | Three flashes | [Understanding Three Flashes or Below Threshold](https://www.w3.org/WAI/WCAG22/Understanding/three-flashes-or-below-threshold.html): pages "do not contain anything that flashes more than three times in any one second period" | 2026-10-18, WCAG 2.2 |
17
17
 
18
+ ## Motion the reader drives
19
+
20
+ | Bullet | Source | Read |
21
+ | ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ |
22
+ | Follow the input | [Shneiderman, Direct Manipulation, IEEE Computer 1983](https://www.cs.umd.edu/~ben/papers/Shneiderman1983Direct.pdf): direct manipulation rests on "Rapid, incremental, reversible operations whose impact on the object of interest is immediately visible." | 2026-11-08, IEEE Computer 1983 |
23
+ | Swap at a threshold | [Material Components Android, Motion](https://github.com/material-components/material-components-android/blob/master/docs/theming/Motion.md): the fade through variant will "sequentially fade out and in the outgoing and incoming views, respectively, in order to minimize the visual overlap of these views". Ruling out a blank frame is a House choice: a fade through dips both views toward zero at the seam, so a swap at the threshold keeps one text fully legible at every moment | 2026-11-08, Material |
24
+ | Hold the outer size | [Cumulative Layout Shift](https://web.dev/articles/cls): to animate without shifting layout, "Instead of changing the height and width properties, use transform: scale()" | 2026-11-08, web.dev |
25
+
18
26
  ## Reduced motion
19
27
 
20
28
  | Bullet | Source | Read |
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@erclx/canon",
3
3
  "type": "module",
4
- "version": "5.78.0",
4
+ "version": "5.80.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": {
@@ -75,8 +75,8 @@
75
75
  "astro": "^6.1.9",
76
76
  "husky": "^9.1.7",
77
77
  "micromatch": "^4.0.8",
78
- "oxfmt": "0.75.0",
79
- "oxlint": "1.90.0",
78
+ "oxfmt": "0.76.0",
79
+ "oxlint": "1.91.0",
80
80
  "prettier": "^3.8.1",
81
81
  "prettier-plugin-astro": "^0.14.1",
82
82
  "prettier-plugin-tailwindcss": "^0.8.1",