@erclx/canon 5.25.0 → 5.27.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 +4 -3
- package/claude/.claude-plugin/plugin.json +1 -1
- package/claude/skills/api-design/SKILL.md +2 -0
- package/claude/skills/auto-ship/SKILL.md +3 -11
- package/claude/skills/auto-ship/references/review-findings.md +20 -0
- package/claude/skills/backlog-triage/SKILL.md +2 -0
- package/claude/skills/bash-cli-script/SKILL.md +2 -0
- package/claude/skills/build-in-slices/SKILL.md +2 -0
- package/claude/skills/canon-cli/SKILL.md +2 -0
- package/claude/skills/canon-feedback/SKILL.md +2 -0
- package/claude/skills/canon-feedback-triage/SKILL.md +2 -0
- package/claude/skills/canon-operator/SKILL.md +2 -0
- package/claude/skills/canon-rollout/SKILL.md +3 -11
- package/claude/skills/canon-rollout/references/failure-recovery.md +20 -0
- package/claude/skills/canvas/SKILL.md +14 -1
- package/claude/skills/ci-workflow/SKILL.md +2 -0
- package/claude/skills/code-craft/SKILL.md +2 -0
- package/claude/skills/codebase-layout/SKILL.md +2 -0
- package/claude/skills/context-fold/REQUIREMENT.md +6 -2
- package/claude/skills/context-fold/SKILL.md +9 -21
- package/claude/skills/context-fold/references/anchor-sweep.md +2 -2
- package/claude/skills/context-fold/references/completion-report.md +26 -0
- package/claude/skills/create-rule/SKILL.md +2 -0
- package/claude/skills/create-skill/SKILL.md +2 -0
- package/claude/skills/create-standard/SKILL.md +2 -0
- package/claude/skills/decision-escalate/SKILL.md +2 -0
- package/claude/skills/deploy-app/SKILL.md +2 -0
- package/claude/skills/deprecation-migration/SKILL.md +2 -0
- package/claude/skills/design-extract/SKILL.md +2 -0
- package/claude/skills/design-taste/REQUIREMENT.md +1 -1
- package/claude/skills/design-taste/SKILL.md +6 -2
- package/claude/skills/design-taste/references/adopted.md +40 -0
- package/claude/skills/design-taste/references/kinds.md +1 -1
- package/claude/skills/design-taste/references/systems.md +1 -7
- package/claude/skills/design-taste/references/tells.md +2 -24
- package/claude/skills/docs-sync/REQUIREMENT.md +2 -1
- package/claude/skills/docs-sync/SKILL.md +2 -0
- package/claude/skills/document-health/REQUIREMENT.md +2 -0
- package/claude/skills/document-health/SKILL.md +23 -0
- package/claude/skills/document-health/references/axes.md +12 -0
- package/claude/skills/draft-and-pick/SKILL.md +3 -1
- package/claude/skills/draft-doc/SKILL.md +2 -0
- package/claude/skills/draft-doc/references/wiki.md +1 -1
- package/claude/skills/draft-figure/SKILL.md +2 -0
- package/claude/skills/draft-identity/SKILL.md +3 -1
- package/claude/skills/draft-ready/SKILL.md +2 -0
- package/claude/skills/draft-screencast/SKILL.md +11 -7
- package/claude/skills/draft-slides/REQUIREMENT.md +17 -12
- package/claude/skills/draft-slides/SKILL.md +33 -20
- package/claude/skills/git-branch/SKILL.md +2 -0
- package/claude/skills/git-commit/SKILL.md +2 -0
- package/claude/skills/git-followup/SKILL.md +2 -0
- package/claude/skills/git-issue/SKILL.md +2 -0
- package/claude/skills/git-issue/references/issue.md +10 -0
- package/claude/skills/git-pr/SKILL.md +2 -0
- package/claude/skills/git-pr/references/evidence.md +14 -6
- package/claude/skills/git-pr/references/labels.md +12 -0
- package/claude/skills/git-ship/SKILL.md +2 -0
- package/claude/skills/git-split/SKILL.md +21 -8
- package/claude/skills/git-stage/SKILL.md +2 -0
- package/claude/skills/git-worktree/SKILL.md +2 -0
- package/claude/skills/index-lookup/SKILL.md +2 -0
- package/claude/skills/markdown-propose/SKILL.md +2 -0
- package/claude/skills/markdown-propose/references/format.md +9 -0
- package/claude/skills/memory-capture/SKILL.md +2 -0
- package/claude/skills/memory-review/SKILL.md +2 -0
- package/claude/skills/memory-review/references/later-phases.md +7 -0
- package/claude/skills/plan-feature/SKILL.md +2 -0
- package/claude/skills/plan-groundwork/SKILL.md +2 -0
- package/claude/skills/plan-intake/SKILL.md +2 -0
- package/claude/skills/plan-intake-answer/SKILL.md +2 -0
- package/claude/skills/project-commands/SKILL.md +2 -0
- package/claude/skills/read-frames/SKILL.md +2 -0
- package/claude/skills/record-screencast/SKILL.md +2 -0
- package/claude/skills/repo-metadata/SKILL.md +2 -0
- package/claude/skills/restate-plainly/SKILL.md +2 -0
- package/claude/skills/review-address/SKILL.md +3 -7
- package/claude/skills/review-address/references/post-review-findings.md +16 -0
- package/claude/skills/review-branch/SKILL.md +2 -0
- package/claude/skills/review-craft/SKILL.md +2 -0
- package/claude/skills/review-craft/references/ui.md +2 -2
- package/claude/skills/review-pr/SKILL.md +4 -8
- package/claude/skills/review-pr/references/body-variants.md +52 -0
- package/claude/skills/review-pr/references/key-changes.md +16 -0
- package/claude/skills/review-pr/references/post.md +15 -43
- package/claude/skills/review-ui/SKILL.md +3 -1
- package/claude/skills/review-ui/references/post.md +4 -2
- package/claude/skills/role-orchestrator/SKILL.md +5 -14
- package/claude/skills/role-orchestrator/references/orchestrator-cloud-launch.md +8 -0
- package/claude/skills/role-orchestrator/references/orchestrator-dispatch.md +13 -0
- package/claude/skills/role-orchestrator/references/orchestrator-handback.md +1 -1
- package/claude/skills/role-orchestrator/references/orchestrator-inbound.md +23 -0
- package/claude/skills/role-orchestrator/references/orchestrator-launch.md +5 -33
- package/claude/skills/role-orchestrator/references/orchestrator-poll.md +1 -21
- package/claude/skills/role-orchestrator/references/orchestrator-review-dispatch.md +1 -1
- package/claude/skills/role-orchestrator/references/orchestrator-reviewer-launch.md +38 -0
- package/claude/skills/role-orchestrator/references/orchestrator-watch.md +26 -0
- package/claude/skills/role-planner/SKILL.md +2 -0
- package/claude/skills/role-reviewer/REQUIREMENT.md +1 -1
- package/claude/skills/role-reviewer/SKILL.md +2 -0
- package/claude/skills/role-worker/SKILL.md +2 -0
- package/claude/skills/search-craft/REQUIREMENT.md +1 -1
- package/claude/skills/search-craft/SKILL.md +5 -1
- package/claude/skills/search-craft/references/adopted.md +30 -0
- package/claude/skills/seed-sync/SKILL.md +2 -0
- package/claude/skills/session-compact/SKILL.md +2 -0
- package/claude/skills/session-map/SKILL.md +2 -0
- package/claude/skills/session-relay/SKILL.md +2 -0
- package/claude/skills/session-resume/SKILL.md +2 -0
- package/claude/skills/session-worktree/SKILL.md +3 -11
- package/claude/skills/session-worktree/references/install-command.md +20 -0
- package/claude/skills/sketch-design/SKILL.md +2 -0
- package/claude/skills/systematic-debugging/SKILL.md +2 -0
- package/claude/skills/target-check/SKILL.md +2 -0
- package/claude/skills/target-setup/SKILL.md +2 -0
- package/claude/skills/target-setup/references/detect.md +8 -0
- package/claude/skills/target-setup/references/indexes.md +13 -0
- package/claude/skills/target-setup/references/verify.md +8 -0
- package/claude/skills/task-board/SKILL.md +2 -0
- package/claude/skills/teach-workspace/SKILL.md +5 -15
- package/claude/skills/teach-workspace/references/lesson-build.md +75 -0
- package/claude/skills/teach-workspace/references/lesson-craft.md +13 -69
- package/claude/skills/teach-workspace/references/revisit.md +22 -0
- package/claude/skills/test-craft/SKILL.md +2 -0
- package/claude/skills/test-first/SKILL.md +4 -0
- package/claude/skills/test-first/references/adopted.md +36 -0
- package/claude/skills/ui-checklist/SKILL.md +2 -0
- package/claude/skills/ux-audit/SKILL.md +2 -0
- package/claude/skills/ux-measure/SKILL.md +2 -0
- package/claude/skills/ux-walkthrough/SKILL.md +2 -0
- package/claude/skills/video-craft/SKILL.md +2 -0
- package/claude/skills/write-human/SKILL.md +3 -1
- package/claude/skills/write-human/references/machine-tells.md +13 -0
- package/claude/skills/youtube-transcripts/SKILL.md +2 -0
- package/docs/agents/canvas.md +24 -6
- package/docs/agents/capture.md +6 -6
- package/docs/agents/commands.md +5 -5
- package/docs/agents/index.md +5 -5
- package/docs/agents/install-and-sync.md +7 -0
- package/docs/agents/key-changes.md +1 -1
- package/docs/agents/pr-evidence.md +38 -15
- package/docs/agents/pr-local.md +19 -13
- package/docs/agents/pr-preview.md +44 -21
- package/docs/agents/records-stale.md +22 -9
- package/docs/agents/records.md +1 -1
- package/docs/agents/sandbox.md +29 -5
- package/docs/agents/scripting.md +8 -1
- package/docs/agents/skills-audit.md +11 -3
- package/docs/agents/slides.md +15 -3
- package/docs/workflow/ai-workflow.md +1 -1
- package/docs/workflow/index.md +1 -0
- package/docs/workflow/operating-model.md +5 -6
- package/docs/workflow/parallel-features.md +23 -2
- package/docs/workflow/skill-map-on-request.md +42 -0
- package/docs/workflow/skill-map.md +3 -34
- package/docs/workflow/zshrc-aliases.md +1 -1
- package/package.json +1 -1
- package/scripts/core/regen-hero.ts +1 -1
- package/scripts/lib/sandbox-git.sh +1 -9
- package/scripts/lib/sandbox-path.sh +6 -162
- package/scripts/sandbox-hook.sh +99 -0
- package/src/audits/run.ts +1 -1
- package/src/canvas/address.ts +12 -3
- package/src/canvas/capture.ts +1 -9
- package/src/canvas/client/inspector/align-grid.tsx +162 -0
- package/src/canvas/client/inspector/color-field.tsx +398 -0
- package/src/canvas/client/inspector/color-inputs.tsx +139 -0
- package/src/canvas/client/inspector/color-picker.tsx +668 -0
- package/src/canvas/client/inspector/color-space.ts +240 -0
- package/src/canvas/client/inspector/field.tsx +5 -1
- package/src/canvas/client/inspector/fields.css +547 -17
- package/src/canvas/client/inspector/size-field.tsx +69 -0
- package/src/canvas/client/inspector/values.ts +166 -1
- package/src/canvas/client/inspector.tsx +236 -73
- package/src/canvas/client/selection.tsx +197 -0
- package/src/canvas/client/shell.css +104 -12
- package/src/canvas/client/state.ts +69 -9
- package/src/canvas/client/surface.tsx +147 -22
- package/src/canvas/content.ts +50 -1
- package/src/canvas/edit.ts +37 -4
- package/src/canvas/editing.ts +203 -0
- package/src/canvas/global.d.ts +15 -0
- package/src/canvas/server.ts +149 -12
- package/src/canvas/tokens.ts +59 -17
- package/src/capture/render.ts +45 -7
- package/src/capture/sources.ts +43 -0
- package/src/census/count.ts +2 -2
- package/src/claude/cases/workflow.ts +5 -0
- package/src/claude/seeds.ts +2 -2
- package/src/claude/skills-audit.ts +96 -14
- package/src/claude/skills-drift.ts +1 -1
- package/src/claude/skills-families.ts +36 -0
- package/src/claude/skills-list.ts +76 -15
- package/src/commands/audits.ts +2 -2
- package/src/commands/canvas.ts +179 -2
- package/src/commands/claude.ts +94 -11
- package/src/commands/design.ts +142 -2
- package/src/commands/feedback.ts +3 -3
- package/src/commands/gov.ts +1 -1
- package/src/commands/hooks.ts +1 -1
- package/src/commands/indexes.ts +1 -1
- package/src/commands/init.ts +1 -1
- package/src/commands/intake.ts +1 -1
- package/src/commands/migrate.ts +1 -1
- package/src/commands/pr.ts +105 -58
- package/src/commands/records.ts +89 -7
- package/src/commands/repo.ts +1 -1
- package/src/commands/sandbox.ts +103 -11
- package/src/commands/sessions.ts +1 -1
- package/src/commands/slides.ts +31 -77
- package/src/commands/sync.ts +1 -1
- package/src/commands/tasks.ts +2 -2
- package/src/commands/teach.ts +1 -1
- package/src/commands/transcripts.ts +1 -1
- package/src/commands/worktrees.ts +1 -1
- package/src/comments/scan.ts +1 -1
- package/src/comments/trend.ts +1 -1
- package/src/context/audit.ts +1 -1
- package/src/context/citations.ts +1 -1
- package/src/context/classify/extract.ts +2 -2
- package/src/design/project-fonts.ts +392 -0
- package/src/design/tokens.ts +2 -18
- package/src/docs/read.ts +1 -1
- package/src/{github.ts → feedback/github.ts} +2 -2
- package/src/{client-commands.ts → gate/client-commands.ts} +1 -1
- package/src/gate/measures.ts +53 -13
- package/src/gate/sequencer.ts +1 -1
- package/src/gate/stages.ts +9 -0
- package/src/{git-files.ts → git/files.ts} +2 -2
- package/src/{git-ignore.ts → git/ignore.ts} +1 -1
- package/src/{worktree.ts → git/worktree.ts} +1 -1
- package/src/gov/citations.ts +2 -2
- package/src/gov/install.ts +1 -1
- package/src/gov/payload.ts +1 -1
- package/src/gov/superseded.ts +3 -3
- package/src/gov/test-order.ts +2 -2
- package/src/help.ts +1 -1
- package/src/hooks/post-merge.ts +1 -1
- package/src/indexes/walk.ts +1 -1
- package/src/labels/audit.ts +1 -1
- package/src/markdown/ceiling.ts +1 -1
- package/src/markdown/files.ts +1 -1
- package/src/migrate/apply.ts +1 -1
- package/src/pr/bijection.ts +1 -1
- package/src/pr/evidence.ts +96 -43
- package/src/pr/local.ts +16 -10
- package/src/pr/preview.ts +78 -2
- package/src/record-root.ts +1 -0
- package/src/records/backup.ts +2 -1
- package/src/records/push-guard.ts +1 -1
- package/src/records/stale-canonical.ts +146 -0
- package/src/records/stale.ts +1 -1
- package/src/sandbox/headless/dispatch.ts +264 -0
- package/src/sandbox/headless/run.ts +653 -0
- package/src/sandbox/headless/watch.ts +145 -0
- package/src/sandbox/hooks.ts +128 -0
- package/src/sandbox/provision.ts +607 -0
- package/src/sandbox/tree.ts +99 -4
- package/src/secrets/marker.ts +2 -2
- package/src/secrets/scan.ts +2 -2
- package/src/sessions/claim.ts +1 -1
- package/src/sessions/resolve.ts +1 -1
- package/src/sessions/transfer/bundle.ts +1 -1
- package/src/shipped/references.ts +2 -2
- package/src/slides/convert/export.ts +2 -16
- package/src/slides/decks.ts +110 -0
- package/src/slides/package/fonts.ts +6 -2
- package/src/standards/audit.ts +2 -2
- package/src/standards/read.ts +1 -1
- package/src/sync/check.ts +2 -2
- package/src/sync/engine.ts +2 -2
- package/src/sync/git.ts +1 -1
- package/src/sync/history.ts +1 -1
- package/src/sync/reverse.ts +1 -1
- package/src/sync/seeds-report.ts +1 -1
- package/src/sync/target.ts +1 -1
- package/src/sync/workflow.ts +1 -1
- package/src/targets/pulls.ts +2 -2
- package/src/targets/sweep.ts +2 -2
- package/src/tasks/answers.ts +1 -1
- package/src/tasks/archive.ts +1 -1
- package/src/tasks/reach.ts +1 -1
- package/src/tasks/trunk.ts +1 -1
- package/src/teach/nav.ts +1 -1
- package/src/tooling/inject.ts +2 -2
- package/src/tooling/subfolder.ts +1 -1
- package/src/web/readme-citations.ts +2 -2
- package/src/worktrees/bare-flag.ts +1 -1
- package/src/worktrees/reclaim.ts +2 -2
- package/src/worktrees/remove.ts +1 -1
- package/standards/architecture.md +1 -0
- package/standards/canvas.md +3 -2
- package/standards/requirements.md +2 -0
- package/standards/skill-practice.md +2 -1
- package/standards/skill.md +2 -0
- package/standards/wiki.md +12 -3
- package/tooling/base/configs/.github/workflows/pr-local-preview.yml +2 -2
- package/scripts/lib/sandbox-dispatch.sh +0 -190
- package/scripts/manage-sandbox.sh +0 -472
- package/src/slides/layouts.ts +0 -478
- package/src/slides/parse.ts +0 -84
- package/src/slides/render.ts +0 -110
- package/src/slides/styles.ts +0 -96
- /package/claude/skills/write-human/references/{source-material.md → adopted.md} +0 -0
- /package/src/{commands/feedback-format.ts → feedback/body.ts} +0 -0
- /package/src/{github-format.ts → feedback/github-format.ts} +0 -0
- /package/src/{git-base.ts → git/base.ts} +0 -0
- /package/src/{git-env.ts → git/env.ts} +0 -0
- /package/src/{frontmatter.ts → markdown/frontmatter.ts} +0 -0
- /package/src/{binary.ts → sweep/binary.ts} +0 -0
- /package/src/{exempt-marker.ts → sweep/exempt-marker.ts} +0 -0
- /package/src/{copy.ts → sync/copy.ts} +0 -0
- /package/src/{target.ts → targets/validate.ts} +0 -0
- /package/src/{paths.ts → tasks/paths.ts} +0 -0
- /package/src/{seed-marker.ts → tooling/seed-marker.ts} +0 -0
|
@@ -40,10 +40,4 @@ The layer a model is worst at, and the layer where rules are hardest to make fal
|
|
|
40
40
|
|
|
41
41
|
## Considered and declined
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
- **Control sizing and proportion.** An unguided model produces reasonable controls without instruction, so it fails the first question.
|
|
46
|
-
- **Specific ratios for a type scale**, such as a named musical interval. Falsifiable and arbitrary, and a project picking a different ratio is not wrong.
|
|
47
|
-
- **Named palettes or banned hues.** A value ban, which belongs to the project's design document. This is where every external catalog of this kind ends up, and it is why theirs cannot be imported.
|
|
48
|
-
- **A minimum contrast figure.** A threshold with a number, which the accessibility rules own.
|
|
49
|
-
- **Imagery as a system.** There is no scale to establish. What a model gets wrong about images is using fake ones, which `tells.md` already covers, so the layer stays thin on purpose rather than by oversight.
|
|
43
|
+
The items considered for this reference and declined sit in `adopted.md` beside this file, recorded so they are not argued again.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Machine tells in design
|
|
3
|
-
description: The visual defaults a model reaches for when nothing states a direction, each with what to do instead, plus the
|
|
3
|
+
description: The visual defaults a model reaches for when nothing states a direction, each with what to do instead, plus the countable composition limits and the first-screen budget
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Machine tells in design
|
|
@@ -76,26 +76,4 @@ These are the rules with numbers, so they are checked by counting rather than by
|
|
|
76
76
|
|
|
77
77
|
## Adopted, declined, and why
|
|
78
78
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
### Adopted
|
|
82
|
-
|
|
83
|
-
**Adopted with no change.** The three equal cards, the centered hero over a wash, enumerated eyebrows, scroll cues, decorative status dots, atmospheric strips, the fake screenshot built from boxes, filler verbs, and placeholder that reads as placeholder. Each names a shape, each carries a replacement, and none depends on a stack.
|
|
84
|
-
|
|
85
|
-
**Adopted with the stack removed.** Source items naming an icon set, a component library, a font by name, or an animation package were rewritten to state what the rule is about. "Do not use Inter" became one family doing every job, since the defensible claim is about pairing and role separation rather than about one typeface.
|
|
86
|
-
|
|
87
|
-
### Declined
|
|
88
|
-
|
|
89
|
-
**Banned fonts by name.** A font ban is a value ban, and a value belongs to the project's own design document rather than to a skill that loads everywhere. A project that wants a typeface ruled out rules it out there.
|
|
90
|
-
|
|
91
|
-
**Numeric intensity dials.** Every external source carries a 1-to-10 scale for variance, motion and density. A session picks a middle value and reports compliance. That satisfies the rule, decides nothing, and leaves no trace a later reader could check it by. The declared read carries the same information in a sentence somebody can argue with.
|
|
92
|
-
|
|
93
|
-
**The em dash ban as a design rule.** One source bans the character on a page as a visual tell. The markdown standard already bans it for prose reasons and `canon markdown audit` gates that from package data, so restating it here would put a second copy of an enforced rule behind an unenforced pointer.
|
|
94
|
-
|
|
95
|
-
**The official-package map.** A table routing a brief to Fluent, Material, Carbon, Polaris, Primer or a government design system. It is real advice and it is a stack decision a project takes once, so it belongs in that project's own records rather than in a skill that loads on every design round.
|
|
96
|
-
|
|
97
|
-
**Scoping out application UI.** The largest source covers landing pages, portfolios and redesigns, and excludes dashboards, data tables and multi-step product UI. Those exclusions are most of what software projects actually build, so the kinds reference carries application UI as a first-class kind.
|
|
98
|
-
|
|
99
|
-
### Carried as a caution
|
|
100
|
-
|
|
101
|
-
**Greeking.** Placeholder text is correct while judging space and wrong once an arm is judged on content, since real copy length is what breaks a composition. State which of the two a set is doing.
|
|
79
|
+
The record of which external catalog items were adopted, which declined, and why sits in `adopted.md` beside this file.
|
|
@@ -35,7 +35,8 @@ The quiet one is the baseline. A diff resolved against a bare local ref equals H
|
|
|
35
35
|
|
|
36
36
|
## Out of scope
|
|
37
37
|
|
|
38
|
-
- The context entries,
|
|
38
|
+
- The context entries, architecture, wireframes, and task board: `context-fold`, which runs immediately before this skill in the ship chain and resolves the same baseline. The split is by audience, so a file's location decides which skill owns it rather than its subject.
|
|
39
|
+
- The requirements record: `document-health` reads it when asked, and `markdown-propose` rewrites it from the answers
|
|
39
40
|
- `CLAUDE.md` and the installed seed docs: `seed-sync`, which reconciles them per section against the toolkit source
|
|
40
41
|
- Changelog entries, which release tooling generates from commit messages
|
|
41
42
|
- Whether the prose conforms to its standards. `canon markdown audit` reports violations and fixes none, and this skill writes prose it does not audit.
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: docs-sync
|
|
3
3
|
description: Rewrites stale `README.md` and `docs/*.md` sections based on changes since main. Use before staging, or when asked to "sync the public docs", "update the docs in docs/", or "update the README". Do NOT use for the context entries, planning records, or task board, which `context-fold` owns, or for changelog and `CLAUDE.md` updates.
|
|
4
|
+
metadata:
|
|
5
|
+
family: ship
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# Docs sync
|
|
@@ -23,6 +23,7 @@ The third is silence on an unread axis. Both measured verbs resolve their folder
|
|
|
23
23
|
- Say which layer answered the classifier sweep, since its model layer being off narrows the read without refusing it
|
|
24
24
|
- Take every checkpoint from the record the verb returns rather than from a number written into the skill
|
|
25
25
|
- Run standalone, and stay callable from the structural check rather than reachable only through it
|
|
26
|
+
- Read the requirements and architecture records for identity drift when the scope reaches them, and print one reminder line per doc from `canon records stale canonical`, since the fold no longer writes the first and only writes the second for a planned slot decision, so nothing else reads either whole
|
|
26
27
|
|
|
27
28
|
## Must not
|
|
28
29
|
|
|
@@ -30,6 +31,7 @@ The third is silence on an unread axis. Both measured verbs resolve their folder
|
|
|
30
31
|
- Emit a verdict across the three axes, or a score across the documents. Two axes answer from verbs and one answers from a reading, so any roll-up is a figure that lies about the third.
|
|
31
32
|
- Report a finding against a file nobody hand-authors. A generated index, a gitignored file, and a copied reference each name a file an author cannot fix.
|
|
32
33
|
- Answer an axis by file inspection where a verb answers it. The verb is the surface under test and a hand-rolled read of the same files is not.
|
|
34
|
+
- Trigger itself, or ask a hook, a gate stage, or CI to trigger the canonical review. The operator settled that it runs only when asked.
|
|
33
35
|
- Read a document's modification time as its staleness. A file untouched beside code untouched is current, and the timestamp answers a different question.
|
|
34
36
|
|
|
35
37
|
## Guards
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: document-health
|
|
3
3
|
description: Reports which of a project's documents have rotted, one section per document, across length, placement, and staleness. Reads each axis through the verb that owns it and marks the evidence class each answer carries. Use when asked to "check document health", "which docs have gone stale", "audit the docs for rot", "are these documents still accurate", "which docs are too long", or after a target check reports the structural side. Do NOT use to repair a finding, which the owning command or skill does, and do NOT use to check whether a document exists or holds the right sections, which is `target-check`.
|
|
4
|
+
metadata:
|
|
5
|
+
family: check
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# Document health
|
|
@@ -59,6 +61,18 @@ No verb answers whether a document still describes the tree it was written about
|
|
|
59
61
|
|
|
60
62
|
Mark every staleness finding as a reading. It is this session's judgment rather than a measurement, and a report that sets it beside two verb-backed axes without marking it implies evidence the axis does not carry.
|
|
61
63
|
|
|
64
|
+
### The requirements and architecture records
|
|
65
|
+
|
|
66
|
+
When the scope reaches `canon/REQUIREMENTS.md` or `canon/ARCHITECTURE.md`, read each for identity drift as well as for stale paths, and take the review point from the verb:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
CANON_NON_INTERACTIVE=1 canon records stale canonical --json
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Each doc in the record carries `reviewed` and `releasesSince`. `${CLAUDE_SKILL_DIR}/references/axes.md` holds the identity claim shapes to test and how the record reads. Skip both the read and the verb when the scope excludes the two docs.
|
|
73
|
+
|
|
74
|
+
Nothing triggers this review but a request. A finished review routes to `markdown-propose` for the rewrite, and its last edit sets `reviewed:` in the doc's frontmatter to the day the operator's answers landed. This run writes neither.
|
|
75
|
+
|
|
62
76
|
## Step 4: report per document
|
|
63
77
|
|
|
64
78
|
Give each document its three axes, and give each axis three things: the state, the evidence class, and the command or skill that repairs it. Naming the repair is not running it.
|
|
@@ -85,4 +99,13 @@ Document health: `<scope>`, <n> documents read.
|
|
|
85
99
|
Length and placement are measured. Staleness is a reading.
|
|
86
100
|
```
|
|
87
101
|
|
|
102
|
+
When Step 3 read the canonical records, add one reminder line per doc the verb returned, under the evidence line:
|
|
103
|
+
|
|
104
|
+
```markdown
|
|
105
|
+
`canon/REQUIREMENTS.md`: reviewed <date>, <n> releases since.
|
|
106
|
+
`canon/ARCHITECTURE.md`: never reviewed.
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Write `reviewed value is not a date: <value>` for a doc carrying `invalidReviewed`, and `no release tags to count` in place of the count when `tagged` is false. Name the unread cause instead when the verb refused or the binary carries no `canonical` kind.
|
|
110
|
+
|
|
88
111
|
Keep the evidence line under the table on every run. A table read without it flattens a judgment into a measurement, which is the one shape the three classes exist to prevent.
|
|
@@ -67,6 +67,18 @@ Read each document against the surfaces it names. Four claim shapes are testable
|
|
|
67
67
|
|
|
68
68
|
A claim resting on none of the four is unverifiable from here. Report it as unread rather than as passing, which is the same rule the measured axes take when a verb refuses.
|
|
69
69
|
|
|
70
|
+
### Identity drift in the requirements and architecture records
|
|
71
|
+
|
|
72
|
+
These two records state what the project is and why it is built the way it is, so they go stale by the project changing direction as well as by the tree moving. Test these claim shapes beside the four above:
|
|
73
|
+
|
|
74
|
+
- A goal nobody pursues, read against the task board and the recent history
|
|
75
|
+
- A non-goal the project has since shipped
|
|
76
|
+
- A constraint the tree contradicts
|
|
77
|
+
- A decision whose revisit sentence has fired
|
|
78
|
+
- A risk or open question already fixed
|
|
79
|
+
|
|
80
|
+
Each is a `read`. The review point beside them is `measured`: `canon records stale canonical --json` returns per doc the `reviewed` date from its frontmatter and `releasesSince`, the release tags merged into HEAD after that day. A null `releasesSince` means the doc was never reviewed, and `tagged: false` means no release tag exists to count, so a zero there measured nothing. The count is a reminder of how far the project has moved since someone last read the record whole, never a threshold.
|
|
81
|
+
|
|
70
82
|
**Routes to:** the skill that rewrites a stale claim against an answer, rather than a direct edit from here. A document health run reports and never repairs.
|
|
71
83
|
|
|
72
84
|
**Caveat:** a reading is the weakest evidence in the report and the most consequential finding in it, which is the tension this axis ships with. Marking the class is what keeps the two facts together in the reader's hands.
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: draft-and-pick
|
|
3
3
|
description: Drafts several candidates for a decision judged by looking, renders them side by side on one page, hands the operator the addresses, takes the pick through the structured question surface, and loops on the pick until they stop. Use when asked to "draft some options", "show me a few versions", "try a few variations", "mock up alternatives", "give me candidates for X", or when a choice is taste rather than correctness. Do NOT use when the request already names the answer and asks for it to be built, which is `plan-feature`. Do NOT use to read source for roughness, which is `ux-audit`, to measure what a running interface costs to paint, which is `ux-measure`, to write what to look at on a change already made, which is `ui-checklist`, to script a recording, which is `draft-screencast`, or to inspect a running app across many findings, which is `ux-walkthrough`.
|
|
4
|
+
metadata:
|
|
5
|
+
family: decide
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# Draft and pick
|
|
@@ -35,7 +37,7 @@ Write every arm side by side on one self-contained HTML page at `<dest>/candidat
|
|
|
35
37
|
- Hand over the per-arm file addresses beside the combined page where the declared layer is composition, layout or space, and say that an arm is judged at a width by opening its own file in the browser's device toolbar. The combined page cannot answer that question at all: every arm sits in a column there while the media queries answer to the whole window, so each one renders its widest layout in a narrow space no matter how the window is sized. Build no width control of your own, since the browser already has one.
|
|
36
38
|
- Take the live-app branch instead when the surface under decision is a running app: lift the rendered markup and link a copy of the built stylesheet rather than inlining, per `${CLAUDE_SKILL_DIR}/references/live-arms.md`.
|
|
37
39
|
- On the default path, inline every style, script, and asset the page needs. The render reads the file off disk, so a page reaching for a build step or a network font renders without it and the arms differ by something nobody chose.
|
|
38
|
-
- On the default path,
|
|
40
|
+
- On the default path, name a real font first in the stack, one the machine has or the page embeds, such as the project's own family from its design tokens. A generic keyword such as `system-ui` or `sans-serif` is refused, since it resolves to a different font on each machine. The render refuses a page that would rewrap against a substitute rather than shipping a false comparison, so a page naming no font at all is refused on whatever the default resolves to.
|
|
39
41
|
|
|
40
42
|
### What varies
|
|
41
43
|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: draft-doc
|
|
3
3
|
description: Drafts one brand-new project document from scratch against the standard for its kind, picking the kind from where it lands, a `docs/` page, a `canon/context/` entry, a `canon/wireframes/` surface, a wiki reference page, or a README.md. Checks the catalog for a name or topic collision, places it, confirms with the user, then writes. Use when asked to "write a new docs page for X", "write a context entry for X", "draft a wireframe for X", "write a wiki page for X", or "write a README" where none exists yet. Do NOT use to rewrite or sync an existing page or README against a diff, which is `docs-sync`, or to refresh a context entry or wireframe, which is `context-fold`.
|
|
4
|
+
metadata:
|
|
5
|
+
family: generate
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# Doc draft
|
|
@@ -39,7 +39,7 @@ The standard forbids working from training knowledge, so the draft is built on a
|
|
|
39
39
|
|
|
40
40
|
## Draft
|
|
41
41
|
|
|
42
|
-
- Draft `title` and `description` frontmatter against the standard's contract, then the intro paragraph closing on `Source
|
|
42
|
+
- Draft `title` and `description` frontmatter against the standard's contract, then the intro paragraph closing on `Source:` as a short orientation, then the lesson sections. Let the read of the source decide what is a lesson: keep a fact only when the source page does not state it, and leave reference detail to the source.
|
|
43
43
|
- Write what the fetch returned rather than what the subject is assumed to do.
|
|
44
44
|
- Answer one question per section and stop. A reader arrives to settle something specific rather than to read the page through.
|
|
45
45
|
- Mark a claim the fetch left unsettled rather than smoothing over it. An unmarked gap reads as a checked fact.
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: draft-figure
|
|
3
3
|
description: Drafts one hand-drawn figure for a document, deciding whether the subject is Mermaid-shaped, an architecture view, or needs freehand SVG, then draws it. Renders the Mermaid path through Mermaid's own hand-drawn look, reads the render back, and fixes what it exposes. Wraps every path in the figure standard's caption, color, and accessibility rules. Use when asked to "draw a figure", "add a hand-drawn diagram", "draft a figure for this doc", "draw this relationship as a figure", "draw the architecture", "diagram the system", or "show the components". Do NOT use for a UI wireframe, which is `draft-doc`, or for design tokens, which is `design-extract`.
|
|
4
|
+
metadata:
|
|
5
|
+
family: generate
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# Draft figure
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: draft-identity
|
|
3
3
|
description: Drafts a project's logo mark through draft-and-pick'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
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# Draft identity
|
|
@@ -72,7 +74,7 @@ Follow `${CLAUDE_SKILL_DIR}/../draft-and-pick/SKILL.md` Steps 2 through 5 agains
|
|
|
72
74
|
This step and Step 7 replace `draft-and-pick`'s own Step 6, since the pick here produces several final files rather than one applied surface.
|
|
73
75
|
|
|
74
76
|
1. Extract the picked arm's `.mark` markup as the final vector source. Write it to `<write-folder>/favicon.svg`.
|
|
75
|
-
2. Under `<dest>/render/`, write one `icon-<w>x<h>.html` page per Step 2 size, carrying the picked `.mark` markup. Give every page's captured element the shared class `.render`, so one capture call renders the whole batch regardless of the size spread. `canon capture` opens every page at a fixed 2x device scale factor and screenshots the element at that scale, so declare each `.render` element at half its target dimension, `<w>/2` by `<h>/2`, to land the captured PNG on the literal target size rather than double it. Declare
|
|
77
|
+
2. Under `<dest>/render/`, write one `icon-<w>x<h>.html` page per Step 2 size, carrying the picked `.mark` markup. Give every page's captured element the shared class `.render`, so one capture call renders the whole batch regardless of the size spread. `canon capture` opens every page at a fixed 2x device scale factor and screenshots the element at that scale, so declare each `.render` element at half its target dimension, `<w>/2` by `<h>/2`, to land the captured PNG on the literal target size rather than double it. Declare no font on them, since each holds the mark alone and `canon capture` skips the font check on an element with no text. A generic family such as `system-ui` would be refused if text ever sat inside one.
|
|
76
78
|
3. Render the batch:
|
|
77
79
|
|
|
78
80
|
```bash
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: draft-ready
|
|
3
3
|
description: Writes a ready folder for finished files, its `00-overview.md`, the thin plan that points at it, and the task with a board row placed, reported to an orchestrator, or left to the operator, in one invocation. Use when asked to "write a ready folder", "hand these files to a worker", "package these finished files for a worker", "make a ready handoff", or when a session already holds the exact text of a skill, rule, or doc and a worker should copy it rather than author it. Do NOT use to plan a change nobody has written yet, which is `plan-feature`, to copy a folder into a worktree and ship it, which is `role-worker`, or to file a task with no finished files behind it, which is `task-board`.
|
|
4
|
+
metadata:
|
|
5
|
+
family: generate
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# Draft ready
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: draft-screencast
|
|
3
3
|
description: Drafts a screencast script with pre-seeded beats, defaults, and decisions to `demos/<slug>/beats.md`. Reads project context, asks four discovery questions with proposed defaults, then writes a shippable draft. Use when asked to "draft a screencast", "write a recording script", "plan a demo video", or "scaffold a screencast for X". Do NOT re-invoke to refine an existing draft. Re-running overwrites. Edit the draft file directly.
|
|
4
|
+
metadata:
|
|
5
|
+
family: generate
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# Draft screencast
|
|
@@ -45,6 +47,8 @@ Create `demos/<slug>/beats.md` at the project root, creating the folder if it do
|
|
|
45
47
|
|
|
46
48
|
Write all nine sections. Pre-seed every section with concrete content so the draft is shippable as-is. The user edits down rather than fills blanks.
|
|
47
49
|
|
|
50
|
+
Load `canon:video-craft` for every zoom and caption value the draft names, and report it rather than proceeding silently when it does not resolve. The template below states none, since each number there traces to a source that skill records.
|
|
51
|
+
|
|
48
52
|
```markdown
|
|
49
53
|
# Screencast: <short title>
|
|
50
54
|
|
|
@@ -72,7 +76,7 @@ Five beats. Each uses five fields. Add a sixth `Transition out` only when non-de
|
|
|
72
76
|
- On screen: <derived from hero moment>
|
|
73
77
|
- Action: <one verb, derived>
|
|
74
78
|
- Watch for:
|
|
75
|
-
- Emphasis: zoom
|
|
79
|
+
- Emphasis: zoom onto the action, scale and speed per `canon:video-craft`
|
|
76
80
|
- Caption:
|
|
77
81
|
|
|
78
82
|
### Beat 2: Setup
|
|
@@ -104,7 +108,7 @@ Five beats. Each uses five fields. Add a sixth `Transition out` only when non-de
|
|
|
104
108
|
- On screen:
|
|
105
109
|
- Action:
|
|
106
110
|
- Watch for:
|
|
107
|
-
- Emphasis: zoom
|
|
111
|
+
- Emphasis: zoom out to full frame
|
|
108
112
|
- Caption:
|
|
109
113
|
|
|
110
114
|
## 4. Sequencing notes
|
|
@@ -119,14 +123,14 @@ Five beats. Each uses five fields. Add a sixth `Transition out` only when non-de
|
|
|
119
123
|
- Resolution: 1920x1080
|
|
120
124
|
- Frame rate: 30fps
|
|
121
125
|
- Container: mp4 H.264
|
|
122
|
-
- Zoom:
|
|
126
|
+
- Zoom: only on an action too small to read at full frame, scale, speed, and dwell per `canon:video-craft`, zoomed out before every cut
|
|
123
127
|
- Highlight overlay: ~1.5s soft glow
|
|
124
128
|
|
|
125
|
-
## 6.
|
|
129
|
+
## 6. Captions
|
|
126
130
|
|
|
127
|
-
-
|
|
128
|
-
-
|
|
129
|
-
-
|
|
131
|
+
- Each caption names what its beat's frame shows, at most two lines of 42 characters, per `canon:video-craft`
|
|
132
|
+
- Hold and reading rate per `canon:video-craft`, splitting a caption across beats rather than shortening its hold
|
|
133
|
+
- Placed off the element the beat acts on
|
|
130
134
|
|
|
131
135
|
## 7. Distribution
|
|
132
136
|
|
|
@@ -1,39 +1,44 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: draft-slides
|
|
3
|
-
description: Why the skill
|
|
3
|
+
description: Why the skill draws a deck as HTML in the project's tokens inside its own folder, why the CLI owns the conversion, and why one render is read back before the deck is called done
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Draft slides requirement
|
|
7
7
|
|
|
8
8
|
## Gap
|
|
9
9
|
|
|
10
|
-
Without this skill, a deck request turns into hand-built
|
|
10
|
+
Without this skill, a deck request turns into hand-built output. The session writes a deck into whatever path occurs to it, so a second deck overwrites the first and nothing lists either. It writes pptxgenjs code or hex colors per deck, so the deck takes neither the project's design nor any other deck's, and it invents attributes the converter does not read, so a section, a chart, or an entrance silently goes missing. Every slide comes out as a title over bullets, which is the shape that needs no decision and reads as a document rather than a deck.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
A first render shipped unread hands the audience the overlap, the overflow, and every element the converter fell back to a picture for, since markup that looks correct says nothing about the file it produces.
|
|
13
13
|
|
|
14
14
|
## Must
|
|
15
15
|
|
|
16
|
-
- Read the
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
16
|
+
- Read the existing decks and the slide format from the CLI before drawing, and pick a deck name no listed deck carries unless the request names one
|
|
17
|
+
- Write each deck into its own folder under the slides record folder, one HTML file per slide in filename order
|
|
18
|
+
- Draw with the project's custom properties so the deck takes the project's design
|
|
19
|
+
- Vary the composition across the deck rather than repeating one shape
|
|
20
|
+
- Size content to fit the slide frame, keeping titles short and lines tight
|
|
20
21
|
- Shell out to the render command for the deck itself
|
|
21
|
-
-
|
|
22
|
+
- Read every fallback and refusal the render reports, run one QA pass over the rendered images, and fix what both report
|
|
22
23
|
|
|
23
24
|
## Must not
|
|
24
25
|
|
|
25
|
-
- Hardcode a
|
|
26
|
-
- Reimplement
|
|
26
|
+
- Hardcode a deck name, an attribute, or a chart type, which goes stale the moment the CLI changes
|
|
27
|
+
- Reimplement the conversion, the master, or the packaging, which the CLI owns
|
|
28
|
+
- Write a deck into the shared layouts folder, which is never listed as a deck
|
|
29
|
+
- Invent token values when the project has no token stylesheet
|
|
27
30
|
- Write centered body text or content that overflows a slide
|
|
28
31
|
- Loop on aesthetics past a single fix pass
|
|
29
32
|
|
|
30
33
|
## Guards
|
|
31
34
|
|
|
35
|
+
- No token stylesheet: draw the deck anyway and say it renders unstyled.
|
|
32
36
|
- Image conversion tools missing: skip the image pass and say so. Do not fail the render over a verification step.
|
|
33
37
|
|
|
34
38
|
## Out of scope
|
|
35
39
|
|
|
36
|
-
-
|
|
37
|
-
- The palette and
|
|
40
|
+
- Converting HTML to PowerPoint, which the CLI owns end to end
|
|
41
|
+
- The project's palette and faces, which live in its token stylesheet rather than in the slides
|
|
38
42
|
- Writing the content the deck is about, which the caller brings
|
|
43
|
+
- Drafting a deck as a canvas page, which waits on a measurement of that authoring surface
|
|
39
44
|
- Recording a demo, which `draft-screencast` owns
|
|
@@ -1,49 +1,61 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: draft-slides
|
|
3
|
-
description:
|
|
3
|
+
description: Draws a deck as HTML slides in the project's own design, one folder under `.canon/slides/` per deck, then renders it to an editable PowerPoint file via `canon slides render`. Use when asked to "draft slides", "make a deck", "build a presentation", "turn this into slides", or "render the deck". Holds the deck design rules. Do NOT reimplement the conversion. The CLI owns layout into PowerPoint shapes, the master, and packaging. Assumes the `canon` CLI is on PATH.
|
|
4
|
+
metadata:
|
|
5
|
+
family: generate
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# Draft slides
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
Draw each slide as an HTML file in a deck folder, then shell out to `canon slides render`. The CLI lays every slide out in a browser and rebuilds it as editable PowerPoint shapes. This skill owns the content, the slide markup, and the design choices the markup encodes.
|
|
9
11
|
|
|
10
|
-
## Read the
|
|
12
|
+
## Read the decks and the format
|
|
11
13
|
|
|
12
|
-
Run
|
|
14
|
+
Run both first. Never hardcode a deck name, an attribute, or a chart type. The CLI is the source of truth for each.
|
|
13
15
|
|
|
14
16
|
```bash
|
|
15
17
|
canon slides list --json 2>/dev/null
|
|
18
|
+
canon docs slides
|
|
16
19
|
```
|
|
17
20
|
|
|
18
|
-
|
|
21
|
+
The list returns one row per deck, carrying its `name`, `title`, slide count, and `path`. When the request names a deck the list holds, edit that folder. Otherwise pick a new kebab-case name no row carries.
|
|
19
22
|
|
|
20
|
-
|
|
23
|
+
The docs page states what `deck.json` holds, what each slide declares on its `<body>`, the motion attributes, speaker notes, charts, and what each refusal reports.
|
|
21
24
|
|
|
22
|
-
|
|
23
|
-
- One slide per section, separated by a `---` rule. Each slide opens with a `# Title` and a `layout:` line naming a layout from the catalog, followed by its content.
|
|
25
|
+
## Draw the deck
|
|
24
26
|
|
|
25
|
-
|
|
27
|
+
A deck folder sits at `.canon/slides/<deck>/` from the project root, and holds:
|
|
26
28
|
|
|
27
|
-
|
|
29
|
+
- One `.html` file per slide, rendered in filename order. Number them with a zero-padded prefix, such as `01-cover.html`, so a slide inserted later sorts where it belongs.
|
|
30
|
+
- `deck.json`, optional, for the title, the header and footer bands, slide numbers, the mark, and embedded faces.
|
|
31
|
+
- `assets/` for images the slides reference by a relative path.
|
|
32
|
+
|
|
33
|
+
Never write a slide into `.canon/slides/layouts/`. That folder holds the project's shared layouts and is never listed as a deck.
|
|
34
|
+
|
|
35
|
+
Each slide is a full HTML document laid out at 1280 by 720 CSS pixels. Position its blocks absolutely or with a flex or grid container sized to that frame, and keep every element inside it.
|
|
28
36
|
|
|
29
37
|
## Design rules
|
|
30
38
|
|
|
31
|
-
The
|
|
39
|
+
The render injects the project's token stylesheet ahead of each slide's own styles, so the deck takes the project's design rather than the toolkit's.
|
|
32
40
|
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
-
|
|
41
|
+
- Use the project's custom properties, such as `var(--color-accent)`, for every color, face, and spacing value the stylesheet defines. Read the names from `.claude/design/base.css` and any overrides under `.claude/design/project/`. When neither exists, say the deck renders unstyled rather than inventing values to cover it.
|
|
42
|
+
- Leave the `--color-*` roles to the stylesheet rather than redefining them in a slide. The master reads its colors off the first slide's `<html>`, and a slide body computing its own `--color-text` is reported, since the bands keep the master's colors.
|
|
43
|
+
- Vary the composition across slides. Never repeat a title over bullets on every slide. Reach for columns, a row of large numbers, a grid of cards, a chart, a pull quote, and section dividers.
|
|
44
|
+
- Keep titles short and lines tight, so text fits its box at the size the design sets rather than overflowing the frame.
|
|
45
|
+
- Never write centered body text.
|
|
46
|
+
- Prefer CSS the converter maps to native shapes. An element computing a property it cannot map is drawn as a picture of itself and reported on stderr, so a slide full of gradients and filters stops being editable.
|
|
37
47
|
|
|
38
48
|
## Render
|
|
39
49
|
|
|
40
50
|
Shell out to the CLI. It writes the deck and reports the path.
|
|
41
51
|
|
|
42
52
|
```bash
|
|
43
|
-
canon slides render
|
|
53
|
+
canon slides render <deck>
|
|
44
54
|
```
|
|
45
55
|
|
|
46
|
-
|
|
56
|
+
With one deck in the project the name can be left out. The render refuses with the deck list when there are several. Pass `--open` to open the deck, and `--mirror <dir>`, or set `CANON_SLIDES_MIRROR`, to copy it into a synced folder.
|
|
57
|
+
|
|
58
|
+
Read every `✗` line the render prints. A picture fallback, a refused link, chart, or effect, and a missing token each leave the deck written with that piece degraded or left out.
|
|
47
59
|
|
|
48
60
|
## QA loop
|
|
49
61
|
|
|
@@ -51,12 +63,13 @@ Run this once after the first render, then stop.
|
|
|
51
63
|
|
|
52
64
|
1. Convert the deck to images: `soffice --headless --convert-to pdf <deck>.pptx` then `pdftoppm -r 90 -png <deck>.pdf slide`. If `soffice` or `pdftoppm` is missing, skip the image pass and say so. Do not fail the render.
|
|
53
65
|
2. Open and inspect every rendered image in this session, checking each slide for overlap, overflow, low contrast, and empty regions.
|
|
54
|
-
3. Fix the reported issues in
|
|
66
|
+
3. Fix the reported issues and the `✗` lines in the slide files once, re-render, and stop. Do not loop indefinitely on aesthetics.
|
|
55
67
|
|
|
56
68
|
## Response
|
|
57
69
|
|
|
58
70
|
After rendering, report:
|
|
59
71
|
|
|
60
|
-
-
|
|
61
|
-
-
|
|
72
|
+
- The deck folder, the slide count, and the written `.pptx` path
|
|
73
|
+
- Whether the project's token stylesheet was found
|
|
74
|
+
- Each `✗` line the final render printed, or that it printed none
|
|
62
75
|
- Any QA issues found and what changed, or that the deck passed clean
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: git-commit
|
|
3
3
|
description: Generates one conventional commit message from the staged changes and commits them exactly as staged, so a hunk-level selection survives. Use when asked to "commit this" or "commit the staged changes" and the staged set covers one concern, or whenever the selection was staged hunk by hand. Do NOT use when the staged changes span several concerns and need separate commits. That is `git-stage`.
|
|
4
|
+
metadata:
|
|
5
|
+
family: ship
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# Git commit
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: git-followup
|
|
3
3
|
description: Ships a small self-review edit on the current PR branch by staging, committing, pushing, and syncing the open PR, replying on the PR when it carries review comments. Use when asked to "ship a followup", "push the PR fix", "followup", or "commit and push this small change". Do NOT use when there is no open PR for the branch (use git-ship instead).
|
|
4
|
+
metadata:
|
|
5
|
+
family: after-pr
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# Git followup
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: git-issue
|
|
3
3
|
description: Format a bug or task from the current session into a GitHub issue and file it on the current repo via `gh issue create`. Use when asked to "file an issue", "open an issue", "log this bug", "raise an issue", or "track this as an issue". Do NOT use to report a toolkit defect from a target project (that is `canon-feedback`), or to open a pull request (that is `git-pr`).
|
|
4
|
+
metadata:
|
|
5
|
+
family: after-pr
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# Git issue
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Issue reference
|
|
2
2
|
|
|
3
|
+
## Contents
|
|
4
|
+
|
|
5
|
+
- [Scope](#scope)
|
|
6
|
+
- [Title](#title)
|
|
7
|
+
- [Labels](#labels)
|
|
8
|
+
- [Content](#content)
|
|
9
|
+
- [Sections](#sections)
|
|
10
|
+
- [Formatting](#formatting)
|
|
11
|
+
- [Examples](#examples)
|
|
12
|
+
|
|
3
13
|
## Scope
|
|
4
14
|
|
|
5
15
|
Governs a tracker issue: its title, its labels, and the sections its body carries.
|
|
@@ -7,6 +7,14 @@ description: How git-pr finds the UI checklist and the local server, posts the e
|
|
|
7
7
|
|
|
8
8
|
The rendered-surface step of `git-pr`, reached after the final command printed the pull request number. The step runs on every pull request, with no test on the diff ahead of it. `no-evidence` is the silent branch, so a pull request that changes no rendered surface posts nothing.
|
|
9
9
|
|
|
10
|
+
## Contents
|
|
11
|
+
|
|
12
|
+
- [Find the UI checklist](#find-the-ui-checklist)
|
|
13
|
+
- [Find the local server](#find-the-local-server)
|
|
14
|
+
- [Post the evidence comparison](#post-the-evidence-comparison)
|
|
15
|
+
- [Post the UI checklist alone](#post-the-ui-checklist-alone)
|
|
16
|
+
- [Post the preview address](#post-the-preview-address)
|
|
17
|
+
|
|
10
18
|
## Find the UI checklist
|
|
11
19
|
|
|
12
20
|
`ui-checklist` writes a visual checklist to `.canon/tmp/handoff/ui-checklist/<slug>.md` at the main worktree root when a change needs visual verification, with `<slug>` derived per `${CLAUDE_SKILL_DIR}/../../standards/slug.md`. This skill is the file's sole consumer. Resolve the main root the way `session-worktree` does (`git worktree list --porcelain | grep -m 1 '^worktree ' | cut -d' ' -f2-`, falling back to `pwd`) and check for the file there. A missing file means no checklist was produced, and the two steps below each skip their checklist half.
|
|
@@ -31,9 +39,9 @@ The verb reads the listening sockets on this machine, keeps those whose process
|
|
|
31
39
|
|
|
32
40
|
Pass `--local` to the evidence step only on an `ok` here. The binary answering `ok` is the one carrying the flag, so a binary lacking the verb never meets a flag it would reject.
|
|
33
41
|
|
|
34
|
-
With a checklist, a diff carrying no evidence image still renders `ok`, and a local link rides in the same comment above the checklist, so a reviewer gets both in one place. A local link with neither an evidence image nor a checklist still reports `no-evidence`, which keeps a branch that changed no rendered surface from getting a comment holding a link and nothing else.
|
|
42
|
+
With a checklist, a diff carrying no evidence image still renders `ok`, and a local link rides in the same comment on the address line under `## Evidence`, above the checklist, so a reviewer gets both in one place. A local link with neither an evidence image nor a checklist still reports `no-evidence`, which keeps a branch that changed no rendered surface from getting a comment holding a link and nothing else.
|
|
35
43
|
|
|
36
|
-
A seeded workflow
|
|
44
|
+
A seeded workflow drops the whole address line once the pull request closes, hosted and local segments together and with no note in their place, so neither link outlives the branch it points at.
|
|
37
45
|
|
|
38
46
|
## Post the evidence comparison
|
|
39
47
|
|
|
@@ -102,15 +110,15 @@ The evidence comment is already posted, so the reviewer has the screenshots whil
|
|
|
102
110
|
canon pr preview <number> --json
|
|
103
111
|
```
|
|
104
112
|
|
|
105
|
-
The verb dispatches the project's Pages deploy on the pull request's branch and waits on the run for up to 15 minutes. It refuses before dispatching anything when the deploy command passes no `--branch`, since that deploy would publish the branch to production. `canon docs pr-preview` states the contract. Read `reason` on the record rather than the exit code.
|
|
113
|
+
The verb dispatches the project's Pages deploy on the pull request's branch and waits on the run for up to 15 minutes. It refuses before dispatching anything when the deploy command passes no `--branch`, since that deploy would publish the branch to production, and when the workflow's own push path filter matches no path the pull request changed, since a dispatch ignores that filter and the site it published would show none of the change. `canon docs pr-preview` states the contract. Read `reason` on the record rather than the exit code.
|
|
106
114
|
|
|
107
|
-
- `ok`: re-render the evidence body with the address on
|
|
115
|
+
- `ok`: re-render the evidence body with the address on the line under `## Evidence`, then post or update it exactly as the evidence step does, through the same tmp file and the `commentId` the record carries:
|
|
108
116
|
|
|
109
117
|
```bash
|
|
110
118
|
canon pr evidence <number> --preview <url> --json
|
|
111
119
|
```
|
|
112
120
|
|
|
113
|
-
The hosted address
|
|
121
|
+
The hosted address opens the address line and a local link already on the comment follows it on the same line, carried forward with no flag.
|
|
114
122
|
|
|
115
|
-
- `no-deploy`: the project deploys nothing a dispatch can start. Say nothing and move on.
|
|
123
|
+
- `no-deploy` or `unserved`: the project deploys nothing a dispatch can start, or nothing this branch changed is something its site builds from. Say nothing and move on.
|
|
116
124
|
- Any other `reason`, being `unfenced`, `no-alias`, `run-failed`, `timeout`, or a mirrored `gh` refusal: report it with the record's `message` and move on without stopping the chain. A missing link costs the reviewer a click, and a held ship costs the whole chain.
|
|
@@ -5,6 +5,18 @@ description: Path-to-label map format, prefix matching against the changed set,
|
|
|
5
5
|
|
|
6
6
|
# Label reference
|
|
7
7
|
|
|
8
|
+
## Contents
|
|
9
|
+
|
|
10
|
+
- [Scope](#scope)
|
|
11
|
+
- [Map format](#map-format)
|
|
12
|
+
- [Paths a map declines to label](#paths-a-map-declines-to-label)
|
|
13
|
+
- [Reporting a surface no row reaches](#reporting-a-surface-no-row-reaches)
|
|
14
|
+
- [Matching](#matching)
|
|
15
|
+
- [Applying](#applying)
|
|
16
|
+
- [A label the remote does not carry](#a-label-the-remote-does-not-carry)
|
|
17
|
+
- [Release pull requests](#release-pull-requests)
|
|
18
|
+
- [Labels at run time](#labels-at-run-time)
|
|
19
|
+
|
|
8
20
|
## Scope
|
|
9
21
|
|
|
10
22
|
Governs the labels a pull request carries: the map a project declares, how a changed path resolves to a label, and what a label missing from the remote costs.
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: git-ship
|
|
3
3
|
description: Runs the full post-feature workflow by syncing docs, staging commits, renaming the branch, and opening a PR. Use after implementing a feature, or when asked to "ship", "ship this", or "ship it". Do NOT auto-trigger. Shipping is a decision the user takes.
|
|
4
|
+
metadata:
|
|
5
|
+
family: ship
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# Ship
|