@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.
Files changed (101) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/claude/.claude-plugin/plugin.json +1 -1
  3. package/claude/skills/api-design/references/adopted.md +1 -1
  4. package/claude/skills/context-fold/REQUIREMENT.md +2 -3
  5. package/claude/skills/context-fold/SKILL.md +1 -11
  6. package/claude/skills/context-fold/references/completion-report.md +8 -9
  7. package/claude/skills/create-skill/references/skill-practice.md +17 -1
  8. package/claude/skills/design-record/references/design.md +1 -1
  9. package/claude/skills/design-taste/REQUIREMENT.md +2 -1
  10. package/claude/skills/design-taste/SKILL.md +6 -5
  11. package/claude/skills/design-taste/references/adopted.md +56 -8
  12. package/claude/skills/design-taste/references/craft.md +1 -1
  13. package/claude/skills/design-taste/references/kinds.md +8 -2
  14. package/claude/skills/design-taste/references/preflight.md +3 -3
  15. package/claude/skills/design-taste/references/tells.md +26 -5
  16. package/claude/skills/document-health/REQUIREMENT.md +1 -1
  17. package/claude/skills/document-health/SKILL.md +3 -14
  18. package/claude/skills/document-health/references/axes.md +14 -16
  19. package/claude/skills/plan-feature/SKILL.md +2 -2
  20. package/claude/skills/plan-feature/references/plan.md +24 -3
  21. package/claude/skills/review-craft/SKILL.md +1 -1
  22. package/claude/skills/role-worker/SKILL.md +2 -1
  23. package/claude/skills/ui-checklist/SKILL.md +1 -1
  24. package/claude/skills/ui-craft/REQUIREMENT.md +29 -0
  25. package/claude/skills/ui-craft/SKILL.md +44 -0
  26. package/{governance/rules/ui → claude/skills/ui-craft/references}/a11y.md +0 -10
  27. package/claude/skills/ui-craft/references/adopted.md +27 -0
  28. package/{governance/rules/ui/surface-capture.md → claude/skills/ui-craft/references/capture.md} +0 -10
  29. package/{governance/rules/ui/ux-controls.md → claude/skills/ui-craft/references/controls.md} +3 -10
  30. package/claude/skills/ui-craft/references/copy.md +45 -0
  31. package/{governance/rules/ui → claude/skills/ui-craft/references}/forms.md +0 -9
  32. package/{governance/rules/ui → claude/skills/ui-craft/references}/keyboard.md +0 -10
  33. package/{governance/rules/ui → claude/skills/ui-craft/references}/motion.md +0 -10
  34. package/{governance/rules/ui → claude/skills/ui-craft/references}/pointer.md +0 -10
  35. package/{governance/rules/ui/ux-completeness.md → claude/skills/ui-craft/references/states.md} +0 -10
  36. package/claude/skills/ux-audit/SKILL.md +1 -1
  37. package/claude/skills/write-human/references/adopted.md +4 -1
  38. package/docs/agents/audits.md +2 -6
  39. package/docs/agents/context-audit.md +1 -1
  40. package/docs/agents/install-and-sync.md +2 -2
  41. package/docs/target/migrations.md +3 -3
  42. package/docs/target/sync.md +3 -2
  43. package/docs/workflow/skill-map.md +1 -0
  44. package/docs/workflow/visual-design-workflow.md +2 -2
  45. package/governance/detect.toml +1 -45
  46. package/governance/ledger/lib/test-scope.md +1 -1
  47. package/governance/ledger/skills/api-design/SKILL.md +62 -0
  48. package/governance/ledger/skills/code-craft/SKILL.md +53 -0
  49. package/governance/ledger/skills/deprecation-migration/SKILL.md +68 -0
  50. package/governance/ledger/skills/design-taste/SKILL.md +64 -0
  51. package/governance/ledger/skills/design-taste/craft.md +66 -0
  52. package/governance/ledger/skills/design-taste/kinds.md +58 -0
  53. package/governance/ledger/skills/design-taste/systems.md +42 -0
  54. package/governance/ledger/skills/design-taste/tells.md +103 -0
  55. package/governance/ledger/{ui → skills/ui-craft}/a11y.md +3 -3
  56. package/governance/ledger/{ui/surface-capture.md → skills/ui-craft/capture.md} +3 -3
  57. package/governance/ledger/{ui/ux-controls.md → skills/ui-craft/controls.md} +12 -7
  58. package/governance/ledger/skills/ui-craft/copy.md +102 -0
  59. package/governance/ledger/{ui → skills/ui-craft}/forms.md +3 -3
  60. package/governance/ledger/{ui → skills/ui-craft}/keyboard.md +3 -3
  61. package/governance/ledger/{ui → skills/ui-craft}/motion.md +3 -3
  62. package/governance/ledger/{ui → skills/ui-craft}/pointer.md +3 -3
  63. package/governance/ledger/{ui/ux-completeness.md → skills/ui-craft/states.md} +3 -3
  64. package/governance/ledger/ui/craft.md +19 -0
  65. package/governance/renames.toml +17 -3
  66. package/governance/rules/lib/test-scope.md +1 -1
  67. package/governance/rules/ui/craft.md +22 -0
  68. package/governance/splits.toml +0 -2
  69. package/package.json +1 -1
  70. package/src/audits/catalog.ts +0 -52
  71. package/src/claude/cases/misc.ts +5 -0
  72. package/src/claude/skills-audit.ts +226 -12
  73. package/src/cli/retired.ts +8 -0
  74. package/src/commands/claude.ts +15 -1
  75. package/src/commands/context.ts +0 -425
  76. package/src/commands/tooling.ts +4 -1
  77. package/src/context/citations.ts +9 -3
  78. package/src/gate/measures.ts +4 -3
  79. package/src/git/files.ts +8 -3
  80. package/src/gov/audit.ts +6 -1
  81. package/src/inventory/subjects.ts +1 -1
  82. package/src/markdown/gated.ts +1 -1
  83. package/src/markdown/scope.ts +0 -1
  84. package/src/tooling/package.ts +22 -13
  85. package/tooling/web/reference.md +3 -1
  86. package/claude/skills/context-fold/references/classify.md +0 -87
  87. package/governance/ledger/ui/copy.md +0 -49
  88. package/governance/ledger/ui/design-taste.md +0 -19
  89. package/governance/ledger/ui/interface-casing.md +0 -47
  90. package/governance/ledger/ui/link-behavior.md +0 -29
  91. package/governance/rules/ui/copy.md +0 -28
  92. package/governance/rules/ui/design-taste.md +0 -18
  93. package/governance/rules/ui/interface-casing.md +0 -29
  94. package/governance/rules/ui/link-behavior.md +0 -19
  95. package/src/context/classify/extract.ts +0 -443
  96. package/src/context/classify/ollama.ts +0 -172
  97. package/src/context/classify/patterns.ts +0 -75
  98. package/src/context/classify/prompts.ts +0 -74
  99. package/src/context/classify/run.ts +0 -348
  100. package/src/context/classify/settings.ts +0 -196
  101. /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
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "canon",
3
3
  "description": "Runs your agent's work and keeps its code good, on one setup for every repo.",
4
- "version": "5.62.0",
4
+ "version": "5.64.0",
5
5
  "author": {
6
6
  "name": "Eric Le",
7
7
  "url": "https://github.com/erclx"
@@ -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. 21](https://abseil.io/resources/swe-book/html/ch21.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.
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` and `canon context classify diff` over the fold's whole baseline, reporting findings on files this run wrote or the diff carries
20
- - Apply a `REPLACE` or `HISTORY` finding against its quote, report a `MOVE` with its surface rather than cutting it, and continue the fold when a check cannot run
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, the markdown audit, and the content classifier, and answer each before the report. Findings never stop the fold.
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 and classify lines, and the closing line with when it is suppressed
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 | 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
- | Step 4's classify half applied or reported a finding | The exact shape `${CLAUDE_SKILL_DIR}/references/classify.md` gives under its Report section |
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 and classify lines here or in the reply, since the quote and the reason are what a reader checks the finding against.
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` and the source ledger at `skills/<name>/references/adopted.md` beside it.
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. The surface-capture rule reads breakpoints here, so a project declaring none is captured at the 320 reflow floor alone.
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 the `a11y`, `keyboard`, `ux-completeness`, `forms`, and `copy` rules own
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 the `ui` governance rules carry, for the shape of the project's design document, which `design.md` governs, or to run the candidate loop, which is `pick-by-eye`.
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 _The Elements of User Experience_ (2000), subdivided to the granularity a drafting round works at.
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` governance rules, which fire on the same paths this skill does and are the single source
152
- - States, empty and loading coverage, destructive confirmation, truncation: the same rules
153
- - Rendered copy casing, button labels, error message shape: the same rules
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: Which external design catalogs this skill adopted from, which items it declined, and why, so a later session extends the position instead of re-deriving it
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
- External catalogs were read and filtered rather than imported. This file is the record, and a later session extends it rather than re-deriving it.
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
- ## Adopted
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
- **Adopted with no change.** The three equal cards, the centered hero over a wash, enumerated eyebrows, scroll cues, decorative status dots, atmospheric strips, the fake screenshot built from boxes, filler verbs, and placeholder that reads as placeholder. Each names a shape, each carries a replacement, and none depends on a stack.
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
- **Adopted with the stack removed.** Source items naming an icon set, a component library, a font by name, or an animation package were rewritten to state what the rule is about. "Do not use Inter" became one family doing every job, since the defensible claim is about pairing and role separation rather than about one typeface.
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. 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.
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. This is where every external catalog of this kind ends up, and it is why theirs cannot be imported.
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. `interface-casing` states the rule and its exceptions.
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` rules' question, not this file's.
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` governance rules.
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 `interface-casing`
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 `interface-casing`
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` governance rules carry has been applied, not assumed
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` governance rules own, not a taste one. It sits here so a motion pass does not read this catalog as all motion owes.
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. Every one came out of production testing by people shipping model-drafted pages.
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, with the count in `interface-casing`. Usually delete it, since position already says what a section is.
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 external catalog items were adopted, which declined, and why sits in `adopted.md` beside this file.
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, and say which layer answered the classifier sweep
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 three classes are what keep the axes apart:
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 three classes exist to prevent.
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
- | 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
+ | 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 sweep's verdicts
49
+ ### The audit's placement arrays
50
50
 
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.
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
- - 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.
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 a verb resolves nothing
70
+ ### When the verb resolves nothing
70
71
 
71
- 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.
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 verdict carrying a confidence
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.