@erclx/canon 5.41.0 โ 5.43.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/claude/.claude-plugin/plugin.json +1 -1
- package/claude/skills/api-design/references/adopted.md +34 -14
- package/claude/skills/auto-ship/REQUIREMENT.md +1 -0
- package/claude/skills/auto-ship/SKILL.md +24 -4
- package/claude/skills/auto-ship/references/draft-mark.md +32 -6
- package/claude/skills/auto-ship/references/failure-recovery.md +15 -13
- package/claude/skills/auto-ship/references/tier-failures.md +31 -10
- package/claude/skills/auto-ship/references/ui-checklist.md +9 -4
- package/claude/skills/auto-ship/references/worktree-name.md +9 -3
- package/claude/skills/build-in-slices/references/adopted.md +35 -21
- package/claude/skills/canvas-board/references/canvas.md +17 -6
- package/claude/skills/canvas-board/references/design.md +26 -7
- package/claude/skills/ci-workflow/REQUIREMENT.md +2 -1
- package/claude/skills/ci-workflow/SKILL.md +12 -2
- package/claude/skills/ci-workflow/references/workflows.md +12 -9
- package/claude/skills/code-craft/references/adopted.md +58 -20
- package/claude/skills/codebase-layout/references/adopted.md +49 -16
- package/claude/skills/codebase-layout/references/frontend.md +11 -4
- package/claude/skills/codebase-layout/references/tests.md +4 -2
- package/claude/skills/context-fold/references/classify.md +10 -15
- package/claude/skills/context-fold/references/completion-report.md +11 -9
- package/claude/skills/context-fold/references/context-refresh.md +26 -9
- package/claude/skills/context-fold/references/unusable-baseline.md +5 -3
- package/claude/skills/create-rule/REQUIREMENT.md +5 -0
- package/claude/skills/create-rule/SKILL.md +10 -1
- package/claude/skills/create-rule/references/checklist.md +26 -0
- package/claude/skills/create-rule/references/rule.md +98 -20
- package/claude/skills/create-skill/SKILL.md +1 -0
- package/claude/skills/create-skill/references/skill-disclosure.md +10 -2
- package/claude/skills/create-skill/references/skill-frontmatter.md +43 -0
- package/claude/skills/create-skill/references/skill-paths.md +7 -4
- package/claude/skills/create-skill/references/skill-practice.md +6 -3
- package/claude/skills/create-skill/references/skill-requirement.md +4 -2
- package/claude/skills/create-skill/references/skill.md +67 -44
- package/claude/skills/decision-escalate/SKILL.md +1 -2
- package/claude/skills/deploy-app/references/vercel.md +2 -1
- package/claude/skills/deprecation-migration/references/adopted.md +44 -25
- package/claude/skills/design-taste/references/adopted.md +9 -1
- package/claude/skills/design-taste/references/craft.md +3 -1
- package/claude/skills/design-taste/references/kinds.md +8 -7
- package/claude/skills/design-taste/references/preflight.md +12 -0
- package/claude/skills/design-taste/references/systems.md +7 -6
- package/claude/skills/design-taste/references/tells.md +24 -25
- package/claude/skills/design-taste/references/vocabulary.md +7 -5
- package/claude/skills/document-health/references/axes.md +55 -30
- package/claude/skills/draft-and-pick/references/live-arms.md +2 -2
- package/claude/skills/draft-doc/references/context.md +4 -3
- package/claude/skills/draft-doc/references/docs.md +6 -3
- package/claude/skills/draft-doc/references/readme/agent-facing.md +6 -0
- package/claude/skills/draft-doc/references/readme/application.md +8 -2
- package/claude/skills/draft-doc/references/readme/cli.md +5 -1
- package/claude/skills/draft-doc/references/readme/library.md +4 -0
- package/claude/skills/draft-doc/references/readme/plugin.md +9 -1
- package/claude/skills/draft-doc/references/readme.md +30 -13
- package/claude/skills/draft-doc/references/requirements.md +17 -4
- package/claude/skills/draft-doc/references/wiki-kind.md +20 -10
- package/claude/skills/draft-doc/references/wiki.md +1 -1
- package/claude/skills/draft-figure/references/architecture-set.md +7 -3
- package/claude/skills/draft-figure/references/figures.md +8 -6
- package/claude/skills/draft-figure/references/hand-drawn.md +3 -1
- package/claude/skills/draft-figure/references/mermaid-path.md +19 -9
- package/claude/skills/draft-figure/references/mermaid.md +10 -5
- package/claude/skills/draft-ready/references/ready.md +22 -15
- package/claude/skills/git-branch/references/branch.md +11 -1
- package/claude/skills/git-branch/references/slug.md +17 -5
- package/claude/skills/git-commit/references/commit.md +9 -5
- package/claude/skills/git-commit/references/versioning.md +23 -17
- package/claude/skills/git-followup/REQUIREMENT.md +1 -1
- package/claude/skills/git-followup/SKILL.md +5 -6
- package/claude/skills/git-issue/references/issue.md +29 -16
- package/claude/skills/git-pr/REQUIREMENT.md +1 -5
- package/claude/skills/git-pr/SKILL.md +11 -22
- package/claude/skills/git-pr/references/final-command.md +21 -8
- package/claude/skills/git-pr/references/labels.md +45 -28
- package/claude/skills/git-pr/references/pr.md +29 -9
- package/claude/skills/git-pr/references/publish.md +42 -28
- package/claude/skills/git-pr/references/task-number.md +20 -8
- package/claude/skills/git-ship/SKILL.md +1 -1
- package/claude/skills/plan-feature/SKILL.md +1 -1
- package/claude/skills/plan-feature/references/plan-lifecycle.md +10 -3
- package/claude/skills/plan-feature/references/plan.md +58 -21
- package/claude/skills/plan-groundwork/references/groundwork-spikes.md +4 -1
- package/claude/skills/plan-groundwork/references/groundwork.md +14 -16
- package/claude/skills/plan-intake/references/intake.md +29 -24
- package/claude/skills/pr-evidence/REQUIREMENT.md +40 -0
- package/claude/skills/pr-evidence/SKILL.md +53 -0
- package/claude/skills/pr-evidence/references/evidence.md +150 -0
- package/claude/skills/review-address/references/post-review-findings.md +10 -3
- package/claude/skills/review-address/references/rebase-conflicts.md +15 -7
- package/claude/skills/review-address/references/rest-reads.md +3 -1
- package/claude/skills/review-craft/references/adopted.md +35 -18
- package/claude/skills/review-craft/references/security.md +42 -7
- package/claude/skills/review-craft/references/ui.md +23 -8
- package/claude/skills/review-pr/SKILL.md +6 -6
- package/claude/skills/review-pr/references/body-variants.md +29 -9
- package/claude/skills/review-pr/references/close-out.md +20 -5
- package/claude/skills/review-pr/references/key-changes.md +27 -3
- package/claude/skills/review-pr/references/post.md +83 -31
- package/claude/skills/review-pr/references/scope.md +54 -19
- package/claude/skills/review-ui/references/close-out.md +7 -5
- package/claude/skills/review-ui/references/driving.md +24 -4
- package/claude/skills/review-ui/references/post.md +43 -15
- package/claude/skills/role-orchestrator/SKILL.md +2 -0
- package/claude/skills/role-orchestrator/references/orchestrator-cloud-launch.md +67 -17
- package/claude/skills/role-orchestrator/references/orchestrator-dispatch.md +80 -40
- package/claude/skills/role-orchestrator/references/orchestrator-handback.md +52 -15
- package/claude/skills/role-orchestrator/references/orchestrator-handoff.md +48 -26
- package/claude/skills/role-orchestrator/references/orchestrator-inbound.md +12 -13
- package/claude/skills/role-orchestrator/references/orchestrator-launch.md +72 -36
- package/claude/skills/role-orchestrator/references/orchestrator-output.md +16 -4
- package/claude/skills/role-orchestrator/references/orchestrator-parked.md +64 -24
- package/claude/skills/role-orchestrator/references/orchestrator-poll.md +80 -26
- package/claude/skills/role-orchestrator/references/orchestrator-refill.md +41 -18
- package/claude/skills/role-orchestrator/references/orchestrator-resume.md +19 -7
- package/claude/skills/role-orchestrator/references/orchestrator-review-dispatch.md +22 -12
- package/claude/skills/role-orchestrator/references/orchestrator-reviewer-launch.md +15 -6
- package/claude/skills/role-orchestrator/references/orchestrator-sweep.md +25 -7
- package/claude/skills/role-orchestrator/references/orchestrator-watch.md +34 -8
- package/claude/skills/role-orchestrator/scripts/poll.ts +16 -24
- package/claude/skills/role-planner/REQUIREMENT.md +1 -1
- package/claude/skills/role-planner/SKILL.md +3 -3
- package/claude/skills/role-worker/REQUIREMENT.md +3 -0
- package/claude/skills/role-worker/SKILL.md +34 -2
- package/claude/skills/search-craft/REQUIREMENT.md +1 -1
- package/claude/skills/search-craft/SKILL.md +2 -2
- package/claude/skills/search-craft/references/adopted.md +18 -6
- package/claude/skills/session-map/references/session.md +26 -7
- package/claude/skills/session-worktree/references/main-root-writes.md +25 -8
- package/claude/skills/systematic-debugging/references/adopted.md +30 -16
- package/claude/skills/target-check/references/domains.md +39 -11
- package/claude/skills/target-setup/references/detect.md +80 -65
- package/claude/skills/target-setup/references/indexes.md +8 -6
- package/claude/skills/task-board/references/board.md +86 -30
- package/claude/skills/task-board/references/decline.md +29 -13
- package/claude/skills/task-board/references/tasks-decline.md +12 -5
- package/claude/skills/task-board/references/tasks.md +65 -33
- package/claude/skills/task-complete/references/archive.md +41 -17
- package/claude/skills/task-complete/references/receipt-sweep.md +23 -9
- package/claude/skills/task-complete/references/unusable-baseline.md +10 -3
- package/claude/skills/teach-workspace/references/glossary.md +6 -2
- package/claude/skills/teach-workspace/references/lesson-build.md +44 -16
- package/claude/skills/teach-workspace/references/lesson-craft.md +12 -7
- package/claude/skills/teach-workspace/references/pedagogy.md +6 -3
- package/claude/skills/teach-workspace/references/promotion-fold.md +17 -11
- package/claude/skills/teach-workspace/references/promotion.md +31 -8
- package/claude/skills/teach-workspace/references/revisit.md +8 -2
- package/claude/skills/teach-workspace/references/teach.md +17 -9
- package/claude/skills/test-craft/references/adopted.md +48 -14
- package/claude/skills/test-craft/references/component.md +7 -4
- package/claude/skills/test-craft/references/e2e.md +25 -7
- package/claude/skills/test-craft/references/unit.md +3 -1
- package/claude/skills/test-first/references/adopted.md +12 -4
- package/claude/skills/ui-checklist/REQUIREMENT.md +1 -1
- package/claude/skills/ui-checklist/SKILL.md +1 -1
- package/claude/skills/video-craft/references/adopted.md +62 -18
- package/claude/skills/write-human/references/adopted.md +21 -8
- package/docs/agents/audits.md +1 -0
- package/docs/agents/migrate.md +11 -8
- package/docs/target/migrations.md +11 -0
- package/docs/workflow/parallel-features.md +1 -1
- package/docs/workflow/skill-map.md +1 -0
- package/governance/detect.toml +4 -0
- package/governance/rules/canon/context.md +2 -1
- package/governance/rules/canon/plan.md +3 -5
- package/governance/rules/canon/scratch.md +3 -1
- package/governance/rules/canon/task-scope.md +2 -1
- package/governance/rules/canon/tasks.md +2 -1
- package/governance/rules/canon/worktrees.md +5 -2
- package/governance/rules/claude/output.md +7 -4
- package/governance/rules/claude/skill.md +6 -4
- package/governance/rules/tooling/ci-workflow.md +6 -39
- package/governance/rules/ui/design-reference.md +37 -0
- package/governance/rules/writing/markdown.md +2 -1
- package/package.json +6 -6
- package/src/audits/catalog.ts +42 -0
- package/src/claude/cases/workflow.ts +5 -0
- package/src/claude/settings.ts +8 -4
- package/src/commands/claude.ts +11 -1
- package/src/commands/gov.ts +198 -0
- package/src/commands/migrate.ts +121 -2
- package/src/commands/pr.ts +146 -105
- package/src/commands/tooling.ts +3 -3
- package/src/commands/worktrees.ts +49 -0
- package/src/gate/stages.ts +15 -0
- package/src/gov/audit.ts +440 -0
- package/src/listeners/belongs.ts +21 -0
- package/src/listeners/machine.ts +93 -0
- package/src/listeners/parse.ts +41 -0
- package/src/markdown/scope.ts +144 -0
- package/src/migrate/session-defaults.ts +138 -0
- package/src/pr/lift.ts +6 -3
- package/src/pr/local.ts +4 -69
- package/src/pr/review-state.ts +182 -0
- package/src/sync/check.ts +15 -0
- package/src/tooling/stamp.ts +56 -12
- package/src/worktrees/stop.ts +92 -0
- package/tooling/base/configs/.github/workflows/phase-label-gate.yml +6 -2
- package/tooling/base/configs/commitlint.config.js +0 -20
- package/tooling/base/reference.md +1 -1
- package/tooling/base/seeds/.github/workflows/verify.yml +4 -1
- package/tooling/claude/reference.md +13 -7
- package/tooling/claude/seeds/.claude/settings.json +4 -0
- package/tooling/claude/user/settings.template.json +0 -4
- package/tooling/cloudflare/configs/.github/workflows/deploy.yml +5 -5
- package/tooling/public/configs/.github/dependabot.yml +12 -0
- package/tooling/public/configs/.github/workflows/release-please.yml +30 -0
- package/tooling/public/manifest.toml +8 -0
- package/tooling/public/reference.md +53 -0
- package/tooling/public/seeds/.github/ISSUE_TEMPLATE/bug.yml +48 -0
- package/tooling/public/seeds/.github/ISSUE_TEMPLATE/config.yml +5 -0
- package/tooling/public/seeds/.github/ISSUE_TEMPLATE/feature.yml +16 -0
- package/tooling/public/seeds/.release-please-manifest.json +3 -0
- package/tooling/public/seeds/CONTRIBUTING.md +50 -0
- package/tooling/public/seeds/LICENSE +21 -0
- package/tooling/public/seeds/SECURITY.md +13 -0
- package/tooling/public/seeds/release-please-config.json +12 -0
- package/tooling/shell/configs/.github/workflows/shell.yml +4 -1
- package/tooling/web/configs/.github/workflows/readme-screenshot.yml +6 -3
- package/tooling/web/configs/.github/workflows/verify.yml +15 -12
- package/claude/skills/git-pr/references/evidence.md +0 -124
|
@@ -11,25 +11,45 @@ Each number in the body traces to a source here, read through the `search-craft`
|
|
|
11
11
|
|
|
12
12
|
Field: subtitling and captioning. Authorities: broadcasters' and streamers' published subtitle guidelines, and the captioning program that sets educational practice.
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
| Rule | Source |
|
|
15
|
+
| ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
16
|
+
| On screen for 5/6 of a second to 7 seconds | Netflix's [Timed Text Style Guide: General Requirements](https://partnerhelp.netflixstudios.com/hc/en-us/articles/215758617-Timed-Text-Style-Guide-General-Requirements), a minimum of 20 frames at 24 fps |
|
|
17
|
+
| Two lines, 42 characters a line | Netflix's [English (USA) guide](https://partnerhelp.netflixstudios.com/hc/en-us/articles/217350977-English-USA-Timed-Text-Style-Guide) |
|
|
18
|
+
| 20 characters per second, 17 for children | The same English (USA) guide, adult and children's programs respectively |
|
|
19
|
+
| Never over what the frame is about | The DCMP [Captioning Tip Sheet](https://dcmp.org/learn/225-captioning-tip-sheet): "Placement must not interfere with existing visuals/graphics." |
|
|
15
20
|
|
|
16
|
-
|
|
21
|
+
### Start on the first frame of the action
|
|
17
22
|
|
|
18
|
-
|
|
23
|
+
Netflix's [Subtitle Timing Guidelines](https://partnerhelp.netflixstudios.com/hc/en-us/articles/360051554394-Timed-Text-Style-Guide-Subtitle-Timing-Guidelines) put a subtitle's in-time on the first frame of its audio. A software video's caption names an action rather than a line of speech, so the body keys the in-time on the action's first frame.
|
|
19
24
|
|
|
20
|
-
|
|
25
|
+
### Captions name what the frame shows
|
|
21
26
|
|
|
22
|
-
|
|
27
|
+
No source states this for a software video. It is the operator's read of an unguided render whose caption narrated the whole flow, kept because the timing rules above already assume a caption tied to one moment.
|
|
23
28
|
|
|
24
29
|
## Zoom
|
|
25
30
|
|
|
26
31
|
Fields: interface motion design, and screen recording practice. Authorities: design systems that publish motion specs, and the reference documentation of a screen recording tool.
|
|
27
32
|
|
|
28
|
-
|
|
33
|
+
### A push onto an action stays under 1 second
|
|
29
34
|
|
|
30
|
-
|
|
35
|
+
The floor is HyperFrames'. Its `viewport-change` rule states a zoom of 1.0 to 2.0 seconds with the reason beside it, "under 0.8s teleports, over 2.5s drags", and the body points at the rule rather than restating it.
|
|
31
36
|
|
|
32
|
-
|
|
37
|
+
- Measured: an unguided render pushed in over 2.2 seconds and a second over 1.4 seconds, and the operator judged both slow, so the range's lower half already reads slow on a push onto a click
|
|
38
|
+
- Published: Material Design 3's [easing and duration tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs) end at 1000 ms, the top of a band reserved for ambient transitions, so no input-driven transition there runs longer
|
|
39
|
+
|
|
40
|
+
### Zoom on a click
|
|
41
|
+
|
|
42
|
+
Screen Studio's [auto zoom guide](https://screen.studio/guide/auto-zoom) keys its zoom on click positions and zooms nowhere a click did not occur.
|
|
43
|
+
|
|
44
|
+
### Conflict, and the pick
|
|
45
|
+
|
|
46
|
+
HyperFrames' range and the measured renders disagree on the push onto an action. The body takes the overlap, HyperFrames' teleport floor below and 1 second above, which sits inside HyperFrames' range at its fast end.
|
|
47
|
+
|
|
48
|
+
- HyperFrames' full range stays with an ambient reveal, matching Material's own split between input-driven and ambient motion
|
|
49
|
+
- A tighter band was declined. Material puts large expressive transitions at 450 to 600 ms, and Nielsen Norman Group's [animation duration article](https://www.nngroup.com/articles/animation-duration/) calls 400 ms "very slow".
|
|
50
|
+
- Both write for an interface a user waits on, which a video viewer is not, and that band sits below HyperFrames' teleport floor with nothing measured to show it reads right
|
|
51
|
+
|
|
52
|
+
Narrow the band once a composed demo is compared against the unguided renders.
|
|
33
53
|
|
|
34
54
|
## Pointer
|
|
35
55
|
|
|
@@ -39,28 +59,52 @@ The two pointer rules in the body carry no number. One pointer on a frame and a
|
|
|
39
59
|
|
|
40
60
|
Fields: web accessibility, and audio post-production. Authorities: the W3C's accessibility guidelines, and the audio engineering society's streaming recommendation.
|
|
41
61
|
|
|
42
|
-
|
|
62
|
+
### Music at least 20 dB under the voice
|
|
63
|
+
|
|
64
|
+
WCAG 2.1 [Success Criterion 1.4.7](https://www.w3.org/WAI/WCAG21/Understanding/low-or-no-background-audio.html) is the source, reading "The background sounds are at least 20 decibels lower than the foreground speech content, with the exception of occasional sounds that last for only one or two seconds."
|
|
65
|
+
|
|
66
|
+
HyperFrames' `media-use` sets its narrated bed at a volume of 0.12, about 18 dB under a voice at full scale. The body takes WCAG's 20 dB, since it is the published floor and the bed default sits 2 dB short of it.
|
|
67
|
+
|
|
68
|
+
### Overall loudness is delegated
|
|
43
69
|
|
|
44
|
-
|
|
70
|
+
The AES [TD1008](https://aes.org/wp-content/uploads/2024/01/20210924_TD1008_v3.13.pdf) streaming recommendation normalizes speech to -18 LUFS with a true peak no higher than -1 dBTP. `media-use` ships -14 and -16 LUFS targets for social and podcast delivery.
|
|
45
71
|
|
|
46
|
-
|
|
72
|
+
The body states no overall target, since the right one depends on where the video is published and `media-use` owns that operation.
|
|
47
73
|
|
|
48
74
|
## Voiceover
|
|
49
75
|
|
|
50
76
|
Field: captioning, for the reading ceiling a voiceover's captions inherit. Authority: the captioning program's presentation rate guidance.
|
|
51
77
|
|
|
52
|
-
|
|
78
|
+
### At or under 160 words a minute when captioned
|
|
53
79
|
|
|
54
|
-
|
|
80
|
+
The DCMP [Captioning Key: Presentation Rate](https://dcmp.org/learn/601-captioning-key---presentation-rate) caps upper-level captions at 160 words a minute.
|
|
81
|
+
|
|
82
|
+
- `hyperframes-creative`'s narration reference states 2.5 words a second, 150 a minute, under the ceiling, so the two do not conflict
|
|
83
|
+
- An open search of voiceover practitioners put explainers at 140 to 160 words a minute, which agrees
|
|
84
|
+
- Narration has no standards body for pace, and the scoped search found none, so the body sets only the ceiling and points at HyperFrames for pace
|
|
55
85
|
|
|
56
86
|
## Declined
|
|
57
87
|
|
|
58
|
-
|
|
88
|
+
Each item below stays out of the body for the reason given.
|
|
89
|
+
|
|
90
|
+
### Restating HyperFrames' motion rules
|
|
91
|
+
|
|
92
|
+
Ease variety, anchoring, click timing, the scale and dwell of a zoom, and title-safe margins are stated in HyperFrames' own skills, which update on their own cadence. A copy here goes stale on theirs.
|
|
93
|
+
|
|
94
|
+
### A loudness target in the body
|
|
95
|
+
|
|
96
|
+
See Audio above.
|
|
97
|
+
|
|
98
|
+
### Pointer smoothing and hiding at rest
|
|
99
|
+
|
|
100
|
+
Screen Studio's [cursor guide](https://screen.studio/guide/cursor) smooths the pointer and hides it when idle, and its [guide to disabling smooth movement](https://screen.studio/guide/disable-smooth-mouse-movement) turns smoothing off for a dropdown menu.
|
|
101
|
+
|
|
102
|
+
Both are recorder settings. A take is composed with its pointer baked into the frames, so a session composing from it cannot change either, and they belong to whatever records the take.
|
|
59
103
|
|
|
60
|
-
|
|
104
|
+
### Zoom out before a cut, and a sound effect only on a meaningful click
|
|
61
105
|
|
|
62
|
-
|
|
106
|
+
Neither has a source, and no operator read stands behind either, so both stay out until one does.
|
|
63
107
|
|
|
64
|
-
|
|
108
|
+
### Vertical 9:16 framing
|
|
65
109
|
|
|
66
|
-
|
|
110
|
+
Every video measured when this skill was written was landscape. Add it when a project asks for vertical video, with its safe areas sourced from the platform's own creator documentation.
|
|
@@ -11,23 +11,34 @@ Neither was imported wholesale, and one measurement settles why. Read this befor
|
|
|
11
11
|
|
|
12
12
|
## What was adopted
|
|
13
13
|
|
|
14
|
-
Roughly half the pattern catalog had no counterpart in this corpus
|
|
14
|
+
Roughly half the pattern catalog had no counterpart in this corpus. Six of those patterns are now in `machine-tells.md`, each a shape rather than a token, which kept it out of a ban list that matches words.
|
|
15
|
+
|
|
16
|
+
- Rule-of-three, synonym cycling, and false ranges
|
|
17
|
+
- Inline-header lists, adverb propping, and passive voice with an unnamed actor
|
|
18
|
+
|
|
19
|
+
### The density layer
|
|
15
20
|
|
|
16
21
|
The density layer had no counterpart at all and is now `density.md`. Its useful half is the split between what a compression pass may cut and what it may not, since a terse register already instructs a session to cut and names nothing that has to survive.
|
|
17
22
|
|
|
18
|
-
The ambiguity rules travel with that layer
|
|
23
|
+
The ambiguity rules travel with that layer. Compression creates the ambiguity, so a rule about pronouns and modifiers belongs beside the rule that shortened the sentence.
|
|
19
24
|
|
|
20
25
|
## What was declined
|
|
21
26
|
|
|
22
|
-
- **The ban on abstract metaphor nouns.** The nouns it names are load-bearing terms in this corpus rather than decoration, and the count below
|
|
23
|
-
- **Document mode as a selector.**
|
|
24
|
-
- **A voice register per surface.** One baseline covers every surface. A surface needing a warmer register states its own voice and claims the yield, which lifts voice alone
|
|
27
|
+
- **The ban on abstract metaphor nouns.** The nouns it names are load-bearing terms in this corpus rather than decoration, and the count below decides it.
|
|
28
|
+
- **Document mode as a selector.** In this corpus the standard governing a document's type already fixes its shape, so a mode picked before drafting adds a second authority over one question.
|
|
29
|
+
- **A voice register per surface.** One baseline covers every surface. A surface needing a warmer register states its own voice and claims the yield, which lifts voice alone.
|
|
30
|
+
|
|
31
|
+
### The count behind the first
|
|
25
32
|
|
|
26
|
-
The
|
|
33
|
+
The source names `surface` among the nouns it bans. Tracked markdown in the authoring repository used `surface` 593 times, `harness` 95, `scaffolding` 17, and `primitive` 4.
|
|
34
|
+
|
|
35
|
+
Adopting the item either rewrites established vocabulary across the corpus or is ignored in silence, and a reader arriving later cannot tell which happened.
|
|
27
36
|
|
|
28
37
|
## What moved in from the markdown standard
|
|
29
38
|
|
|
30
|
-
The marketing words and vague qualifiers under `## Voice` were a gated word set in the markdown standard until the audit narrowed to characters. A word ban catches the token and misses the habit
|
|
39
|
+
The marketing words and vague qualifiers under `## Voice` were a gated word set in the markdown standard until the audit narrowed to characters. A word ban catches the token and misses the habit, so a writer swaps `robust` for a synonym and the claim stays unproven.
|
|
40
|
+
|
|
41
|
+
The list now lives here as guidance a reader applies. This body is its one copy, since no command reads it and a second copy would drift with nothing comparing the two.
|
|
31
42
|
|
|
32
43
|
## Where this diverges
|
|
33
44
|
|
|
@@ -37,4 +48,6 @@ The source material also prefers shorter sentences without bound. This skill mea
|
|
|
37
48
|
|
|
38
49
|
## The industry-guide record
|
|
39
50
|
|
|
40
|
-
The cadence rules and the bans they pair with trace to three industry style guides, being Google's developer documentation style guide, Microsoft's writing style guide, and Apple's style guide.
|
|
51
|
+
The cadence rules and the bans they pair with trace to three industry style guides, being Google's developer documentation style guide, Microsoft's writing style guide, and Apple's style guide.
|
|
52
|
+
|
|
53
|
+
The authoring toolkit keeps the per-rule attributions and the dates each guide was read. No install carries that record, so this file is the position a target reads.
|
package/docs/agents/audits.md
CHANGED
|
@@ -83,6 +83,7 @@ The placement entry runs pinned to `--backend off`, so its tally stays comparabl
|
|
|
83
83
|
| `secrets` | `canon secrets scan` | Credential-shaped values in the shipped tree | Gates |
|
|
84
84
|
| `labels` | `canon labels audit` | Changed paths no row of the label map reaches | Reports |
|
|
85
85
|
| `restated` | `canon gov restated` | Instructions `CLAUDE.md` states that a second surface states too | Reports |
|
|
86
|
+
| `rules` | `canon gov audit` | Rules past a shape limit, and here outside-practice rules short of a source ledger | Reports |
|
|
86
87
|
| `counts` | `canon gov counts` | Sentences stating a closed catalog's size that disagree with the tree | Reports |
|
|
87
88
|
| `census` | `canon census` | File count, extension breakdown, and line total | Reports |
|
|
88
89
|
| `deps` | `canon deps audit` | Advisories against the resolved dependencies | Reports |
|
package/docs/agents/migrate.md
CHANGED
|
@@ -18,11 +18,13 @@ kind: reference
|
|
|
18
18
|
| `rule-layout` | A flat installed-rule layout onto the `canon/`-wrapped one |
|
|
19
19
|
| `scratch-evidence` | A folder a durable record cites out of `.tmp/`, with its citations |
|
|
20
20
|
| `record-layout` | Review receipts, memory archives, feedback, renders, picks, and evidence into their current folders |
|
|
21
|
+
| `session-defaults` | The seeded session defaults into an existing `.claude/settings.json`: `Agent` and `Task` denied, auto memory off |
|
|
21
22
|
|
|
22
23
|
- `skill-names` takes no `--scope` and skips the changelog and eval transcripts
|
|
23
24
|
- `surface-roots` leaves `rules/`, `skills/`, `hooks/`, and `settings.json` where Claude Code reads them
|
|
24
25
|
- `rule-layout` classifies each flat file against the stamp as clean, edited, or unclaimed. Clean and edited files move untouched, and an unclaimed name stays.
|
|
25
26
|
- `record-layout` labels each evidence folder `(pick)` or `(evidence)` in the dry run
|
|
27
|
+
- `session-defaults` adds a key only when absent. It never removes a deny entry or changes a set `autoMemoryEnabled`, and a missing settings file is nothing to do.
|
|
26
28
|
|
|
27
29
|
## Output
|
|
28
30
|
|
|
@@ -43,14 +45,15 @@ Three markers keep an old spelling on a line. Each also covers the nearest non-b
|
|
|
43
45
|
|
|
44
46
|
## Refusals
|
|
45
47
|
|
|
46
|
-
| Verb | Refuses when
|
|
47
|
-
| ------------------ |
|
|
48
|
-
| `records` | The project does not ignore `.canon/`. Run `canon tooling sync --write` first.
|
|
49
|
-
| `records` | A record folder already exists at the destination
|
|
50
|
-
| `surface-roots` | Any destination already exists under `canon/`, refusing the whole plan
|
|
51
|
-
| `scratch-evidence` | A destination is occupied
|
|
52
|
-
| `record-layout` | A destination already exists, each move refused on its own
|
|
53
|
-
| `rule-layout` | A destination holds different bytes. Neither file is touched and other moves apply.
|
|
48
|
+
| Verb | Refuses when |
|
|
49
|
+
| ------------------ | ------------------------------------------------------------------------------------- |
|
|
50
|
+
| `records` | The project does not ignore `.canon/`. Run `canon tooling sync --write` first. |
|
|
51
|
+
| `records` | A record folder already exists at the destination |
|
|
52
|
+
| `surface-roots` | Any destination already exists under `canon/`, refusing the whole plan |
|
|
53
|
+
| `scratch-evidence` | A destination is occupied |
|
|
54
|
+
| `record-layout` | A destination already exists, each move refused on its own |
|
|
55
|
+
| `rule-layout` | A destination holds different bytes. Neither file is touched and other moves apply. |
|
|
56
|
+
| `session-defaults` | The settings file is not valid JSON, or `permissions` or its `deny` has another shape |
|
|
54
57
|
|
|
55
58
|
A `rule-layout` destination holding the same bytes marks a duplicate, which `--write` deletes.
|
|
56
59
|
|
|
@@ -136,3 +136,14 @@ The wireframes record is retired, and nothing deletes what a project holds.
|
|
|
136
136
|
## Move decisions out of a held architecture record, once
|
|
137
137
|
|
|
138
138
|
The toolkit no longer seeds `canon/ARCHITECTURE.md`, and a held file and its `CLAUDE.md` import stay. Move a trap a session would hit into that domain's `## Gotchas`, then delete the file and its `@canon/ARCHITECTURE.md` line.
|
|
139
|
+
|
|
140
|
+
## Deny subagents and turn auto memory off, once
|
|
141
|
+
|
|
142
|
+
The seeded `.claude/settings.json` now denies the `Agent` and `Task` tools and sets `autoMemoryEnabled` to `false`. `canon claude sync` never rewrites a settings file you hold, so it warns while the file holds neither default. Removing the deny later to allow subagents draws no warning.
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
canon migrate session-defaults --json
|
|
146
|
+
canon migrate session-defaults --write --json
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
The verb only adds a key that is absent. A person who wants auto memory back sets it in their own `.claude/settings.local.json`.
|
|
@@ -11,7 +11,7 @@ Run independent features in parallel, one git worktree and one Claude Code sessi
|
|
|
11
11
|
## One worktree per feature
|
|
12
12
|
|
|
13
13
|
- Invoke `canon:plan-feature` in each session. Plans land at `.canon/plans/feature-<slug>.md` at the main root.
|
|
14
|
-
- `ui-checklist` writes a per-branch handoff at `tmp/handoff/ui-checklist/<slug>.md`, which `
|
|
14
|
+
- `ui-checklist` writes a per-branch handoff at `tmp/handoff/ui-checklist/<slug>.md`, which `pr-evidence` posts and removes. The slug is the branch name minus its leading type segment.
|
|
15
15
|
- Ship each worktree with `canon:git-ship`, or `canon:auto-ship` for a draft pull request
|
|
16
16
|
- Only the operator or the controlling session readies a draft
|
|
17
17
|
|
|
@@ -78,6 +78,7 @@ Groups run in the order a project meets them. Every name `canon claude skills li
|
|
|
78
78
|
| `canon:review-ui` | Beside code review, to drive the checklist |
|
|
79
79
|
| `canon:review-address` | As the worker, to fix posted findings |
|
|
80
80
|
| `canon:git-followup` | A small edit on a branch with an open PR |
|
|
81
|
+
| `canon:pr-evidence` | A new head needs its screenshots re-posted |
|
|
81
82
|
| `canon:git-split` | A branch carries unrelated commits |
|
|
82
83
|
| `canon:git-issue` | Something belongs on the tracker |
|
|
83
84
|
| `canon:git-worktree` | After a merge, to reclaim worktrees |
|
package/governance/detect.toml
CHANGED
|
@@ -8,6 +8,7 @@ paths:
|
|
|
8
8
|
|
|
9
9
|
## Context entries
|
|
10
10
|
|
|
11
|
-
- Load the `canon:context-fold` skill before a hand edit under `canon/context
|
|
11
|
+
- Load the `canon:context-fold` skill before a hand edit under `canon/context/`, since it carries the entry shape and the content rules for a domain entry.
|
|
12
|
+
- Report it rather than proceeding silently when `canon:context-fold` does not resolve.
|
|
12
13
|
- Before non-trivial work in a domain, read its `canon/context/<domain>/` entry. Use `canon/context/index.md` to find it.
|
|
13
14
|
- Leave the entry conforming when work in its domain changes what it describes.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Route edits under .canon/plans/ to the plan-feature skill
|
|
2
|
+
description: Route edits under .canon/plans/ to the plan-feature skill, and keep the five hand-edit floors a plan breaks silently
|
|
3
3
|
paths:
|
|
4
4
|
- '.canon/plans/**'
|
|
5
5
|
---
|
|
@@ -8,11 +8,9 @@ paths:
|
|
|
8
8
|
|
|
9
9
|
## Plan files
|
|
10
10
|
|
|
11
|
-
- Load the `canon:plan-feature` skill before a hand edit under `.canon/plans
|
|
11
|
+
- Load the `canon:plan-feature` skill before a hand edit under `.canon/plans/`, whose references own its shape and lifecycle. Report it rather than proceeding silently when it does not resolve.
|
|
12
12
|
- Never fill an `- Answer:` slot on behalf of the person who owns it. A blank slot accepts the suggestion at execution time.
|
|
13
|
-
-
|
|
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`.
|
|
13
|
+
- Rewrite an unanswered question's `- Suggested:` line as `overridden at execution to <pick>,` plus the measurement when execution deviates, leaving the slot blank.
|
|
15
14
|
- 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
15
|
- Move a shipped plan to `.canon/plans/archive/`. Never delete one.
|
|
17
16
|
- Amend a plan in place when a decision changes. Do not append a second passage narrating the change.
|
|
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.
|
|
@@ -6,4 +6,6 @@ description: Write temporary files to the scratch folder structure
|
|
|
6
6
|
|
|
7
7
|
## Temporary files
|
|
8
8
|
|
|
9
|
-
- Write temporary files to `.canon/tmp/<slug>/<file>.md` at the current worktree's root,
|
|
9
|
+
- Write temporary files to `.canon/tmp/<slug>/<file>.md` at the current worktree's root, with a kebab-slug tied to the topic rather than a flat `<slug>-<file>.md`.
|
|
10
|
+
- Never take one of the reserved slugs `runs`, `hooks`, `handoff`, `pr`, and `render`.
|
|
11
|
+
- Write scratch at the main root instead only when a skill's own body says so.
|
|
@@ -8,4 +8,5 @@ description: Scope, size, and link a task file correctly
|
|
|
8
8
|
|
|
9
9
|
- Only create a task for work that spans multiple sessions or has real dependencies. Handle small edits immediately without a task entry.
|
|
10
10
|
- Do not add tasks retroactively for work already completed. Completed work is visible in git.
|
|
11
|
-
-
|
|
11
|
+
- Write a plan in `.canon/plans/` when a task needs execution detail beyond its own file, and link it from the task's intro paragraph.
|
|
12
|
+
- Write that plan in the same session as the task, since the executing session would otherwise re-derive the reasoning behind it.
|
|
@@ -8,7 +8,8 @@ paths:
|
|
|
8
8
|
|
|
9
9
|
## Task files
|
|
10
10
|
|
|
11
|
-
- Load the `canon:task-board` skill before a hand edit under `.canon/tasks
|
|
11
|
+
- Load the `canon:task-board` skill before a hand edit under `.canon/tasks/`, since it carries the layout, filenames, format, origin lines, and archiving of a task file.
|
|
12
|
+
- Report it rather than proceeding silently when `canon:task-board` does not resolve.
|
|
12
13
|
- Follow the board shape the `canon:task-board` skill carries for `priority.md` and `backlog.md`, their readiness groups, and row order.
|
|
13
14
|
- Never hand-edit `.canon/tasks/index.md`. A hook regenerates it from sibling frontmatter.
|
|
14
15
|
- Follow the decline shape the `canon:task-board` skill carries for a task decided against.
|
|
@@ -10,5 +10,8 @@ description: Enter a linked worktree for implementation, resolve shared session
|
|
|
10
10
|
|
|
11
11
|
## Shared session scratch
|
|
12
12
|
|
|
13
|
-
-
|
|
14
|
-
-
|
|
13
|
+
- Resolve shared session scratch (`.canon/plans/`, `.canon/review/`, `.canon/tasks/`) at the main worktree root, never inside a linked worktree.
|
|
14
|
+
- Read the main root from `git worktree list --porcelain | grep -m 1 '^worktree ' | cut -d' ' -f2-`, and fall back to `pwd` outside a git repo.
|
|
15
|
+
- Never take the worktree copy `Edit` and `Write` redirect a main-root path to, since no later session reads it. Revisit when Edit and Write stop redirecting a main-root path from a linked worktree.
|
|
16
|
+
- Route a main-root write from a linked worktree, or from a background session that entered none, the way the `session-worktree` skill states.
|
|
17
|
+
- Report it rather than proceeding silently when `session-worktree` does not resolve, as in a project that installed governance without the plugin.
|
|
@@ -7,10 +7,13 @@ description: Report file paths correctly for the reading surface and group them
|
|
|
7
7
|
## Reporting paths
|
|
8
8
|
|
|
9
9
|
- After creating or modifying a file, include its path on its own line so the reader can open it. Do not paraphrase paths into prose ("the seeds folder", "your CLAUDE.md").
|
|
10
|
-
- Emit a path in the form the surface's own instructions give, such as a markdown link where the harness asks for one, and bare where it gives none.
|
|
11
|
-
-
|
|
12
|
-
-
|
|
10
|
+
- Emit a path in the form the surface's own instructions give, such as a markdown link where the harness asks for one, and bare where it gives none.
|
|
11
|
+
- Never add link markup where the surface gives no form, since a terminal makes a bare path clickable through its own path detection and the markup defeats it.
|
|
12
|
+
- Backtick a path written into a markdown file and never repeat it as a link label, per the markdown standard. The response form above governs a response alone.
|
|
13
|
+
- Emit the absolute path from a linked worktree (under `.claude/worktrees/<name>/`), since the editor is rooted at the main root, where a worktree-relative path resolves nowhere.
|
|
14
|
+
- Prefer the form a `PostToolUse` hook hands back after a write where one is installed.
|
|
13
15
|
|
|
14
16
|
## Grouping multiple files
|
|
15
17
|
|
|
16
|
-
-
|
|
18
|
+
- Group paths under `**Created:**`, `**Modified:**`, and `**Deleted:**` headers when the response covers multiple files, with every path under them in that form.
|
|
19
|
+
- Put a single-file change's path on its own line, with no header.
|
|
@@ -11,7 +11,9 @@ paths:
|
|
|
11
11
|
|
|
12
12
|
## Skill files
|
|
13
13
|
|
|
14
|
-
- Load the `canon:create-skill` skill before a hand edit to a `SKILL.md` or a `REQUIREMENT.md
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
14
|
+
- Load the `canon:create-skill` skill before a hand edit to a `SKILL.md` or a `REQUIREMENT.md`, since it carries the skill structure, the requirement shape, and the path rules.
|
|
15
|
+
- Report it rather than proceeding silently when `canon:create-skill` does not resolve, as in a project that installed governance without the plugin.
|
|
16
|
+
- Confirm `canon:create-skill`'s two creation-time questions are answered before a new `SKILL.md` lands, whoever drafted it, `canon:create-skill` included.
|
|
17
|
+
- Carry its third question into the sibling `REQUIREMENT.md`'s `Must not` section as a review criterion rather than a gate.
|
|
18
|
+
- Re-read a skill body this session edited before invoking that skill again in the same session. Revisit when Claude Code reloads a skill body edited after the session first invoked it.
|
|
19
|
+
- Do not read a resolved file path in a held body as evidence the body is current. Revisit when Claude Code marks a held skill body stale once its source changes.
|
|
@@ -1,55 +1,22 @@
|
|
|
1
1
|
---
|
|
2
|
-
description:
|
|
2
|
+
description: Keep GitHub Actions commit-back steps and token scopes safe, and route workflow authoring to the ci-workflow skill
|
|
3
3
|
paths:
|
|
4
4
|
- '.github/workflows/**'
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# CI workflow standards
|
|
8
8
|
|
|
9
|
-
##
|
|
10
|
-
|
|
11
|
-
- Include `workflow_dispatch` alongside the primary trigger on every workflow.
|
|
12
|
-
- Pin every action to a major version tag. Never `@latest` or `@main`.
|
|
13
|
-
- Run every job on `ubuntu-latest`.
|
|
14
|
-
|
|
15
|
-
## Job naming
|
|
16
|
-
|
|
17
|
-
- Name every job as an emoji followed by a title, such as `๐ก๏ธ Checks`, `๐งช Unit Tests`, `๐ฆ Build Check`, `๐ญ E2E Tests`, or `๐ Deploy`.
|
|
18
|
-
|
|
19
|
-
## Job granularity
|
|
20
|
-
|
|
21
|
-
- Fold static analysis, unit tests, and build into one job while the gate runs under two minutes end to end.
|
|
22
|
-
- Split them into parallel jobs once a run log puts the gate past two minutes.
|
|
23
|
-
- Give E2E, release, and deploy a job each from the start.
|
|
24
|
-
|
|
25
|
-
## Job dependencies
|
|
26
|
-
|
|
27
|
-
- Use `needs` for a data dependency, where a job consumes another job's artifact, or for a job whose cost is prohibitive against the gate in front of it. Leave every other job unwired so it runs in parallel.
|
|
28
|
-
- Gate E2E on the job that uploads the build artifact.
|
|
29
|
-
- Gate release and deploy on E2E.
|
|
30
|
-
- Emit a deploy, publish, or release job with a placeholder step and name what the caller fills in. Never guess a deploy command.
|
|
31
|
-
|
|
32
|
-
## Artifacts
|
|
33
|
-
|
|
34
|
-
- Upload an artifact on `if: failure()` alone, with `retention-days: 7`.
|
|
35
|
-
|
|
36
|
-
## Bun stack
|
|
9
|
+
## Authority
|
|
37
10
|
|
|
38
|
-
-
|
|
39
|
-
- Install with `bun install --frozen-lockfile`.
|
|
40
|
-
- Key the Playwright browser cache on the Playwright version string, never a static key.
|
|
11
|
+
- Load the `canon:ci-workflow` skill for triggers, pinning, job shape, artifacts, and the Bun stack. Report it rather than proceeding silently when the skill does not resolve.
|
|
41
12
|
|
|
42
13
|
## Commit-back
|
|
43
14
|
|
|
44
|
-
- Commit a refreshed file back to the pull request branch only when
|
|
15
|
+
- Commit a refreshed file back to the pull request branch only when that branch's change moved it. Report the diff when an outside input can move it, such as a build-time count or a font.
|
|
45
16
|
- Commit only what a deterministic step regenerates from source, and run the diff check before the commit step so an unchanged capture pushes nothing.
|
|
46
17
|
- Skip a pull request from a fork with `github.event.pull_request.head.repo.full_name == github.repository`, since the default token cannot push to a fork's branch.
|
|
47
|
-
- Set the concurrency group on the ref so a newer push cancels the run committing onto a stale head.
|
|
48
|
-
- Set `HUSKY: 0` on the commit step when the runner lacks a tool a hook shells out to.
|
|
49
18
|
- Never commit back to the trunk. A commit with no pull request and no reviewer needs an operator's decision, not a workflow's.
|
|
50
|
-
- Leave `workflow_dispatch` off a commit-back workflow. A manual run has no branch to commit onto, so the trigger would pass and do nothing.
|
|
51
|
-
- Fail a template's first step while a path list still holds its placeholder, so an unfinished install fails loudly rather than never firing.
|
|
52
19
|
|
|
53
|
-
##
|
|
20
|
+
## Token scopes
|
|
54
21
|
|
|
55
|
-
-
|
|
22
|
+
- In a workflow with more than one job, add a write scope to the job that needs it, never to the workflow-level block, so every other job keeps the read-only token.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Build UI against the tracked design references under canon/design, and show each reference beside its build in the pull request
|
|
3
|
+
paths:
|
|
4
|
+
- 'canon/design/**'
|
|
5
|
+
- '**/*.tsx'
|
|
6
|
+
- '**/*.jsx'
|
|
7
|
+
- '**/*.vue'
|
|
8
|
+
- '**/*.svelte'
|
|
9
|
+
- '**/*.astro'
|
|
10
|
+
- '**/*.html'
|
|
11
|
+
- '**/*.css'
|
|
12
|
+
- '**/*.scss'
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Design reference standards
|
|
16
|
+
|
|
17
|
+
## Where the design lives
|
|
18
|
+
|
|
19
|
+
- Build UI against `canon/design/`, never against the canvas directly.
|
|
20
|
+
- Land a picked or changed canvas design in `canon/design/` through the project's design sync, as its own pull request, before any feature builds against it.
|
|
21
|
+
- Never copy, edit, or delete a reference file under `canon/design/` by hand.
|
|
22
|
+
- Add a new surface's row to the index in `canon/design/` before running the sync, and remove it only in the change that removes the surface.
|
|
23
|
+
|
|
24
|
+
## Building against a reference
|
|
25
|
+
|
|
26
|
+
- Open each reference image and its frame HTML, light and dark, before changing the surface they show.
|
|
27
|
+
- Match the reference closely or identically, taking sizes, spacing, and colors from the frame HTML.
|
|
28
|
+
|
|
29
|
+
## Showing the comparison
|
|
30
|
+
|
|
31
|
+
- Put each changed surface's reference image beside its built capture, light and dark, in the pull request description.
|
|
32
|
+
- Name each place the build departs from its reference, with its reason, in the pull request description.
|
|
33
|
+
- Report an unexplained departure from a reference as a review finding.
|
|
34
|
+
|
|
35
|
+
## Naming
|
|
36
|
+
|
|
37
|
+
- Give each app part one plain kebab-case folder under `canon/design/`, and name each file `<name>-dark` or `<name>-light`.
|
|
@@ -9,7 +9,8 @@ paths:
|
|
|
9
9
|
## Format
|
|
10
10
|
|
|
11
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,
|
|
12
|
+
- Load the `canon:markdown-craft` skill before a substantial markdown edit, for headings, structure, code spans, dates, punctuation, emphasis, file references, spelling, and frontmatter.
|
|
13
|
+
- Report it rather than proceeding silently when `canon:markdown-craft` does not resolve.
|
|
13
14
|
- 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
|
|
|
15
16
|
## Voice
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@erclx/canon",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "5.
|
|
4
|
+
"version": "5.43.0",
|
|
5
5
|
"description": "Runs your agent's work and keeps its code good, on one setup for every repo.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"bin": {
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"execa": "^9.5.2",
|
|
56
56
|
"highlight.js": "^11.12.0",
|
|
57
57
|
"jszip": "^3.10.1",
|
|
58
|
-
"playwright-core": "1.
|
|
58
|
+
"playwright-core": "1.64.1",
|
|
59
59
|
"pptxgenjs": "^4.0.1",
|
|
60
60
|
"preact": "^11.0.0"
|
|
61
61
|
},
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
"@astrojs/react": "^5.0.4",
|
|
65
65
|
"@commitlint/cli": "^20.4.1",
|
|
66
66
|
"@commitlint/config-conventional": "^20.4.1",
|
|
67
|
-
"@playwright/test": "1.
|
|
67
|
+
"@playwright/test": "1.64.1",
|
|
68
68
|
"@tailwindcss/vite": "^4.2.4",
|
|
69
69
|
"@testing-library/jest-dom": "^6.9.1",
|
|
70
70
|
"@types/bun": "^1.2.10",
|
|
@@ -73,11 +73,11 @@
|
|
|
73
73
|
"happy-dom": "^20.14.5",
|
|
74
74
|
"husky": "^9.1.7",
|
|
75
75
|
"micromatch": "^4.0.8",
|
|
76
|
-
"oxfmt": "0.
|
|
77
|
-
"oxlint": "1.
|
|
76
|
+
"oxfmt": "0.73.0",
|
|
77
|
+
"oxlint": "1.88.0",
|
|
78
78
|
"prettier": "^3.8.1",
|
|
79
79
|
"prettier-plugin-astro": "^0.14.1",
|
|
80
|
-
"prettier-plugin-tailwindcss": "^0.
|
|
80
|
+
"prettier-plugin-tailwindcss": "^0.8.1",
|
|
81
81
|
"typescript": "^5.9.3",
|
|
82
82
|
"vitest": "^4.1.5"
|
|
83
83
|
}
|