@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
|
@@ -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
|
|
|
@@ -5,39 +5,38 @@ description: The visual defaults a model reaches for when nothing states a direc
|
|
|
5
5
|
|
|
6
6
|
# Machine tells in design
|
|
7
7
|
|
|
8
|
-
Each item below is a shape rather than a value, which is why no ban list of colors or fonts reaches any of them. Read this before handing over anything a model drafted
|
|
8
|
+
Each item below is a shape rather than a value, which is why no ban list of colors or fonts reaches any of them. Read this before handing over anything a model drafted, and skip it on a small change to a surface that already has a settled direction.
|
|
9
9
|
|
|
10
|
-
The skill body carries the ten most common of these
|
|
11
|
-
|
|
12
|
-
An item is a default to reach past, not a prohibition. A brief that explicitly asks for one gets it, and the point is that it was chosen rather than defaulted into.
|
|
10
|
+
The skill body carries the ten most common of these, and this is the same catalog at full length. An item is a default to reach past, not a prohibition, so a brief that explicitly asks for one gets it, chosen rather than defaulted into.
|
|
13
11
|
|
|
14
12
|
## Composition
|
|
15
13
|
|
|
16
|
-
- **The three equal cards.** Three identical boxes in a row under a heading
|
|
17
|
-
- **One section shape repeated down the page.**
|
|
14
|
+
- **The three equal cards.** Three identical boxes in a row under a heading. Reach for a two-column alternation, an asymmetric grid, a list with one item given weight, or a single worked example.
|
|
15
|
+
- **One section shape repeated down the page.** Every section a centered heading over a centered body reads flat whatever its palette. Vary alignment, container width and the ratio between sections.
|
|
18
16
|
- **The centered hero over a dark wash.** Centered headline, centered subhead, two buttons, gradient behind. Reach for an asymmetric split, a full-bleed artifact, or content that starts immediately.
|
|
19
|
-
- **Decoration standing in for structure.** Hairline grids, crosshairs, floating rules and corner marks added so a page feels designed.
|
|
20
|
-
- **The corner floater.** A large left-aligned
|
|
17
|
+
- **Decoration standing in for structure.** Hairline grids, crosshairs, floating rules and corner marks added so a page feels designed. Keep them only where they organize real content.
|
|
18
|
+
- **The corner floater.** A large left-aligned heading with a small paragraph floating top right, aligned to nothing. Put the sub-text under the heading or build a real two-column header.
|
|
21
19
|
|
|
22
20
|
## Content and labels
|
|
23
21
|
|
|
24
22
|
- **Enumerated eyebrows.** `001 / Capabilities`, `Phase 02`, `Step 1`, `Stage One`. The content is the label. Where progression genuinely matters, use the verb.
|
|
25
23
|
- **Poetic section labels.** "From the field", "On our desks", "Currently on the bench". Use the plain functional label or drop the label.
|
|
26
|
-
- **Atmospheric strips.** City, time zone, temperature, coordinates, build version, last-sync time, placed for texture
|
|
24
|
+
- **Atmospheric strips.** City, time zone, temperature, coordinates, build version, last-sync time, placed for texture. Keep one only where it carries real state a reader acts on.
|
|
27
25
|
- **Scroll cues.** "Scroll", an animated wheel, a downward arrow with a label. A reader looking at the top of a page knows what scrolling is.
|
|
28
|
-
- **Decorative status dots.** A
|
|
29
|
-
- **Filler verbs.** A verb chosen for
|
|
30
|
-
- **Placeholder that reads as placeholder.** Generic
|
|
31
|
-
- **Invented precision.** A figure like 4.1x or 48k
|
|
26
|
+
- **Decorative status dots.** A colored dot before every nav item, list row or badge. Keep it only where it reports genuine state, and then sparingly.
|
|
27
|
+
- **Filler verbs.** A verb chosen for warmth rather than for what it reports, such as `elevate`, `unleash`, `empower` or `next-generation`. Name the thing the surface does.
|
|
28
|
+
- **Placeholder that reads as placeholder.** Generic names, egg avatars, `Acme`-family companies, one portrait for several people, every item dated alike. Real collections are uneven and specific.
|
|
29
|
+
- **Invented precision.** A figure like 4.1x or 48k came from real data, is marked as sample, or does not appear. An invented number gets shipped, because it reads as confidence.
|
|
32
30
|
- **The fake screenshot built from boxes.** A product UI simulated out of styled rectangles inside a hero. Show the real thing, a real capture, or nothing.
|
|
33
|
-
- **Copy nobody re-read.** Read every visible string once as a reader rather than
|
|
31
|
+
- **Copy nobody re-read.** Read every visible string once as a reader rather than its author before handing over. Plain beats clever and wrong, which is what a model drafting copy produces by default.
|
|
32
|
+
- **What the re-read rewrites.** A string that is grammatically broken, carries a pronoun with no antecedent on the page, or reaches for charm it has not earned.
|
|
34
33
|
|
|
35
34
|
## Surface and palette
|
|
36
35
|
|
|
37
36
|
- **Glow as depth.** Outer glows and neon rims standing in for elevation. Use a border, a tint, or a real shadow with direction.
|
|
38
37
|
- **Pure black and pure white as grounds.** Both are harsher than nearly any surface wants. Move off the extreme.
|
|
39
|
-
- **Saturation everywhere.**
|
|
40
|
-
- **The gradient as a substitute for a decision.** A gradient
|
|
38
|
+
- **Saturation everywhere.** A full-saturation accent beside tinted neutrals leaves nothing to anchor on. Desaturate the neutrals and let one accent carry.
|
|
39
|
+
- **The gradient as a substitute for a decision.** A gradient over a section, a heading, or a button set because flat looked plain. Flat composition is fixed by composition, not gradient.
|
|
41
40
|
- **Uniform radius and uniform elevation.** Every card at the same radius with the same shadow flattens hierarchy. Let the thing that matters differ.
|
|
42
41
|
|
|
43
42
|
## Typography
|
|
@@ -49,28 +48,28 @@ An item is a default to reach past, not a prohibition. A brief that explicitly a
|
|
|
49
48
|
|
|
50
49
|
## Motion
|
|
51
50
|
|
|
52
|
-
- **Motion nobody can justify.** Before adding any animation,
|
|
51
|
+
- **Motion nobody can justify.** Before adding any animation, name the hierarchy, sequence, feedback, or changed state it communicates. A sentence that will not come means it goes.
|
|
53
52
|
- **The permanent loop.** Anything animating forever with no input. It costs attention on every frame and earns none back.
|
|
54
53
|
- **Motion on arrival for everything.** Every section fading up on scroll. Reserve entrance motion for what genuinely needs the eye.
|
|
55
|
-
- **Motion claimed but
|
|
56
|
-
- **Motion that ignores a reduced-motion preference.**
|
|
54
|
+
- **Motion claimed but absent, or present but unclaimed.** A "restrained" surface animating on every scroll, or a "fluid" one sitting still, has decided nothing. Ship the motion or drop the claim.
|
|
55
|
+
- **Motion that ignores a reduced-motion preference.** A correctness failure the `ui` governance rules own, not a taste one. It sits here so a motion pass does not read this catalog as all motion owes.
|
|
57
56
|
|
|
58
57
|
## The countable limits
|
|
59
58
|
|
|
60
|
-
These
|
|
59
|
+
These rules carry numbers, so they are checked by counting rather than by judging. Every one came out of production testing by people shipping model-drafted pages.
|
|
61
60
|
|
|
62
61
|
- **A layout family appears once.** Once a section uses a shape, no other section on the surface uses it. Eight sections need at least four distinct families.
|
|
63
|
-
- **Two consecutive splits, never three.** Alternating image
|
|
64
|
-
- **One small uppercase label per three sections.** The
|
|
62
|
+
- **Two consecutive splits, never three.** Alternating image sides reads as considered twice and as filler by the third. Break it with a full-width section, a vertical stack, or a grid.
|
|
63
|
+
- **One small uppercase label per three sections.** The most over-reached default in model output, with the count in `interface-casing`. Usually delete it, since position already says what a section is.
|
|
65
64
|
- **One marquee.** Two sliding strips on one surface read as filler rather than as a device.
|
|
66
65
|
- **Cells equal items.** A grid with a hole in it, or a blank tile at the end, means the grid was shaped before the content was counted. Reshape it.
|
|
67
|
-
- **Over five items wants a different component.**
|
|
66
|
+
- **Over five items wants a different component.** Group into clusters, split into columns, give each item a card, make them scrollable, or collapse the tail behind a disclosure.
|
|
68
67
|
|
|
69
68
|
## The first screen
|
|
70
69
|
|
|
71
|
-
- **It fits.** The point and the primary action are both visible without scrolling.
|
|
70
|
+
- **It fits.** The point and the primary action are both visible without scrolling. Copy that will not fit is too long or set too large, and the second is the more common cause.
|
|
72
71
|
- **At most four text elements.** A label or a brand strip, a headline, a short supporting line, and the actions. That is the whole budget.
|
|
73
|
-
- **Everything else moves down.** A
|
|
72
|
+
- **Everything else moves down.** A tagline under the actions, a trust strip, a pricing hint, a feature list, a row of faces. Each is a section of its own below, not a fifth element.
|
|
74
73
|
- **Plan the type scale against the asset.** A headline wrapping to four lines is a size error rather than a length error.
|
|
75
74
|
- **Logos go under it, never inside it.** A credibility row shares no space with the point.
|
|
76
75
|
|
|
@@ -7,9 +7,11 @@ description: The layer, property, pattern and process terms this skill uses, so
|
|
|
7
7
|
|
|
8
8
|
Terms used by `design-taste` and by the skills it is loaded alongside. It changes when a design round needs a name it cannot look up here.
|
|
9
9
|
|
|
10
|
-
This glossary departs from one rule in `glossary.md
|
|
10
|
+
This glossary departs from one rule in `glossary.md`, since an entry does not name where the term first appears. The material is five short files a reader can scan, so a location per entry costs more than it returns.
|
|
11
11
|
|
|
12
|
-
Every other rule there holds, and the one deciding membership holds strictly
|
|
12
|
+
- Every other rule there holds, and the one deciding membership holds strictly
|
|
13
|
+
- A term appears here once this skill's own material uses it, never ahead of that
|
|
14
|
+
- The last section records what was considered and left out
|
|
13
15
|
|
|
14
16
|
## Layers
|
|
15
17
|
|
|
@@ -28,7 +30,7 @@ Ordered by when each settles, not alphabetically, since the order is the content
|
|
|
28
30
|
## Properties
|
|
29
31
|
|
|
30
32
|
- **Casing**: whether text is set upper, lower, title or sentence case, treated as a hierarchy decision rather than a typing one.
|
|
31
|
-
- **Density**: how much information a given area carries.
|
|
33
|
+
- **Density**: how much information a given area carries. Correct in an application surface and clutter on a marketing one, so it belongs to the kind rather than to taste.
|
|
32
34
|
- **Hierarchy**: the order a reader takes things in, produced by weight, color, space and position together rather than by size alone.
|
|
33
35
|
- **Ground**: the surface a thing sits on, whether the page behind everything or the fill behind one element. Named apart from "background" because the relationship that matters is what sits against it.
|
|
34
36
|
- **Line height**: the vertical distance from one baseline to the next, set against size rather than fixed across a scale. Avoid "leading", which names the same thing.
|
|
@@ -52,9 +54,9 @@ Named compositions, carried so an operator can ask for one by name instead of de
|
|
|
52
54
|
|
|
53
55
|
How a draft is staged while unfinished.
|
|
54
56
|
|
|
55
|
-
- **FPO**: a placeholder held at the true final size and marked as
|
|
57
|
+
- **FPO**: a placeholder held at the true final size and marked as one, from the print term "for position only". Marking it is the point, since an unmarked stand-in gets read as a decision.
|
|
56
58
|
- **Greeking**: standing text in for copy that does not exist yet, of which lorem ipsum is the common form. Correct while judging space and wrong once an arm is judged on content.
|
|
57
|
-
- **Grey-box**: drawing every element as a flat neutral block
|
|
59
|
+
- **Grey-box**: drawing every element as a flat neutral block, removing the layers above the one under judgment from view. Avoid "wireframe", which reads as a deliverable rather than a stage.
|
|
58
60
|
|
|
59
61
|
## Terms this vocabulary deliberately does not carry
|
|
60
62
|
|
|
@@ -11,78 +11,103 @@ The skill body holds the order, the guards, and the report shape. This holds the
|
|
|
11
11
|
|
|
12
12
|
## Length
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
| Field | Value |
|
|
15
|
+
| -------------- | ------------------------------------------------------------------------------------------ |
|
|
16
|
+
| Measures | Whether a document, or a passage inside it, has grown past what a reader takes in one pass |
|
|
17
|
+
| Verbs | `canon markdown audit --json`, and `canon gov audit --json` for a rule |
|
|
18
|
+
| Evidence class | `measured` |
|
|
15
19
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
**Evidence class:** `measured`.
|
|
19
|
-
|
|
20
|
-
The record carries the checkpoints it read against under `checkpoints` and the per-file weights under `entries`. Read both from the record rather than from a number stated here, since the CLI moves a checkpoint on its own cadence and a copy of one goes stale in place.
|
|
21
|
-
|
|
22
|
-
Four weights answer this axis, each naming a different shape of overgrowth:
|
|
20
|
+
The record carries the checkpoints it read against under `checkpoints` and the per-file weights under `entries`. Read both from the record rather than from a number stated here, since the CLI moves a checkpoint on its own cadence and a copy goes stale in place.
|
|
23
21
|
|
|
24
22
|
- `heavyBullets`: a top-level bullet past the character checkpoint, which is a paragraph wearing a dash
|
|
25
23
|
- `heavyParagraphs`: a paragraph past the sentence or character checkpoint
|
|
26
24
|
- `longestRun`, against `longestRunLine`: unbroken rendered lines between headings, which is the depth checkpoint
|
|
27
25
|
- `cadence`, carrying `measured`, `flat`, and `repeating`: sentence-length spread and repeated openers
|
|
26
|
+
- `rules[].findings`: a rule past one of its own six shape limits or carrying an emphasis word, since the density weights above never read a rule file
|
|
28
27
|
|
|
29
|
-
|
|
28
|
+
### Reading a length finding
|
|
30
29
|
|
|
31
|
-
|
|
30
|
+
Weight is a judgment a reader settles rather than a defect, as the verb states for itself. A finding here argues for a split or a trim rather than naming a broken rule.
|
|
32
31
|
|
|
33
|
-
**
|
|
32
|
+
- **Routes to:** a split of the document, or a move of the overgrown passage to the surface that owns it
|
|
33
|
+
- **A project statement of what a document may hold** decides whether the passage belongs, and the finding routes there rather than to a trim
|
|
34
|
+
- **Caveat:** the cadence numbers are drawn from prose read straight through. Terse reference prose sits below that range correctly, so a flat paragraph in a table or bullet-heavy file is no finding.
|
|
34
35
|
|
|
35
36
|
## Placement
|
|
36
37
|
|
|
37
|
-
|
|
38
|
+
| Field | Value |
|
|
39
|
+
| -------------- | ------------------------------------------------------------------------------------------------------------------------ |
|
|
40
|
+
| Measures | Whether a document's content sits in the file that owns it, and whether the catalogs pointing at it resolve |
|
|
41
|
+
| Verbs | `canon context audit --json` for the structural half, `canon context classify sweep --json` for the per-section verdicts |
|
|
42
|
+
| Evidence class | `measured` for the audit's findings, `classified` for the sweep's verdicts |
|
|
38
43
|
|
|
39
|
-
|
|
44
|
+
The audit answers required sections, entry length, citation resolution, reference form, catalog tables, provenance, and index drift. Required sections reach context entries.
|
|
40
45
|
|
|
41
|
-
|
|
46
|
+
- A citation resolving to nothing is a fact and gates
|
|
47
|
+
- Entry length, reference form, table shape, and provenance are judgments under every flag
|
|
42
48
|
|
|
43
|
-
The
|
|
49
|
+
### The sweep's verdicts
|
|
44
50
|
|
|
45
|
-
The sweep classifies each section as keep, replace or rewrite, history, or move. A `move` verdict is the placement finding proper, naming content sitting in the wrong document.
|
|
51
|
+
The sweep classifies each section as keep, replace or rewrite, history, or move. A `move` verdict is the placement finding proper, naming content sitting in the wrong document.
|
|
46
52
|
|
|
47
|
-
|
|
53
|
+
- Each verdict carries its own confidence, which is why the class is `classified` rather than `measured`
|
|
54
|
+
- A low-confidence `move` is a prompt to look rather than an instruction to cut
|
|
55
|
+
- **Routes to:** the document the verdict names as the owner. Where the move crosses a tier rather than a file, the project's own content-ownership rules decide the destination.
|
|
48
56
|
|
|
49
|
-
|
|
57
|
+
### When a verb resolves nothing
|
|
50
58
|
|
|
51
|
-
|
|
59
|
+
Both verbs resolve their folders by surface root rather than by a path written into them, so a project laid out differently resolves nothing. The two degrade differently.
|
|
52
60
|
|
|
53
|
-
|
|
61
|
+
- The audit refuses with `reason: "no-folders"`, naming the folders it looked for. Report that refusal as an unread axis.
|
|
62
|
+
- The sweep with the model layer off answers from its regex layer alone, a narrower read rather than a refusal, so say which layer answered
|
|
54
63
|
|
|
55
|
-
|
|
64
|
+
## Staleness
|
|
56
65
|
|
|
57
|
-
|
|
66
|
+
| Field | Value |
|
|
67
|
+
| -------------- | ---------------------------------------------------------------- |
|
|
68
|
+
| Measures | Whether a document still describes the tree it was written about |
|
|
69
|
+
| Verb | None |
|
|
70
|
+
| Evidence class | `read` |
|
|
58
71
|
|
|
59
|
-
This is the axis the operator names first and the one nothing measures. A document goes stale by the tree moving under it
|
|
72
|
+
This is the axis the operator names first and the one nothing measures. A document goes stale by the tree moving under it, so no property of the file answers it and a timestamp answers a different question.
|
|
60
73
|
|
|
61
|
-
Read each document against the surfaces it names
|
|
74
|
+
A file untouched for a year beside code untouched for a year is current, and one edited yesterday against a refactor from this morning is stale. Read each document against the surfaces it names, testing four claim shapes without leaving the project.
|
|
62
75
|
|
|
63
76
|
- A file or folder path the document states, against whether it resolves
|
|
64
77
|
- A command or verb the document names, against whether it exists and carries the flags shown
|
|
65
78
|
- A count the document states over a tree, against the tree
|
|
66
79
|
- A cross-reference to another document, against what that document now says
|
|
67
80
|
|
|
68
|
-
A claim resting on none of the four is unverifiable from here. Report it as unread rather than as passing,
|
|
81
|
+
A claim resting on none of the four is unverifiable from here. Report it as unread rather than as passing, the same rule the measured axes take when a verb refuses.
|
|
69
82
|
|
|
70
83
|
### Identity drift in the requirements record
|
|
71
84
|
|
|
72
|
-
This record states what the project is and why
|
|
85
|
+
This record states what the project is and why, so it goes stale by the project changing direction as well as by the tree moving. Test these claim shapes beside the four above, each a `read`.
|
|
73
86
|
|
|
74
87
|
- A goal nobody pursues, read against the task board and the recent history
|
|
75
88
|
- A non-goal the project has since shipped
|
|
76
89
|
- A constraint the tree contradicts
|
|
77
90
|
|
|
78
|
-
|
|
91
|
+
### The review point
|
|
79
92
|
|
|
80
|
-
|
|
93
|
+
The review point beside them is `measured`. `canon records stale canonical --json` returns the `reviewed` date from the record's frontmatter and `releasesSince`, the release tags merged into HEAD after that day.
|
|
81
94
|
|
|
82
|
-
|
|
95
|
+
- A null `releasesSince` means the doc was never reviewed
|
|
96
|
+
- `tagged: false` means no release tag exists to count, so a zero there measured nothing
|
|
97
|
+
- The count is a reminder of how far the project has moved since someone last read the record whole, never a threshold
|
|
98
|
+
|
|
99
|
+
### Routing a staleness finding
|
|
100
|
+
|
|
101
|
+
A document health run reports and never repairs, so a stale claim routes to the skill that rewrites it against an answer rather than to a direct edit from here.
|
|
102
|
+
|
|
103
|
+
A reading is the weakest evidence in the report and the most consequential finding in it, which is the tension this axis ships with. Marking the class keeps the two facts together in the reader's hands.
|
|
83
104
|
|
|
84
105
|
## Why the three stay apart
|
|
85
106
|
|
|
86
|
-
The axes are not equally actionable and a report flattening them implies they are.
|
|
107
|
+
The axes are not equally actionable, and a report flattening them implies they are. Each is worth reporting and each is worth a different response, so the class travels beside the state on every row rather than once in a preamble a reader skims.
|
|
108
|
+
|
|
109
|
+
- A length finding is a number against a checkpoint
|
|
110
|
+
- A placement finding is a verdict carrying a confidence
|
|
111
|
+
- A staleness finding is a judgment with nothing behind it
|
|
87
112
|
|
|
88
113
|
Shipping staleness on weaker evidence than the other two is the trade taken deliberately. Cutting it would leave the report answering the two questions that were never the operator's complaint.
|