@erclx/canon 5.40.0 → 5.42.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 +34 -17
- 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 +2 -0
- package/claude/skills/auto-ship/SKILL.md +28 -2
- 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/fan-in.md +59 -0
- 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/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 +9 -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/REQUIREMENT.md +1 -1
- 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 +54 -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-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/REQUIREMENT.md +17 -6
- package/claude/skills/git-branch/SKILL.md +63 -7
- 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 +8 -0
- 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 +28 -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/references/batches.md +48 -1
- package/claude/skills/plan-feature/references/plan-lifecycle.md +10 -3
- package/claude/skills/plan-feature/references/plan.md +59 -20
- 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/plan-intake-answer/REQUIREMENT.md +1 -1
- package/claude/skills/plan-intake-answer/SKILL.md +1 -2
- 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 +22 -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/SKILL.md +2 -0
- package/claude/skills/review-ui/references/close-out.md +49 -0
- package/claude/skills/review-ui/references/driving.md +24 -4
- package/claude/skills/review-ui/references/post.md +43 -13
- package/claude/skills/role-orchestrator/references/orchestrator-cloud-launch.md +67 -17
- package/claude/skills/role-orchestrator/references/orchestrator-dispatch.md +81 -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 +12 -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-worker/REQUIREMENT.md +2 -0
- package/claude/skills/role-worker/SKILL.md +17 -0
- 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/REQUIREMENT.md +1 -1
- package/claude/skills/teach-workspace/SKILL.md +1 -2
- 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/workflow/parallel-features.md +2 -1
- package/docs/workflow/skill-map.md +2 -1
- package/package.json +1 -1
- package/src/claude/cases/git.ts +4 -0
- package/src/claude/cases/workflow.ts +5 -0
- package/src/commands/pr.ts +174 -37
- package/src/commands/records.ts +11 -3
- package/src/context/shape-gated.ts +1 -0
- package/src/markdown/scope.ts +150 -2
- package/src/pr/frames.ts +53 -9
- package/src/pr/lift.ts +6 -3
- package/src/pr/review-state.ts +182 -0
- package/src/records/validate.ts +1 -0
- package/src/tasks/answers.ts +79 -2
- package/src/tasks/fan-in.ts +176 -0
- package/src/tasks/stack.ts +1 -1
- package/tooling/astro/reference.md +80 -39
- package/tooling/base/reference.md +63 -32
- package/tooling/base/seeds/canon/context/ci.md +7 -15
- package/tooling/base/seeds/canon/context/development.md +14 -14
- package/tooling/claude/reference.md +40 -22
- package/tooling/cloudflare/reference.md +31 -12
- package/tooling/go/reference.md +47 -23
- package/tooling/nextjs/reference.md +52 -19
- package/tooling/php/reference.md +35 -16
- package/tooling/python/reference.md +47 -30
- package/tooling/shell/reference.md +6 -5
- package/tooling/vite-react/reference.md +49 -21
- package/tooling/web/reference.md +130 -70
- package/claude/skills/git-pr/references/evidence.md +0 -124
|
@@ -5,6 +5,8 @@ description: Skill structure and authoring rules for Claude Code
|
|
|
5
5
|
|
|
6
6
|
# Claude skill reference
|
|
7
7
|
|
|
8
|
+
Checked against the [Claude Code skills](https://code.claude.com/docs/en/skills) and [skill authoring best practices](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices) pages on `2026-10-18`.
|
|
9
|
+
|
|
8
10
|
## Contents
|
|
9
11
|
|
|
10
12
|
- [Overview](#overview)
|
|
@@ -26,7 +28,7 @@ Skills give Claude Code domain-specific constraints and rules inline, so it can
|
|
|
26
28
|
|
|
27
29
|
## Scope
|
|
28
30
|
|
|
29
|
-
Governs a skill folder under `skills/` as one artifact
|
|
31
|
+
Governs a skill folder under `skills/` as one artifact, being `SKILL.md`, its siblings `REQUIREMENT.md` and `EVAL.md`, and the bundled reference, script, and asset folders beside them.
|
|
30
32
|
|
|
31
33
|
Does not govern:
|
|
32
34
|
|
|
@@ -37,7 +39,7 @@ Does not govern:
|
|
|
37
39
|
- **`rule.md`**: path-scoped coding rules, which load on a file match rather than on a request match
|
|
38
40
|
- **the `write-human` skill**: voice, rhythm, and sentence construction in a skill body
|
|
39
41
|
- **`markdown.md`**: punctuation, formatting, and word choice in a skill body
|
|
40
|
-
- **`slug.md`**: the transform from a branch name to a slug
|
|
42
|
+
- **`slug.md`**: the transform from a branch name to a filename slug
|
|
41
43
|
- **the `create-skill` skill and the creation-time bullet in the `skill` governance rule**: whether a new skill earns its place, by the three-question test
|
|
42
44
|
|
|
43
45
|
## Changing a skill
|
|
@@ -51,11 +53,13 @@ Answer all four before editing, and carry the answers into wherever the change i
|
|
|
51
53
|
|
|
52
54
|
## Whether a rule belongs beside the skill
|
|
53
55
|
|
|
54
|
-
A skill fires when a session invokes it or its description matches the request. A path-scoped rule fires when a session reads or writes a file matching its glob, with no
|
|
56
|
+
A skill fires when a session invokes it or its description matches the request. A path-scoped rule fires when a session reads or writes a file matching its glob, with no session decision. The rule is the floor and the skill is the depth.
|
|
55
57
|
|
|
56
|
-
Run the two-part test over
|
|
58
|
+
- Run the two-part test over the body before calling the skill done. Does the invariant fire when a specific path is edited, and does violating it ship silently?
|
|
59
|
+
- An invariant passing both halves moves to a rule, since a session that never invoked the skill still edits that path. It stays here when this skill creates the file the rule globs.
|
|
60
|
+
- An invariant failing either half stays here, which is most of a body
|
|
57
61
|
|
|
58
|
-
Write that rule to the shape `rule.md` sets
|
|
62
|
+
Write that rule to the shape `rule.md` sets, keeping one copy of each invariant. A skill that only edits existing files points at the rule.
|
|
59
63
|
|
|
60
64
|
## Skill types
|
|
61
65
|
|
|
@@ -89,87 +93,102 @@ allowed-tools: <tools required>
|
|
|
89
93
|
|
|
90
94
|
## Structure
|
|
91
95
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
-
|
|
96
|
+
A skill is a folder named in kebab-case. It holds `SKILL.md` and `REQUIREMENT.md`, both required, and maybe `EVAL.md`, `scripts/`, `references/`, and `assets/`.
|
|
97
|
+
|
|
98
|
+
- Create a new skill with its `REQUIREMENT.md` beside it, even where nobody contests its scope, since an absence reads as a gap rather than as a verdict
|
|
99
|
+
- Name a file sitting directly in the skill folder in capitals and a bundled folder in lowercase, so the parts a reader opens differ from the ones a skill loads
|
|
95
100
|
- `EVAL.md` holds prompts and a judging rubric a person runs by hand, since the automated `claude plugin eval` runner is gated in early access
|
|
96
101
|
|
|
97
102
|
### Folder and file rules
|
|
98
103
|
|
|
104
|
+
The loader reads the folder name as the skill name, so the name follows the same casing everywhere.
|
|
105
|
+
|
|
99
106
|
- `SKILL.md` must start with YAML frontmatter between `---` delimiters
|
|
100
107
|
- No `README.md` inside the skill folder
|
|
101
108
|
- No spaces, capitals, or underscores in folder or skill name
|
|
102
109
|
|
|
103
110
|
## Frontmatter
|
|
104
111
|
|
|
105
|
-
-
|
|
106
|
-
- **`description`** (required): what it does + when to use it, under 1024 chars, no XML tags
|
|
107
|
-
- **`disable-model-invocation: true`**: user-invoked only, Claude will not auto-trigger. Set it on a skill that starts a process the operator owns, never on one reachable by a matched trigger.
|
|
108
|
-
- **`allowed-tools`**: restrict tool access when the skill is active
|
|
109
|
-
- **`metadata`**: optional key-value pairs (`author`, `version`, `mcp-server`)
|
|
110
|
-
- **`metadata.family`** (required on a skill under `claude/skills/`): the skill map group the skill's row sits under, as one key from `families` in `canon claude skills list --json`. A skill under `.claude/skills/` takes none.
|
|
112
|
+
Read `skill-frontmatter.md` for the required and optional fields, their limits, and which keys an upload accepts.
|
|
111
113
|
|
|
112
114
|
## Description
|
|
113
115
|
|
|
114
116
|
- Structure: `[What it does] + [When to use it] + [Key trigger phrases]`, quoting phrases users would say
|
|
115
117
|
- Be specific, not vague. Claude routes based on this field alone.
|
|
116
|
-
-
|
|
118
|
+
- Write in the third person, since the description is injected into the system prompt. Write "Reviews code" over "I review code".
|
|
119
|
+
- Add negative triggers if skill is over-triggering: `Do NOT use for X`. That form is canon's own, and Anthropic's pages do not mention it.
|
|
117
120
|
|
|
118
121
|
## Body
|
|
119
122
|
|
|
120
123
|
### Rule content and scope
|
|
121
124
|
|
|
125
|
+
A body holds behavioral rules and pointers to reference docs, front-loading the critical ones. Narrative about what files are or how the system works belongs in `docs/`.
|
|
126
|
+
|
|
122
127
|
- Use imperative voice throughout, and sentence case for every heading
|
|
123
|
-
-
|
|
124
|
-
-
|
|
125
|
-
-
|
|
128
|
+
- State rules, not inventories. Reference docs for lists that change.
|
|
129
|
+
- Phrase a rule as a ban on the forbidden shape rather than an enumeration of allowed options, so it stays stable as categories change
|
|
130
|
+
- When referencing project files, include "from the project root" in the read instruction
|
|
131
|
+
- Run independent operations, such as file reads and shell commands, in parallel to reduce latency
|
|
126
132
|
|
|
127
|
-
|
|
133
|
+
### Current rule and grouping
|
|
134
|
+
|
|
135
|
+
State the current rule only, in the body and in every file under `references/`. The incident and the date that earned a rule go in `REQUIREMENT.md` under `Gap`, or stay in git, and a date inside a fence or a code span is example data and stays.
|
|
128
136
|
|
|
129
137
|
- Cut any rule that resists crisp one-line phrasing. Vague guidance is worse than none.
|
|
130
|
-
-
|
|
131
|
-
- Group bullets under H2 headings by domain concern. Keep dos and don'ts together under the topic they belong to rather than splitting them into flat rules and constraints sections.
|
|
138
|
+
- Group bullets under H2 headings by concern, keeping dos and don'ts together rather than in flat rules and constraints sections
|
|
132
139
|
- One actionable constraint per bullet. Prefer the `X over Y` form for preferences.
|
|
133
140
|
|
|
134
|
-
|
|
141
|
+
### Examples and density
|
|
142
|
+
|
|
143
|
+
Every statement in a body costs a read on each invocation.
|
|
135
144
|
|
|
136
|
-
- Do not include code examples unless a one to three line inline snippet captures a pattern the model cannot infer
|
|
137
|
-
- Keep a statement only when removing it would change what the agent does, naming a principle as a few-word handle rather than explaining it
|
|
145
|
+
- Do not include code examples unless a one to three line inline snippet captures a pattern the model cannot infer
|
|
146
|
+
- Keep a statement only when removing it would change what the agent does, naming a principle as a few-word handle rather than explaining it
|
|
147
|
+
- Revisit when a run shows the model ignoring a principle named only as a handle
|
|
138
148
|
|
|
139
149
|
### Progressive disclosure
|
|
140
150
|
|
|
141
151
|
Keeping a body and its references under the ceiling, what moves to `references/` and what stays, and how a body names a reference are in `skill-disclosure.md`.
|
|
142
152
|
|
|
143
|
-
### Reading and running commands
|
|
144
|
-
|
|
145
|
-
- When referencing project files, include "from the project root" in the read instruction
|
|
146
|
-
- When executing multiple independent operations (file reads, shell commands), run them in parallel to reduce latency
|
|
147
|
-
|
|
148
153
|
### Anti-patterns to avoid
|
|
149
154
|
|
|
150
|
-
|
|
155
|
+
Avoid flags that dispatch between alternate flows, since the model misreads them and runs the vanilla path. Dry-run-style toggles are fine, and an alternate flow takes a separate skill or two skills invoked in sequence.
|
|
156
|
+
|
|
151
157
|
- When a skill should fire from multiple callers, rely on description matching with strong trigger phrases. Do not hardcode `Skill` calls in sibling skills that could trigger it naturally.
|
|
152
|
-
- Before collapsing a manual multi-step flow into a skill, ask what the manual pauses do
|
|
158
|
+
- Before collapsing a manual multi-step flow into a skill, ask what the manual pauses do
|
|
159
|
+
- Where a pause carries external timing, error-surfacing, or judgment weight, prefer explicit per-step confirmation
|
|
160
|
+
|
|
161
|
+
### Output paths
|
|
162
|
+
|
|
163
|
+
A success line emits the full relative path from the project root (`<dir>/<file>`) for any file written, updated, or deleted, since a bare filename names a file the reader cannot open. The `## Output` section of the project's instruction file sets the form that path takes, so the body states which path and leaves the form to that section.
|
|
164
|
+
|
|
165
|
+
### Where output lands
|
|
166
|
+
|
|
167
|
+
Before writing, decide whether the output is a deliverable, which lands among the project's tracked files, or a session record. A session record lands under `.canon/` in the named subfolder for its kind, never in a folder the body invents.
|
|
153
168
|
|
|
154
|
-
|
|
169
|
+
- Kinds: `tasks/`, `plans/`, `review/`, `groundwork/`, `intake/`, `proposals/`, `diagrams/`, `teach/`, `ready/`, `feedback/`, `picks/`, `evidence/`, `transcripts/`, `walkthroughs/`
|
|
170
|
+
- `tmp/` takes scratch nothing else claims
|
|
171
|
+
- A `review/` writer names its file `<kind>-<slug>.md` and writes it flat
|
|
172
|
+
- An `evidence/` folder takes the next two-digit ordinal as `<nn>-<slug>/`, numbered in the order the folders first appeared
|
|
155
173
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
-
|
|
174
|
+
### Templates, input, and tuning
|
|
175
|
+
|
|
176
|
+
Codify a skill's posted or generated output as a fenced template, and keep the body consistent with every capability the frontmatter description names.
|
|
177
|
+
|
|
178
|
+
- When a skill gathers input or pre-seeds a template, attach a proposed default derived from project context to every question. Accept "use defaults" as a bulk-confirm.
|
|
179
|
+
- Separate correctness axes (routing, sourcing, escalation, decline) from shape axes (line count, formatting, variant sprawl) when tuning a skill
|
|
180
|
+
- Tighten only on correctness regressions, never turning a soft cap hard for aesthetic drift
|
|
161
181
|
|
|
162
182
|
## Scripts
|
|
163
183
|
|
|
164
|
-
|
|
165
|
-
- Ask whether a CLI verb the project already has does the job before writing a script. A verb is already installed and tested, and a script beside it is a second copy that drifts
|
|
166
|
-
- Write a script in TypeScript and run it as `bun ${CLAUDE_SKILL_DIR}/scripts/<name>.ts`. Keep bash for a few lines that start one command. The rule governs a new script, so bash kept by decision is no breach and is not ported unasked, such as `review-ui`'s `scripts/pw.sh` as glue and the shell scripts the web tooling stacks ship, whose port was deferred
|
|
167
|
-
- Import no package. A plugin loads from a cache that carries no `node_modules`, so only `node:` built-ins and the CLIs the skill already requires resolve
|
|
168
|
-
- Use XML tags in script output for reliable parsing: `<SECTION>content</SECTION>`
|
|
184
|
+
Use `scripts/` for operations that must be deterministic or repetitive. First ask whether a CLI verb the project already has does the job, since a verb is installed and tested and a script beside it is a second copy that drifts.
|
|
169
185
|
|
|
170
|
-
|
|
186
|
+
- Write a script in TypeScript and run it as `bun ${CLAUDE_SKILL_DIR}/scripts/<name>.ts`. Keep bash for a few lines that start one command.
|
|
187
|
+
- Import no package. A plugin loads from a cache that carries no `node_modules`, so only `node:` built-ins and the CLIs the skill already requires resolve.
|
|
188
|
+
- Use XML tags in script output for parsing: `<SECTION>content</SECTION>`
|
|
189
|
+
- Guard a git or shell command a body runs inline with `2>/dev/null || echo "FALLBACK"`. A TypeScript script uses try and catch instead.
|
|
171
190
|
|
|
172
|
-
|
|
191
|
+
The TypeScript rule governs a new script, so bash kept by decision is no breach and is not ported unasked. Examples are `review-ui`'s `scripts/pw.sh` as glue and the shell scripts the web tooling stacks ship, whose port was deferred.
|
|
173
192
|
|
|
174
193
|
## Invocation
|
|
175
194
|
|
|
@@ -180,10 +199,14 @@ Keeping a body and its references under the ceiling, what moves to `references/`
|
|
|
180
199
|
|
|
181
200
|
### Correct
|
|
182
201
|
|
|
202
|
+
Each line names its reason after the `#`.
|
|
203
|
+
|
|
183
204
|
- `description: Reviews code for bugs and clarity. Use when asked to "review this" or "check the PR".` # names the action, then the trigger phrases
|
|
184
205
|
- `Read ${CLAUDE_SKILL_DIR}/references/post.md on reaching this step.` # a moved step keeps its heading and one load line
|
|
185
206
|
|
|
186
207
|
### Incorrect
|
|
187
208
|
|
|
209
|
+
Each line names its fault after the `#`.
|
|
210
|
+
|
|
188
211
|
- `description: Handles all code tasks in scripts/, src/, and lib/, and any file ending in .ts .js .py .sh.` # path-focused and keyword-stuffed
|
|
189
212
|
- `A good review checks bugs, performance, security, style, naming, coverage, docs, and SOLID...` # dumps everything inline instead of citing a standard
|
|
@@ -41,4 +41,4 @@ The opposite failure is the one that ships silently. A session that takes a pref
|
|
|
41
41
|
|
|
42
42
|
- Making the ordinary judgment call, which is a pick plus a one-sentence tradeoff and needs no surface
|
|
43
43
|
- Writing the decision into a plan, task, or context entry, which each owning standard governs and this skill only routes to
|
|
44
|
-
- Deciding when to fire. The
|
|
44
|
+
- Deciding when to fire. The description states `Do NOT auto-trigger`, so escalating is the operator's call rather than a description match.
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: decision-escalate
|
|
3
|
-
description: Collects every open decision whose answer turns on the operator's preference, since only they know what they need, puts them as one batch of questions each carrying options and a recommended default, then waits. Use when asked to "escalate this", "ask me the open questions", "batch the open decisions", "what do you need from me", or "stop and ask before you pick". Do NOT use for a judgment call the session can settle, which is a pick with the tradeoff stated in one sentence.
|
|
4
|
-
disable-model-invocation: true
|
|
3
|
+
description: Collects every open decision whose answer turns on the operator's preference, since only they know what they need, puts them as one batch of questions each carrying options and a recommended default, then waits. Use when asked to "escalate this", "ask me the open questions", "batch the open decisions", "what do you need from me", or "stop and ask before you pick". Do NOT use for a judgment call the session can settle, which is a pick with the tradeoff stated in one sentence. Do NOT auto-trigger.
|
|
5
4
|
metadata:
|
|
6
5
|
family: decide
|
|
7
6
|
---
|
|
@@ -10,7 +10,8 @@ Run these steps once the body's Pick step resolves to Vercel. Read `vercel <comm
|
|
|
10
10
|
## Guard
|
|
11
11
|
|
|
12
12
|
- If `vercel whoami` fails, stop: `❌ vercel is not authenticated. Run vercel login, then re-invoke.`
|
|
13
|
-
- If `command -v jq` fails, stop: `❌ jq is not installed. Install it, then re-invoke.`
|
|
13
|
+
- If `command -v jq` fails, stop: `❌ jq is not installed. Install it, then re-invoke.`
|
|
14
|
+
- Step 3 pipes jq's output into a secret, and without jq the secret is set empty while `gh secret list` still lists its name
|
|
14
15
|
|
|
15
16
|
## Step 1: create and link the project
|
|
16
17
|
|
|
@@ -5,49 +5,68 @@ description: Which external sources on deprecation and migration this skill adop
|
|
|
5
5
|
|
|
6
6
|
# Adopted and declined
|
|
7
7
|
|
|
8
|
-
External sources were read and filtered rather than imported. This file is the record
|
|
8
|
+
External sources were read and filtered rather than imported. This file is the record, and a later session extending the skill adds to it rather than re-arguing an item settled here.
|
|
9
9
|
|
|
10
|
-
## Adopted
|
|
10
|
+
## Adopted from the default shelf
|
|
11
11
|
|
|
12
|
-
###
|
|
12
|
+
### Deprecation
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
[Software Engineering at Google, chapter 15](https://abseil.io/resources/swe-book/html/ch15.html) supplies four positions the body states.
|
|
15
15
|
|
|
16
|
-
- Advisory and compulsory
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
- Finding consumers before removal
|
|
16
|
+
- **Two types.** Advisory and compulsory, the second carrying a removal date. The body allows compulsory only once a replacement ships, which the chapter implies and the four questions make explicit.
|
|
17
|
+
- **Actionable, relevant warnings.** A warning names what the caller does, and surfaces where the caller uses the old surface.
|
|
18
|
+
- **An owner.** The chapter observes that unowned deprecation work makes no progress. Adopted as the fourth decision question and the rule against an ownerless advisory deprecation left open.
|
|
19
|
+
- **Finding consumers before removal.** The chapter's static analysis over one repository becomes the zero-consumers check across caller kinds, since a target's callers often live outside it.
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
### Migrating callers yourself
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
[Software Engineering at Google, chapter 1](https://abseil.io/resources/swe-book/html/ch01.html), under "Policies That Don't Scale", has infrastructure teams move their internal users to new versions themselves, or update in place in a backward-compatible way.
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
Adopted as the group on migrating callers yourself, with the backward-compatible path kept for callers the owner cannot edit.
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
- The rule never to deprecate without a replacement, as the third decision question.
|
|
29
|
-
- The strangler and adapter patterns, stated as when each fits rather than as worked code tied to one stack.
|
|
27
|
+
## Adopted for the decision and the bridges
|
|
30
28
|
|
|
31
|
-
|
|
29
|
+
Addy Osmani's `agent-skills`, pinned at addyosmani/agent-skills@2686b620, [`skills/deprecation-and-migration/SKILL.md`](https://github.com/addyosmani/agent-skills/blob/2686b620/skills/deprecation-and-migration/SKILL.md), supplies the decision and the bridge patterns.
|
|
32
30
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
- The
|
|
36
|
-
|
|
37
|
-
|
|
31
|
+
### The decision
|
|
32
|
+
|
|
33
|
+
Its five-question deprecation decision is cut to four. The unique-value and maintenance-cost questions merge into one about what keeping the surface costs, and the per-consumer migration-cost question drops, since the Churn Rule puts that cost on the owner.
|
|
34
|
+
|
|
35
|
+
- The owner question from the book takes the freed place
|
|
36
|
+
- The rule never to deprecate without a replacement is the third decision question
|
|
37
|
+
- The strangler and adapter patterns are stated as when each fits rather than as worked code tied to one stack
|
|
38
|
+
|
|
39
|
+
### Migration, zombie code, and red flags
|
|
40
|
+
|
|
41
|
+
The migration shape and the excuse rows carry across stacks once reworded for any surface rather than a service or a column.
|
|
42
|
+
|
|
43
|
+
- Expand, migrate, contract, lifted out of its schema section and stated for any surface as three separate changes
|
|
44
|
+
- Zombie code, narrowed to code that is unowned, uncalled, and still built, and settled by the zero-consumers check rather than a list of staleness signals
|
|
45
|
+
- The excuse row on a search that found nothing, from its red flag against removing code without verifying zero active consumers
|
|
46
|
+
- The excuse row on adding the new one and dropping the old one now, generalized from its rationalization about a column added and dropped in one migration
|
|
38
47
|
|
|
39
48
|
## Declined
|
|
40
49
|
|
|
41
|
-
|
|
50
|
+
Each item below was read and left out, with the reason it changes nothing a session does here.
|
|
51
|
+
|
|
52
|
+
### The schema section and its mechanisms
|
|
53
|
+
|
|
54
|
+
**Its database schema section.** The column rename worked example, the tested down path, batched backfills, and concurrent index builds. A project's persistence rule owns schema changes, so only the expand, migrate, contract shape was lifted, generalized beyond schemas.
|
|
42
55
|
|
|
43
56
|
**Feature flag migration.** Declined because it is one way to run a strangler, and naming a flag mechanism ties the body to a runtime a target may not have.
|
|
44
57
|
|
|
45
|
-
|
|
58
|
+
### Numbers that fit one project
|
|
59
|
+
|
|
60
|
+
**The traffic percentages in its strangler phases.** They describe a service behind a router, and most surfaces a session retires, such as a function, a flag, or a file, have callers rather than traffic.
|
|
61
|
+
|
|
62
|
+
**The thresholds in its zombie signs and rebuttals.** No commits in six months, and comparing costs over two or three years. Declined for the reason the body states no deprecation window, since a number fits one project's cadence and not another's.
|
|
63
|
+
|
|
64
|
+
### Defaults and framing
|
|
46
65
|
|
|
47
|
-
**"Default to advisory" as a standing default with no exit.**
|
|
66
|
+
**"Default to advisory" as a standing default with no exit.** Advisory is kept as the starting state and leaving it open is declined, since an advisory deprecation with no date and no owner is the stalled case the body exists to prevent.
|
|
48
67
|
|
|
49
|
-
**
|
|
68
|
+
**"Code is a liability" and design-time deprecation planning as sections.** Framing a session already accepts by loading the skill. The cost question carries the first, and designing a new surface for removal belongs to the skill shaping that surface.
|
|
50
69
|
|
|
51
|
-
|
|
70
|
+
### Ceremony
|
|
52
71
|
|
|
53
72
|
**The celebration step and the deprecation notice template.** Declined because neither changes what a session does, and the template's example names a package runner and a migration script tied to one stack.
|
|
@@ -15,14 +15,22 @@ External catalogs were read and filtered rather than imported. This file is the
|
|
|
15
15
|
|
|
16
16
|
## Declined from the catalogs
|
|
17
17
|
|
|
18
|
+
Each item below is real advice placed in the wrong surface, or a rule that decides nothing.
|
|
19
|
+
|
|
20
|
+
### Values and dials
|
|
21
|
+
|
|
18
22
|
**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.
|
|
19
23
|
|
|
20
24
|
**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.
|
|
21
25
|
|
|
26
|
+
### Rules owned elsewhere
|
|
27
|
+
|
|
22
28
|
**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.
|
|
23
29
|
|
|
24
30
|
**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.
|
|
25
31
|
|
|
32
|
+
### Scope
|
|
33
|
+
|
|
26
34
|
**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.
|
|
27
35
|
|
|
28
36
|
## Declined from the systems reference
|
|
@@ -33,7 +41,7 @@ Each failed the test in `REQUIREMENT.md`. Recorded so they are not argued again.
|
|
|
33
41
|
- **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.
|
|
34
42
|
- **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.
|
|
35
43
|
- **A minimum contrast figure.** A threshold with a number, which the accessibility rules own.
|
|
36
|
-
- **Imagery as a system.** There is no scale to establish. What a model gets wrong about images is using fake ones, which `tells.md`
|
|
44
|
+
- **Imagery as a system.** There is no scale to establish. What a model gets wrong about images is using fake ones, which `tells.md` covers, so the layer stays thin on purpose.
|
|
37
45
|
|
|
38
46
|
## Carried as a caution
|
|
39
47
|
|
|
@@ -11,7 +11,7 @@ Read this when a layout satisfies the ordering, the locks and the tells, and sti
|
|
|
11
11
|
|
|
12
12
|
The eye and the arithmetic disagree, and the eye is the one being served.
|
|
13
13
|
|
|
14
|
-
- **Centering by the numbers is not centering.** A triangle
|
|
14
|
+
- **Centering by the numbers is not centering.** A triangle in a circle, an icon beside a label, or a glyph in a round button sits left or low when centered by its box. Nudge it, usually a pixel or two.
|
|
15
15
|
- **Equal vertical padding reads bottom-heavy.** A block with matching top and bottom padding looks like it is sinking. Give the bottom slightly more.
|
|
16
16
|
- **Optical size beats declared size.** A circle and a square at the same declared size do not read as the same size. The circle needs to be larger.
|
|
17
17
|
- **Type alignment follows the letterform, not the box.** A quotation mark, a bullet or an opening parenthesis at the start of a line should hang outside the text edge so the text itself lines up.
|
|
@@ -56,6 +56,8 @@ Reaching for size is the first instinct and the weakest tool.
|
|
|
56
56
|
|
|
57
57
|
### Content and copy
|
|
58
58
|
|
|
59
|
+
Copy reads unfinished in the same way.
|
|
60
|
+
|
|
59
61
|
- Every item dated identically, which no real collection ever is.
|
|
60
62
|
- An exclamation mark in a success message. Confidence is quieter than that.
|
|
61
63
|
- An error opening on an apology rather than on what to do next.
|
|
@@ -12,8 +12,8 @@ Read this once the declared read names a kind. The body's rules hold on every ki
|
|
|
12
12
|
Landing pages, campaign pages, portfolios. The reader has never used the thing and owes it no attention.
|
|
13
13
|
|
|
14
14
|
- **Optimizes for** comprehension in the first screen, then one clear next action.
|
|
15
|
-
- **Composition carries the weight.** A marketing page is judged on section order and variation
|
|
16
|
-
- **Vary the section shape.** Alternate alignment, container width and the ratio between sections.
|
|
15
|
+
- **Composition carries the weight.** A marketing page is judged on section order and variation first, so a palette round against a flat composition changes nothing a reader notices.
|
|
16
|
+
- **Vary the section shape.** Alternate alignment, container width and the ratio between sections. Every section a centered heading over centered body reads as a template whatever its values.
|
|
17
17
|
- **Low density.** Whitespace is the argument that the thing is considered. This is the one kind where less information on screen is usually better.
|
|
18
18
|
- **Every claim names a real thing.** A page asserting what a tool does, illustrated by something the tool did not produce, breaks its own thesis in the place it is making it.
|
|
19
19
|
- **Motion is permitted and rationed.** Entrance motion for what genuinely leads the eye, nothing looping forever.
|
|
@@ -25,8 +25,9 @@ Dashboards, tools, admin surfaces, agentic and assistant interfaces. The reader
|
|
|
25
25
|
|
|
26
26
|
- **Optimizes for** throughput and state legibility. How fast can the reader see what is happening and act on it.
|
|
27
27
|
- **High density is correct.** Cramming is a failure and spaciousness is also a failure, since a surface that shows six rows where thirty fit costs the reader a scroll per glance.
|
|
28
|
-
- **The states carry the design weight.** Loading, empty, error, partial and stale are
|
|
29
|
-
- **
|
|
28
|
+
- **The states carry the design weight.** Loading, empty, error, partial and stale are most of what the reader sees on this kind, so they are composed rather than handled.
|
|
29
|
+
- **Whether each state exists** is the `ui` rules' question, not this file's.
|
|
30
|
+
- **An agentic surface adds three states.** Work running with something to read, work that needs the person, and work finished with a result to inspect. Each rests visibly, never as a spinner.
|
|
30
31
|
- **Chrome is persistent and quiet.** Navigation, status and context stay put and stay recessive, since they are read constantly and looked at rarely.
|
|
31
32
|
- **Motion is feedback, not entrance.** A thing moving should be reporting that something changed.
|
|
32
33
|
- **Where a rule from another kind is wrong here:** generous whitespace, entrance animation on every panel, and hero-scale typography all read as a marketing page wearing a product's clothes.
|
|
@@ -41,12 +42,12 @@ Documentation, articles, reference pages, learning material. The reader arrived
|
|
|
41
42
|
- **Navigation is a map.** A reader who cannot see where they are in the whole cannot judge whether to keep going, which is what a scrollspy or a persistent outline buys.
|
|
42
43
|
- **Code, tables and figures are first-class.** They are what the reader scans for, so they are styled as content rather than as interruptions.
|
|
43
44
|
- **Motion is almost always wrong.** Movement during reading competes with reading.
|
|
44
|
-
- **Where a rule from another kind is wrong here:**
|
|
45
|
+
- **Where a rule from another kind is wrong here:** application density makes long prose unreadable, and marketing whitespace between every paragraph breaks a section into unrelated fragments.
|
|
45
46
|
|
|
46
47
|
## Kinds this file does not cover
|
|
47
48
|
|
|
48
|
-
- **Transactional flows** such as checkout, sign-up and settings are read as application UI. Their distinctive rules
|
|
49
|
-
- **Presentation surfaces** such as slide decks are drafted by `draft-slides`, which carries the deck's
|
|
49
|
+
- **Transactional flows** such as checkout, sign-up and settings are read as application UI. Their distinctive rules, state coverage and error recovery, sit in the `ui` governance rules.
|
|
50
|
+
- **Presentation surfaces** such as slide decks are drafted by `draft-slides`, which carries the deck's design rules. Take the layer ordering and the floor from the body and the rest from it.
|
|
50
51
|
- **Terminal and text-mode surfaces** have no layout engine and their own color rules, stated where the writing surface is decided rather than here.
|
|
51
52
|
|
|
52
53
|
A read naming any of the three above takes the body's rules and says it has no per-kind guidance, naming the surface that governs it. A read naming a kind this file does not list at all says so rather than borrowing the nearest section.
|
|
@@ -28,6 +28,8 @@ Skip nothing on the ground that it is obviously fine. A rule is on this list bec
|
|
|
28
28
|
|
|
29
29
|
### Section rhythm
|
|
30
30
|
|
|
31
|
+
Each box here is a count from `tells.md`.
|
|
32
|
+
|
|
31
33
|
- [ ] No layout family used twice. Eight sections carry at least four families
|
|
32
34
|
- [ ] No three consecutive sections sharing the image-and-text split
|
|
33
35
|
- [ ] Small uppercase labels above headings number no more than one per three sections, per `interface-casing`
|
|
@@ -35,6 +37,8 @@ Skip nothing on the ground that it is obviously fine. A rule is on this list bec
|
|
|
35
37
|
|
|
36
38
|
### Content and first screen
|
|
37
39
|
|
|
40
|
+
The grid and the first screen are shaped to the content counted.
|
|
41
|
+
|
|
38
42
|
- [ ] Grid cells equal content items, with no blank tile filling a gap
|
|
39
43
|
- [ ] Lists over five items use something other than a longer list
|
|
40
44
|
- [ ] The first screen carries the point and the primary action without scrolling
|
|
@@ -46,12 +50,16 @@ Skip this group where the surface draws on a system already settled.
|
|
|
46
50
|
|
|
47
51
|
### Space and type
|
|
48
52
|
|
|
53
|
+
The scales come from `systems.md`.
|
|
54
|
+
|
|
49
55
|
- [ ] Every gap comes from one scale, and the distinct spacing values number under about eight
|
|
50
56
|
- [ ] Space between groups exceeds space within them
|
|
51
57
|
- [ ] The type scale carries five to seven steps, each visibly different from its neighbors
|
|
52
58
|
|
|
53
59
|
### Color
|
|
54
60
|
|
|
61
|
+
Each box is a relationship, never a value.
|
|
62
|
+
|
|
55
63
|
- [ ] The accent is rare enough to read as an accent
|
|
56
64
|
- [ ] Neutrals sit in one family at one temperature
|
|
57
65
|
- [ ] Adjacent surfaces separate by a little and content separates from ground by a lot
|
|
@@ -64,6 +72,8 @@ Skip this group where the surface draws on a system already settled.
|
|
|
64
72
|
|
|
65
73
|
### Type detail
|
|
66
74
|
|
|
75
|
+
The detail boxes come from `craft.md`.
|
|
76
|
+
|
|
67
77
|
- [ ] No orphaned word closing a heading
|
|
68
78
|
- [ ] Body text measure is capped
|
|
69
79
|
- [ ] Changing numbers set in tabular figures
|
|
@@ -77,6 +87,8 @@ Skip this group where the surface draws on a system already settled.
|
|
|
77
87
|
|
|
78
88
|
### Wording
|
|
79
89
|
|
|
90
|
+
Every word on the surface states what is true of it.
|
|
91
|
+
|
|
80
92
|
- [ ] No filler verbs
|
|
81
93
|
- [ ] Sentence case throughout, with exceptions per `interface-casing`
|
|
82
94
|
- [ ] Every claim about what the product does is a thing it does
|
|
@@ -14,8 +14,9 @@ Nothing below states a value. A value belongs to the project's own design docume
|
|
|
14
14
|
An unguided model reaches for whatever number looks right at each point, which produces a surface with thirty spacing values and no rhythm.
|
|
15
15
|
|
|
16
16
|
- **Every gap comes from one scale.** Count the distinct spacing values on a finished surface. More than about eight means there is no scale, only arithmetic.
|
|
17
|
-
- **The steps grow, they do not add.** A scale stepping 4, 8, 12, 16, 24, 32, 48, 64 gives usable distinctions at both ends. One stepping 10, 20, 30, 40
|
|
18
|
-
- **Space between groups exceeds space within them.**
|
|
17
|
+
- **The steps grow, they do not add.** A scale stepping 4, 8, 12, 16, 24, 32, 48, 64 gives usable distinctions at both ends. One stepping 10, 20, 30, 40 reads alike at large sizes and fails at small.
|
|
18
|
+
- **Space between groups exceeds space within them.** The one spacing rule carrying meaning, since proximity tells a reader which things belong together.
|
|
19
|
+
- **One gap everywhere** tells the reader nothing, and it is the most common spacing failure in generated output.
|
|
19
20
|
- **Section rhythm is two or three tiers, not a value per section.** Pick the tiers, then assign each section to one.
|
|
20
21
|
- **Space responds to viewport, type mostly does not.** A layout that scales every value together arrives at a phone reading like a shrunken desktop.
|
|
21
22
|
|
|
@@ -31,12 +32,12 @@ An unguided model reaches for whatever number looks right at each point, which p
|
|
|
31
32
|
|
|
32
33
|
The layer a model is worst at, and the layer where rules are hardest to make falsifiable. Everything below is a relationship, since a rule naming a value is a value ban and values belong to the project.
|
|
33
34
|
|
|
34
|
-
- **An accent is defined by rarity, not by hue.** A color
|
|
35
|
+
- **An accent is defined by rarity, not by hue.** A color on a third of the surface is a ground, whatever it was chosen as. An accent seen more than a handful of times per screen is none.
|
|
35
36
|
- **Neutrals are one family at one temperature.** Warm grays beside cool grays read as a mistake rather than as a decision, and it is a mistake a model makes by pulling neutrals from different sources.
|
|
36
37
|
- **Adjacent surfaces separate by a little, content separates from ground by a lot.** Generated output routinely inverts this: cards that shout against the page, and text that does not.
|
|
37
|
-
- **A semantic color is not the accent.** Error, success and warning carry meaning. Borrowing the accent for one
|
|
38
|
-
- **Dark mode is re-derived, not inverted.** The relationships above
|
|
39
|
-
- **Saturation has a budget across the surface, not per color.** Several colors each
|
|
38
|
+
- **A semantic color is not the accent.** Error, success and warning carry meaning. Borrowing the accent for one makes the accent mean something, and it stops being available for anything else.
|
|
39
|
+
- **Dark mode is re-derived, not inverted.** The relationships above carry across and the values are settled again. A palette flipped by algorithm gets the relationships wrong in both directions.
|
|
40
|
+
- **Saturation has a budget across the surface, not per color.** Several colors each reasonable alone produce a surface that reads loud, so the rule is about the total rather than any one value.
|
|
40
41
|
|
|
41
42
|
## Considered and declined
|
|
42
43
|
|