@erclx/canon 5.62.0 → 5.63.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/claude/.claude-plugin/plugin.json +1 -1
- package/claude/skills/create-skill/references/skill-practice.md +1 -0
- package/claude/skills/design-record/references/design.md +1 -1
- package/claude/skills/design-taste/REQUIREMENT.md +2 -1
- package/claude/skills/design-taste/SKILL.md +6 -5
- package/claude/skills/design-taste/references/adopted.md +136 -8
- package/claude/skills/design-taste/references/craft.md +1 -1
- package/claude/skills/design-taste/references/kinds.md +8 -2
- package/claude/skills/design-taste/references/preflight.md +3 -3
- package/claude/skills/design-taste/references/tells.md +26 -5
- package/claude/skills/plan-feature/SKILL.md +2 -2
- package/claude/skills/plan-feature/references/plan.md +24 -3
- package/claude/skills/review-craft/SKILL.md +1 -1
- package/claude/skills/role-worker/SKILL.md +2 -1
- package/claude/skills/ui-checklist/SKILL.md +1 -1
- package/claude/skills/ui-craft/REQUIREMENT.md +29 -0
- package/claude/skills/ui-craft/SKILL.md +44 -0
- package/{governance/rules/ui → claude/skills/ui-craft/references}/a11y.md +0 -10
- package/claude/skills/ui-craft/references/adopted.md +27 -0
- package/{governance/rules/ui/surface-capture.md → claude/skills/ui-craft/references/capture.md} +0 -10
- package/{governance/rules/ui/ux-controls.md → claude/skills/ui-craft/references/controls.md} +3 -10
- package/claude/skills/ui-craft/references/copy.md +45 -0
- package/{governance/rules/ui → claude/skills/ui-craft/references}/forms.md +0 -9
- package/{governance/rules/ui → claude/skills/ui-craft/references}/keyboard.md +0 -10
- package/{governance/rules/ui → claude/skills/ui-craft/references}/motion.md +0 -10
- package/{governance/rules/ui → claude/skills/ui-craft/references}/pointer.md +0 -10
- package/{governance/rules/ui/ux-completeness.md → claude/skills/ui-craft/references/states.md} +0 -10
- package/claude/skills/ux-audit/SKILL.md +1 -1
- package/claude/skills/write-human/references/adopted.md +4 -1
- package/docs/agents/install-and-sync.md +2 -2
- package/docs/target/migrations.md +3 -3
- package/docs/target/sync.md +3 -2
- package/docs/workflow/skill-map.md +1 -0
- package/docs/workflow/visual-design-workflow.md +2 -2
- package/governance/detect.toml +1 -45
- package/governance/ledger/lib/test-scope.md +1 -1
- package/governance/ledger/{ui → skills/ui-craft}/a11y.md +3 -3
- package/governance/ledger/{ui/surface-capture.md → skills/ui-craft/capture.md} +3 -3
- package/governance/ledger/{ui/ux-controls.md → skills/ui-craft/controls.md} +12 -7
- package/governance/ledger/skills/ui-craft/copy.md +102 -0
- package/governance/ledger/{ui → skills/ui-craft}/forms.md +3 -3
- package/governance/ledger/{ui → skills/ui-craft}/keyboard.md +3 -3
- package/governance/ledger/{ui → skills/ui-craft}/motion.md +3 -3
- package/governance/ledger/{ui → skills/ui-craft}/pointer.md +3 -3
- package/governance/ledger/{ui/ux-completeness.md → skills/ui-craft/states.md} +3 -3
- package/governance/ledger/ui/craft.md +19 -0
- package/governance/renames.toml +17 -3
- package/governance/rules/lib/test-scope.md +1 -1
- package/governance/rules/ui/craft.md +22 -0
- package/governance/splits.toml +0 -2
- package/package.json +1 -1
- package/src/claude/cases/misc.ts +5 -0
- package/src/claude/skills-audit.ts +150 -12
- package/src/commands/claude.ts +5 -0
- package/src/commands/tooling.ts +4 -1
- package/src/gate/measures.ts +4 -3
- package/src/gov/audit.ts +6 -1
- package/src/inventory/subjects.ts +1 -1
- package/src/tooling/package.ts +22 -13
- package/tooling/web/reference.md +3 -1
- package/governance/ledger/ui/copy.md +0 -49
- package/governance/ledger/ui/design-taste.md +0 -19
- package/governance/ledger/ui/interface-casing.md +0 -47
- package/governance/ledger/ui/link-behavior.md +0 -29
- package/governance/rules/ui/copy.md +0 -28
- package/governance/rules/ui/design-taste.md +0 -18
- package/governance/rules/ui/interface-casing.md +0 -29
- package/governance/rules/ui/link-behavior.md +0 -19
- /package/tooling/web/{configs → seeds}/e2e/home.spec.ts +0 -0
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Design taste rule ledger
|
|
3
|
-
description: Sources for governance/rules/ui/design-taste.md, one row per bullet
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Design taste rule ledger
|
|
7
|
-
|
|
8
|
-
The rule is a pointer to the `design-taste` skill, which carries its own sources, so both rows are house choices naming the bug the pointer prevents.
|
|
9
|
-
|
|
10
|
-
## Authority
|
|
11
|
-
|
|
12
|
-
| Bullet | Source | Read |
|
|
13
|
-
| -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
14
|
-
| Load the skill | House choice: a style edit made without the layer order or the coherence locks reaches for a model's defaults, and a second copy of them in the rule drifts from the skill | 2026-10-18 |
|
|
15
|
-
| Report an unresolved skill | House choice: the rule ships with the CLI and the skill with the plugin, so a project holding governance alone would otherwise proceed silently without it | 2026-10-18 |
|
|
16
|
-
|
|
17
|
-
## Declined
|
|
18
|
-
|
|
19
|
-
The rewrite kept both bullets unchanged.
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Interface casing rule ledger
|
|
3
|
-
description: Sources for governance/rules/ui/interface-casing.md, one row per bullet
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Interface casing rule ledger
|
|
7
|
-
|
|
8
|
-
The field is content design, and the authority is the GOV.UK style guide, which sets sentence case for every heading and title. The label count and the scope bullets are canon's own.
|
|
9
|
-
|
|
10
|
-
## Sentence case
|
|
11
|
-
|
|
12
|
-
| Bullet | Source | Read |
|
|
13
|
-
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
14
|
-
| Sentence case | [A to Z of GOV.UK style](https://www.gov.uk/guidance/style-guide/a-to-z-of-gov-uk-style): "Always use sentence case, even in page titles and service names" | 2026-10-18 |
|
|
15
|
-
| Proper nouns keep casing | [A to Z of GOV.UK style](https://www.gov.uk/guidance/style-guide/a-to-z-of-gov-uk-style): "The exceptions to this are proper nouns" | 2026-10-18 |
|
|
16
|
-
|
|
17
|
-
## Uppercase labels
|
|
18
|
-
|
|
19
|
-
| Bullet | Source | Read |
|
|
20
|
-
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- |
|
|
21
|
-
| Label count | House choice: an uppercase eyebrow over every section is the template tell `design-taste` reaches past, and the count makes the cap checkable against a page | 2026-10-18 |
|
|
22
|
-
|
|
23
|
-
## Where it applies
|
|
24
|
-
|
|
25
|
-
| Bullet | Source | Read |
|
|
26
|
-
| ---------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
27
|
-
| Copy outside the globs | House choice: a locale file holds the same rendered strings, so title case there ships with no rule firing on it | 2026-10-18 |
|
|
28
|
-
|
|
29
|
-
## Overriding
|
|
30
|
-
|
|
31
|
-
| Bullet | Source | Read |
|
|
32
|
-
| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
33
|
-
| Depart where needed | House choice: an acronym or brand mark lowered to sentence case misnames it, the same reason GOV.UK keeps "proper nouns" as its one exception | 2026-10-18 |
|
|
34
|
-
|
|
35
|
-
## Declined
|
|
36
|
-
|
|
37
|
-
Every bullet the rewrite removed or reshaped, grouped by why.
|
|
38
|
-
|
|
39
|
-
### Cut without a check
|
|
40
|
-
|
|
41
|
-
- Cut "treat the count as a judgment, since a glob cannot check it", which tells a session nothing it can verify against a line.
|
|
42
|
-
|
|
43
|
-
### Merged or reworded
|
|
44
|
-
|
|
45
|
-
- Folded "treat title case on every heading as a template tell" into the sentence case bullet as its reason.
|
|
46
|
-
- Shortened the uppercase label bullet under 200 characters, keeping the `ceil(sections / 3)` count and the delete remedy.
|
|
47
|
-
- Reworded the scope bullet from a statement of what the rule covers to the directive a session can act on.
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Link behavior rule ledger
|
|
3
|
-
description: Sources for governance/rules/ui/link-behavior.md, one row per bullet
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Link behavior rule ledger
|
|
7
|
-
|
|
8
|
-
The field is interaction design, and the authority is the Nielsen Norman Group's research on new windows and tabs.
|
|
9
|
-
|
|
10
|
-
## Default target
|
|
11
|
-
|
|
12
|
-
| Bullet | Source | Read |
|
|
13
|
-
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- |
|
|
14
|
-
| Same tab, new tab by task | [Opening links in new browser windows and tabs](https://www.nngroup.com/articles/new-browser-windows-and-tabs/): "There is generally one good reason to open a page in a new window, and that is that the user will need to refer to that content in order to complete a task in another window" | 2026-10-18 |
|
|
15
|
-
| No blanket external new tab | [Opening links in new browser windows and tabs](https://www.nngroup.com/articles/new-browser-windows-and-tabs/): "New windows or tabs prevent the use of the Back button" and "can cause disorientation" | 2026-10-18 |
|
|
16
|
-
|
|
17
|
-
## mailto: links
|
|
18
|
-
|
|
19
|
-
| Bullet | Source | Read |
|
|
20
|
-
| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
21
|
-
| `mailto:` same tab | House choice: the link opens the mail client and leaves the page in place, so `target="_blank"` only adds an empty tab the person must close | 2026-10-18 |
|
|
22
|
-
|
|
23
|
-
## Declined
|
|
24
|
-
|
|
25
|
-
Every bullet the rewrite removed or reshaped, grouped by why.
|
|
26
|
-
|
|
27
|
-
### Rewritten to what the source says
|
|
28
|
-
|
|
29
|
-
- Reworded the new tab exception from "a destination that would discard in-progress work" to a page the person must consult while finishing a task, the one reason NN/g names.
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Enforce UI copy and text standards for rendered strings in components
|
|
3
|
-
paths:
|
|
4
|
-
- '**/*.tsx'
|
|
5
|
-
- '**/*.jsx'
|
|
6
|
-
- '**/*.astro'
|
|
7
|
-
- '**/*.html'
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# UI copy standards
|
|
11
|
-
|
|
12
|
-
## Punctuation
|
|
13
|
-
|
|
14
|
-
- Write no em dash (`—`) or semicolon in rendered copy. Use a comma or a period, or restructure the sentence.
|
|
15
|
-
- Add no trailing punctuation to a button label or a short action string.
|
|
16
|
-
|
|
17
|
-
## Button copy
|
|
18
|
-
|
|
19
|
-
- Label a button with the verb of the action it performs, such as `Save` or `Delete`, never with filler such as `Click to delete`.
|
|
20
|
-
|
|
21
|
-
## Error messages
|
|
22
|
-
|
|
23
|
-
- Tell the person how to fix the error, such as `Enter an email address` over `Email is invalid`.
|
|
24
|
-
- Keep an error message to one short sentence in plain language, with no technical jargon or error codes.
|
|
25
|
-
|
|
26
|
-
## Placeholder text
|
|
27
|
-
|
|
28
|
-
- Never use placeholder text as a label, a hint, or an example. Put a format example such as `name@example.com` in hint text under the label.
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Route edits that decide how a surface looks to the design-taste skill for the layer ordering, the coherence locks, and the defaults a model reaches for
|
|
3
|
-
paths:
|
|
4
|
-
- '**/*.tsx'
|
|
5
|
-
- '**/*.jsx'
|
|
6
|
-
- '**/*.astro'
|
|
7
|
-
- '**/*.html'
|
|
8
|
-
- '**/*.css'
|
|
9
|
-
- '**/*.scss'
|
|
10
|
-
- 'canon/DESIGN.md'
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
# Design taste standards
|
|
14
|
-
|
|
15
|
-
## Authority
|
|
16
|
-
|
|
17
|
-
- Load the `canon:design-taste` skill for which design decision settles first, what must stay constant across a surface, and the defaults to reach past. It is the single source for all three.
|
|
18
|
-
- Report it rather than proceeding silently when the skill does not resolve. It ships with the plugin and this rule ships with the CLI, so a project that installed governance alone does not have it.
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Enforce casing for interface text in markup, MDX, and content modules, where copy lives in a content folder
|
|
3
|
-
paths:
|
|
4
|
-
- '**/*.tsx'
|
|
5
|
-
- '**/*.jsx'
|
|
6
|
-
- '**/*.astro'
|
|
7
|
-
- '**/*.html'
|
|
8
|
-
- '**/*.mdx'
|
|
9
|
-
- '**/content/**/*.ts'
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# Interface casing standards
|
|
13
|
-
|
|
14
|
-
## Sentence case
|
|
15
|
-
|
|
16
|
-
- Use sentence case for rendered headings, labels, nav items, tab titles, and dialog titles, since title case on every heading reads as a template default.
|
|
17
|
-
- Keep the original casing of a proper noun or product name, such as `GitHub`, `macOS`, or `TypeScript`.
|
|
18
|
-
|
|
19
|
-
## Uppercase labels
|
|
20
|
-
|
|
21
|
-
- Keep small uppercase labels above headings to `ceil(sections / 3)`, the first screen counting as one. Delete the extra labels, since position already names a section.
|
|
22
|
-
|
|
23
|
-
## Where it applies
|
|
24
|
-
|
|
25
|
-
- Apply the same casing to interface copy kept outside the globs, such as a locale file, which this rule never fires on.
|
|
26
|
-
|
|
27
|
-
## Overriding
|
|
28
|
-
|
|
29
|
-
- Depart from sentence case only where the case needs it, such as an acronym, a brand mark, or a set-in-caps identity the design chose on purpose.
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Enforce the same-tab default for an outbound link and for a mail link
|
|
3
|
-
paths:
|
|
4
|
-
- '**/*.tsx'
|
|
5
|
-
- '**/*.jsx'
|
|
6
|
-
- '**/*.astro'
|
|
7
|
-
- '**/*.html'
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# Link behavior standards
|
|
11
|
-
|
|
12
|
-
## Default target
|
|
13
|
-
|
|
14
|
-
- Open a link in the same tab. Reserve `target="_blank"` for a page the person must consult while finishing a task in the current one.
|
|
15
|
-
- Never add `target="_blank"` as a default for every external link.
|
|
16
|
-
|
|
17
|
-
## mailto: links
|
|
18
|
-
|
|
19
|
-
- Open a `mailto:` link in the same tab. It hands off to the mail client rather than replacing the page, so a new tab leaves an empty tab behind.
|
|
File without changes
|