@erclx/canon 5.30.0 → 5.32.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/api-design/references/adopted.md +1 -1
- package/claude/skills/auto-ship/REQUIREMENT.md +4 -16
- package/claude/skills/auto-ship/SKILL.md +13 -58
- package/claude/skills/auto-ship/references/draft-mark.md +2 -2
- package/claude/skills/auto-ship/references/failure-recovery.md +1 -5
- package/claude/skills/auto-ship/references/tier-failures.md +1 -1
- package/claude/skills/auto-ship/references/ui-checklist.md +2 -2
- package/claude/skills/auto-ship/references/verb-absent.md +3 -27
- package/claude/skills/backlog-triage/SKILL.md +1 -1
- package/claude/skills/build-in-slices/REQUIREMENT.md +1 -1
- package/claude/skills/build-in-slices/references/adopted.md +1 -1
- package/claude/skills/canon-cli/REQUIREMENT.md +4 -6
- package/claude/skills/canon-cli/SKILL.md +2 -2
- package/claude/skills/canon-feedback/REQUIREMENT.md +1 -1
- package/claude/skills/canon-feedback/SKILL.md +10 -13
- package/claude/skills/canon-feedback-triage/REQUIREMENT.md +13 -14
- package/claude/skills/canon-feedback-triage/SKILL.md +50 -29
- package/claude/skills/canvas/REQUIREMENT.md +3 -4
- package/claude/skills/canvas/SKILL.md +5 -5
- package/{standards → claude/skills/canvas/references}/canvas.md +12 -1
- package/claude/skills/ci-workflow/REQUIREMENT.md +0 -1
- package/claude/skills/context-fold/REQUIREMENT.md +8 -20
- package/claude/skills/context-fold/SKILL.md +21 -45
- package/claude/skills/context-fold/references/classify.md +7 -8
- package/claude/skills/context-fold/references/completion-report.md +2 -6
- package/claude/skills/context-fold/references/context-refresh.md +5 -15
- package/claude/skills/context-fold/references/promoted-pages.md +3 -3
- package/claude/skills/context-fold/references/receipt-sweep.md +6 -17
- package/claude/skills/context-fold/references/unusable-baseline.md +4 -6
- package/claude/skills/create-rule/REQUIREMENT.md +0 -1
- package/claude/skills/create-skill/REQUIREMENT.md +6 -4
- package/claude/skills/create-skill/SKILL.md +9 -8
- package/{standards → claude/skills/create-skill/references}/skill-paths.md +1 -0
- package/claude/skills/decision-escalate/REQUIREMENT.md +1 -1
- package/claude/skills/decision-escalate/SKILL.md +1 -1
- package/claude/skills/design-taste/REQUIREMENT.md +0 -2
- package/claude/skills/design-taste/SKILL.md +2 -4
- package/claude/skills/design-taste/references/vocabulary.md +1 -1
- package/claude/skills/docs-sync/REQUIREMENT.md +3 -3
- package/claude/skills/docs-sync/SKILL.md +1 -1
- package/claude/skills/document-health/REQUIREMENT.md +2 -2
- package/claude/skills/document-health/SKILL.md +4 -5
- package/claude/skills/document-health/references/axes.md +4 -6
- package/claude/skills/draft-and-pick/REQUIREMENT.md +16 -14
- package/claude/skills/draft-and-pick/SKILL.md +40 -32
- package/claude/skills/draft-and-pick/references/live-arms.md +9 -9
- package/claude/skills/draft-doc/REQUIREMENT.md +5 -5
- package/claude/skills/draft-doc/SKILL.md +10 -11
- package/claude/skills/draft-doc/references/requirements.md +61 -0
- package/claude/skills/draft-doc/references/wiki-kind.md +53 -0
- package/claude/skills/draft-doc/references/wiki.md +50 -30
- package/claude/skills/draft-figure/REQUIREMENT.md +2 -2
- package/claude/skills/draft-figure/SKILL.md +5 -5
- package/claude/skills/draft-figure/references/architecture-set.md +4 -4
- package/claude/skills/draft-figure/references/hand-drawn.md +1 -1
- package/claude/skills/draft-figure/references/mermaid-path.md +55 -0
- package/claude/skills/draft-figure/references/mermaid.md +43 -34
- package/claude/skills/draft-identity/REQUIREMENT.md +1 -1
- package/claude/skills/draft-identity/SKILL.md +9 -7
- package/claude/skills/draft-ready/REQUIREMENT.md +1 -1
- package/claude/skills/draft-ready/SKILL.md +6 -6
- package/claude/skills/draft-ready/references/assembly.md +1 -1
- package/{standards → claude/skills/draft-ready/references}/ready.md +13 -5
- package/claude/skills/git-issue/SKILL.md +1 -1
- package/claude/skills/git-issue/references/issue.md +3 -3
- package/claude/skills/git-pr/SKILL.md +1 -1
- package/claude/skills/git-ship/REQUIREMENT.md +0 -2
- package/claude/skills/git-ship/SKILL.md +16 -24
- package/claude/skills/git-stage/SKILL.md +1 -1
- package/claude/skills/markdown-craft/REQUIREMENT.md +23 -0
- package/claude/skills/markdown-craft/SKILL.md +17 -0
- package/{standards → claude/skills/markdown-craft/references}/markdown.md +14 -7
- package/claude/skills/plan-feature/REQUIREMENT.md +2 -1
- package/claude/skills/plan-feature/SKILL.md +14 -8
- package/{standards → claude/skills/plan-feature/references}/plan.md +33 -21
- package/claude/skills/plan-groundwork/SKILL.md +5 -6
- package/{standards → claude/skills/plan-groundwork/references}/groundwork.md +17 -4
- package/claude/skills/plan-intake/SKILL.md +2 -3
- package/{standards → claude/skills/plan-intake/references}/intake.md +17 -2
- package/claude/skills/plan-intake-answer/REQUIREMENT.md +1 -1
- package/claude/skills/plan-intake-answer/SKILL.md +1 -1
- package/claude/skills/review-address/SKILL.md +2 -2
- package/claude/skills/review-address/references/post-review-findings.md +1 -1
- package/claude/skills/review-craft/REQUIREMENT.md +3 -3
- package/claude/skills/review-craft/SKILL.md +2 -2
- package/claude/skills/review-craft/references/ui.md +4 -4
- package/claude/skills/review-pr/REQUIREMENT.md +1 -1
- package/claude/skills/review-pr/SKILL.md +5 -7
- package/claude/skills/review-pr/references/post.md +2 -2
- package/claude/skills/review-ui/REQUIREMENT.md +0 -1
- package/claude/skills/review-ui/SKILL.md +1 -1
- package/claude/skills/review-ui/references/post.md +1 -1
- package/claude/skills/role-orchestrator/REQUIREMENT.md +0 -3
- package/claude/skills/role-orchestrator/SKILL.md +8 -8
- package/claude/skills/role-orchestrator/references/orchestrator-dispatch.md +4 -3
- package/claude/skills/role-orchestrator/references/orchestrator-handoff.md +7 -10
- package/claude/skills/role-orchestrator/references/orchestrator-parked.md +2 -2
- package/claude/skills/role-orchestrator/references/orchestrator-refill.md +0 -3
- package/claude/skills/role-orchestrator/references/orchestrator-resume.md +1 -1
- package/claude/skills/role-planner/SKILL.md +2 -2
- package/claude/skills/role-reviewer/SKILL.md +1 -1
- package/claude/skills/role-worker/SKILL.md +2 -2
- package/claude/skills/session-compact/REQUIREMENT.md +1 -4
- package/claude/skills/session-compact/SKILL.md +3 -13
- package/claude/skills/session-compact/references/handoff-note.md +2 -2
- package/claude/skills/session-map/REQUIREMENT.md +1 -9
- package/claude/skills/session-map/SKILL.md +8 -16
- package/{standards → claude/skills/session-map/references}/session.md +17 -11
- package/claude/skills/session-relay/REQUIREMENT.md +1 -1
- package/claude/skills/session-resume/REQUIREMENT.md +4 -6
- package/claude/skills/session-resume/SKILL.md +3 -9
- package/claude/skills/session-worktree/SKILL.md +1 -1
- package/claude/skills/session-worktree/references/main-root-writes.md +2 -2
- package/claude/skills/systematic-debugging/REQUIREMENT.md +0 -1
- package/claude/skills/target-check/REQUIREMENT.md +3 -3
- package/claude/skills/target-check/SKILL.md +1 -1
- package/claude/skills/target-check/references/domains.md +1 -1
- package/claude/skills/target-setup/REQUIREMENT.md +4 -4
- package/claude/skills/target-setup/SKILL.md +3 -3
- package/claude/skills/target-setup/references/detect.md +1 -1
- package/claude/skills/target-setup/references/indexes.md +1 -1
- package/claude/skills/task-board/SKILL.md +4 -4
- package/claude/skills/task-board/references/archive.md +1 -1
- package/{standards → claude/skills/task-board/references}/board.md +9 -0
- package/claude/skills/task-board/references/decline.md +1 -1
- package/{standards → claude/skills/task-board/references}/tasks.md +13 -8
- package/claude/skills/teach-workspace/SKILL.md +1 -1
- package/claude/skills/teach-workspace/references/revisit.md +1 -1
- package/{standards → claude/skills/teach-workspace/references}/teach.md +17 -5
- package/claude/skills/test-first/REQUIREMENT.md +1 -1
- package/claude/skills/ux-audit/REQUIREMENT.md +2 -2
- package/claude/skills/ux-audit/SKILL.md +2 -3
- package/claude/skills/write-human/REQUIREMENT.md +0 -1
- package/claude/skills/write-human/SKILL.md +2 -2
- package/docs/agents/audits.md +1 -1
- package/docs/agents/canvas.md +1 -1
- package/docs/agents/commands.md +6 -10
- package/docs/agents/context-audit-checks.md +10 -24
- package/docs/agents/context-audit.md +7 -15
- package/docs/agents/context-classify.md +5 -5
- package/docs/agents/counts.md +5 -5
- package/docs/agents/drift-surfaces.md +2 -2
- package/docs/agents/index.md +3 -4
- package/docs/agents/install-and-sync.md +6 -6
- package/docs/agents/intake.md +1 -1
- package/docs/agents/markdown-audit.md +1 -1
- package/docs/agents/records-stale.md +5 -5
- package/docs/agents/records-validate.md +1 -1
- package/docs/agents/records.md +2 -2
- package/docs/agents/restated.md +1 -1
- package/docs/agents/routing.md +1 -1
- package/docs/agents/rule-citations.md +1 -1
- package/docs/agents/skills-audit.md +2 -2
- package/docs/agents/state-scoped-risk.md +2 -2
- package/docs/agents/superseded.md +2 -2
- package/docs/agents/tasks-plans.md +2 -2
- package/docs/agents/tasks-validate.md +1 -1
- package/docs/agents/tasks.md +1 -1
- package/docs/agents/teach.md +1 -1
- package/docs/agents/test-order.md +1 -1
- package/docs/agents/upstream.md +94 -0
- package/docs/target/migrations.md +24 -0
- package/docs/target/projects.md +5 -7
- package/docs/target/scenarios.md +2 -2
- package/docs/target/sync.md +3 -3
- package/docs/workflow/ai-workflow.md +7 -38
- package/docs/workflow/index.md +1 -1
- package/docs/workflow/operating-model.md +8 -8
- package/docs/workflow/parallel-features.md +7 -7
- package/docs/workflow/skill-map-on-request.md +13 -16
- package/docs/workflow/skill-map.md +20 -32
- package/docs/workflow/visual-design-workflow.md +11 -14
- package/governance/renames.toml +0 -23
- package/governance/rules/canon/605-worktrees.md +1 -1
- package/governance/rules/{standards → canon}/plan.md +5 -5
- package/governance/rules/canon/tasks.md +18 -0
- package/governance/rules/writing/markdown.md +23 -0
- package/governance/stacks/base.toml +1 -1
- package/package.json +1 -1
- package/scripts/core/install-check.sh +2 -2
- package/scripts/core/regen-web-previews.ts +1 -1
- package/src/audits/catalog.ts +5 -97
- package/src/claude/cases/authoring.ts +5 -18
- package/src/claude/cases/misc.ts +0 -17
- package/src/claude/cases/setup.ts +3 -20
- package/src/claude/cases/workflow.ts +0 -33
- package/src/claude/seeds.ts +1 -7
- package/src/claude/skills-audit.ts +1 -1
- package/src/claude/skills-reach.ts +1 -1
- package/src/cli/help.ts +3 -4
- package/src/cli.ts +2 -4
- package/src/commands/claude.ts +9 -15
- package/src/commands/context.ts +18 -280
- package/src/commands/feedback.ts +22 -91
- package/src/commands/gov.ts +2 -2
- package/src/commands/records.ts +24 -6
- package/src/commands/sync.ts +5 -3
- package/src/commands/upstream.ts +430 -0
- package/src/context/audit.ts +6 -15
- package/src/context/classify/extract.ts +6 -13
- package/src/context/classify/patterns.ts +2 -41
- package/src/context/classify/prompts.ts +2 -6
- package/src/context/classify/run.ts +3 -3
- package/src/context/folders.ts +7 -12
- package/src/context/gate.ts +11 -91
- package/src/context/requirements.ts +13 -4
- package/src/counts/scan.ts +3 -3
- package/src/design/components.ts +2 -2
- package/src/feedback/body.ts +0 -12
- package/src/gate/measures.ts +6 -57
- package/src/gate/stages.ts +0 -1
- package/src/gov/citations.ts +9 -3
- package/src/gov/restated.ts +3 -3
- package/src/markdown/structure.ts +3 -3
- package/src/migrate/record-layout.ts +3 -3
- package/src/records/backup.ts +1 -0
- package/src/records/ordinal.ts +1 -1
- package/src/records/prune.ts +2 -1
- package/src/records/stale-canonical.ts +2 -2
- package/src/records/validate.ts +55 -0
- package/src/roots/record.ts +2 -1
- package/src/sandbox/scenario.ts +115 -11
- package/src/shipped/references.ts +3 -3
- package/src/standards/read.ts +52 -1
- package/src/sync/seeds-report.ts +1 -1
- package/src/tasks/answers.ts +14 -1
- package/src/tasks/reach.ts +2 -2
- package/src/tasks/stack.ts +176 -0
- package/src/tasks/validate.ts +1 -1
- package/src/teach/workspace.ts +1 -1
- package/src/upstream/catalog.ts +112 -0
- package/src/upstream/cursor.ts +120 -0
- package/src/upstream/digest.ts +75 -0
- package/src/upstream/due.ts +128 -0
- package/src/upstream/releases.ts +170 -0
- package/standards/context.md +3 -5
- package/standards/design.md +2 -3
- package/standards/index.md +0 -23
- package/standards/publish.md +1 -1
- package/standards/rule.md +1 -1
- package/standards/skill.md +1 -1
- package/tooling/base/reference.md +1 -1
- package/tooling/claude/reference.md +6 -20
- package/tooling/claude/seeds/.claude/hooks/index-reminder.sh +1 -1
- package/tooling/claude/seeds/.claude/hooks/records-index.sh +8 -20
- package/tooling/claude/seeds/.claude/hooks/standards-audit.sh +3 -3
- package/tooling/claude/seeds/CLAUDE.md +1 -3
- package/tooling/claude/seeds/canon/REQUIREMENTS.md +2 -9
- package/tooling/web/configs/e2e/screenshot.ts +0 -1
- package/claude/skills/auto-ship/references/review-findings.md +0 -20
- package/claude/skills/bash-cli-script/REQUIREMENT.md +0 -43
- package/claude/skills/bash-cli-script/SKILL.md +0 -53
- package/claude/skills/bash-cli-script/references/template.md +0 -19
- package/claude/skills/canon-operator/REQUIREMENT.md +0 -62
- package/claude/skills/canon-operator/SKILL.md +0 -113
- package/claude/skills/canon-rollout/REQUIREMENT.md +0 -59
- package/claude/skills/canon-rollout/SKILL.md +0 -140
- package/claude/skills/canon-rollout/references/failure-recovery.md +0 -20
- package/claude/skills/context-fold/references/anchor-sweep.md +0 -58
- package/claude/skills/context-fold/references/wireframe-sweep.md +0 -45
- package/claude/skills/create-standard/REQUIREMENT.md +0 -33
- package/claude/skills/create-standard/SKILL.md +0 -31
- package/claude/skills/design-extract/REQUIREMENT.md +0 -42
- package/claude/skills/design-extract/SKILL.md +0 -108
- package/claude/skills/draft-and-pick/references/frame.html +0 -118
- package/claude/skills/draft-doc/references/wireframes.md +0 -48
- package/claude/skills/index-lookup/REQUIREMENT.md +0 -35
- package/claude/skills/index-lookup/SKILL.md +0 -44
- package/claude/skills/markdown-propose/REQUIREMENT.md +0 -47
- package/claude/skills/markdown-propose/SKILL.md +0 -122
- package/claude/skills/markdown-propose/references/format.md +0 -118
- package/claude/skills/memory-capture/REQUIREMENT.md +0 -50
- package/claude/skills/memory-capture/SKILL.md +0 -117
- package/claude/skills/memory-review/REQUIREMENT.md +0 -52
- package/claude/skills/memory-review/SKILL.md +0 -129
- package/claude/skills/memory-review/references/later-phases.md +0 -118
- package/claude/skills/memory-review/references/receipt-format.md +0 -64
- package/claude/skills/project-commands/REQUIREMENT.md +0 -42
- package/claude/skills/project-commands/SKILL.md +0 -87
- package/claude/skills/repo-metadata/REQUIREMENT.md +0 -37
- package/claude/skills/repo-metadata/SKILL.md +0 -54
- package/claude/skills/restate-plainly/REQUIREMENT.md +0 -41
- package/claude/skills/restate-plainly/SKILL.md +0 -41
- package/claude/skills/review-branch/REQUIREMENT.md +0 -40
- package/claude/skills/review-branch/SKILL.md +0 -137
- package/claude/skills/seed-sync/REQUIREMENT.md +0 -45
- package/claude/skills/seed-sync/SKILL.md +0 -158
- package/claude/skills/sketch-design/REQUIREMENT.md +0 -38
- package/claude/skills/sketch-design/SKILL.md +0 -94
- package/claude/skills/ux-walkthrough/REQUIREMENT.md +0 -56
- package/claude/skills/ux-walkthrough/SKILL.md +0 -53
- package/claude/skills/ux-walkthrough/references/builds.md +0 -15
- package/claude/skills/ux-walkthrough/references/candidate-pages.md +0 -11
- package/claude/skills/ux-walkthrough/references/measuring.md +0 -22
- package/claude/skills/ux-walkthrough/references/record.md +0 -36
- package/claude/skills/ux-walkthrough/references/relay.md +0 -25
- package/docs/agents/architecture-record.md +0 -36
- package/docs/agents/review-classification.md +0 -76
- package/governance/rules/canon/601-indexes.md +0 -9
- package/governance/rules/canon/603-memory.md +0 -11
- package/governance/rules/claude/565-behavior.md +0 -27
- package/governance/rules/claude/567-planning.md +0 -16
- package/governance/rules/claude/575-hooks.md +0 -16
- package/governance/rules/claude/576-settings.md +0 -13
- package/governance/rules/claude/592-claude-md.md +0 -19
- package/governance/rules/lang/120-bash.md +0 -18
- package/governance/rules/standards/architecture.md +0 -13
- package/governance/rules/standards/groundwork.md +0 -13
- package/governance/rules/standards/intake.md +0 -12
- package/governance/rules/standards/markdown.md +0 -16
- package/governance/rules/standards/memory.md +0 -12
- package/governance/rules/standards/ready.md +0 -13
- package/governance/rules/standards/requirements.md +0 -12
- package/governance/rules/standards/session.md +0 -13
- package/governance/rules/standards/tasks.md +0 -15
- package/governance/rules/standards/teach.md +0 -14
- package/governance/rules/standards/wiki.md +0 -13
- package/governance/rules/standards/wireframes.md +0 -13
- package/governance/rules/writing/800-prose.md +0 -15
- package/src/autoship/classify.ts +0 -75
- package/src/autoship/paths.ts +0 -50
- package/src/commands/autoship.ts +0 -129
- package/src/commands/repo.ts +0 -393
- package/src/context/architecture.ts +0 -654
- package/src/context/wireframe-states.ts +0 -238
- package/src/repo/metadata.ts +0 -206
- package/standards/architecture.md +0 -127
- package/standards/memory.md +0 -158
- package/standards/mermaid.md +0 -64
- package/standards/requirements.md +0 -79
- package/standards/wiki.md +0 -77
- package/standards/wireframes.md +0 -143
- package/tooling/claude/seeds/.claude/memory/index.md +0 -8
- package/tooling/claude/seeds/canon/ARCHITECTURE.md +0 -23
- package/tooling/claude/seeds/canon/wireframes/index.md +0 -8
- /package/{standards → claude/skills/create-skill/references}/skill-practice.md +0 -0
- /package/{standards → claude/skills/create-skill/references}/skill-requirement.md +0 -0
- /package/{standards → claude/skills/plan-feature/references}/plan-lifecycle.md +0 -0
- /package/{standards → claude/skills/plan-groundwork/references}/groundwork-spikes.md +0 -0
- /package/{standards → claude/skills/task-board/references}/tasks-decline.md +0 -0
- /package/{standards → claude/skills/teach-workspace/references}/glossary.md +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Visual design workflow
|
|
3
|
-
description: Tiered guide for design
|
|
3
|
+
description: Tiered guide for design authoring with Claude Code
|
|
4
4
|
category: Workflow
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -14,17 +14,17 @@ The tier framework sits alongside [Claude Design](../../wiki/claude/design.md),
|
|
|
14
14
|
|
|
15
15
|
## Tier 0: prose only
|
|
16
16
|
|
|
17
|
-
The default. `canon/DESIGN.md` holds visual intent as token tables for color, typography, spacing, and borders, with one Personality paragraph and at most three one-line rules a section, motion and iconography included.
|
|
17
|
+
The default. `canon/DESIGN.md` holds visual intent as token tables for color, typography, spacing, and borders, with one Personality paragraph and at most three one-line rules a section, motion and iconography included.
|
|
18
18
|
|
|
19
|
-
Claude Code reads
|
|
19
|
+
Claude Code reads it and writes the implementation. Works for CLI tools, internal dashboards, admin panels, and backend-focused projects.
|
|
20
20
|
|
|
21
21
|
### Seed shape
|
|
22
22
|
|
|
23
23
|
The toolkit seed in `tooling/claude/seeds/canon/DESIGN.md` ships a token-table template with a starting set of roles, and `standards/design.md` carries the same tables under `## Template` with placeholder rows. The column headers are what the renderer parses, so they stay verbatim in either, while the rows and values are the project's own.
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
`canon design render` writes an HTML plus CSS preview to `.canon/tmp/render/design/` for eyeballing the current system without leaving Claude Code. See `canon/context/design/index.md`.
|
|
26
26
|
|
|
27
|
-
A project wanting a neutral starting point to override runs `canon design install`, which copies one stylesheet to `.claude/design/base.css` carrying an achromatic token set as custom properties and two components built on them. Greys run from near-black to near-white and the accent is monochrome, so the only palette the project renders is one it writes itself. That file is toolkit-owned and `canon design sync` refreshes it, so a project overrides a value in `.claude/design/project/` instead, which sync never touches. Nothing arrives without that install, and the two channels are independent: a record
|
|
27
|
+
A project wanting a neutral starting point to override runs `canon design install`, which copies one stylesheet to `.claude/design/base.css` carrying an achromatic token set as custom properties and two components built on them. Greys run from near-black to near-white and the accent is monochrome, so the only palette the project renders is one it writes itself. That file is toolkit-owned and `canon design sync` refreshes it, so a project overrides a value in `.claude/design/project/` instead, which sync never touches. Nothing arrives without that install, and the two channels are independent: a record the project wrote is its own, and the installed stylesheet is the toolkit's.
|
|
28
28
|
|
|
29
29
|
A cell no source anchors ends in `? verify`, and the preview shows that marker beside the value rather than folding it in, so a swatch and a font sample stay built from the value alone. A confidence line above the sections names how many cells are anchored against how many are tagged, which is what tells a reader whether they are looking at a record of the code or a proposal about it. It reads the columns a source could anchor and leaves out the row names, so the ratio is not diluted by cells no tag could ever reach. The proposal path tags nearly all of them, so that count reads low on day one by design.
|
|
30
30
|
|
|
@@ -35,14 +35,11 @@ A cell no source anchors ends in `? verify`, and the preview shows that marker b
|
|
|
35
35
|
|
|
36
36
|
### Skills
|
|
37
37
|
|
|
38
|
-
- `canon:sketch-design` to trace a design direction from reference images or URLs, before `design-extract`'s greenfield path proposes from a personality paragraph alone
|
|
39
|
-
- `canon:design-extract` to draft `canon/DESIGN.md`, from existing project signals or from requirements alone on day one
|
|
40
38
|
- `canon:ui-checklist` for what a reviewer has to look at after UI changes, and what ships without a test
|
|
41
39
|
- `canon:ux-audit` for UX gap detection on existing surfaces
|
|
42
40
|
- `canon:ux-measure` for what a running surface costs to paint, read against published thresholds
|
|
43
|
-
- `canon:draft-and-pick` for a call settled by looking, drafting several candidates
|
|
41
|
+
- `canon:draft-and-pick` for a call settled by looking, drafting several candidates as frames on the canvas and taking your pick
|
|
44
42
|
- `canon:canvas` for a direction worked out over several turns, drawn as HTML frames you drag, select, and restyle in the browser while the session reads your changes back. Only the pick moves into `canon/DESIGN.md`, since the canvas folder is gitignored
|
|
45
|
-
- `canon:ux-walkthrough` for a multi-finding inspection pass over a running app with the operator, drafting arms from the app's own markup and recording each pick for a builder
|
|
46
43
|
- `canon:draft-identity` to draft a project's logo mark and compose it into an icon sequence and a social card, through `draft-and-pick`'s own render-and-pick loop. On an Astro project holding the card route scaffold, the card lands as a route the project keeps and is captured through a running server, so it reads the project's real stylesheet rather than typed copies of every color. Everywhere else it ships as a PNG and the run says so.
|
|
47
44
|
- Anthropic's `frontend-design` plugin optional for light visual steering
|
|
48
45
|
|
|
@@ -55,16 +52,16 @@ A cell no source anchors ends in `? verify`, and the preview shows that marker b
|
|
|
55
52
|
|
|
56
53
|
## Tier 1: visual companion
|
|
57
54
|
|
|
58
|
-
|
|
55
|
+
Prose stays as source of truth. Add a visual render as a feedback surface for the agent and for human review.
|
|
59
56
|
|
|
60
|
-
- Excalidraw handles agent-
|
|
57
|
+
- Excalidraw handles agent-drawn layouts when the round-trip canvas loop matters
|
|
61
58
|
- Claude Design joins only when codebase extraction or the annotated handoff bundle is worth the ceiling cost
|
|
62
59
|
|
|
63
60
|
Both produce derived artifacts, so human edits are review annotations rather than source changes.
|
|
64
61
|
|
|
65
62
|
### Seed shape
|
|
66
63
|
|
|
67
|
-
Same as tier 0
|
|
64
|
+
Same as tier 0. `DESIGN.md` stays human-maintained.
|
|
68
65
|
|
|
69
66
|
Impeccable, if installed, keeps its own root `DESIGN.md` and `PRODUCT.md` in its own format. These are separate files from the toolkit's `canon/DESIGN.md` and are not synced with it. Treat impeccable's pair as its own source of truth for its commands, and the toolkit's `canon/DESIGN.md` as the source other toolkit skills read.
|
|
70
67
|
|
|
@@ -91,7 +88,7 @@ Impeccable, if installed, keeps its own root `DESIGN.md` and `PRODUCT.md` in its
|
|
|
91
88
|
|
|
92
89
|
The two tools solve non-overlapping halves of the visual companion problem.
|
|
93
90
|
|
|
94
|
-
Excalidraw gives the agent a canvas it can read back over MCP. Output is agent-facing and persists as a JSON file in the repo. Pick it when Claude Code needs to iterate on
|
|
91
|
+
Excalidraw gives the agent a canvas it can read back over MCP. Output is agent-facing and persists as a JSON file in the repo. Pick it when Claude Code needs to iterate on layouts autonomously, not when a human needs polished review artifacts.
|
|
95
92
|
|
|
96
93
|
Claude Design reads the raw codebase without prose curation and produces a polished handoff bundle with chat history. Weekly quota makes it expensive, so reserve it for the extraction pass or the final handoff moment, not daily iteration.
|
|
97
94
|
|
|
@@ -147,4 +144,4 @@ Resist over-tiering early. Moving up is cheap because tiers stack. Moving down m
|
|
|
147
144
|
- `canon/context/claude-plugin/skill-strategy/overview.md`: how to decide between workflow and domain-knowledge skills
|
|
148
145
|
- [`microsoft/playwright-mcp`](https://github.com/microsoft/playwright-mcp): browser automation MCP used in tier 1 and tier 2
|
|
149
146
|
- [`ChromeDevTools/chrome-devtools-mcp`](https://github.com/ChromeDevTools/chrome-devtools-mcp): live frontend debugging MCP used in tier 1 and tier 2
|
|
150
|
-
- [`yctimlin/mcp_excalidraw`](https://github.com/yctimlin/mcp_excalidraw): community MCP server behind the tier 1
|
|
147
|
+
- [`yctimlin/mcp_excalidraw`](https://github.com/yctimlin/mcp_excalidraw): community MCP server behind the tier 1 visual companion
|
package/governance/renames.toml
CHANGED
|
@@ -18,30 +18,16 @@
|
|
|
18
18
|
# standard is a rename too: the generated rule keeps every glob and bullet, so
|
|
19
19
|
# the pair is one-to-one identity under the standard's name.
|
|
20
20
|
[renamed]
|
|
21
|
-
"005-behavior" = "565-behavior"
|
|
22
21
|
"015-output" = "566-output"
|
|
23
|
-
"070-planning" = "567-planning"
|
|
24
|
-
"025-indexes" = "601-indexes"
|
|
25
22
|
"035-tasks" = "602-tasks"
|
|
26
|
-
"045-memory" = "603-memory"
|
|
27
23
|
"055-scratch" = "604-scratch"
|
|
28
24
|
"085-worktrees" = "605-worktrees"
|
|
29
25
|
"087-git" = "606-git"
|
|
30
26
|
"510-context" = "610-context"
|
|
31
27
|
"511-indexes" = "611-indexes"
|
|
32
|
-
"520-wireframes" = "620-wireframes"
|
|
33
|
-
"530-requirements" = "630-requirements"
|
|
34
|
-
"540-architecture" = "640-architecture"
|
|
35
28
|
"550-design" = "650-design"
|
|
36
29
|
"555-tasks" = "655-tasks"
|
|
37
|
-
"556-groundwork" = "656-groundwork"
|
|
38
|
-
"557-intake" = "657-intake"
|
|
39
30
|
"558-plan" = "658-plan"
|
|
40
|
-
"559-memory" = "659-memory"
|
|
41
|
-
"561-teach" = "661-teach"
|
|
42
|
-
"562-session" = "662-session"
|
|
43
|
-
"563-ready" = "663-ready"
|
|
44
|
-
"500-prose" = "800-prose"
|
|
45
31
|
"501-markdown" = "801-markdown"
|
|
46
32
|
"580-readme" = "880-readme"
|
|
47
33
|
"591-standard-authoring" = "891-standard-authoring"
|
|
@@ -51,17 +37,8 @@
|
|
|
51
37
|
"090-code-comments" = "790-code-comments"
|
|
52
38
|
"658-plan" = "plan"
|
|
53
39
|
"610-context" = "context"
|
|
54
|
-
"620-wireframes" = "wireframes"
|
|
55
|
-
"630-requirements" = "requirements"
|
|
56
|
-
"640-architecture" = "architecture"
|
|
57
40
|
"650-design" = "design"
|
|
58
41
|
"655-tasks" = "tasks"
|
|
59
|
-
"656-groundwork" = "groundwork"
|
|
60
|
-
"657-intake" = "intake"
|
|
61
|
-
"659-memory" = "memory"
|
|
62
|
-
"661-teach" = "teach"
|
|
63
|
-
"662-session" = "session"
|
|
64
|
-
"663-ready" = "ready"
|
|
65
42
|
"570-skill" = "skill"
|
|
66
43
|
"590-rule-authoring" = "rule"
|
|
67
44
|
"801-markdown" = "markdown"
|
|
@@ -10,5 +10,5 @@ description: Enter a linked worktree for implementation, resolve shared session
|
|
|
10
10
|
|
|
11
11
|
## Shared session scratch
|
|
12
12
|
|
|
13
|
-
- Shared session scratch (`.canon/plans/`, `.canon/review/`, `.canon/
|
|
13
|
+
- Shared session scratch (`.canon/plans/`, `.canon/review/`, `.canon/tasks/`) lives at the main worktree root, not inside a linked worktree. From a linked worktree, resolve these paths against the main root via `git worktree list --porcelain | grep -m 1 '^worktree ' | cut -d' ' -f2-`. Fall back to `pwd` if not a git repo.
|
|
14
14
|
- From a linked worktree, or from a background session that entered none, `Edit` and `Write` refuse a main-root path and redirect to a worktree copy no later session reads. Never take that redirect. Route the write the way the `session-worktree` skill states, and report it rather than proceeding silently when that 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,18 +1,18 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
description: Filename and slug, the required sections, and the suggested-and-answer contract for a feature plan
|
|
2
|
+
description: Route edits under .canon/plans/ to the plan-feature skill for the plan's sections, the answer contract, and its lifecycle
|
|
4
3
|
paths:
|
|
5
4
|
- '.canon/plans/**'
|
|
6
5
|
---
|
|
7
6
|
|
|
8
7
|
# Plan standards
|
|
9
8
|
|
|
10
|
-
##
|
|
9
|
+
## Plan files
|
|
11
10
|
|
|
12
|
-
-
|
|
11
|
+
- Load the `canon:plan-feature` skill before a hand edit under `.canon/plans/`. It carries the filename and slug, the required sections, and the suggested-and-answer contract for a feature plan. Report it rather than proceeding silently when the skill does not resolve.
|
|
13
12
|
- Never fill an `- Answer:` slot on behalf of the person who owns it. A blank slot accepts the suggestion at execution time.
|
|
14
13
|
- Never ship a question without a `- Suggested:` line. Write `- Suggested: needs your call, <why>` where the answer turns on preference.
|
|
15
14
|
- Rewrite the `- Suggested:` line as `overridden at execution to <pick>,` plus the measurement when execution deviates from an unanswered question, leaving the slot blank. Put the same deviation in one line under the open task's `## Findings`.
|
|
15
|
+
- Fetch the source a decision rests on and quote the passage under `**Sources:**`, or mark the entry `unverified`. Never cite an outside source from recall.
|
|
16
16
|
- Move a shipped plan to `.canon/plans/archive/`. Never delete one.
|
|
17
17
|
- Amend a plan in place when a decision changes. Do not append a second passage narrating the change.
|
|
18
|
-
- Follow the plan
|
|
18
|
+
- Follow the lifecycle the `canon:plan-feature` skill carries for when a plan is written, how it is amended, and its move to the archive.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Route edits under .canon/tasks/ to the task-board skill for task shape, the board, and a declined task, and keep a session handoff apart from a task
|
|
3
|
+
paths:
|
|
4
|
+
- '.canon/tasks/**'
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Tasks standards
|
|
8
|
+
|
|
9
|
+
## Task files
|
|
10
|
+
|
|
11
|
+
- Load the `canon:task-board` skill before a hand edit under `.canon/tasks/`. It carries the folder layout, filename convention, file format, origin lines, and archiving for a task file. Report it rather than proceeding silently when the skill does not resolve.
|
|
12
|
+
- Follow the board shape the `canon:task-board` skill carries for `priority.md` and `backlog.md`, their readiness groups, and row order.
|
|
13
|
+
- Never hand-edit `.canon/tasks/index.md`. A hook regenerates it from sibling frontmatter.
|
|
14
|
+
- Follow the decline shape the `canon:task-board` skill carries for a task decided against.
|
|
15
|
+
|
|
16
|
+
## Session handoffs
|
|
17
|
+
|
|
18
|
+
- Treat a `.canon/tasks/session-*.md` file as a handoff governed by the `canon:session-map` skill. It is not a task and carries neither `## Outcomes` nor `## Findings`.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Route markdown edits to the markdown-craft skill for format and structure, the write-human skill for voice, and the audit after the edit
|
|
3
|
+
paths:
|
|
4
|
+
- '**/*.md'
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Markdown standards
|
|
8
|
+
|
|
9
|
+
## Format
|
|
10
|
+
|
|
11
|
+
- Never write an em dash or a semicolon. `canon markdown audit` reads the full ban list from the package.
|
|
12
|
+
- Load the `canon:markdown-craft` skill before a substantial markdown edit for headings, paragraph and list structure, code spans, the date form, punctuation, emphasis, file references, American spelling, and frontmatter wording. Report it rather than proceeding silently when the skill does not resolve.
|
|
13
|
+
- Run `canon markdown audit <path>` after the edit, and rewrite the sentence carrying a hit rather than swapping the token for a near-synonym.
|
|
14
|
+
|
|
15
|
+
## Voice
|
|
16
|
+
|
|
17
|
+
- Load the `canon:write-human` skill for voice, rhythm, sentence construction, and information density. Load it before drafting a passage, not after revising one.
|
|
18
|
+
- Report it rather than proceeding silently when the skill does not resolve.
|
|
19
|
+
- Do not work these rules from memory.
|
|
20
|
+
|
|
21
|
+
## Figures
|
|
22
|
+
|
|
23
|
+
- Load the `canon:draft-figure` skill before drafting or revising a Mermaid fence or a figure, and report it rather than proceeding silently when it does not resolve.
|
|
@@ -8,4 +8,4 @@ extends = ""
|
|
|
8
8
|
# project loads no rule it can never apply. `standards` holds one rule per
|
|
9
9
|
# standard routing its paths to it, generated by `canon gov regen` from each
|
|
10
10
|
# standard's frontmatter rather than authored.
|
|
11
|
-
rules = ["canon", "claude", "standards", "tooling", "writing"
|
|
11
|
+
rules = ["canon", "claude", "standards", "tooling", "writing"]
|
package/package.json
CHANGED
|
@@ -101,9 +101,9 @@ log_step "Assert scaffold"
|
|
|
101
101
|
# scaffold reads a standard through `canon standards <name>`, resolving against
|
|
102
102
|
# the toolkit rather than a copy this gate could assert on. The two
|
|
103
103
|
# rule paths stand for the `claude` and `canon` groups `base` takes whole.
|
|
104
|
-
for path in "CLAUDE.md" ".claude/wiki/index.md" ".claude" "canon/context/index.md"
|
|
104
|
+
for path in "CLAUDE.md" ".claude/wiki/index.md" ".claude" "canon/context/index.md" \
|
|
105
105
|
".prettierrc" ".editorconfig" ".lintstagedrc" ".husky/pre-commit" ".github/workflows/verify.yml" "scripts/verify.sh" \
|
|
106
|
-
".claude/rules/canon/claude/
|
|
106
|
+
".claude/rules/canon/claude/566-output.md" ".claude/rules/canon/canon/604-scratch.md"; do
|
|
107
107
|
if [ ! -e "$TARGET_DIR/$path" ]; then
|
|
108
108
|
log_error "Missing after canon init: $path"
|
|
109
109
|
fi
|
|
@@ -43,7 +43,7 @@ console.log('regen-web-previews: wrote web/public/previews/design-tokens/')
|
|
|
43
43
|
* chrome over a scratch copy holding this one workspace alone is what keeps
|
|
44
44
|
* the jump menus from naming anything else.
|
|
45
45
|
*
|
|
46
|
-
* `.canon/teach/` is gitignored session scratch, per `
|
|
46
|
+
* `.canon/teach/` is gitignored session scratch, per `claude/skills/teach-workspace/references/teach.md`, so
|
|
47
47
|
* it exists on the machine that authored the lesson and nowhere else,
|
|
48
48
|
* including CI. `web/public/previews/teach-workspace/` is therefore the
|
|
49
49
|
* durable copy: committed once the workspace exists, regenerated here as a
|
package/src/audits/catalog.ts
CHANGED
|
@@ -139,100 +139,12 @@ function allOf(
|
|
|
139
139
|
return counts
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
-
/**
|
|
143
|
-
* Reads the architecture record's measures, or nothing when the project
|
|
144
|
-
* carries no record.
|
|
145
|
-
*
|
|
146
|
-
* Three states rather than two, matching what the verb publishes. The key
|
|
147
|
-
* absent is a run that never opened the record, which the aggregate never asks
|
|
148
|
-
* for and so reads as a shape that moved. Null is a project entitled to carry
|
|
149
|
-
* no record, whose other context counts still stand, so it contributes no key
|
|
150
|
-
* rather than a zero that would read as a conforming record.
|
|
151
|
-
*/
|
|
152
|
-
function architectureCounts(
|
|
153
|
-
root: Record<string, unknown>,
|
|
154
|
-
): Record<string, number> | undefined | 'absent' {
|
|
155
|
-
if (!('architecture' in root)) return undefined
|
|
156
|
-
if (root.architecture === null) return 'absent'
|
|
157
|
-
|
|
158
|
-
const record = asObject(root.architecture)
|
|
159
|
-
const decisions = record?.decisions
|
|
160
|
-
if (
|
|
161
|
-
record === undefined ||
|
|
162
|
-
!Array.isArray(decisions) ||
|
|
163
|
-
typeof record.lines !== 'number'
|
|
164
|
-
) {
|
|
165
|
-
return undefined
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
// A record stating no length rule has no ceiling to be past, and reporting
|
|
169
|
-
// zero there would read as one measured and found conforming.
|
|
170
|
-
const ceiling =
|
|
171
|
-
typeof record.ceiling === 'number' ? record.ceiling : undefined
|
|
172
|
-
const entryCap =
|
|
173
|
-
typeof record.entryCap === 'number' ? record.entryCap : undefined
|
|
174
|
-
|
|
175
|
-
const revisitRequired = record.revisitRequired === true
|
|
176
|
-
const wordCap =
|
|
177
|
-
typeof record.wordCap === 'number' ? record.wordCap : undefined
|
|
178
|
-
const riskCap =
|
|
179
|
-
typeof record.riskCap === 'number' ? record.riskCap : undefined
|
|
180
|
-
const risksBullets =
|
|
181
|
-
typeof record.risksBullets === 'number' ? record.risksBullets : undefined
|
|
182
|
-
|
|
183
|
-
let unverifiable = 0
|
|
184
|
-
let unchecked = 0
|
|
185
|
-
let lackingRevisit = 0
|
|
186
|
-
let overWords = 0
|
|
187
|
-
for (const raw of decisions) {
|
|
188
|
-
const entry = asObject(raw)
|
|
189
|
-
const claim = entry?.claim
|
|
190
|
-
const checks = lengthOf(entry?.checks)
|
|
191
|
-
if (typeof claim !== 'string' || checks === undefined) return undefined
|
|
192
|
-
|
|
193
|
-
if (claim === 'neither') unverifiable += 1
|
|
194
|
-
else if (checks === 0) unchecked += 1
|
|
195
|
-
if (revisitRequired && entry?.revisit !== true) lackingRevisit += 1
|
|
196
|
-
if (
|
|
197
|
-
wordCap !== undefined &&
|
|
198
|
-
typeof entry?.words === 'number' &&
|
|
199
|
-
entry.words > wordCap
|
|
200
|
-
) {
|
|
201
|
-
overWords += 1
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
return {
|
|
206
|
-
// A boolean, counted so the aggregate reads it the way it reads every
|
|
207
|
-
// other measure. The verb gates on it separately, and the key is absent
|
|
208
|
-
// rather than zero on a record that declared no ceiling.
|
|
209
|
-
...(ceiling !== undefined && {
|
|
210
|
-
recordOverLength: record.lines > ceiling ? 1 : 0,
|
|
211
|
-
}),
|
|
212
|
-
// Absent on a record stating no entry cap, for the same reason.
|
|
213
|
-
...(entryCap !== undefined && {
|
|
214
|
-
recordOverCount: decisions.length > entryCap ? 1 : 0,
|
|
215
|
-
}),
|
|
216
|
-
// Absent on a record stating no revisit clause, for the same reason.
|
|
217
|
-
...(revisitRequired && { recordMissingRevisit: lackingRevisit }),
|
|
218
|
-
// Absent on a record stating no word cap or no bullet cap, for the same
|
|
219
|
-
// reason, and the bullet key absent too on a record with no Risks section.
|
|
220
|
-
...(wordCap !== undefined && { recordOverWords: overWords }),
|
|
221
|
-
...(riskCap !== undefined &&
|
|
222
|
-
risksBullets !== undefined && {
|
|
223
|
-
recordOverRisks: risksBullets > riskCap ? 1 : 0,
|
|
224
|
-
}),
|
|
225
|
-
recordUnverifiable: unverifiable,
|
|
226
|
-
recordUnchecked: unchecked,
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
|
|
230
142
|
/**
|
|
231
143
|
* Reads the requirements record's one cap, or nothing when the record is
|
|
232
144
|
* absent, states no cap, or the run never opened it.
|
|
233
145
|
*
|
|
234
|
-
* The key is optional
|
|
235
|
-
*
|
|
146
|
+
* The key is optional, so a record from a binary predating it still counts
|
|
147
|
+
* its other findings.
|
|
236
148
|
*/
|
|
237
149
|
function requirementsCounts(
|
|
238
150
|
root: Record<string, unknown>,
|
|
@@ -301,8 +213,6 @@ function contextCounts(record: unknown): Record<string, number> | undefined {
|
|
|
301
213
|
bareReferences += bare
|
|
302
214
|
}
|
|
303
215
|
|
|
304
|
-
const architecture = architectureCounts(root)
|
|
305
|
-
if (architecture === undefined) return undefined
|
|
306
216
|
const requirements = requirementsCounts(root)
|
|
307
217
|
|
|
308
218
|
const counts = allOf({
|
|
@@ -314,9 +224,7 @@ function contextCounts(record: unknown): Record<string, number> | undefined {
|
|
|
314
224
|
})
|
|
315
225
|
|
|
316
226
|
if (counts === undefined) return undefined
|
|
317
|
-
return
|
|
318
|
-
? { ...counts, ...requirements }
|
|
319
|
-
: { ...counts, ...architecture, ...requirements }
|
|
227
|
+
return { ...counts, ...requirements }
|
|
320
228
|
}
|
|
321
229
|
|
|
322
230
|
function markdownCounts(record: unknown): Record<string, number> | undefined {
|
|
@@ -587,8 +495,8 @@ export const AUDITS: readonly AuditSpec[] = [
|
|
|
587
495
|
corpus: 'tracked',
|
|
588
496
|
// The one reason this verb refuses for that is an absence rather than a
|
|
589
497
|
// break, on the same test the reach check and the skill audit take: no
|
|
590
|
-
// target adopts `canon/context
|
|
591
|
-
//
|
|
498
|
+
// target adopts `canon/context/` and an older install's `.canon/diagrams/`
|
|
499
|
+
// both, so without the allowance every such
|
|
592
500
|
// project reports the verb unmeasured on every run and never changes.
|
|
593
501
|
absentReasons: ['no-folders'] satisfies ContextAuditRefusal[],
|
|
594
502
|
counts: contextCounts,
|
|
@@ -10,19 +10,10 @@ export const AUTHORING_CASES: readonly SkillCase[] = [
|
|
|
10
10
|
'Wire up a GitHub Actions pipeline with parallel jobs for this repo.',
|
|
11
11
|
expect: 'ci-workflow',
|
|
12
12
|
},
|
|
13
|
-
{
|
|
14
|
-
prompt:
|
|
15
|
-
'Write me a headless automation script with no interactive prompts.',
|
|
16
|
-
expect: 'bash-cli-script',
|
|
17
|
-
},
|
|
18
13
|
{
|
|
19
14
|
prompt: 'Scaffold a brand-new SKILL.md for this capability.',
|
|
20
15
|
expect: 'create-skill',
|
|
21
16
|
},
|
|
22
|
-
{
|
|
23
|
-
prompt: 'Write a fresh authoring convention as a new standard file.',
|
|
24
|
-
expect: 'create-standard',
|
|
25
|
-
},
|
|
26
17
|
{
|
|
27
18
|
prompt:
|
|
28
19
|
"The docs folder and README are stale against what's on main, refresh them.",
|
|
@@ -47,24 +38,20 @@ export const AUTHORING_CASES: readonly SkillCase[] = [
|
|
|
47
38
|
'Write a context entry for the payments domain, there is no canon/context page for it yet.',
|
|
48
39
|
expect: 'draft-doc',
|
|
49
40
|
},
|
|
50
|
-
{
|
|
51
|
-
prompt:
|
|
52
|
-
'Draft a wireframe for the settings panel, nothing under canon/wireframes covers that surface yet.',
|
|
53
|
-
expect: 'draft-doc',
|
|
54
|
-
},
|
|
55
41
|
{
|
|
56
42
|
prompt:
|
|
57
43
|
'Write a wiki reference page for Claude Code output styles, no page covers that subject yet.',
|
|
58
44
|
expect: 'draft-doc',
|
|
59
45
|
},
|
|
60
|
-
{
|
|
61
|
-
prompt: 'Say what that dense answer actually means in plain terms.',
|
|
62
|
-
expect: 'restate-plainly',
|
|
63
|
-
},
|
|
64
46
|
{
|
|
65
47
|
prompt: 'This passage reads flat and robotic, give it some real cadence.',
|
|
66
48
|
expect: 'write-human',
|
|
67
49
|
},
|
|
50
|
+
{
|
|
51
|
+
prompt:
|
|
52
|
+
'Which characters does the markdown standard ban, and how should I shape the headings in this doc?',
|
|
53
|
+
expect: 'markdown-craft',
|
|
54
|
+
},
|
|
68
55
|
{
|
|
69
56
|
prompt:
|
|
70
57
|
'Pull the captions off this YouTube link and save them with metadata.',
|
package/src/claude/cases/misc.ts
CHANGED
|
@@ -22,20 +22,11 @@ export const MISC_CASES: readonly SkillCase[] = [
|
|
|
22
22
|
'This project has no logo yet. Draft one and give me a social card to go with it.',
|
|
23
23
|
expect: 'draft-identity',
|
|
24
24
|
},
|
|
25
|
-
{
|
|
26
|
-
prompt:
|
|
27
|
-
"I found two sites whose look I want us to draw from. Put them side by side and let's settle which one the design should follow before anyone writes a token.",
|
|
28
|
-
expect: 'sketch-design',
|
|
29
|
-
},
|
|
30
25
|
{
|
|
31
26
|
prompt:
|
|
32
27
|
'Draw the signup screen as a frame on the canvas, then restyle the element I just selected there.',
|
|
33
28
|
expect: 'canvas',
|
|
34
29
|
},
|
|
35
|
-
{
|
|
36
|
-
prompt: 'Fire up the dev server the way this project documents it.',
|
|
37
|
-
expect: 'project-commands',
|
|
38
|
-
},
|
|
39
30
|
{
|
|
40
31
|
prompt:
|
|
41
32
|
"We're about to hit the context limit, write the handoff before we lose state.",
|
|
@@ -104,14 +95,6 @@ export const MISC_CASES: readonly SkillCase[] = [
|
|
|
104
95
|
'The old parseDate helper was replaced months ago. Can I just delete it, or could a few files still be calling it?',
|
|
105
96
|
expect: 'deprecation-migration',
|
|
106
97
|
},
|
|
107
|
-
{
|
|
108
|
-
prompt: 'Does our github about text still match what the readme says?',
|
|
109
|
-
expect: 'repo-metadata',
|
|
110
|
-
},
|
|
111
|
-
{
|
|
112
|
-
prompt: 'Is there a page anywhere in this repo that covers retries?',
|
|
113
|
-
expect: 'index-lookup',
|
|
114
|
-
},
|
|
115
98
|
{
|
|
116
99
|
prompt: 'Connect this repo to Cloudflare Pages and set up the deploy.',
|
|
117
100
|
expect: 'deploy-app',
|
|
@@ -45,14 +45,6 @@ export const SETUP_CASES: readonly SkillCase[] = [
|
|
|
45
45
|
'Something about the toolkit itself is broken, write it up and send it back to the maintainers.',
|
|
46
46
|
expect: 'canon-feedback',
|
|
47
47
|
},
|
|
48
|
-
{
|
|
49
|
-
prompt:
|
|
50
|
-
"I don't know which specific toolkit skill I need, just handle it for me.",
|
|
51
|
-
expect: 'canon-operator',
|
|
52
|
-
},
|
|
53
|
-
// The performing skill wins a phrase naming its operation over the front
|
|
54
|
-
// door's own routing framing, even though canon-operator's description
|
|
55
|
-
// quotes a phrase near this one. See canon/context/cli/audits/routing.md.
|
|
56
48
|
{
|
|
57
49
|
prompt:
|
|
58
50
|
"Whatever the right toolkit command is, get this project's rules installed.",
|
|
@@ -60,20 +52,11 @@ export const SETUP_CASES: readonly SkillCase[] = [
|
|
|
60
52
|
},
|
|
61
53
|
{
|
|
62
54
|
prompt:
|
|
63
|
-
'
|
|
55
|
+
'File the open feedback issues on the toolkit repo into an intake folder.',
|
|
64
56
|
expect: 'canon-feedback-triage',
|
|
65
57
|
},
|
|
66
|
-
//
|
|
67
|
-
//
|
|
68
|
-
// this reaches every project the toolkit installed into from the toolkit.
|
|
69
|
-
{
|
|
70
|
-
prompt:
|
|
71
|
-
'Take this change out to every project that installed the toolkit and get each one to a pull request.',
|
|
72
|
-
expect: 'canon-rollout',
|
|
73
|
-
},
|
|
74
|
-
// Reporting per domain is what separates this from canon-operator, which
|
|
75
|
-
// diagnoses on the way to running the operation an intent named. This answers
|
|
76
|
-
// one fixed question across a fixed domain list and repairs nothing.
|
|
58
|
+
// This answers one fixed question across a fixed domain list and repairs
|
|
59
|
+
// nothing, which is what separates it from the setup skill above.
|
|
77
60
|
{
|
|
78
61
|
prompt:
|
|
79
62
|
'Report what this project has fallen behind the toolkit on, domain by domain, and fix nothing.',
|
|
@@ -20,10 +20,6 @@ export const WORKFLOW_CASES: readonly SkillCase[] = [
|
|
|
20
20
|
'Run the whole implement, verify, review, and ship pipeline for the approved plan.',
|
|
21
21
|
expect: 'auto-ship',
|
|
22
22
|
},
|
|
23
|
-
{
|
|
24
|
-
prompt: "Pull together a design system from what's already in the app.",
|
|
25
|
-
expect: 'design-extract',
|
|
26
|
-
},
|
|
27
23
|
{
|
|
28
24
|
prompt: 'Draw me a diagram of how the pieces of this system connect.',
|
|
29
25
|
expect: 'draft-figure',
|
|
@@ -61,20 +57,6 @@ export const WORKFLOW_CASES: readonly SkillCase[] = [
|
|
|
61
57
|
prompt: 'Walk me through the open intake items so I can decide on each.',
|
|
62
58
|
expect: 'plan-intake-answer',
|
|
63
59
|
},
|
|
64
|
-
{
|
|
65
|
-
prompt:
|
|
66
|
-
"Draft a diff-based proposal for tightening this passage in the standard, don't just edit it.",
|
|
67
|
-
expect: 'markdown-propose',
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
prompt: 'Pull the durable lessons out of this session before it ends.',
|
|
71
|
-
expect: 'memory-capture',
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
prompt:
|
|
75
|
-
'Go through the memory folder and propose what to do with each entry.',
|
|
76
|
-
expect: 'memory-review',
|
|
77
|
-
},
|
|
78
60
|
{
|
|
79
61
|
prompt:
|
|
80
62
|
'Take on the orchestrator role and coordinate the parallel feature builds.',
|
|
@@ -104,11 +86,6 @@ export const WORKFLOW_CASES: readonly SkillCase[] = [
|
|
|
104
86
|
'The screencast draft is finished. Turn it into an actual video now.',
|
|
105
87
|
expect: 'record-screencast',
|
|
106
88
|
},
|
|
107
|
-
{
|
|
108
|
-
prompt:
|
|
109
|
-
'Look over everything that changed on this branch for bugs and edge cases.',
|
|
110
|
-
expect: 'review-branch',
|
|
111
|
-
},
|
|
112
89
|
{
|
|
113
90
|
prompt:
|
|
114
91
|
'What should a review of a change look for beyond bugs, and how much evidence does a finding need?',
|
|
@@ -128,11 +105,6 @@ export const WORKFLOW_CASES: readonly SkillCase[] = [
|
|
|
128
105
|
prompt: 'Draft me a script with beats for a screencast recording.',
|
|
129
106
|
expect: 'draft-screencast',
|
|
130
107
|
},
|
|
131
|
-
{
|
|
132
|
-
prompt:
|
|
133
|
-
"Check whether my installed Claude seed docs have drifted from the toolkit's.",
|
|
134
|
-
expect: 'seed-sync',
|
|
135
|
-
},
|
|
136
108
|
{
|
|
137
109
|
prompt: 'Turn this topic into a slide deck I can render.',
|
|
138
110
|
expect: 'draft-slides',
|
|
@@ -173,11 +145,6 @@ export const WORKFLOW_CASES: readonly SkillCase[] = [
|
|
|
173
145
|
prompt: 'Tell me the paint and layout cost of this page right now.',
|
|
174
146
|
expect: 'ux-measure',
|
|
175
147
|
},
|
|
176
|
-
{
|
|
177
|
-
prompt:
|
|
178
|
-
'Sit with me while I go through my whole list of app findings one at a time, and write down each pick with what it beat.',
|
|
179
|
-
expect: 'ux-walkthrough',
|
|
180
|
-
},
|
|
181
148
|
{
|
|
182
149
|
prompt:
|
|
183
150
|
'I am building this branch for another session. What am I on the hook for, and what is off limits?',
|
package/src/claude/seeds.ts
CHANGED
|
@@ -17,13 +17,7 @@ const HOOKS = 'hooks'
|
|
|
17
17
|
* stem in an older layout, which is what `@/sync/layout` pairs a target against
|
|
18
18
|
* to find a superseded artifact.
|
|
19
19
|
*/
|
|
20
|
-
export const SUBDIRS: readonly string[] = [
|
|
21
|
-
HOOKS,
|
|
22
|
-
'context',
|
|
23
|
-
'memory',
|
|
24
|
-
'tasks',
|
|
25
|
-
'wireframes',
|
|
26
|
-
]
|
|
20
|
+
export const SUBDIRS: readonly string[] = [HOOKS, 'context', 'memory', 'tasks']
|
|
27
21
|
|
|
28
22
|
export type SeedScope = 'claude' | 'root'
|
|
29
23
|
|
|
@@ -27,7 +27,7 @@ export const CORPORA: readonly string[] = [
|
|
|
27
27
|
]
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
|
-
* The practice skills `
|
|
30
|
+
* The practice skills `claude/skills/create-skill/references/skill-practice.md` describes, keyed by corpus-relative
|
|
31
31
|
* folder rather than by name, so a target's own `.claude/skills/` folder that
|
|
32
32
|
* shares a name is never swept in. The list lives here rather than in a skill's
|
|
33
33
|
* frontmatter because a skill declaring its own kind could exempt itself.
|
|
@@ -51,7 +51,7 @@ const TOKEN = /`([^`\s]+)`/g
|
|
|
51
51
|
*
|
|
52
52
|
* Requires an extension and a separator, and admits no `<`, `$`, or `*`. A
|
|
53
53
|
* body writes `canon/context/<domain>.md` to name a shape rather than a
|
|
54
|
-
* file, and `${CLAUDE_SKILL_DIR}/../../standards
|
|
54
|
+
* file, and `${CLAUDE_SKILL_DIR}/../../standards/<name>.md` to resolve
|
|
55
55
|
* against the plugin root, which is self-contained by construction.
|
|
56
56
|
*/
|
|
57
57
|
const CONCRETE = /^[.A-Za-z0-9_][A-Za-z0-9._/-]*\.[a-z]{1,4}$/
|