@erclx/canon 5.43.0 → 5.45.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/README.md +1 -1
- package/claude/.claude-plugin/plugin.json +1 -1
- package/claude/skills/backlog-triage/references/apply.md +6 -6
- package/claude/skills/canon-cli/SKILL.md +4 -5
- package/claude/skills/canvas-board/REQUIREMENT.md +1 -1
- package/claude/skills/canvas-board/SKILL.md +1 -1
- package/claude/skills/context-fold/references/context.md +1 -1
- package/claude/skills/create-skill/REQUIREMENT.md +1 -1
- package/claude/skills/create-skill/SKILL.md +2 -2
- package/claude/skills/create-skill/references/skill-requirement.md +68 -9
- package/claude/skills/create-skill/references/skill.md +1 -1
- package/claude/skills/design-identity/REQUIREMENT.md +40 -0
- package/claude/skills/design-identity/SKILL.md +138 -0
- package/claude/skills/{draft-identity → design-identity}/references/card-route.md +2 -2
- package/claude/skills/design-taste/REQUIREMENT.md +6 -6
- package/claude/skills/design-taste/SKILL.md +2 -2
- package/claude/skills/design-taste/references/kinds.md +1 -1
- package/claude/skills/design-taste/references/preflight.md +1 -1
- package/claude/skills/draft-and-pick/REQUIREMENT.md +8 -69
- package/claude/skills/draft-and-pick/SKILL.md +3 -153
- package/claude/skills/draft-doc/REQUIREMENT.md +9 -30
- package/claude/skills/draft-doc/SKILL.md +4 -76
- package/claude/skills/draft-figure/REQUIREMENT.md +8 -42
- package/claude/skills/draft-figure/SKILL.md +3 -77
- package/claude/skills/draft-identity/REQUIREMENT.md +8 -23
- package/claude/skills/draft-identity/SKILL.md +3 -130
- package/claude/skills/draft-ready/REQUIREMENT.md +8 -37
- package/claude/skills/draft-ready/SKILL.md +3 -128
- package/claude/skills/draft-screencast/REQUIREMENT.md +8 -23
- package/claude/skills/draft-screencast/SKILL.md +3 -62
- package/claude/skills/draft-slides/REQUIREMENT.md +8 -27
- package/claude/skills/draft-slides/SKILL.md +3 -72
- package/claude/skills/draw-figure/REQUIREMENT.md +59 -0
- package/claude/skills/draw-figure/SKILL.md +85 -0
- package/claude/skills/{draft-figure → draw-figure}/references/architecture-set.md +2 -2
- package/claude/skills/{draft-figure → draw-figure}/references/hand-drawn.md +2 -2
- package/claude/skills/{draft-figure → draw-figure}/references/mermaid-path.md +2 -2
- package/claude/skills/{draft-figure → draw-figure}/references/mermaid.md +1 -1
- package/claude/skills/make-deck/REQUIREMENT.md +44 -0
- package/claude/skills/make-deck/SKILL.md +80 -0
- package/claude/skills/markdown-craft/REQUIREMENT.md +1 -1
- package/claude/skills/markdown-craft/SKILL.md +2 -2
- package/claude/skills/pick-by-eye/REQUIREMENT.md +36 -0
- package/claude/skills/pick-by-eye/SKILL.md +161 -0
- package/claude/skills/plan-feature/SKILL.md +2 -1
- package/claude/skills/plan-feature/references/plan.md +24 -10
- package/claude/skills/plan-groundwork/SKILL.md +1 -1
- package/claude/skills/plan-intake/SKILL.md +1 -1
- package/claude/skills/plan-ready/REQUIREMENT.md +54 -0
- package/claude/skills/plan-ready/SKILL.md +136 -0
- package/claude/skills/{draft-ready → plan-ready}/references/assembly.md +1 -1
- package/claude/skills/{draft-ready → plan-ready}/references/ready.md +1 -1
- package/claude/skills/record-screencast/REQUIREMENT.md +3 -3
- package/claude/skills/record-screencast/SKILL.md +2 -2
- package/claude/skills/role-orchestrator/REQUIREMENT.md +16 -99
- package/claude/skills/role-orchestrator/references/orchestrator-dispatch.md +5 -2
- package/claude/skills/role-orchestrator/references/orchestrator-parked.md +2 -2
- package/claude/skills/role-orchestrator/references/orchestrator-refill.md +18 -13
- package/claude/skills/role-planner/REQUIREMENT.md +15 -73
- package/claude/skills/role-planner/SKILL.md +2 -1
- package/claude/skills/role-worker/REQUIREMENT.md +13 -41
- package/claude/skills/role-worker/SKILL.md +9 -0
- package/claude/skills/script-screencast/REQUIREMENT.md +40 -0
- package/claude/skills/script-screencast/SKILL.md +70 -0
- package/claude/skills/{draft-screencast → script-screencast}/references/beats-template.md +2 -2
- package/claude/skills/search-craft/REQUIREMENT.md +4 -4
- package/claude/skills/search-craft/SKILL.md +1 -1
- package/claude/skills/target-setup/SKILL.md +3 -2
- package/claude/skills/target-setup/references/detect.md +0 -1
- package/claude/skills/target-setup/references/verify.md +2 -2
- package/claude/skills/task-board/SKILL.md +11 -9
- package/claude/skills/task-board/references/board.md +15 -12
- package/claude/skills/teach-workspace/REQUIREMENT.md +1 -1
- package/claude/skills/teach-workspace/SKILL.md +1 -1
- package/claude/skills/teach-workspace/references/lesson-craft.md +2 -2
- package/claude/skills/teach-workspace/references/promotion.md +5 -5
- package/claude/skills/ui-checklist/SKILL.md +2 -0
- package/claude/skills/write-doc/REQUIREMENT.md +46 -0
- package/claude/skills/write-doc/SKILL.md +83 -0
- package/claude/skills/{draft-doc → write-doc}/references/context.md +2 -2
- package/claude/skills/{draft-doc → write-doc}/references/docs.md +2 -2
- package/claude/skills/{draft-doc → write-doc}/references/readme.md +2 -2
- package/claude/skills/{draft-doc → write-doc}/references/wiki-kind.md +3 -3
- package/docs/agents/install-and-sync.md +2 -2
- package/docs/agents/markdown-audit.md +4 -2
- package/docs/agents/migrate.md +2 -2
- package/docs/agents/output-shape.md +1 -2
- package/docs/target/migrations.md +35 -4
- package/docs/target/projects.md +2 -3
- package/docs/target/scenarios.md +4 -1
- package/docs/workflow/parallel-features.md +3 -2
- package/docs/workflow/skill-map-on-request.md +19 -13
- package/docs/workflow/skill-map.md +13 -12
- package/docs/workflow/visual-design-workflow.md +2 -2
- package/governance/detect.toml +4 -0
- package/governance/ledger/framework/astro.md +73 -0
- package/governance/ledger/framework/fastapi.md +76 -0
- package/governance/ledger/framework/nextjs.md +86 -0
- package/governance/ledger/framework/react.md +83 -0
- package/governance/ledger/framework/shadcn.md +60 -0
- package/governance/ledger/framework/tailwind.md +55 -0
- package/governance/ledger/lang/go.md +61 -0
- package/governance/ledger/lang/php.md +50 -0
- package/governance/ledger/lang/python.md +68 -0
- package/governance/ledger/lang/typescript.md +64 -0
- package/governance/ledger/lib/database.md +65 -0
- package/governance/ledger/lib/e2e-reliability.md +57 -0
- package/governance/ledger/lib/pydantic.md +61 -0
- package/governance/ledger/lib/security-server.md +62 -0
- package/governance/ledger/lib/security-web.md +51 -0
- package/governance/ledger/lib/tanstack-query.md +57 -0
- package/governance/ledger/lib/test-scope.md +43 -0
- package/governance/ledger/lib/testing-go.md +57 -0
- package/governance/ledger/lib/testing-php.md +51 -0
- package/governance/ledger/lib/testing-py.md +67 -0
- package/governance/ledger/lib/testing-ts.md +63 -0
- package/governance/ledger/lib/zod.md +47 -0
- package/governance/ledger/tooling/ci-workflow.md +33 -0
- package/governance/ledger/tooling/code-comments.md +48 -0
- package/governance/ledger/tooling/config-comments.md +27 -0
- package/governance/ledger/tooling/dependencies.md +38 -0
- package/governance/ledger/ui/a11y.md +55 -0
- package/governance/ledger/ui/copy.md +49 -0
- package/governance/ledger/ui/design-reference.md +42 -0
- package/governance/ledger/ui/design-taste.md +19 -0
- package/governance/ledger/ui/forms.md +71 -0
- package/governance/ledger/ui/interface-casing.md +47 -0
- package/governance/ledger/ui/keyboard.md +68 -0
- package/governance/ledger/ui/link-behavior.md +29 -0
- package/governance/ledger/ui/motion.md +33 -0
- package/governance/ledger/ui/surface-capture.md +69 -0
- package/governance/ledger/ui/ux-completeness.md +79 -0
- package/governance/rules/framework/astro.md +12 -14
- package/governance/rules/framework/fastapi.md +20 -24
- package/governance/rules/framework/nextjs.md +19 -27
- package/governance/rules/framework/react.md +22 -33
- package/governance/rules/framework/shadcn.md +11 -15
- package/governance/rules/framework/tailwind.md +12 -14
- package/governance/rules/lang/go.md +7 -16
- package/governance/rules/lang/php.md +3 -3
- package/governance/rules/lang/python.md +9 -18
- package/governance/rules/lang/typescript.md +9 -19
- package/governance/rules/lib/database.md +5 -5
- package/governance/rules/lib/e2e-reliability.md +4 -6
- package/governance/rules/lib/pydantic.md +14 -16
- package/governance/rules/lib/security-server.md +4 -4
- package/governance/rules/lib/security-web.md +6 -10
- package/governance/rules/lib/tanstack-query.md +10 -12
- package/governance/rules/lib/test-scope.md +4 -4
- package/governance/rules/lib/testing-go.md +1 -2
- package/governance/rules/lib/testing-php.md +4 -5
- package/governance/rules/lib/testing-py.md +11 -19
- package/governance/rules/lib/testing-ts.md +7 -16
- package/governance/rules/lib/zod.md +6 -8
- package/governance/rules/tooling/code-comments.md +2 -4
- package/governance/rules/tooling/config-comments.md +1 -4
- package/governance/rules/tooling/dependencies.md +1 -1
- package/governance/rules/ui/a11y.md +16 -45
- package/governance/rules/ui/copy.md +6 -9
- package/governance/rules/ui/forms.md +13 -19
- package/governance/rules/ui/interface-casing.md +5 -7
- package/governance/rules/ui/keyboard.md +38 -0
- package/governance/rules/ui/link-behavior.md +3 -3
- package/governance/rules/ui/motion.md +3 -3
- package/governance/rules/ui/surface-capture.md +15 -27
- package/governance/rules/ui/ux-completeness.md +16 -39
- package/governance/rules/writing/markdown.md +1 -1
- package/package.json +1 -1
- package/scripts/core/install-check.sh +1 -1
- package/src/claude/cases/authoring.ts +15 -3
- package/src/claude/cases/misc.ts +12 -0
- package/src/claude/cases/workflow.ts +19 -1
- package/src/claude/skills-audit.ts +113 -1
- package/src/cli/help.ts +0 -1
- package/src/cli.ts +0 -2
- package/src/commands/claude.ts +34 -11
- package/src/commands/demo.ts +1 -1
- package/src/commands/gov.ts +4 -0
- package/src/commands/init.ts +2 -2
- package/src/commands/markdown.ts +1 -1
- package/src/commands/migrate.ts +4 -0
- package/src/commands/pr.ts +30 -6
- package/src/commands/tasks.ts +383 -2
- package/src/commands/tooling.ts +18 -5
- package/src/context/audit.ts +1 -1
- package/src/demo/beats.ts +1 -1
- package/src/design/components.ts +1 -1
- package/src/gov/audit.ts +25 -4
- package/src/init/plan.ts +1 -8
- package/src/init/steps.ts +0 -8
- package/src/inventory/subjects.ts +1 -1
- package/src/markdown/scope.ts +49 -35
- package/src/migrate/record-layout.ts +1 -1
- package/src/migrate/scratch-evidence.ts +12 -4
- package/src/migrate/skill-names.ts +68 -21
- package/src/pr/frames.ts +14 -3
- package/src/records/backup.ts +3 -3
- package/src/records/validate.ts +31 -0
- package/src/roots/record.ts +17 -8
- package/src/tasks/board.ts +854 -0
- package/src/tasks/record.ts +20 -1
- package/src/tasks/validate.ts +206 -9
- package/src/tooling/inject.ts +26 -7
- package/src/tooling/package.ts +32 -0
- package/src/tooling/read.ts +46 -3
- package/src/tooling/scan.ts +8 -2
- package/tooling/astro/configs/card-src/pages/og-card.astro +1 -1
- package/tooling/astro/reference.md +64 -93
- package/tooling/base/configs/.github/workflows/phase-label-gate.yml +1 -1
- package/tooling/base/configs/scripts/verify.ts +1 -1
- package/tooling/base/reference.md +1 -9
- package/tooling/base/seeds/canon/context/{ci.md → development/ci.md} +1 -1
- package/tooling/base/seeds/canon/context/development/index.md +11 -0
- package/tooling/base/seeds/canon/context/{development.md → development/setup.md} +8 -12
- package/tooling/base/seeds/canon/context/index.md +1 -2
- package/tooling/claude/manifest.toml +1 -5
- package/tooling/claude/reference.md +36 -59
- package/tooling/claude/seeds/.claude/hooks/board-validate.sh +65 -0
- package/tooling/claude/seeds/.claude/hooks/index-reminder.sh +2 -7
- package/tooling/claude/seeds/.claude/hooks/pr-create-log.sh +2 -7
- package/tooling/claude/seeds/.claude/hooks/scratch-guard.sh +3 -10
- package/tooling/claude/seeds/.claude/hooks/search-reminder.sh +2 -7
- package/tooling/claude/seeds/.claude/hooks/standards-audit.sh +2 -4
- package/tooling/claude/seeds/.claude/settings.json +4 -0
- package/tooling/nextjs/reference.md +0 -6
- package/tooling/php/reference.md +0 -4
- package/tooling/web/configs/.github/workflows/verify.yml +28 -0
- package/tooling/web/configs/.oxlintrc.json +7 -0
- package/tooling/web/configs/e2e/capture-types.ts +35 -0
- package/tooling/web/configs/e2e/screenshot.ts +23 -72
- package/tooling/web/manifest.toml +1 -1
- package/tooling/web/reference.md +77 -124
- package/tooling/web/seeds/e2e/capture/cases.ts +47 -0
- package/src/commands/wiki.ts +0 -100
- package/src/wiki/init.ts +0 -85
- /package/claude/skills/{draft-figure → draw-figure}/references/figures.md +0 -0
- /package/claude/skills/{draft-slides → make-deck}/references/deck.md +0 -0
- /package/claude/skills/{draft-and-pick → pick-by-eye}/references/live-arms.md +0 -0
- /package/claude/skills/{draft-doc → write-doc}/references/readme/agent-facing.md +0 -0
- /package/claude/skills/{draft-doc → write-doc}/references/readme/application.md +0 -0
- /package/claude/skills/{draft-doc → write-doc}/references/readme/cli.md +0 -0
- /package/claude/skills/{draft-doc → write-doc}/references/readme/library.md +0 -0
- /package/claude/skills/{draft-doc → write-doc}/references/readme/plugin.md +0 -0
- /package/claude/skills/{draft-doc → write-doc}/references/requirements.md +0 -0
- /package/claude/skills/{draft-doc → write-doc}/references/wiki.md +0 -0
package/README.md
CHANGED
|
@@ -165,7 +165,7 @@ git init
|
|
|
165
165
|
canon init
|
|
166
166
|
```
|
|
167
167
|
|
|
168
|
-
`canon init` installs base tooling configs, Claude seeds, and governance rules in one pass
|
|
168
|
+
`canon init` installs base tooling configs, Claude seeds, and governance rules in one pass.
|
|
169
169
|
|
|
170
170
|
- Governance defaults to the `base` stack, so a bare init lands the workflow and doc-authoring rules in `.claude/rules/`.
|
|
171
171
|
- Each rule names the skill it loads, so no corpus is copied into your project.
|
|
@@ -25,12 +25,12 @@ An item already applied, by the test in the skill's Step 1, is skipped silently,
|
|
|
25
25
|
|
|
26
26
|
Take the task stem from the item heading. Every verdict leaves the folder slug on its task, which is how Step 1 and `task-board`'s unlinked-origin scan both see the folder as acted on.
|
|
27
27
|
|
|
28
|
-
| Verdict | Command and board write
|
|
29
|
-
| ------- |
|
|
30
|
-
| decline | `canon tasks decline <stem> --reason "<reason>, backlog triage <slug> item <cluster>#<n>" --json`, which clears the backlog line
|
|
31
|
-
| archive | `canon tasks outcome <stem> --close <p> ... --json` for the named positions, then `canon tasks archive <stem> --json`
|
|
32
|
-
| keep | Append the `## Findings` line naming what reproduced, leaving the backlog line
|
|
33
|
-
| promote |
|
|
28
|
+
| Verdict | Command and board write |
|
|
29
|
+
| ------- | -------------------------------------------------------------------------------------------------------------------------------- |
|
|
30
|
+
| decline | `canon tasks decline <stem> --reason "<reason>, backlog triage <slug> item <cluster>#<n>" --json`, which clears the backlog line |
|
|
31
|
+
| archive | `canon tasks outcome <stem> --close <p> ... --json` for the named positions, then `canon tasks archive <stem> --json` |
|
|
32
|
+
| keep | Append the `## Findings` line naming what reproduced, leaving the backlog line |
|
|
33
|
+
| promote | `canon tasks place <stem> --group needs-a-plan --bottom --waiting "<what cleared>. Last" --json`, which clears the backlog line |
|
|
34
34
|
|
|
35
35
|
### Archive and missing files
|
|
36
36
|
|
|
@@ -33,7 +33,6 @@ Consult to pick the `canon` verb for a job, and before running a verb that write
|
|
|
33
33
|
| Install or sync governance rules | `canon gov` |
|
|
34
34
|
| Sync a tooling stack's configs and seeds, or read its reference | `canon tooling` |
|
|
35
35
|
| Set up or sync the Claude workflow | `canon claude` |
|
|
36
|
-
| Scaffold a wiki | `canon wiki` |
|
|
37
36
|
| Regenerate the `index.md` files | `canon indexes` |
|
|
38
37
|
| Read a toolkit reference doc | `canon docs` |
|
|
39
38
|
|
|
@@ -43,11 +42,11 @@ Each verb here has a skill that owns the job. Load the skill rather than driving
|
|
|
43
42
|
|
|
44
43
|
| Job | Verb | Skill |
|
|
45
44
|
| -------------------------------------------- | ------------------- | --------------------------- |
|
|
46
|
-
| Render the design system | `canon design` | `canon:
|
|
47
|
-
| Render a slide deck | `canon slides` | `canon:
|
|
48
|
-
| Render an HTML source to a PNG | `canon capture` | `canon:
|
|
45
|
+
| Render the design system | `canon design` | `canon:draw-figure` |
|
|
46
|
+
| Render a slide deck | `canon slides` | `canon:make-deck` |
|
|
47
|
+
| Render an HTML source to a PNG | `canon capture` | `canon:design-identity` |
|
|
49
48
|
| Serve a directory and print the link | `canon serve` | none |
|
|
50
|
-
| Record a running app | `canon demo` | `canon:
|
|
49
|
+
| Record a running app | `canon demo` | `canon:script-screencast` |
|
|
51
50
|
| Report one computed property across routes | `canon inventory` | `canon:target-check` |
|
|
52
51
|
| Walk a page through interactions and measure | `canon drive` | `canon:ux-measure` |
|
|
53
52
|
| Fetch a YouTube transcript | `canon transcripts` | `canon:youtube-transcripts` |
|
|
@@ -43,6 +43,6 @@ When the operator picks a frame, the session leaves the decision on the canvas a
|
|
|
43
43
|
|
|
44
44
|
- What the canvas verbs do internally, which is the CLI's own contract
|
|
45
45
|
- The content format a frame and a layout take, which the canvas standard fixes
|
|
46
|
-
- Drafting candidates for a taste decision and taking the pick, which `
|
|
46
|
+
- Drafting candidates for a taste decision and taking the pick, which `pick-by-eye` runs on this canvas through the same verbs
|
|
47
47
|
- Tracing reference images into design values or writing the design document from code, which no skill owns now
|
|
48
48
|
- Backing up the canvas folder off one disk
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: canvas-board
|
|
3
|
-
description: Drives the local design canvas, where pages hold HTML frames the operator sees, drags, selects, and edits in the browser. Starts the canvas when it is not running, confirms the live shell loads, makes pages and frames, edits a frame through its file, reads what the operator selected or restyled, captures finished frames, and carries a picked direction into the project's design document. Use when asked to "open the canvas", "put this on the canvas", "draw a frame for X", "change the one I selected", "what did I pick", "capture this frame", or "move that frame on the canvas". Do NOT use to draft candidates for a taste decision, which is `
|
|
3
|
+
description: Drives the local design canvas, where pages hold HTML frames the operator sees, drags, selects, and edits in the browser. Starts the canvas when it is not running, confirms the live shell loads, makes pages and frames, edits a frame through its file, reads what the operator selected or restyled, captures finished frames, and carries a picked direction into the project's design document. Use when asked to "open the canvas", "put this on the canvas", "draw a frame for X", "change the one I selected", "what did I pick", "capture this frame", or "move that frame on the canvas". Do NOT use to draft candidates for a taste decision, which is `pick-by-eye`.
|
|
4
4
|
metadata:
|
|
5
5
|
family: decide
|
|
6
6
|
---
|
|
@@ -28,7 +28,7 @@ Does not govern:
|
|
|
28
28
|
|
|
29
29
|
- Product scope, goals, and non-goals: `requirements.md`
|
|
30
30
|
- Path-scoped coding rules: `rule.md`
|
|
31
|
-
- Figures and architecture views, which answer structure questions an entry hands off: the `
|
|
31
|
+
- Figures and architecture views, which answer structure questions an entry hands off: the `draw-figure` skill
|
|
32
32
|
- The consumer-facing reference under `docs/`, whose reader is operating the project without the source open: `docs.md`
|
|
33
33
|
|
|
34
34
|
## Organizing principle
|
|
@@ -24,7 +24,7 @@ A fifth failure is the confirmation itself. A worker running a plan that adds a
|
|
|
24
24
|
- Draft the sibling `REQUIREMENT.md` beside the body, from what the skill is for rather than from the drafted body
|
|
25
25
|
- Confirm the name and both files with the user before writing, where a person is present to answer. The name is the routing key and a folder that disagrees with its frontmatter fails silently. Where nobody is present, record the three answers and both paths in the output and write.
|
|
26
26
|
- Write to the conventional skills path, so discovery finds it without configuration. That is `.claude/skills/` in a target project. In the toolkit's own checkout, which the project root's `claude/.claude-plugin/plugin.json` marks, an `internal-*` skill goes under `.claude/skills/` and a plugin skill under `claude/skills/`
|
|
27
|
-
- Leave the skills audit's dated-provenance check clean for the new folder before reporting it, with each incident
|
|
27
|
+
- Leave the skills audit's dated-provenance check clean for the new folder before reporting it, with each incident cut and left to git
|
|
28
28
|
|
|
29
29
|
## Must not
|
|
30
30
|
|
|
@@ -38,7 +38,7 @@ Read these in the same pass:
|
|
|
38
38
|
- Does the body carry a procedure a session would get wrong from first principles? A one-line wrapper around a single command needs no skill.
|
|
39
39
|
- Will anything invoke it other than the author typing its name? Carry this one into the drafted `REQUIREMENT.md`'s `Must not` section as a review criterion instead, since nothing can answer it before the skill has run.
|
|
40
40
|
- Tell the user and stop when the first answer is yes or the second is no. A non-interactive run stops on both too, reporting which question failed and writing no folder.
|
|
41
|
-
2. Draft the full `SKILL.md` from the user's description, stating the current rule alone. An incident and the date it happened
|
|
41
|
+
2. Draft the full `SKILL.md` from the user's description, stating the current rule alone. An incident and the date it happened stay in git, never in the body, a reference, or the requirement.
|
|
42
42
|
3. Draft the sibling `REQUIREMENT.md` from what the skill is for, in the shape the requirement standard states.
|
|
43
43
|
- Write the gaps from the user's description rather than from the drafted body, since a requirement derived from the body records whatever the draft overfitted to.
|
|
44
44
|
4. Confirm the skill name and both files with the user before writing, when a person can answer.
|
|
@@ -53,7 +53,7 @@ Steps 5 to 7 write the folder and check what landed before the run reports.
|
|
|
53
53
|
- The root is `.claude/skills/` in a target project.
|
|
54
54
|
- Where the project root holds `claude/.claude-plugin/plugin.json`, which is the toolkit's own checkout, an `internal-*` skill goes under `.claude/skills/` and every other skill under `claude/skills/`, since the plugin ships that tree.
|
|
55
55
|
6. Run `canon claude skills audit --json` and read `findings.datedProvenance` for rows under `<root>/<name>/`.
|
|
56
|
-
-
|
|
56
|
+
- Cut each row's date and incident from the file the row names, leaving them to git, and re-run until no row names the folder.
|
|
57
57
|
- When `canon` does not resolve or its record carries no `datedProvenance` key, say the check did not run rather than reporting the skill clean.
|
|
58
58
|
7. Run `canon markdown audit <root>/<name>/` over the new body and any references, and fix every ban and density finding it reports.
|
|
59
59
|
- Re-run it until it reports none, since every file in the folder is this run's draft.
|
|
@@ -35,12 +35,36 @@ A requirement that leaves any of the three open is non-conforming regardless of
|
|
|
35
35
|
- Write the gaps from what the skill is for, then compare the body against them
|
|
36
36
|
- A requirement derived from the body records the body's accidents as the requirement, and misinforms a reader who reads it in place of the body
|
|
37
37
|
|
|
38
|
+
## Sections
|
|
39
|
+
|
|
40
|
+
The file carries these H2s in this order and no others. `canon claude skills audit` reports a missing Gap or Must and a Guards heading.
|
|
41
|
+
|
|
42
|
+
| Section | When | Holds |
|
|
43
|
+
| -------------- | ----------------------------------------- | ------------------------------------------------------------- |
|
|
44
|
+
| `Gap` | Always | The failures a session hits today without the skill, as prose |
|
|
45
|
+
| `Must` | Always | The outcomes that close those failures, one per bullet |
|
|
46
|
+
| `Must not` | When a behavior closes a gap and is wrong | That behavior, one per bullet |
|
|
47
|
+
| `Out of scope` | When a sibling owns an adjacent behavior | The behavior and the skill that owns it |
|
|
48
|
+
|
|
49
|
+
`Guards` is retired. A refusal condition is a `Must not` bullet, and the message it prints belongs to the body.
|
|
50
|
+
|
|
51
|
+
## Caps
|
|
52
|
+
|
|
53
|
+
The audit reports each cap it finds breached, and a rewrite batch turns the report into a gate for the files it brings under.
|
|
54
|
+
|
|
55
|
+
- Each list holds at most 5 bullets. A sixth `Must` is a sign the skill does two jobs or the list restates its steps.
|
|
56
|
+
- The file holds at most 400 words of body, frontmatter excluded
|
|
57
|
+
- Gap carries no `YYYY-MM-DD` date and no `#NNN` issue or pull request number outside a code span
|
|
58
|
+
|
|
38
59
|
## Content
|
|
39
60
|
|
|
40
|
-
- State each gap as
|
|
41
|
-
-
|
|
42
|
-
- Keep
|
|
43
|
-
-
|
|
61
|
+
- State each gap as a failure a session hits today, in the present tense. "Without this skill a session invents its own filename" can be shown wrong.
|
|
62
|
+
- Never state a gap as an intent. "This skill helps manage tasks" cannot fail, so it constrains nothing.
|
|
63
|
+
- Keep history out of Gap. The incident, its date, and the pull request that earned a rule stay in git, where `git log` on the file finds them.
|
|
64
|
+
- Write each `Must` as an outcome a reader can check against the body, never as a step the body takes. "The committed set is exactly the staged set" is an outcome.
|
|
65
|
+
- Trace every `Must` to a stated gap. A `Must` with no gap behind it is the padding the file exists to prevent.
|
|
66
|
+
|
|
67
|
+
The frontmatter carries `name` and `description`, matching `SKILL.md` so the pair is consistent.
|
|
44
68
|
|
|
45
69
|
## Template
|
|
46
70
|
|
|
@@ -54,21 +78,56 @@ description: <one line, distinct from the SKILL.md description>
|
|
|
54
78
|
|
|
55
79
|
## Gap
|
|
56
80
|
|
|
57
|
-
Without this skill, a session <
|
|
81
|
+
Without this skill, a session <failure it hits today>. <A second failure, when there is one>.
|
|
58
82
|
|
|
59
83
|
## Must
|
|
60
84
|
|
|
61
|
-
- <
|
|
85
|
+
- <outcome that closes a named failure>
|
|
62
86
|
|
|
63
87
|
## Must not
|
|
64
88
|
|
|
65
89
|
- <behavior that would be wrong even though it closes a gap>
|
|
66
90
|
|
|
67
|
-
##
|
|
91
|
+
## Out of scope
|
|
92
|
+
|
|
93
|
+
- <adjacent behavior>, which `<sibling-skill>` owns
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Worked example
|
|
97
|
+
|
|
98
|
+
`git-commit`'s requirement in this shape, at 167 words as the audit counts them.
|
|
99
|
+
|
|
100
|
+
```markdown
|
|
101
|
+
---
|
|
102
|
+
name: git-commit
|
|
103
|
+
description: What commit generation is for, the gaps it closes, and where the family boundary sits
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
# Git commit requirement
|
|
107
|
+
|
|
108
|
+
## Gap
|
|
109
|
+
|
|
110
|
+
Without this skill, a commit message takes whatever shape the session picks. The type and scope drift from the history's convention, the subject runs past the log's width, and a lockfile diff crowds out the change the message should describe.
|
|
111
|
+
|
|
112
|
+
A plain request to commit also reaches the grouping sibling, which restages whole files, so a hunk-level selection ships wider than the user reviewed.
|
|
113
|
+
|
|
114
|
+
## Must
|
|
115
|
+
|
|
116
|
+
- The message follows the commit format and versioning references
|
|
117
|
+
- The message describes the staged diff with lockfiles excluded
|
|
118
|
+
- The user sees the message and its length before the commit runs
|
|
119
|
+
- The committed set is exactly the staged set
|
|
120
|
+
- The description claims single-concern and hunk-level staged sets, and names `git-stage` for a mixed one
|
|
121
|
+
|
|
122
|
+
## Must not
|
|
68
123
|
|
|
69
|
-
-
|
|
124
|
+
- Stage or unstage anything
|
|
125
|
+
- Commit when nothing is staged
|
|
126
|
+
- Emit anything after the result line
|
|
70
127
|
|
|
71
128
|
## Out of scope
|
|
72
129
|
|
|
73
|
-
-
|
|
130
|
+
- Splitting a mixed diff into several commits, which `git-stage` owns
|
|
131
|
+
- Naming a branch, which `git-branch` owns
|
|
132
|
+
- Pushing or opening a pull request, which `git-pr` owns
|
|
74
133
|
```
|
|
@@ -132,7 +132,7 @@ A body holds behavioral rules and pointers to reference docs, front-loading the
|
|
|
132
132
|
|
|
133
133
|
### Current rule and grouping
|
|
134
134
|
|
|
135
|
-
State the current rule only, in the body and in every file under `references/`. The incident and the date that earned a rule
|
|
135
|
+
State the current rule only, in the body and in every file under `references/`. The incident and the date that earned a rule stay in git, and a date inside a fence or a code span is example data and stays.
|
|
136
136
|
|
|
137
137
|
- Cut any rule that resists crisp one-line phrasing. Vague guidance is worse than none.
|
|
138
138
|
- Group bullets under H2 headings by concern, keeping dos and don'ts together rather than in flat rules and constraints sections
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: design-identity
|
|
3
|
+
description: Why the mark and the card are one pick rather than two, and where the size sequence and the write folder come from before either is drafted
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Design identity requirement
|
|
7
|
+
|
|
8
|
+
## Gap
|
|
9
|
+
|
|
10
|
+
Without this skill, a session asked for a logo and a social card either invents shapes with nothing behind them, or drafts the mark and the card as two separate decisions that can land on shapes that do not compose, which is the failure the task filing this skill measured by hand on every project it touched. A search across every shipped skill and standard found zero hits for `logo`, `og:image`, `og-image`, or Open Graph, so nothing in the catalog reached either output.
|
|
11
|
+
|
|
12
|
+
A session building this without a shared loop restates `pick-by-eye`'s render, hand-off, pick, and loop mechanics from scratch, which drifts from the shipped one with nothing comparing the two copies. It also guesses at the icon size sequence and the output folder rather than reading what the project already declares, and it produces one raster per size through a separate render call per size, which multiplies capture invocations for no reason `canon capture` cannot already batch.
|
|
13
|
+
|
|
14
|
+
## Must
|
|
15
|
+
|
|
16
|
+
- Detect the icon size sequence from the project's own HTML head or manifest before falling back to the stated default set
|
|
17
|
+
- Detect the write folder from the project's own static-asset convention before falling back to the project root, and announce which one decided it
|
|
18
|
+
- Draft every arm already composed inside the card frame, so one pick settles the mark's shape and its composition together
|
|
19
|
+
- Follow `pick-by-eye`'s Steps 2 through 5 for the render, hand-off, pick, and loop, rather than restating them
|
|
20
|
+
- Write the final mark as its own SVG source, not baked into a raster only
|
|
21
|
+
- Render every final size and the card in one capture call, by sharing one selector class across pages, each declared at half its target dimension to land on the literal size once the render engine's fixed 2x scale factor is applied
|
|
22
|
+
|
|
23
|
+
## Must not
|
|
24
|
+
|
|
25
|
+
- Restate `pick-by-eye`'s render, hand-off, pick, or loop mechanics
|
|
26
|
+
- Add a `## Logo` section to `claude/skills/canvas-board/references/design.md`'s fixed section set. `src/design/parse.ts` reads a fixed key set, and no outcome behind this skill asks for a schema change.
|
|
27
|
+
- Modify `pick-by-eye`, `canon capture`, or `canon design render`. This skill composes all three and extending any of them is a separate change.
|
|
28
|
+
- Assume this skill's own invocation frequency needs no check. Whether anything reaches for it beyond an operator typing its name has no answer at creation time, so a review pass some months in should read that back rather than take it on faith.
|
|
29
|
+
|
|
30
|
+
## Guards
|
|
31
|
+
|
|
32
|
+
- `canon` not on PATH: stop, since the render loop and the finalize step both need it
|
|
33
|
+
- Fires on a direct request only. A run offering a logo to a project that never asked for one spends a render nobody wanted.
|
|
34
|
+
|
|
35
|
+
## Out of scope
|
|
36
|
+
|
|
37
|
+
- Wiring the produced files into a project's own HTML head or manifest, which is a separate edit this skill leaves for the operator to make against their own markup
|
|
38
|
+
- Recording the mark's construction rules in `claude/skills/canvas-board/references/design.md`, which the task's own constraint keeps out of the fixed section set
|
|
39
|
+
- Mutating an existing logo file directly, which is a direct edit rather than a skill
|
|
40
|
+
- Auditing an implemented UI against its tokens, which `ux-audit` owns
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: design-identity
|
|
3
|
+
description: Drafts a project's logo mark through pick-by-eye's render-and-pick loop, then composes the picked mark into an icon sequence and a 1200x630 social card. Use when asked to "make a logo", "design a logo mark", "create a favicon", "build the icon set", "generate a social card", "make an og:image", or "draft the logo and social card together". Do NOT use to mutate an existing logo file directly, which is a plain edit, or to record the mark's construction rules in DESIGN.md, which is out of scope.
|
|
4
|
+
metadata:
|
|
5
|
+
family: generate
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Design identity
|
|
9
|
+
|
|
10
|
+
One identity rendered twice: the same mark sized down to an icon sequence and composed with type into the social card sized up. Drafting both from one pick keeps the mark and its card composition from settling on shapes that do not match.
|
|
11
|
+
|
|
12
|
+
## Guards
|
|
13
|
+
|
|
14
|
+
- If `canon` is not on PATH, stop: `❌ canon CLI not found.`
|
|
15
|
+
- Draft no candidate for a mark the operator has not asked to make. This skill fires on a direct request, never on the model's own read that a project could use one.
|
|
16
|
+
|
|
17
|
+
## Step 1: read signal
|
|
18
|
+
|
|
19
|
+
Read these in parallel, skipping any that do not exist:
|
|
20
|
+
|
|
21
|
+
- `canon/DESIGN.md`: the `## Overview` paragraph and the role intents under `## Colors` and `## Typography`, read as `## Personality` and `## Color` in an older record
|
|
22
|
+
- The stylesheet `canon/DESIGN.md`'s lead names: the color and type values behind those roles
|
|
23
|
+
- `canon/REQUIREMENTS.md`: the `## Personality` paragraph, when `canon/DESIGN.md` carries none
|
|
24
|
+
- `CLAUDE.md`: the project's stated voice, when neither file above carries a personality signal
|
|
25
|
+
|
|
26
|
+
No signal from any of these is not a stop. Draft against a neutral default, and mark each guessed color and type value with a `/* ? verify */` comment beside its declaration in the `.mark` and `.card` markup, since the design document carries no value to tag.
|
|
27
|
+
|
|
28
|
+
## Step 2: detect the icon size sequence
|
|
29
|
+
|
|
30
|
+
Check the project's HTML entry points (`index.html`, `public/index.html`, `src/index.html`) for a `<link rel="icon">` or `<link rel="apple-touch-icon">` tag carrying a `sizes` attribute, and any `manifest.json` or `site.webmanifest` for an `icons` array. Take the union of every size found.
|
|
31
|
+
|
|
32
|
+
Fall back to the stated default when nothing is detected, since no `tooling/` stack scaffolds a `public/` folder, a favicon reference, or an `og:image` meta tag:
|
|
33
|
+
|
|
34
|
+
- `16x16`, `32x32`, `48x48`
|
|
35
|
+
- `180x180`
|
|
36
|
+
- `192x192`, `512x512`
|
|
37
|
+
|
|
38
|
+
This default set is raster-only, and Step 6 writes the vector source at `favicon.svg` on either branch. Announce which of the two decided the sequence.
|
|
39
|
+
|
|
40
|
+
## Step 3: detect the write folder
|
|
41
|
+
|
|
42
|
+
A root-only check misses a site kept in a subfolder, and a Next project keeps its favicon under the App Router with no `public/` at all. Both would fall through to the root while the announcement reads as detected, so walk one level down and know that convention.
|
|
43
|
+
|
|
44
|
+
Read both, from the project root:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
find . -maxdepth 3 \( -name node_modules -o -name .git -o -name dist -o -name .astro \) -prune -o -type d \( -name public -o -name static \) -print | sort
|
|
48
|
+
find . -maxdepth 4 \( -name node_modules -o -name .git \) -prune -o -type d -path '*/src/app' -print | sort
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Take the first tier that answers:
|
|
52
|
+
|
|
53
|
+
1. A root `public/` or `static/`.
|
|
54
|
+
2. A `public/` or `static/` one level down, such as `web/public/`. Of several, take the shallowest, then the one whose parent holds the project's framework config.
|
|
55
|
+
3. A `src/app/` folder, at the root or one level down, which is the Next App Router convention. Take the folder itself, not a `public/` beside it.
|
|
56
|
+
4. A stack-declared asset folder, where the project's own config names one.
|
|
57
|
+
5. The project root, which is the fallback rather than a detection.
|
|
58
|
+
|
|
59
|
+
Announce which tier decided, naming the tier rather than the path alone, so the operator can move the files where the project's convention differs. On tier 5 say the detection found nothing and the root is a fallback.
|
|
60
|
+
|
|
61
|
+
## Step 4: name the decision and the arms
|
|
62
|
+
|
|
63
|
+
Follow `${CLAUDE_SKILL_DIR}/../pick-by-eye/SKILL.md` Step 1, with the decision fixed rather than derived: "the project's logo mark and its composition into the social card." Vary the mark's shape or style across arms, keeping the card's type and layout fixed, per that skill's one-property rule.
|
|
64
|
+
|
|
65
|
+
- Draft each arm inside the full 1200x630 card frame, mark and type together, and add its canvas frame at `--width 1200 --height 630`, so one pick settles shape and composition
|
|
66
|
+
- Arm 0 is the current mark when the Step 3 folder already holds a logo file (`favicon.svg`, `favicon.ico`, `logo.svg`, or similar). Arms start at 1 otherwise.
|
|
67
|
+
- Structure every arm as a `.mark` element, the inline SVG alone, nested inside a `.card` element, the full composition, so Step 6 can address either
|
|
68
|
+
|
|
69
|
+
## Step 5: draft, render, pick, and loop
|
|
70
|
+
|
|
71
|
+
Follow `${CLAUDE_SKILL_DIR}/../pick-by-eye/SKILL.md` Steps 2 through 5 against the arms from Step 4: draft the arms as frames on a canvas page, render and hand off, take the pick, and loop on it.
|
|
72
|
+
|
|
73
|
+
The final icon and card renders below are not arms, so they stay off the canvas. Call the folder they render from `<dest>`, being `.canon/tmp/<slug>/` under the slug `pick-by-eye` Step 1 derived, which is where this project puts every temporary write.
|
|
74
|
+
|
|
75
|
+
## Step 6: finalize the mark and the icons
|
|
76
|
+
|
|
77
|
+
This step and Step 7 replace `pick-by-eye`'s own Step 6 items 1 and 2, since the pick here produces several final files rather than one applied surface. Its archive capture, its page delete, and its server stop still run, after Step 7.
|
|
78
|
+
|
|
79
|
+
1. Extract the picked arm's `.mark` markup as the final vector source. Write it to `<write-folder>/favicon.svg`.
|
|
80
|
+
2. Under `<dest>/render/`, write one `icon-<w>x<h>.html` page per Step 2 size, carrying the picked `.mark` markup in an element with the shared class `.render`.
|
|
81
|
+
3. Declare each `.render` element at `<w>/2` by `<h>/2`, since `canon capture` screenshots at a fixed 2x scale and the PNG then lands on the target size.
|
|
82
|
+
4. Declare no font on them. Each holds the mark alone, and `canon capture` skips the font check on an element with no text, where `system-ui` would be refused.
|
|
83
|
+
5. Render the batch:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
canon capture <dest>/render --selector .render --out <write-folder>
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
6. Report each written file's path and the dimensions `canon capture` printed, confirming each equals its Step 2 target rather than half of it.
|
|
90
|
+
|
|
91
|
+
The card leaves this batch and takes Step 7 instead. An icon is the mark alone and a scratch page renders it faithfully, where the card composes the mark with the project's own type and color, which a scratch page can only copy.
|
|
92
|
+
|
|
93
|
+
## Step 7: write the card as a route and capture it through the server
|
|
94
|
+
|
|
95
|
+
A card captured from a page this run deletes leaves a PNG and nothing that produced it, so renaming the project means another pick loop to move one string. Write the composition into a route the project keeps, and capture it through a running server so it reads the real stylesheet, tokens, and fonts.
|
|
96
|
+
|
|
97
|
+
This is Astro-shaped for now, because Astro is the one web stack whose config gives a route a structural build exclusion. A project already holding the card route scaffold takes the route path, and everything else takes the page path. Say which one decided, since the two leave the project different things.
|
|
98
|
+
|
|
99
|
+
### The route path
|
|
100
|
+
|
|
101
|
+
Read `${CLAUDE_SKILL_DIR}/references/card-route.md` on reaching this path, for the scaffold check, the message to give when it is missing, and the write, serve, and capture sequence. A project with no scaffold skips it.
|
|
102
|
+
|
|
103
|
+
### The page path
|
|
104
|
+
|
|
105
|
+
Where the project holds no route to write into, write `og-image.html` into `<dest>/render/` with its `.render` wrapper sized 600x315, then capture that one page:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
canon capture <dest>/render/og-image.html --selector .render --out <write-folder>
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
It takes its own call because Step 6's batch is already captured by the time this step picks a path. Say that the card shipped as a PNG with no source, and that the project gains one when it grows a route to hold the composition.
|
|
112
|
+
|
|
113
|
+
### Closing the scratch folder and the canvas
|
|
114
|
+
|
|
115
|
+
Delete `<dest>` once both captures land, then close the canvas through `pick-by-eye` Step 6 items 3 to 8, which archive every arm and delete the pages the run added. The route is not a leftover variant, since it holds the arm the operator picked.
|
|
116
|
+
|
|
117
|
+
A project whose card was generated before this route existed keeps its PNG. Say so rather than regenerating it, since the pick loop spends attention on a file nobody complained about, and the next real edit picks up the route.
|
|
118
|
+
|
|
119
|
+
## Response format
|
|
120
|
+
|
|
121
|
+
```plaintext
|
|
122
|
+
📝 Wrote <write-folder>/favicon.svg
|
|
123
|
+
📝 Wrote <write-folder>/icon-16x16.png (16x16)
|
|
124
|
+
📝 Wrote card-src/pages/og-card.astro (route path only)
|
|
125
|
+
📝 Wrote <write-folder>/og-image.png (1200x630)
|
|
126
|
+
|
|
127
|
+
Write folder: <tier that decided>. Move the files if this project's own convention differs.
|
|
128
|
+
Card source: <the route, captured through the card server|a scratch page, since this project holds no card route>.
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## What this delegates
|
|
132
|
+
|
|
133
|
+
Cite these rather than restating them.
|
|
134
|
+
|
|
135
|
+
- `pick-by-eye` owns Steps 1 through 5 of the render-and-pick loop, cited above
|
|
136
|
+
- `canon:canvas-board` carries a picked direction into `canon/DESIGN.md`. This skill only reads it.
|
|
137
|
+
- `canon capture` owns the render mechanics, its font refusal, its fixed 2x scale, and its reported dimensions. It reads an `http(s)://` source, where `--out` names the PNG.
|
|
138
|
+
- The `astro` tooling stack owns the card route's scaffold, its second config, and the exclusion check, read with `canon tooling reference astro`. This skill writes into the route and never reshapes it.
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Card route path
|
|
3
|
-
description: How
|
|
3
|
+
description: How design-identity writes the picked card composition into a project's existing Astro card route and captures it through the card server
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Card route path
|
|
7
7
|
|
|
8
|
-
Applies to Step 7 of `
|
|
8
|
+
Applies to Step 7 of `design-identity` when the project already holds the card route scaffold. A project without it takes the page path in the skill body instead.
|
|
9
9
|
|
|
10
10
|
## The scaffold
|
|
11
11
|
|
|
@@ -9,9 +9,9 @@ description: Why a design round needs a stated layer ordering and a taste catalo
|
|
|
9
9
|
|
|
10
10
|
Without this skill, a design round has no vocabulary to declare what it is varying and no standard of quality once it has. Both halves failed together and each is measured.
|
|
11
11
|
|
|
12
|
-
The failure was measured on a real page. Four `
|
|
12
|
+
The failure was measured on a real page. Four `pick-by-eye` rounds ran against one landing page in a single working session, and three changed nothing the operator could see. Each varied a property at Surface, being palette, figure treatment, heading separation and underline reach, against a page whose defect sat at composition.
|
|
13
13
|
|
|
14
|
-
The instruction against that already existed. `
|
|
14
|
+
The instruction against that already existed. `pick-by-eye` Step 1 says to name the layer and Step 2 says a palette cannot be picked ahead of a composition. All four rounds skipped both, and nothing reported it. A session told to name a layer has no catalog to name from, so the rule had nothing behind it.
|
|
15
15
|
|
|
16
16
|
The second half is the output itself. A model with no stated direction draws the population average of its training data, which produces interfaces that satisfy every craft rule and still read templated.
|
|
17
17
|
|
|
@@ -27,7 +27,7 @@ A session handed either one unfiltered adopts a stack the project does not use,
|
|
|
27
27
|
- Enumerate the layers in settle order, so an instruction to name one has a catalog behind it
|
|
28
28
|
- State that a round varies one layer, and that a complaint is worked at the lowest layer it reaches rather than the cheapest one to change
|
|
29
29
|
- Carry grey-boxing as the operational form of the ordering rule, since removing the higher layers from view is what makes a lower one judgeable
|
|
30
|
-
- Cite the correctness floor rather than restating it. `copy`, `a11y`, `forms` and `ux-completeness` already carry accessibility, keyboard, forms, states and rendered copy on the rendered paths, and a second copy here drifts with nothing comparing the two.
|
|
30
|
+
- Cite the correctness floor rather than restating it. `copy`, `a11y`, `keyboard`, `forms` and `ux-completeness` already carry accessibility, keyboard, forms, states and rendered copy on the rendered paths, and a second copy here drifts with nothing comparing the two.
|
|
31
31
|
- Hold in the body what every design moment pays for, being the read, the layers, the ordering, grey-boxing and the locks, and defer everything a single moment needs.
|
|
32
32
|
- State what has to stay constant across a whole surface, since coherence is a property of the whole and each of those is broken one section at a time.
|
|
33
33
|
- Detect the mode before reading anything when a surface already exists, and name what cannot change silently, since a slug, a field name or an analytics event breaks something outside the surface.
|
|
@@ -56,7 +56,7 @@ A rule failing any of the four is recorded as considered and declined rather tha
|
|
|
56
56
|
- Express intensity as a numeric scale. A session picks a middle value and reports compliance, which satisfies the rule and decides nothing.
|
|
57
57
|
- Claim the reported failure is closed. Nothing measures whether a round follows these rules, so this skill states them and the measurement is owed separately.
|
|
58
58
|
- Duplicate a rule a surface already states for itself, such as slide layout or terminal color, where pointing at that surface is the whole of the correct answer
|
|
59
|
-
- Be reached only by an author typing its name. `claude/skills/create-skill/references/skill.md` makes this a review criterion rather than a check, since nothing answers it before the skill has run. The intended non-author caller is the declared read in `
|
|
59
|
+
- Be reached only by an author typing its name. `claude/skills/create-skill/references/skill.md` makes this a review criterion rather than a check, since nothing answers it before the skill has run. The intended non-author caller is the declared read in `pick-by-eye`'s output. A round producing no read, with this skill never loaded, is the evidence that the description's triggers are too weak.
|
|
60
60
|
|
|
61
61
|
## Guards
|
|
62
62
|
|
|
@@ -66,11 +66,11 @@ A rule failing any of the four is recorded as considered and declined rather tha
|
|
|
66
66
|
|
|
67
67
|
## Out of scope
|
|
68
68
|
|
|
69
|
-
- Accessibility,
|
|
69
|
+
- Accessibility, ARIA and alt text, which `a11y` owns on every rendered path, and keyboard interaction, which `keyboard` owns
|
|
70
70
|
- State coverage, empty and loading treatment, destructive confirmation and truncation, which `ux-completeness` owns
|
|
71
71
|
- Validation timing, error placement and save blocking, which `forms` owns
|
|
72
72
|
- Rendered copy casing, button labels and error wording, which `copy` owns
|
|
73
|
-
- The candidate loop, the arm set, the render and the pick, which `
|
|
73
|
+
- The candidate loop, the arm set, the render and the pick, which `pick-by-eye` owns and which this skill is loaded alongside rather than inside
|
|
74
74
|
- The shape of the project's design document, its sections and its role tables, which `claude/skills/canvas-board/references/design.md` governs
|
|
75
75
|
- Prose on the surface being designed, which `write-human` and `markdown.md` govern between them
|
|
76
76
|
- Measuring whether finished output followed these rules, which needs a check this skill does not carry and which no command reaches while a render is an image rather than a parse
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: design-taste
|
|
3
|
-
description: Carries the layer model that decides which design decision settles first, the rules that keep a surface coherent across sections, and the catalog of defaults a model reaches for when nothing states a direction. Use when drafting or judging an interface, a page, or any rendered surface, when output reads generic or templated, when redesigning something that already exists, or when asked to "make this look designed", "why does this look like AI made it", "give it taste", "what layer is this decision at", or "grey-box this first". Do NOT use for accessibility, forms, or state coverage, which the `ui` governance rules carry, for the shape of the project's design document, which `design.md` governs, or to run the candidate loop, which is `
|
|
3
|
+
description: Carries the layer model that decides which design decision settles first, the rules that keep a surface coherent across sections, and the catalog of defaults a model reaches for when nothing states a direction. Use when drafting or judging an interface, a page, or any rendered surface, when output reads generic or templated, when redesigning something that already exists, or when asked to "make this look designed", "why does this look like AI made it", "give it taste", "what layer is this decision at", or "grey-box this first". Do NOT use for accessibility, forms, or state coverage, which the `ui` governance rules carry, for the shape of the project's design document, which `design.md` governs, or to run the candidate loop, which is `pick-by-eye`.
|
|
4
4
|
metadata:
|
|
5
5
|
family: build
|
|
6
6
|
---
|
|
@@ -156,7 +156,7 @@ Run `${CLAUDE_SKILL_DIR}/references/preflight.md` against the output. It is the
|
|
|
156
156
|
|
|
157
157
|
Four neighbors own the rest.
|
|
158
158
|
|
|
159
|
-
- The candidate loop, the arm set, the render, and the pick: `
|
|
159
|
+
- The candidate loop, the arm set, the render, and the pick: `pick-by-eye`
|
|
160
160
|
- The shape of the project's design document and where its values live: `${CLAUDE_SKILL_DIR}/../canvas-board/references/design.md`
|
|
161
161
|
- Reading source for roughness: `ux-audit`. Measuring what a running interface costs to paint: `ux-measure`
|
|
162
162
|
- Prose on the surface being designed: the `write-human` skill
|
|
@@ -47,7 +47,7 @@ Documentation, articles, reference pages, learning material. The reader arrived
|
|
|
47
47
|
## Kinds this file does not cover
|
|
48
48
|
|
|
49
49
|
- **Transactional flows** such as checkout, sign-up and settings are read as application UI. Their distinctive rules, state coverage and error recovery, sit in the `ui` governance rules.
|
|
50
|
-
- **Presentation surfaces** such as slide decks are drafted by `
|
|
50
|
+
- **Presentation surfaces** such as slide decks are drafted by `make-deck`, which carries the deck's design rules. Take the layer ordering and the floor from the body and the rest from it.
|
|
51
51
|
- **Terminal and text-mode surfaces** have no layout engine and their own color rules, stated where the writing surface is decided rather than here.
|
|
52
52
|
|
|
53
53
|
A read naming any of the three above takes the body's rules and says it has no per-kind guidance, naming the surface that governs it. A read naming a kind this file does not list at all says so rather than borrowing the nearest section.
|
|
@@ -101,5 +101,5 @@ Every word on the surface states what is true of it.
|
|
|
101
101
|
|
|
102
102
|
## Handover
|
|
103
103
|
|
|
104
|
-
- [ ] The weakest thing on the surface is named out loud, per `
|
|
104
|
+
- [ ] The weakest thing on the surface is named out loud, per `pick-by-eye` Step 3, and fixed where naming it would embarrass the work
|
|
105
105
|
- [ ] The floor the `ui` governance rules carry has been applied, not assumed
|