@erclx/canon 5.62.0 → 5.64.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/CHANGELOG.md +26 -0
- package/claude/.claude-plugin/plugin.json +1 -1
- package/claude/skills/api-design/references/adopted.md +1 -1
- package/claude/skills/context-fold/REQUIREMENT.md +2 -3
- package/claude/skills/context-fold/SKILL.md +1 -11
- package/claude/skills/context-fold/references/completion-report.md +8 -9
- package/claude/skills/create-skill/references/skill-practice.md +17 -1
- package/claude/skills/design-record/references/design.md +1 -1
- package/claude/skills/design-taste/REQUIREMENT.md +2 -1
- package/claude/skills/design-taste/SKILL.md +6 -5
- package/claude/skills/design-taste/references/adopted.md +56 -8
- package/claude/skills/design-taste/references/craft.md +1 -1
- package/claude/skills/design-taste/references/kinds.md +8 -2
- package/claude/skills/design-taste/references/preflight.md +3 -3
- package/claude/skills/design-taste/references/tells.md +26 -5
- package/claude/skills/document-health/REQUIREMENT.md +1 -1
- package/claude/skills/document-health/SKILL.md +3 -14
- package/claude/skills/document-health/references/axes.md +14 -16
- package/claude/skills/plan-feature/SKILL.md +2 -2
- package/claude/skills/plan-feature/references/plan.md +24 -3
- package/claude/skills/review-craft/SKILL.md +1 -1
- package/claude/skills/role-worker/SKILL.md +2 -1
- package/claude/skills/ui-checklist/SKILL.md +1 -1
- package/claude/skills/ui-craft/REQUIREMENT.md +29 -0
- package/claude/skills/ui-craft/SKILL.md +44 -0
- package/{governance/rules/ui → claude/skills/ui-craft/references}/a11y.md +0 -10
- package/claude/skills/ui-craft/references/adopted.md +27 -0
- package/{governance/rules/ui/surface-capture.md → claude/skills/ui-craft/references/capture.md} +0 -10
- package/{governance/rules/ui/ux-controls.md → claude/skills/ui-craft/references/controls.md} +3 -10
- package/claude/skills/ui-craft/references/copy.md +45 -0
- package/{governance/rules/ui → claude/skills/ui-craft/references}/forms.md +0 -9
- package/{governance/rules/ui → claude/skills/ui-craft/references}/keyboard.md +0 -10
- package/{governance/rules/ui → claude/skills/ui-craft/references}/motion.md +0 -10
- package/{governance/rules/ui → claude/skills/ui-craft/references}/pointer.md +0 -10
- package/{governance/rules/ui/ux-completeness.md → claude/skills/ui-craft/references/states.md} +0 -10
- package/claude/skills/ux-audit/SKILL.md +1 -1
- package/claude/skills/write-human/references/adopted.md +4 -1
- package/docs/agents/audits.md +2 -6
- package/docs/agents/context-audit.md +1 -1
- package/docs/agents/install-and-sync.md +2 -2
- package/docs/target/migrations.md +3 -3
- package/docs/target/sync.md +3 -2
- package/docs/workflow/skill-map.md +1 -0
- package/docs/workflow/visual-design-workflow.md +2 -2
- package/governance/detect.toml +1 -45
- package/governance/ledger/lib/test-scope.md +1 -1
- package/governance/ledger/skills/api-design/SKILL.md +62 -0
- package/governance/ledger/skills/code-craft/SKILL.md +53 -0
- package/governance/ledger/skills/deprecation-migration/SKILL.md +68 -0
- package/governance/ledger/skills/design-taste/SKILL.md +64 -0
- package/governance/ledger/skills/design-taste/craft.md +66 -0
- package/governance/ledger/skills/design-taste/kinds.md +58 -0
- package/governance/ledger/skills/design-taste/systems.md +42 -0
- package/governance/ledger/skills/design-taste/tells.md +103 -0
- package/governance/ledger/{ui → skills/ui-craft}/a11y.md +3 -3
- package/governance/ledger/{ui/surface-capture.md → skills/ui-craft/capture.md} +3 -3
- package/governance/ledger/{ui/ux-controls.md → skills/ui-craft/controls.md} +12 -7
- package/governance/ledger/skills/ui-craft/copy.md +102 -0
- package/governance/ledger/{ui → skills/ui-craft}/forms.md +3 -3
- package/governance/ledger/{ui → skills/ui-craft}/keyboard.md +3 -3
- package/governance/ledger/{ui → skills/ui-craft}/motion.md +3 -3
- package/governance/ledger/{ui → skills/ui-craft}/pointer.md +3 -3
- package/governance/ledger/{ui/ux-completeness.md → skills/ui-craft/states.md} +3 -3
- package/governance/ledger/ui/craft.md +19 -0
- package/governance/renames.toml +17 -3
- package/governance/rules/lib/test-scope.md +1 -1
- package/governance/rules/ui/craft.md +22 -0
- package/governance/splits.toml +0 -2
- package/package.json +1 -1
- package/src/audits/catalog.ts +0 -52
- package/src/claude/cases/misc.ts +5 -0
- package/src/claude/skills-audit.ts +226 -12
- package/src/cli/retired.ts +8 -0
- package/src/commands/claude.ts +15 -1
- package/src/commands/context.ts +0 -425
- package/src/commands/tooling.ts +4 -1
- package/src/context/citations.ts +9 -3
- package/src/gate/measures.ts +4 -3
- package/src/git/files.ts +8 -3
- package/src/gov/audit.ts +6 -1
- package/src/inventory/subjects.ts +1 -1
- package/src/markdown/gated.ts +1 -1
- package/src/markdown/scope.ts +0 -1
- package/src/tooling/package.ts +22 -13
- package/tooling/web/reference.md +3 -1
- package/claude/skills/context-fold/references/classify.md +0 -87
- package/governance/ledger/ui/copy.md +0 -49
- package/governance/ledger/ui/design-taste.md +0 -19
- package/governance/ledger/ui/interface-casing.md +0 -47
- package/governance/ledger/ui/link-behavior.md +0 -29
- package/governance/rules/ui/copy.md +0 -28
- package/governance/rules/ui/design-taste.md +0 -18
- package/governance/rules/ui/interface-casing.md +0 -29
- package/governance/rules/ui/link-behavior.md +0 -19
- package/src/context/classify/extract.ts +0 -443
- package/src/context/classify/ollama.ts +0 -172
- package/src/context/classify/patterns.ts +0 -75
- package/src/context/classify/prompts.ts +0 -74
- package/src/context/classify/run.ts +0 -348
- package/src/context/classify/settings.ts +0 -196
- /package/tooling/web/{configs → seeds}/e2e/home.spec.ts +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,31 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [5.64.0](https://github.com/erclx/canon/compare/v5.63.0...v5.64.0) (2026-10-24)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* **context:** remove the content classifier ([#2695](https://github.com/erclx/canon/issues/2695)) ([6d92b50](https://github.com/erclx/canon/commit/6d92b50bd0042a12d62574a034b1658eb6486e54))
|
|
9
|
+
* **skills:** ledger the craft skill bodies on their concern groups ([#2700](https://github.com/erclx/canon/issues/2700)) ([02655a5](https://github.com/erclx/canon/commit/02655a5ede3879e572145316461e2c61e307985b))
|
|
10
|
+
* **skills:** source every design-taste rule bullet in a ledger ([#2691](https://github.com/erclx/canon/issues/2691)) ([bb57e71](https://github.com/erclx/canon/commit/bb57e71e7db56ac4fc4d66f85e826b4ac2a3ae4a))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* **claude:** resolve seeded records at either surface root ([#2696](https://github.com/erclx/canon/issues/2696)) ([288336c](https://github.com/erclx/canon/commit/288336c07c57c1a9b26a4cc6ea97c988f3338988))
|
|
16
|
+
* **context:** skip the install stamp in the citation scan ([#2699](https://github.com/erclx/canon/issues/2699)) ([d2f0425](https://github.com/erclx/canon/commit/d2f0425bd33f69cf9f3529769d06e916a716b0d5))
|
|
17
|
+
* **git:** leave deleted tracked paths out of the repository listing ([#2698](https://github.com/erclx/canon/issues/2698)) ([baa91e5](https://github.com/erclx/canon/commit/baa91e5a2a5d11bab9567bedf494eae5b63f7c09))
|
|
18
|
+
|
|
19
|
+
## [5.63.0](https://github.com/erclx/canon/compare/v5.62.0...v5.63.0) (2026-10-24)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
### Features
|
|
23
|
+
|
|
24
|
+
* **design:** ground design-taste rules and gate ledgers on a citation ([#2682](https://github.com/erclx/canon/issues/2682)) ([b265be3](https://github.com/erclx/canon/commit/b265be30b359797ebe5d0019c8d1cd59acfe465b))
|
|
25
|
+
* **plan:** add a verbatim section for settled wording ([#2688](https://github.com/erclx/canon/issues/2688)) ([1b3e337](https://github.com/erclx/canon/commit/1b3e3371f3f6b84ff780f1e9d956981783ee9515))
|
|
26
|
+
* **skills:** move the ui practice into a ui-craft skill ([#2687](https://github.com/erclx/canon/issues/2687)) ([47ef097](https://github.com/erclx/canon/commit/47ef0979613a70d46721068db504c877210d7e2d))
|
|
27
|
+
* **tooling:** read later majors as ahead and seed the starter spec ([#2683](https://github.com/erclx/canon/issues/2683)) ([dc3bc06](https://github.com/erclx/canon/commit/dc3bc06e2ca157ebbb1c3ba723251b21eb478c0a))
|
|
28
|
+
|
|
3
29
|
## [5.62.0](https://github.com/erclx/canon/compare/v5.61.0...v5.62.0) (2026-10-24)
|
|
4
30
|
|
|
5
31
|
|
|
@@ -17,7 +17,7 @@ Adopted as the opening group, stated as design rules rather than as an observati
|
|
|
17
17
|
|
|
18
18
|
### One version per dependency
|
|
19
19
|
|
|
20
|
-
[Software Engineering at Google, ch.
|
|
20
|
+
[Software Engineering at Google, ch. 16](https://abseil.io/resources/swe-book/html/ch16.html) states the One-Version Rule, keeping one version of each dependency in a repository, so a change to it migrates every caller rather than leaving two versions live. Adopted under additive change for a caller that cannot pin, which is any module imported from inside one repository.
|
|
21
21
|
|
|
22
22
|
## Adopted from one external skill
|
|
23
23
|
|
|
@@ -16,14 +16,13 @@ The context entries describe the repository the session opened with. An entry ke
|
|
|
16
16
|
- Name the context entries in a trigger phrase, so a bare request to sync the docs separates this skill from `docs-sync`
|
|
17
17
|
- Take the refresh scope from the diff and write tracked docs at the current worktree root, only when the diff adds, moves, or removes a folder, falsifies a bullet, or changes a trap
|
|
18
18
|
- Report a requirements or direction change in one line naming `document-health` rather than writing it
|
|
19
|
-
- Close on `canon context audit`
|
|
20
|
-
-
|
|
19
|
+
- Close on `canon context audit` over the fold's whole baseline, reporting findings on files this run wrote or the diff carries
|
|
20
|
+
- Continue the fold when a check cannot run
|
|
21
21
|
|
|
22
22
|
## Must not
|
|
23
23
|
|
|
24
24
|
- Write the task board, the design record, `CLAUDE.md`, the requirements record, or a promoted page
|
|
25
25
|
- Create an entry for a domain the catalog does not list, or report a finding on an entry this run never touched
|
|
26
|
-
- Pick a classifier backend, re-run the classifier after a fix, or apply a finding whose quote is not found exactly once
|
|
27
26
|
- Stop the fold on a finding, a refusal, or a missing subcommand
|
|
28
27
|
|
|
29
28
|
## Out of scope
|
|
@@ -62,7 +62,7 @@ Write each updated file immediately. Claude Code's tool permission dialog is the
|
|
|
62
62
|
|
|
63
63
|
## Step 4: audit what the fold touched
|
|
64
64
|
|
|
65
|
-
Run the structural audit
|
|
65
|
+
Run the structural audit and the markdown audit, and answer each before the report. Findings never stop the fold.
|
|
66
66
|
|
|
67
67
|
### Structural audit
|
|
68
68
|
|
|
@@ -85,16 +85,6 @@ Run `canon markdown audit <path>` over every entry Step 3 wrote this run, and fi
|
|
|
85
85
|
- Report a finding in a section Step 3 left alone as `⚠ Audit: <rel>, <finding>`, since the rule above keeps unrelated sections as they are
|
|
86
86
|
- Report a refusal as `⚠ Audit: <message>` and continue
|
|
87
87
|
|
|
88
|
-
### Classify
|
|
89
|
-
|
|
90
|
-
Skip the classifier only when the Diff baseline section could not resolve a base ref at all, reporting `⚠ No diff to scope against. Skipped the classify check.` The verb needs a resolvable ref, which is the one condition it cannot answer for itself.
|
|
91
|
-
|
|
92
|
-
Otherwise read `${CLAUDE_SKILL_DIR}/references/classify.md` for the invocation, its scope, the record fields, applying a finding, the one-line keep reason, the unreachable and missing-subcommand lines, and the report shape.
|
|
93
|
-
|
|
94
|
-
- `${CLAUDE_SKILL_DIR}` names this skill's own directory, resolved once when the skill loaded, so read the reference by that resolved path
|
|
95
|
-
- Never guess a `.claude/skills/context-fold/references/classify.md` path from the install-time layout, which is a different root than this skill's own files
|
|
96
|
-
- The invocation is `canon context classify diff --base <base> --json`, and it runs whether or not that reference resolves
|
|
97
|
-
|
|
98
88
|
## After completion
|
|
99
89
|
|
|
100
90
|
Read `${CLAUDE_SKILL_DIR}/references/completion-report.md` before printing anything, for the line each outcome prints, the lines Step 2 and Step 4 add, and when the closing line is suppressed.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Completion report
|
|
3
|
-
description: The lines context-fold prints once every step has run, being one per file updated, the direction-change note, Step 4's audit
|
|
3
|
+
description: The lines context-fold prints once every step has run, being one per file updated, the direction-change note, Step 4's audit lines, and the closing line with when it is suppressed
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Completion report
|
|
@@ -9,15 +9,14 @@ The close of `context-fold`. The session reads this file once every step has run
|
|
|
9
9
|
|
|
10
10
|
## Lines
|
|
11
11
|
|
|
12
|
-
| When
|
|
13
|
-
|
|
|
14
|
-
| Per file updated
|
|
15
|
-
| Step 2 noted a requirements change
|
|
16
|
-
| Per audit finding Step 4 reported
|
|
17
|
-
|
|
|
18
|
-
| No file updated and Step 4 reported nothing | `✅ No changes needed.` |
|
|
12
|
+
| When | Line |
|
|
13
|
+
| ------------------------------------------- | -------------------------------------------------------------------------------- |
|
|
14
|
+
| Per file updated | `✅ Updated: <path written>` |
|
|
15
|
+
| Step 2 noted a requirements change | `↪ Direction changed this session: run document-health on canon/REQUIREMENTS.md` |
|
|
16
|
+
| Per audit finding Step 4 reported | `⚠ Audit:` in the shape the body gives |
|
|
17
|
+
| No file updated and Step 4 reported nothing | `✅ No changes needed.` |
|
|
19
18
|
|
|
20
|
-
Do not shorten or paraphrase the audit
|
|
19
|
+
Do not shorten or paraphrase the audit lines here or in the reply, since the finding is what a reader checks it against.
|
|
21
20
|
|
|
22
21
|
## Suppressing the closing line
|
|
23
22
|
|
|
@@ -9,7 +9,7 @@ Applies to a practice skill, one carrying engineering judgment a session applies
|
|
|
9
9
|
|
|
10
10
|
## Scope
|
|
11
11
|
|
|
12
|
-
Governs the closing sections of a practice skill's `skills/<name>/SKILL.md
|
|
12
|
+
Governs the closing sections of a practice skill's `skills/<name>/SKILL.md`, the source ledger at `skills/<name>/references/adopted.md` beside it, and the per-bullet ledgers a listed skill carries.
|
|
13
13
|
|
|
14
14
|
Does not govern:
|
|
15
15
|
|
|
@@ -43,9 +43,25 @@ Follow every concern group with `## Excuses and rebuttals`, `## Red flags`, and
|
|
|
43
43
|
|
|
44
44
|
- Carry `references/adopted.md` in every practice skill, recording each external source the body draws on.
|
|
45
45
|
- Link each source, or pin it to a commit, so a reader can open the version the body adopted.
|
|
46
|
+
- Mark a threshold no source states as a table row whose source cell opens with `House choice`, since a ledger carrying neither a link nor one such row cites nothing and the audit fails it.
|
|
46
47
|
- State what was adopted, what was declined, and why for each, so a later session extends the position rather than re-deriving it.
|
|
47
48
|
- Draw first from the default shelf, [Software Engineering at Google](https://abseil.io/resources/swe-book/html/toc.html) and [Google's engineering practices](https://google.github.io/eng-practices/), and record a source from elsewhere the same way.
|
|
48
49
|
|
|
50
|
+
## Per-bullet ledgers
|
|
51
|
+
|
|
52
|
+
A skill whose files list outside-practice directives one per bullet takes a ledger per such file beside `adopted.md`, with one table row per bullet under each H2, the way a governance rule's ledger does.
|
|
53
|
+
|
|
54
|
+
- Once a skill joins the per-bullet list `canon claude skills audit` keeps, every reference but `adopted.md` takes a ledger, so one added later fails until its rows land
|
|
55
|
+
- Exempt by name a checklist restating rules a ledgered file sources, which would cite each source twice, and a glossary, whose definitions direct nothing
|
|
56
|
+
- Mark the skill's `SKILL.md` for a ledger too when the body carries directives of its own
|
|
57
|
+
- Keep the rows outside the plugin, so a target pays nothing for them
|
|
58
|
+
- Move a source out of `adopted.md` once its row lands in a ledger, since two copies drift on the first edit. `adopted.md` keeps the catalog-level record and the sources behind any unledgered file.
|
|
59
|
+
|
|
60
|
+
The audit counts a few lines in a ledgered file apart from a rule's.
|
|
61
|
+
|
|
62
|
+
- Ledger a listed body's concern groups alone, every H2 before its closing sections or `## What this delegates`, since those restate the groups' rules or route
|
|
63
|
+
- Give a top-level ordered step a row the way a bullet takes one, and a `## Contents` list none, since it repeats the headings
|
|
64
|
+
|
|
49
65
|
## Which skills are practice skills
|
|
50
66
|
|
|
51
67
|
- `canon claude skills audit` keeps the list of practice skills and checks each listed one for the three closing sections and the ledger.
|
|
@@ -89,7 +89,7 @@ In an intent record, `## Colors` carries a `Role | Property | Intent` table and
|
|
|
89
89
|
|
|
90
90
|
Add either optional section when the project has content for it:
|
|
91
91
|
|
|
92
|
-
- `## Layout`: page width, breakpoints, and grid rules as current constraints.
|
|
92
|
+
- `## Layout`: page width, breakpoints, and grid rules as current constraints. `ui-craft` captures at these breakpoints, so a project declaring none is captured at the 320 reflow floor alone.
|
|
93
93
|
- `## Mark`: the logo's construction rules and the files that carry it
|
|
94
94
|
|
|
95
95
|
## The uncertainty tag
|
|
@@ -29,7 +29,8 @@ The output has no standard of quality either. A model with no stated direction d
|
|
|
29
29
|
|
|
30
30
|
## Out of scope
|
|
31
31
|
|
|
32
|
-
- Accessibility, keyboard interaction, state coverage, forms, and rendered copy, which
|
|
32
|
+
- Accessibility, keyboard interaction, state coverage, forms, and rendered copy, which `ui-craft` owns
|
|
33
|
+
- The focus ring's floors, which `ui-craft` owns, though its weight is this skill's
|
|
33
34
|
- The candidate loop and the pick, which `pick-by-eye` owns
|
|
34
35
|
- The shape of the project's design document, which `design-record`'s design reference governs
|
|
35
36
|
- Prose on the surface being designed, which `write-human` and `markdown-craft` own
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: design-taste
|
|
3
|
-
description: Carries the layer model that decides which design decision settles first, the rules that keep a surface coherent across sections, and the catalog of defaults a model reaches for when nothing states a direction. Use when drafting or judging an interface, a page, or any rendered surface, when output reads generic or templated, when redesigning something that already exists, or when asked to "make this look designed", "why does this look like AI made it", "give it taste", "what layer is this decision at", or "grey-box this first". Do NOT use for accessibility, forms, or state coverage, which
|
|
3
|
+
description: Carries the layer model that decides which design decision settles first, the rules that keep a surface coherent across sections, and the catalog of defaults a model reaches for when nothing states a direction. Use when drafting or judging an interface, a page, or any rendered surface, when output reads generic or templated, when redesigning something that already exists, or when asked to "make this look designed", "why does this look like AI made it", "give it taste", "what layer is this decision at", or "grey-box this first". Do NOT use for accessibility, forms, or state coverage, which `ui-craft` carries, for the shape of the project's design document, which `design.md` governs, or to run the candidate loop, which is `pick-by-eye`.
|
|
4
4
|
metadata:
|
|
5
5
|
family: build
|
|
6
6
|
---
|
|
@@ -58,7 +58,7 @@ A lower layer constrains every layer above it. Two consequences follow in opposi
|
|
|
58
58
|
- Settling a higher layer over a broken lower one changes nothing, which is why a palette round against a broken composition is wasted
|
|
59
59
|
- Judging a lower layer through a finished higher one is nearly impossible, which is why grey-boxing works
|
|
60
60
|
|
|
61
|
-
The model is Jesse James Garrett's five planes from
|
|
61
|
+
The model is Jesse James Garrett's five planes from [The Elements of User Experience](http://www.jjg.net/elements/) (2000), subdivided to the granularity a drafting round works at.
|
|
62
62
|
|
|
63
63
|
| Order | Layer | The question it answers |
|
|
64
64
|
| ----- | ----------- | -------------------------------------------------------------------------- |
|
|
@@ -101,6 +101,7 @@ Coherence is a property of the whole and every one of these is broken one sectio
|
|
|
101
101
|
- **One theme.** No inverted section dropped between its neighbors. A reader must not feel they walked into a different product mid-scroll.
|
|
102
102
|
- **One copy register.** Technical, editorial and promotional voices do not mix in one composition unless the brand states that they do.
|
|
103
103
|
- **One light source.** Every shadow on the surface falls the same way, and a shadow is tinted toward the ground rather than pure black.
|
|
104
|
+
- **One focus ring weight.** Chosen once and drawn the same on every control. The `ui-craft` skill owns its visibility, contrast, and floor, and this lock sets the weight above them.
|
|
104
105
|
|
|
105
106
|
## Working on something that already exists
|
|
106
107
|
|
|
@@ -148,9 +149,9 @@ Run `${CLAUDE_SKILL_DIR}/references/preflight.md` against the output. It is the
|
|
|
148
149
|
|
|
149
150
|
## What this delegates
|
|
150
151
|
|
|
151
|
-
- Focus, keyboard, ARIA, alt text, and every accessibility floor: the `ui`
|
|
152
|
-
- States, empty and loading coverage, destructive confirmation, truncation: the same
|
|
153
|
-
- Rendered copy casing, button labels, error message shape: the same
|
|
152
|
+
- Focus, keyboard, ARIA, alt text, and every accessibility floor: the `ui-craft` skill, which the same pointer rule loads beside this one and is the single source
|
|
153
|
+
- States, empty and loading coverage, destructive confirmation, truncation: the same skill
|
|
154
|
+
- Rendered copy casing, button labels, error message shape: the same skill
|
|
154
155
|
|
|
155
156
|
### Other skills
|
|
156
157
|
|
|
@@ -1,17 +1,63 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Adopted and declined
|
|
3
|
-
description:
|
|
3
|
+
description: Where each design-taste rule comes from, being a quoted authority, the community catalog of model-output tells, or a house threshold, where the per-bullet rows for the body and the rule references sit, and what was declined and why
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Adopted and declined
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Every rule in this skill traces to one of three origins. A reader arguing against a rule finds its origin through this record, and a session extending the skill adds a row rather than re-deriving one.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
- **An authority.** A typographer, a usability lab, a platform guideline, or the CSS reference states the rule, and the row quotes the passage relied on.
|
|
11
|
+
- **The catalog.** Community prompt skills recorded what models draw when nothing states a direction. A tell from them is an observation of model output, not established practice.
|
|
12
|
+
- **A house choice.** The toolkit chose the threshold so a tell can be counted, and no source stands behind the number.
|
|
11
13
|
|
|
12
|
-
|
|
14
|
+
A rule a quoted passage only partly backs names the part it backs, and the rest sits in the catalog or the house class.
|
|
13
15
|
|
|
14
|
-
|
|
16
|
+
## Contents
|
|
17
|
+
|
|
18
|
+
- [Where the rows sit](#where-the-rows-sit)
|
|
19
|
+
- [The layer model](#the-layer-model)
|
|
20
|
+
- [The catalog](#the-catalog)
|
|
21
|
+
- [Declined from the catalogs](#declined-from-the-catalogs)
|
|
22
|
+
- [Declined from the systems reference](#declined-from-the-systems-reference)
|
|
23
|
+
- [Carried as a caution](#carried-as-a-caution)
|
|
24
|
+
|
|
25
|
+
## Where the rows sit
|
|
26
|
+
|
|
27
|
+
Each bullet in the skill body's concern groups and in `craft.md`, `kinds.md`, `systems.md`, and `tells.md` has its own source row in a ledger outside the plugin, one ledger per file and one row per bullet under the H2 the bullet sits under.
|
|
28
|
+
|
|
29
|
+
- The toolkit's skill audit fails a ledgered file whose bullets and rows disagree in count under any heading, and a target never carries the rows
|
|
30
|
+
- The body's `## What this delegates` takes no rows, since it routes rather than directs
|
|
31
|
+
- `preflight.md` takes no ledger, since its boxes restate the rules the four ledgered references source
|
|
32
|
+
- `vocabulary.md` takes none either, since it defines terms rather than directing
|
|
33
|
+
- This record keeps the layer model behind the body's order, and what was read and declined
|
|
34
|
+
|
|
35
|
+
## The layer model
|
|
36
|
+
|
|
37
|
+
The body's layer order subdivides the five planes of Jesse James Garrett's [The Elements of User Experience](http://www.jjg.net/elements/). Its second chapter states the dependency the order rests on, that "Each plane is dependent on the planes below it."
|
|
38
|
+
|
|
39
|
+
The same passage gives the constraint running the other way, that "the choices available to us on each plane are constrained by the decisions we make about issues on the planes below it". The nine layers and the grey-box stage are the skill's own subdivision of those planes.
|
|
40
|
+
|
|
41
|
+
## The catalog
|
|
42
|
+
|
|
43
|
+
Most tells in `tells.md`, and the ten defaults in the body, came from community prompt skills that recorded what models draw unguided. None of them is a design authority. Each tell is an observation of model output, falsifiable against a render, rather than established practice.
|
|
44
|
+
|
|
45
|
+
- **[Taste-Skill](https://github.com/leonxlnx/taste-skill)** and its fork **[claude-taste-skill](https://github.com/nxpatterns/claude-taste-skill)** supplied the composition, content, surface, and motion tells
|
|
46
|
+
- **[UI/UX Pro Max](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill)** was first read through a vendor listing and later from its repository. Its ranking puts accessibility first, and its lookup corpus was declined.
|
|
47
|
+
- **[frontend-design](https://github.com/anthropics/skills/tree/main/skills/frontend-design)**, Anthropic's skill, supplied the five clusters current AI design falls into, restated in `tells.md`
|
|
48
|
+
- **[Impeccable](https://github.com/pbakaus/impeccable)** supplied what a visual direction may lend an application screen and the category self-check, restated in `kinds.md`. Its themed browser surfaces lie behind the platform control tell.
|
|
49
|
+
|
|
50
|
+
No sentence from any of them is copied. Each idea is restated and cited in the ledger row for its bullet.
|
|
51
|
+
|
|
52
|
+
Most Taste-Skill tells came from its v2 experimental skill, which its author later moved to [taste-skill-classics](https://github.com/Leonxlnx/taste-skill-classics), and the rows link it there.
|
|
53
|
+
|
|
54
|
+
### Adopted with no change
|
|
55
|
+
|
|
56
|
+
The three equal cards, the centered hero over a wash, enumerated eyebrows, scroll cues, decorative status dots, atmospheric strips, the fake screenshot built from boxes, filler verbs, and placeholder that reads as placeholder. Each names a shape, each carries a replacement, and none depends on a stack.
|
|
57
|
+
|
|
58
|
+
### Adopted with the stack removed
|
|
59
|
+
|
|
60
|
+
Source items naming an icon set, a component library, a font by name, or an animation package were rewritten to state what the rule is about. "Do not use Inter" became one family doing every job, since the defensible claim is about pairing and role separation rather than about one typeface.
|
|
15
61
|
|
|
16
62
|
## Declined from the catalogs
|
|
17
63
|
|
|
@@ -21,7 +67,7 @@ Each item below is real advice placed in the wrong surface, or a rule that decid
|
|
|
21
67
|
|
|
22
68
|
**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.
|
|
23
69
|
|
|
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
|
|
70
|
+
**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, which decides nothing and leaves no trace a later reader could check. The declared read carries the same information in a sentence somebody can argue with.
|
|
25
71
|
|
|
26
72
|
### Rules owned elsewhere
|
|
27
73
|
|
|
@@ -29,17 +75,19 @@ Each item below is real advice placed in the wrong surface, or a rule that decid
|
|
|
29
75
|
|
|
30
76
|
**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.
|
|
31
77
|
|
|
32
|
-
### Scope
|
|
78
|
+
### Scope and tooling
|
|
33
79
|
|
|
34
80
|
**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.
|
|
35
81
|
|
|
82
|
+
**A design detector hook.** Impeccable runs one after UI edits. A detector belongs beside an automated review probe once the tells are grounded, not inside a skill that carries guidance.
|
|
83
|
+
|
|
36
84
|
## Declined from the systems reference
|
|
37
85
|
|
|
38
86
|
Each failed the test in `REQUIREMENT.md`. Recorded so they are not argued again.
|
|
39
87
|
|
|
40
88
|
- **Control sizing and proportion.** An unguided model produces reasonable controls without instruction, so it fails the first question.
|
|
41
89
|
- **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.
|
|
42
|
-
- **Named palettes or banned hues.** A value ban, which belongs to the project's design document.
|
|
90
|
+
- **Named palettes or banned hues.** A value ban, which belongs to the project's design document. Every external catalog of this kind ends up here, which is why theirs cannot be imported.
|
|
43
91
|
- **A minimum contrast figure.** A threshold with a number, which the accessibility rules own.
|
|
44
92
|
- **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.
|
|
45
93
|
|
|
@@ -39,7 +39,7 @@ Reaching for size is the first instinct and the weakest tool.
|
|
|
39
39
|
- **Measure.** Body text running the full width of a wide container is unreadable however good the type is.
|
|
40
40
|
- **Figures in columns.** Numbers that change, in a table, a price or a timer, need tabular figures or the column jitters.
|
|
41
41
|
- **Tracking by size.** Large type wants tighter letter spacing, small uppercase labels want looser. Body text wants whatever the face was drawn with.
|
|
42
|
-
- **Casing.** Sentence case for headings and labels. `
|
|
42
|
+
- **Casing.** Sentence case for headings and labels. The `ui-craft` copy reference states the rule and its exceptions.
|
|
43
43
|
|
|
44
44
|
## Depth and texture
|
|
45
45
|
|
|
@@ -26,12 +26,18 @@ Dashboards, tools, admin surfaces, agentic and assistant interfaces. The reader
|
|
|
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
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`
|
|
29
|
+
- **Whether each state exists** is the `ui-craft` skill's question, not this file's.
|
|
30
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.
|
|
31
31
|
- **Chrome is persistent and quiet.** Navigation, status and context stay put and stay recessive, since they are read constantly and looked at rarely.
|
|
32
32
|
- **Motion is feedback, not entrance.** A thing moving should be reporting that something changed.
|
|
33
|
+
- **The visual direction lends four things.** Type, palette, density, and one signature move. Layout, the navigation model, and the controls stay the category's own.
|
|
34
|
+
- **A borrowed interface lends the same four.** A direction taken from a terminal or an instrument panel gives only what transfers, and the working screen never dresses up as its source.
|
|
35
|
+
- **Check each render against its category.** Cover the product name and ask whether the screen reads as a tool of its kind and whether the task can be done from it.
|
|
36
|
+
- **A command shows its shortcut.** A menu row carries the keys at its right edge and a tooltip names them beside the command, in the platform's own spelling.
|
|
33
37
|
- **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.
|
|
34
38
|
|
|
39
|
+
The direction limits and the category check restate [Impeccable](https://github.com/pbakaus/impeccable)'s guidance for app screens. The shortcut placement follows [NN/g](https://www.nngroup.com/articles/ui-copy/).
|
|
40
|
+
|
|
35
41
|
## Content and long-form
|
|
36
42
|
|
|
37
43
|
Documentation, articles, reference pages, learning material. The reader arrived to read and will stay if reading is comfortable.
|
|
@@ -46,7 +52,7 @@ Documentation, articles, reference pages, learning material. The reader arrived
|
|
|
46
52
|
|
|
47
53
|
## Kinds this file does not cover
|
|
48
54
|
|
|
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`
|
|
55
|
+
- **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-craft` skill.
|
|
50
56
|
- **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
57
|
|
|
52
58
|
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.
|
|
@@ -32,7 +32,7 @@ Each box here is a count from `tells.md`.
|
|
|
32
32
|
|
|
33
33
|
- [ ] No layout family used twice. Eight sections carry at least four families
|
|
34
34
|
- [ ] No three consecutive sections sharing the image-and-text split
|
|
35
|
-
- [ ] Small uppercase labels above headings number no more than one per three sections, per `
|
|
35
|
+
- [ ] Small uppercase labels above headings number no more than one per three sections, per the `ui-craft` copy reference
|
|
36
36
|
- [ ] At most one horizontal marquee
|
|
37
37
|
|
|
38
38
|
### Content and first screen
|
|
@@ -90,7 +90,7 @@ The detail boxes come from `craft.md`.
|
|
|
90
90
|
Every word on the surface states what is true of it.
|
|
91
91
|
|
|
92
92
|
- [ ] No filler verbs
|
|
93
|
-
- [ ] Sentence case throughout, with exceptions per `
|
|
93
|
+
- [ ] Sentence case throughout, with exceptions per the `ui-craft` copy reference
|
|
94
94
|
- [ ] Every claim about what the product does is a thing it does
|
|
95
95
|
|
|
96
96
|
## Motion
|
|
@@ -102,4 +102,4 @@ Every word on the surface states what is true of it.
|
|
|
102
102
|
## Handover
|
|
103
103
|
|
|
104
104
|
- [ ] The weakest thing on the surface is named out loud, per `pick-by-eye` Step 3, and fixed where naming it would embarrass the work
|
|
105
|
-
- [ ] The floor the `ui`
|
|
105
|
+
- [ ] The floor the `ui-craft` skill carries has been applied, not assumed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Machine tells in design
|
|
3
|
-
description: The visual defaults a model reaches for when nothing states a direction, each with what to do instead, plus the countable composition limits and the first-screen budget
|
|
3
|
+
description: The looks current AI design clusters in and the visual defaults a model reaches for when nothing states a direction, each with what to do instead, plus the countable composition limits and the first-screen budget
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Machine tells in design
|
|
@@ -9,6 +9,20 @@ Each item below is a shape rather than a value, which is why no ban list of colo
|
|
|
9
9
|
|
|
10
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.
|
|
11
11
|
|
|
12
|
+
## Where current AI design clusters
|
|
13
|
+
|
|
14
|
+
Unguided output does not spread evenly. It lands in a handful of looks, and following every other rule in this catalog does not keep a page out of them.
|
|
15
|
+
|
|
16
|
+
- **The warm paper page.** A cream ground near `#F4F1EA` under a serif display set at strong contrast, accented in clay or terracotta.
|
|
17
|
+
- **Black with one loud accent.** A near-black ground lit by a single acid green or vermilion.
|
|
18
|
+
- **The newspaper imitation.** Hairline rules, square corners, and tight columns borrowed from print.
|
|
19
|
+
- **The card kit.** Every block in a matching rounded box under the same faint grey shadow, with gradient washes for decoration.
|
|
20
|
+
- **Template chrome.** A tracked uppercase label over each heading, meta joined by middle dots, monospace for small data, an arrow on link text, and off-black for black.
|
|
21
|
+
|
|
22
|
+
A page drafted under this skill landed on the first look at exactly that cream, which is why the list sits apart from the shapes below. Each look suits a brief that names it. Where the brief leaves an axis open, choose something else on purpose.
|
|
23
|
+
|
|
24
|
+
The five restate the calibration list in Anthropic's [frontend-design](https://github.com/anthropics/skills/tree/main/skills/frontend-design) skill.
|
|
25
|
+
|
|
12
26
|
## Composition
|
|
13
27
|
|
|
14
28
|
- **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.
|
|
@@ -39,6 +53,13 @@ The skill body carries the ten most common of these, and this is the same catalo
|
|
|
39
53
|
- **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.
|
|
40
54
|
- **Uniform radius and uniform elevation.** Every card at the same radius with the same shadow flattens hierarchy. Let the thing that matters differ.
|
|
41
55
|
|
|
56
|
+
## Platform surfaces
|
|
57
|
+
|
|
58
|
+
The browser and the operating system draw some parts of every page, and a themed surface leaves them at their defaults unless someone decides otherwise.
|
|
59
|
+
|
|
60
|
+
- **An unstyled platform control.** A dark surface whose scrollbars, selects, or checkboxes still wear the light defaults. Declare the page's color scheme and take the accent from the palette.
|
|
61
|
+
- **A transparent color with no checkerboard.** An alpha swatch over a flat ground, where a faint red and a solid pink look alike. Draw it over a checkerboard, the way image editors do.
|
|
62
|
+
|
|
42
63
|
## Typography
|
|
43
64
|
|
|
44
65
|
- **Scale as the only hierarchy.** An enormous heading over uniform body text. Weight, color, spacing and measure carry hierarchy at lower cost.
|
|
@@ -52,15 +73,15 @@ The skill body carries the ten most common of these, and this is the same catalo
|
|
|
52
73
|
- **The permanent loop.** Anything animating forever with no input. It costs attention on every frame and earns none back.
|
|
53
74
|
- **Motion on arrival for everything.** Every section fading up on scroll. Reserve entrance motion for what genuinely needs the eye.
|
|
54
75
|
- **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`
|
|
76
|
+
- **Motion that ignores a reduced-motion preference.** A correctness failure the `ui-craft` skill owns, not a taste one. It sits here so a motion pass does not read this catalog as all motion owes.
|
|
56
77
|
|
|
57
78
|
## The countable limits
|
|
58
79
|
|
|
59
|
-
These rules carry numbers, so they are checked by counting rather than by judging.
|
|
80
|
+
These rules carry numbers, so they are checked by counting rather than by judging. Each number is a house choice made so the tell can be counted, and its source row records it as one.
|
|
60
81
|
|
|
61
82
|
- **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.
|
|
62
83
|
- **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,
|
|
84
|
+
- **One small uppercase label per three sections.** The most over-reached default in model output, counted in `ui-craft`. Usually delete it, since position already says what a section is.
|
|
64
85
|
- **One marquee.** Two sliding strips on one surface read as filler rather than as a device.
|
|
65
86
|
- **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.
|
|
66
87
|
- **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.
|
|
@@ -75,4 +96,4 @@ These rules carry numbers, so they are checked by counting rather than by judgin
|
|
|
75
96
|
|
|
76
97
|
## Adopted, declined, and why
|
|
77
98
|
|
|
78
|
-
The record of which
|
|
99
|
+
Most items here are observations of what models draw unguided, gathered from community prompt skills rather than from a design authority. The record of which catalogs were read, which items were declined, and why sits in `adopted.md` beside this file, and it says where each item's own source row sits.
|
|
@@ -16,7 +16,7 @@ Length, placement, and staleness answer to different evidence, and one list hand
|
|
|
16
16
|
- Report per document across the length, placement, and staleness axes, marking each finding with its evidence class, read through the verb owning each measurement and its record's checkpoints
|
|
17
17
|
- Propose a split or an owner as a structure line for each overgrown entry and doubled or unnamed coverage finding, with the headings and the reason
|
|
18
18
|
- Ship the staleness axis as a reading rather than cutting it for lacking a verb
|
|
19
|
-
- Report a refusal, an absent key, or a missing subcommand as an unread axis naming the cause
|
|
19
|
+
- Report a refusal, an absent key, or a missing subcommand as an unread axis naming the cause
|
|
20
20
|
- Run standalone, reading the requirements record for drift with its reminder, and the design record through `canon design audit --json` and its review reminder, routing findings to `design-record`
|
|
21
21
|
|
|
22
22
|
## Must not
|
|
@@ -34,16 +34,7 @@ canon markdown audit --json
|
|
|
34
34
|
canon context audit --json
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
The first answers length, carrying the bullet, paragraph, and depth checkpoints and the per-file weights read against them. The second answers placement for the folders it resolves, carrying entry length, reference form, and index drift.
|
|
38
|
-
|
|
39
|
-
Then read which classifier would run, and deepen placement with the verdicts per section:
|
|
40
|
-
|
|
41
|
-
```bash
|
|
42
|
-
canon context classifier show
|
|
43
|
-
canon context classify sweep --json
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
The first names the backend, the model, and the source that decided both. Report which layer answered, since a project with the model layer off reads from the regex layer alone and the sweep says nothing about which one it used.
|
|
37
|
+
The first answers length, carrying the bullet, paragraph, and depth checkpoints and the per-file weights read against them. The second answers placement for the folders it resolves, carrying entry length, reference form, and index drift. Placement reads `shapeFindings`, `extraSections`, and each entry's `provenance`, all `measured`.
|
|
47
38
|
|
|
48
39
|
Take the checkpoints from the record each verb returns rather than from a number written here. A checkpoint the CLI moves reaches this report with no edit, and a number held in this body goes stale on its own cadence.
|
|
49
40
|
|
|
@@ -58,7 +49,6 @@ Emit the line only for a folder with an entry past the line checkpoint whose Lay
|
|
|
58
49
|
A refusal, an absent key, and a subcommand the project's binary does not carry each leave an axis unread. Report it as unread against the documents it would have covered, name the read that could not be taken, and name the cause.
|
|
59
50
|
|
|
60
51
|
- `canon context audit` refuses with `reason: "no-folders"` where the layout is not the expected one. Reading that honest refusal as an empty finding set reports a healthy corpus nothing looked at.
|
|
61
|
-
- A narrower read is not an unread one. The sweep running on its regex layer alone still answered, so report it with the layer named.
|
|
62
52
|
|
|
63
53
|
### The design record
|
|
64
54
|
|
|
@@ -92,10 +82,9 @@ Nothing triggers this review but a request. A finished review hands the rewrite
|
|
|
92
82
|
|
|
93
83
|
Give each document its three axes, and give each axis three things: the state, the evidence class, and the command or skill that repairs it. Naming the repair is not running it. A length finding names `document-repair`, which rewrites a folder to zero and gates it.
|
|
94
84
|
|
|
95
|
-
The
|
|
85
|
+
The two classes are what keep the axes apart:
|
|
96
86
|
|
|
97
87
|
- `measured`: a verb returned a number read against a stated checkpoint
|
|
98
|
-
- `classified`: a verb returned a verdict carrying its own confidence
|
|
99
88
|
- `read`: this session's judgment, backed by no verb
|
|
100
89
|
|
|
101
90
|
Emit no verdict across the three. Two answer from verbs and one answers from a reading, so a roll-up is a figure that lies about the third. Emit no score across the documents either, for the same reason one level up.
|
|
@@ -131,7 +120,7 @@ Structure `canon/context/surfaces/`: `cli.md` (300 lines) splits into `cli.md` t
|
|
|
131
120
|
|
|
132
121
|
The line is a proposal for the operator, with the headings each entry takes and why. Health applies nothing, and `document-repair` offers the proposal before it rewrites.
|
|
133
122
|
|
|
134
|
-
Keep the evidence line under the table on every run. A table read without it flattens a judgment into a measurement, which is the one shape the
|
|
123
|
+
Keep the evidence line under the table on every run. A table read without it flattens a judgment into a measurement, which is the one shape the two classes exist to prevent.
|
|
135
124
|
|
|
136
125
|
### The design record row
|
|
137
126
|
|
|
@@ -35,24 +35,25 @@ Weight is a judgment a reader settles rather than a defect, as the verb states f
|
|
|
35
35
|
|
|
36
36
|
## Placement
|
|
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
|
-
|
|
|
42
|
-
| Evidence class | `measured`
|
|
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
|
+
| Verb | `canon context audit --json` |
|
|
42
|
+
| Evidence class | `measured` |
|
|
43
43
|
|
|
44
44
|
The audit answers required sections, entry length, citation resolution, reference form, catalog tables, provenance, and index drift. Required sections reach context entries.
|
|
45
45
|
|
|
46
46
|
- A citation resolving to nothing is a fact and gates
|
|
47
47
|
- Entry length, reference form, table shape, and provenance are judgments under every flag
|
|
48
48
|
|
|
49
|
-
### The
|
|
49
|
+
### The audit's placement arrays
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
Three parts of the audit record name content sitting outside the shape its folder allows. Each is a count or a list the verb returned, so every placement finding is `measured`.
|
|
52
52
|
|
|
53
|
-
-
|
|
54
|
-
-
|
|
55
|
-
-
|
|
53
|
+
- `shapeFindings`: an entry whose sections break the shape its folder holds, such as a Decisions section or a sixth gotcha
|
|
54
|
+
- `extraSections`: an H2 outside the closed set the folder allows
|
|
55
|
+
- `entries[].provenance`: an entry narrating how it came to be, which is history rather than a description of the tree
|
|
56
|
+
- **Routes to:** the document that owns the passage. The record names no owner, so the project's own content-ownership rules decide the destination.
|
|
56
57
|
|
|
57
58
|
### The structure line
|
|
58
59
|
|
|
@@ -66,12 +67,9 @@ The audit record's `length` array lists each entry past the line checkpoint, and
|
|
|
66
67
|
|
|
67
68
|
A proposal names headings and a reason, so an operator judges a concrete split. A split nobody can act on names none of those.
|
|
68
69
|
|
|
69
|
-
### When
|
|
70
|
+
### When the verb resolves nothing
|
|
70
71
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
- The audit refuses with `reason: "no-folders"`, naming the folders it looked for. Report that refusal as an unread axis.
|
|
74
|
-
- 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
|
|
72
|
+
The audit resolves its folders by surface root rather than by a path written into it, so a project laid out differently resolves nothing. It then refuses with `reason: "no-folders"`, naming the folders it looked for. Report that refusal as an unread axis.
|
|
75
73
|
|
|
76
74
|
## The design record
|
|
77
75
|
|
|
@@ -139,7 +137,7 @@ A reading is the weakest evidence in the report and the most consequential findi
|
|
|
139
137
|
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.
|
|
140
138
|
|
|
141
139
|
- A length finding is a number against a checkpoint
|
|
142
|
-
- A placement finding is a
|
|
140
|
+
- A placement finding is a count or a list the audit returned
|
|
143
141
|
- A staleness finding is a judgment with nothing behind it
|
|
144
142
|
|
|
145
143
|
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.
|