@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
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: API design skill ledger
|
|
3
|
+
description: Sources for claude/skills/api-design/SKILL.md, one row per bullet in its concern groups
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# API design skill ledger
|
|
7
|
+
|
|
8
|
+
The field is interface design across functions, flags, file formats, and endpoints. Google's API Improvement Proposals and its engineering book carry compatibility, the IETF carries the error and deprecation formats, and Stripe's own docs carry idempotency. The closing sections and `## What this delegates` restate these rules or route, so they take no table.
|
|
9
|
+
|
|
10
|
+
## Decide what a caller can observe
|
|
11
|
+
|
|
12
|
+
| Bullet | Source | Read |
|
|
13
|
+
| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- |
|
|
14
|
+
| A shape built for the caller | [agent-skills, API and interface design](https://github.com/addyosmani/agent-skills/blob/2686b620fc1fed2e8f60c704839c766b8594c6b6/skills/api-and-interface-design/SKILL.md): "Don't leak implementation details. If users can observe it, they will depend on it." | 2026-10-24 |
|
|
15
|
+
| Ordering, timing, and error text count | [Software Engineering at Google, ch. 1](https://abseil.io/resources/swe-book/html/ch01.html): "all observable behaviors of your system will be depended on by somebody", worked through hash iteration ordering | 2026-10-24 |
|
|
16
|
+
| As small as the first caller needs | [AIP-180](https://google.aip.dev/180): new components "may be added to existing APIs in the same major version", while "Removing a component is a backwards incompatible change" | 2026-10-24 |
|
|
17
|
+
| One name for one concept | [AIP-140](https://google.aip.dev/140): "APIs should endeavor to use the same name for the same concept and different names for different concepts" | 2026-10-24 |
|
|
18
|
+
|
|
19
|
+
## Write the contract first
|
|
20
|
+
|
|
21
|
+
| Bullet | Source | Read |
|
|
22
|
+
| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- |
|
|
23
|
+
| The signature before the body | [agent-skills, API and interface design](https://github.com/addyosmani/agent-skills/blob/2686b620fc1fed2e8f60c704839c766b8594c6b6/skills/api-and-interface-design/SKILL.md): "Define the interface before implementing it. The contract is the spec" | 2026-10-24 |
|
|
24
|
+
| What it does, returns, and refuses | [agent-skills, API and interface design](https://github.com/addyosmani/agent-skills/blob/2686b620fc1fed2e8f60c704839c766b8594c6b6/skills/api-and-interface-design/SKILL.md): its contract names the refusal beside the return, "Returns a single task or throws NotFoundError" | 2026-10-24 |
|
|
25
|
+
| Machine output on its own channel | [Command Line Interface Guidelines](https://clig.dev/): "Log messages, errors, and so on should all be sent to stderr", so piped commands never feed them "into the next command" | 2026-10-24 |
|
|
26
|
+
| The safe behavior is the default | [Command Line Interface Guidelines](https://clig.dev/): "Confirm before doing anything dangerous", prompting interactively "or requiring them to pass -f or --force otherwise" | 2026-10-24 |
|
|
27
|
+
|
|
28
|
+
## Keep one error shape per surface
|
|
29
|
+
|
|
30
|
+
| Bullet | Source | Read |
|
|
31
|
+
| -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
32
|
+
| A stable code beside the message | [RFC 9457](https://www.rfc-editor.org/rfc/rfc9457.html): consumers "MUST use the "type" URI" as "the problem type's primary identifier", and "Consumers SHOULD NOT parse the "detail" member for information" | 2026-10-24 |
|
|
33
|
+
| No internals in the message | [RFC 9457](https://www.rfc-editor.org/rfc/rfc9457.html): generators "are encouraged to avoid making implementation details such as a stack dump available through the HTTP interface" | 2026-10-24 |
|
|
34
|
+
| Reuse the project's error type | [agent-skills, API and interface design](https://github.com/addyosmani/agent-skills/blob/2686b620fc1fed2e8f60c704839c766b8594c6b6/skills/api-and-interface-design/SKILL.md): "Pick one error strategy and use it everywhere" | 2026-10-24 |
|
|
35
|
+
|
|
36
|
+
## Validate at the boundary
|
|
37
|
+
|
|
38
|
+
| Bullet | Source | Read |
|
|
39
|
+
| ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
40
|
+
| Check once where input enters | [Parse, don't validate](https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/): checks spread through processing deprive "the program of the ability to reject invalid input instead of processing it" | 2026-10-24 |
|
|
41
|
+
| Trust the value inside | [Parse, don't validate](https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/): shotgun parsing mixes checks "with and spread across processing code", hoping "one or another would catch all the "bad" cases" | 2026-10-24 |
|
|
42
|
+
| Parse into a typed value | [Parse, don't validate](https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/): "Get your data into the most precise representation you need as quickly as you can. Ideally, this should happen at the boundary of your system" | 2026-10-24 |
|
|
43
|
+
| A value read back is input | [OWASP Input Validation Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Input_Validation_Cheat_Sheet.html): "Validate data from internal APIs, partner feeds, queues, and stored records when it crosses a trust boundary" | 2026-10-24 |
|
|
44
|
+
|
|
45
|
+
## Change additively
|
|
46
|
+
|
|
47
|
+
| Bullet | Source | Read |
|
|
48
|
+
| ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
49
|
+
| Optional, with the old behavior default | [AIP-180](https://google.aip.dev/180): code written against the previous surface "must continue to be treated the same way as before. New required fields must not be added" | 2026-10-24 |
|
|
50
|
+
| No rename or removal in place | [AIP-180](https://google.aip.dev/180): "Renaming a component is semantically equivalent to "remove and add"", and a service "may add the new component, but must not remove the existing one" | 2026-10-24 |
|
|
51
|
+
| No new meaning or type under a name | [AIP-180](https://google.aip.dev/180): fields "must not have their type changed", and APIs "must not change visible behavior or semantics in ways that are likely to break reasonable user code" | 2026-10-24 |
|
|
52
|
+
| One live version for an unpinned caller | [Software Engineering at Google, ch. 16](https://abseil.io/resources/swe-book/html/ch16.html): "Developers must never have a choice of "What version of this component should I depend upon?"", named the One-Version Rule | 2026-10-24 |
|
|
53
|
+
| Deprecation recorded where a caller looks | [RFC 9745](https://www.rfc-editor.org/rfc/rfc9745.html): a response signals "that the resource will be or has been deprecated" and links "to a resource that provides further information about planned or existing deprecation" | 2026-10-24 |
|
|
54
|
+
|
|
55
|
+
## Make a retried write safe
|
|
56
|
+
|
|
57
|
+
| Bullet | Source | Read |
|
|
58
|
+
| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
59
|
+
| Answer a repeat with the stored result | [Stripe idempotent requests](https://docs.stripe.com/api/idempotent_requests): "Stripe saves the status code and body of the first request made with a given idempotency key", and "Retries with the same key return the saved response" | 2026-10-24 |
|
|
60
|
+
| Claim the key atomically | [Implementing Stripe-like idempotency keys in Postgres](https://brandur.org/idempotency-keys): a unique index on the key, locked "so that no other requests that might be operating concurrently also try the operation" | 2026-10-24 |
|
|
61
|
+
| A reused key with another body fails | [Stripe idempotent requests](https://docs.stripe.com/api/idempotent_requests): the layer "compares incoming parameters to those of the original request and errors if they're not the same to prevent accidental misuse" | 2026-10-24 |
|
|
62
|
+
| Keep the key past the retry window | [Stripe idempotent requests](https://docs.stripe.com/api/idempotent_requests): keys go once "at least 24 hours old", and "We generate a new request if a key is reused after the original is pruned" | 2026-10-24 |
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Code craft skill ledger
|
|
3
|
+
description: Sources for claude/skills/code-craft/SKILL.md, one row per bullet in its concern groups
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Code craft skill ledger
|
|
7
|
+
|
|
8
|
+
The field is software design at writing time. Parnas, Ousterhout, Fowler, and the Pragmatic Programmer authors carry decomposition and duplication, Refactoring Guru carries the smells, and Birgitta Böckeler's two articles record how agents fail. The closing sections and `## What this delegates` restate these rules or route, so they take no table.
|
|
9
|
+
|
|
10
|
+
Parnas's paper refused a read at its ACM DOI, `10.1145/361598.361623`, so the rows quote an open copy of the same paper.
|
|
11
|
+
|
|
12
|
+
## Name the next change first
|
|
13
|
+
|
|
14
|
+
| Bullet | Source | Read |
|
|
15
|
+
| ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
16
|
+
| Name the likely next change first | [Parnas, On the Criteria To Be Used in Decomposing Systems into Modules](https://www.win.tue.nl/~wstomv/edu/2ip30/references/criteria_for_modularization.pdf): "one begins with a list of difficult design decisions or design decisions which are likely to change" | 2026-10-24 |
|
|
17
|
+
| The shape touching one place wins | [Fowler, Reducing Coupling](https://martinfowler.com/ieeeSoftware/coupling.pdf): "If changing one module in a program requires changing another module, then coupling exists." | 2026-10-24 |
|
|
18
|
+
| No named change, the plainest code | [Google, What to look for in a code review](https://google.github.io/eng-practices/review/reviewer/looking-for.html): "solve the problem they know needs to be solved now, not the problem that the developer speculates might need to be solved in the future" | 2026-10-24 |
|
|
19
|
+
|
|
20
|
+
## Earn depth
|
|
21
|
+
|
|
22
|
+
| Bullet | Source | Read |
|
|
23
|
+
| ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
24
|
+
| Inline a pass-through | [Refactoring Guru, Middle Man](https://refactoring.guru/smells/middle-man): "If a class performs only one action, delegating work to another class, why does it exist at all?" | 2026-10-24 |
|
|
25
|
+
| Split by the decision hidden | [Parnas, On the Criteria](https://www.win.tue.nl/~wstomv/edu/2ip30/references/criteria_for_modularization.pdf): "Each module is then designed to hide such a decision from the others", so modules "will not correspond to steps in the processing" | 2026-10-24 |
|
|
26
|
+
| One decision in one unit | [Refactoring Guru, Shotgun Surgery](https://refactoring.guru/smells/shotgun-surgery): "Making any modifications requires that you make many small changes to many different classes." | 2026-10-24 |
|
|
27
|
+
| One longer function over tiny ones | [Ousterhout and Martin, A Philosophy of Software Design vs Clean Code](https://github.com/johnousterhout/aposd-vs-clean-code): readers "have to flip back and forth between the methods, effectively reconstructing a monolithic version in their minds" | 2026-10-24 |
|
|
28
|
+
|
|
29
|
+
## Weigh the tensions
|
|
30
|
+
|
|
31
|
+
| Bullet | Source | Read |
|
|
32
|
+
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
33
|
+
| One piece of knowledge, one place | [Hunt and Thomas, Orthogonality and the DRY Principle](https://www.artima.com/articles/orthogonality-and-the-dry-principle): "Most people take DRY to mean you shouldn't duplicate code. That's not its intention." | 2026-10-24 |
|
|
34
|
+
| Only what is asked, seams allowed | [Fowler, Yagni](https://martinfowler.com/bliki/Yagni.html): Yagni "only applies to capabilities built into the software to support a presumptive feature, it does not apply to effort to make the software easier to modify" | 2026-10-24 |
|
|
35
|
+
| One reason to change, not too many parts | [Ousterhout and Martin, A Philosophy of Software Design vs Clean Code](https://github.com/johnousterhout/aposd-vs-clean-code): two methods are entangled "if, in order to understand how one of them works internally, you also need to read the code of the other" | 2026-10-24 |
|
|
36
|
+
|
|
37
|
+
## Pass hidden inputs in
|
|
38
|
+
|
|
39
|
+
| Bullet | Source | Read |
|
|
40
|
+
| ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
41
|
+
| Clock, environment, and globals passed in | [Fowler, Inversion of Control Containers and the Dependency Injection pattern](https://martinfowler.com/articles/injection.html): "to do testing, you need to easily replace real service implementations with stubs or mocks" | 2026-10-24 |
|
|
42
|
+
| Rules free of transport and storage | [Cockburn, Hexagonal Architecture](https://alistair.cockburn.us/hexagonal-architecture/): an application "developed and tested in isolation from its eventual run-time devices and databases" | 2026-10-24 |
|
|
43
|
+
| No ports and adapters for record CRUD | [Microsoft, Design a DDD-oriented microservice](https://learn.microsoft.com/en-us/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/ddd-oriented-microservice): "Simpler responsibilities, like a CRUD service, can be managed with simpler approaches." | 2026-10-24 |
|
|
44
|
+
|
|
45
|
+
## Check your own diff
|
|
46
|
+
|
|
47
|
+
| Bullet | Source | Read |
|
|
48
|
+
| --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
49
|
+
| A copy where a change belonged | [Böckeler, The role of developer skills in agentic coding](https://martinfowler.com/articles/exploring-gen-ai/13-role-of-developer-skills.html): "Not realising that a UI component is already implemented elsewhere, and therefore creating duplicate code" | 2026-10-24 |
|
|
50
|
+
| One responsibility across files | [Refactoring Guru, Shotgun Surgery](https://refactoring.guru/smells/shotgun-surgery): "A single responsibility has been split up among a large number of classes." | 2026-10-24 |
|
|
51
|
+
| A feature nobody asked for | [Böckeler, How far can we push AI autonomy in code generation?](https://martinfowler.com/articles/pushing-ai-autonomy.html): "We frequently got additional endpoints and features that we did not ask for in the requirements." | 2026-10-24 |
|
|
52
|
+
| An assumption where a question belonged | [Böckeler, How far can we push AI autonomy in code generation?](https://martinfowler.com/articles/pushing-ai-autonomy.html): "Gaps in the requirements will be filled with assumptions", as when a priority field "was assumed by AI to have the value set" | 2026-10-24 |
|
|
53
|
+
| A brute-force fix | [Böckeler, The role of developer skills in agentic coding](https://martinfowler.com/articles/exploring-gen-ai/13-role-of-developer-skills.html): "AI sometimes took brute-force approaches to solve issues rather than diagnosing what actually caused them." | 2026-10-24 |
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Deprecation and migration skill ledger
|
|
3
|
+
description: Sources for claude/skills/deprecation-migration/SKILL.md, one row per bullet or ordered step in its concern groups
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Deprecation and migration skill ledger
|
|
7
|
+
|
|
8
|
+
The field is retiring a surface its callers still reach. Software Engineering at Google carries deprecation policy and the Churn Rule, Martin Fowler carries parallel change and the strangler fig, and Addy Osmani's `agent-skills` carries the bridges and zombie code. The closing sections and `## What this delegates` restate these rules or route, so they take no table.
|
|
9
|
+
|
|
10
|
+
## Decide whether to deprecate at all
|
|
11
|
+
|
|
12
|
+
| Bullet | Source | Read |
|
|
13
|
+
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
14
|
+
| What keeping it costs | [Software Engineering at Google, ch. 15](https://abseil.io/resources/swe-book/html/ch15.html): "code is a liability, not an asset", with costs "borne as a system is maintained across its lifetime" | 2026-10-24 |
|
|
15
|
+
| Who calls it | [Software Engineering at Google, ch. 15](https://abseil.io/resources/swe-book/html/ch15.html): tools that "statically determine which customers use a given library" | 2026-10-24 |
|
|
16
|
+
| What replaces it | [Software Engineering at Google, ch. 15](https://abseil.io/resources/swe-book/html/ch15.html): "deprecation usually isn't an option until a newer system is available" | 2026-10-24 |
|
|
17
|
+
| Who migrates the callers | [Software Engineering at Google, ch. 15](https://abseil.io/resources/swe-book/html/ch15.html): "without explicit owners, a deprecation process is unlikely to make meaningful progress" | 2026-10-24 |
|
|
18
|
+
|
|
19
|
+
## Choose advisory or compulsory
|
|
20
|
+
|
|
21
|
+
| Bullet | Source | Read |
|
|
22
|
+
| -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
23
|
+
| Start advisory | [Software Engineering at Google, ch. 15](https://abseil.io/resources/swe-book/html/ch15.html): "Advisory deprecations are those that don't have a deadline", for a system "the team knows" has "been replaced" | 2026-10-24 |
|
|
24
|
+
| Compulsory once a removal date stands | [Software Engineering at Google, ch. 15](https://abseil.io/resources/swe-book/html/ch15.html): compulsory deprecation "usually comes with a deadline for removal of the obsolete system" | 2026-10-24 |
|
|
25
|
+
| Actionable and well-timed warnings | [Software Engineering at Google, ch. 15](https://abseil.io/resources/swe-book/html/ch15.html): a warning is actionable when "the user can use the warning to actually perform some relevant action", and relevant "if it surfaces at a time when a user actually performs the indicated action" | 2026-10-24 |
|
|
26
|
+
| No open advisory without date or owner | [Software Engineering at Google, ch. 15](https://abseil.io/resources/swe-book/html/ch15.html): advisory deprecation "often lacks enforcement: we hope that clients move, but can't force them to" | 2026-10-24 |
|
|
27
|
+
|
|
28
|
+
## Migrate the callers yourself
|
|
29
|
+
|
|
30
|
+
| Bullet | Source | Read |
|
|
31
|
+
| ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
32
|
+
| Migrate every caller you can reach | [Software Engineering at Google, ch. 1](https://abseil.io/resources/swe-book/html/ch01.html): "infrastructure teams must do the work to move their internal users to new versions themselves", the Churn Rule | 2026-10-24 |
|
|
33
|
+
| A compatible path for the rest | [Software Engineering at Google, ch. 1](https://abseil.io/resources/swe-book/html/ch01.html): the Churn Rule's other branch, "or do the update in place, in backward-compatible fashion" | 2026-10-24 |
|
|
34
|
+
| No new feature on the old surface | [Fowler, Strangler Fig](https://martinfowler.com/bliki/StranglerFigApplication.html): the move "begins with small additions, often new features, that are built on top of, yet separate to the legacy code base" | 2026-10-24 |
|
|
35
|
+
|
|
36
|
+
## Prove zero consumers before removal
|
|
37
|
+
|
|
38
|
+
| Bullet | Source | Read |
|
|
39
|
+
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- |
|
|
40
|
+
| Imports and direct calls | [Software Engineering at Google, ch. 15](https://abseil.io/resources/swe-book/html/ch15.html): Code Search and Kythe "statically determine which customers use a given library" | 2026-10-24 |
|
|
41
|
+
| String references | House choice: a handler, command, or fixture looked up by name passes an import search and fails at runtime once the surface goes | 2026-10-24 |
|
|
42
|
+
| Configuration | [agent-skills, deprecation and migration](https://github.com/addyosmani/agent-skills/blob/2686b620/skills/deprecation-and-migration/SKILL.md): removal includes "Remove associated tests, documentation, and configuration" | 2026-10-24 |
|
|
43
|
+
| Documentation and examples | [agent-skills, deprecation and migration](https://github.com/addyosmani/agent-skills/blob/2686b620/skills/deprecation-and-migration/SKILL.md): its zombie signs include "Documentation that references systems that no longer exist" | 2026-10-24 |
|
|
44
|
+
| Copies outside the repository | [Fowler, Parallel Change](https://martinfowler.com/bliki/ParallelChange.html): a change is hardest "on a PublishedInterface with multiple or external clients", for whom migration "will be the longest phase" | 2026-10-24 |
|
|
45
|
+
|
|
46
|
+
## Bridge with an adapter or a strangler
|
|
47
|
+
|
|
48
|
+
| Bullet | Source | Read |
|
|
49
|
+
| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- |
|
|
50
|
+
| Adapter | [agent-skills, deprecation and migration](https://github.com/addyosmani/agent-skills/blob/2686b620/skills/deprecation-and-migration/SKILL.md): "Create an adapter that translates calls from the old interface to the new implementation." | 2026-10-24 |
|
|
51
|
+
| Strangler | [Fowler, Strangler Fig](https://martinfowler.com/bliki/StranglerFigApplication.html): "we move bits of behavior from the legacy system into the new code base", with bridging code "that will go away once the modernization is complete" | 2026-10-24 |
|
|
52
|
+
| Adapter when the interface stays | [agent-skills, deprecation and migration](https://github.com/addyosmani/agent-skills/blob/2686b620/skills/deprecation-and-migration/SKILL.md): under an adapter "Consumers keep using the old interface while you migrate the backend" | 2026-10-24 |
|
|
53
|
+
|
|
54
|
+
## Expand, migrate, contract as three changes
|
|
55
|
+
|
|
56
|
+
| Step | Source | Read |
|
|
57
|
+
| -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
58
|
+
| Expand | [Fowler, Parallel Change](https://martinfowler.com/bliki/ParallelChange.html): "In the expand phase you augment the interface to support both the old and the new versions." | 2026-10-24 |
|
|
59
|
+
| Migrate | [Fowler, Parallel Change](https://martinfowler.com/bliki/ParallelChange.html): "During the migrate phase you update all clients using the old version to the new version. This can be done incrementally" | 2026-10-24 |
|
|
60
|
+
| Contract | [Fowler, Parallel Change](https://martinfowler.com/bliki/ParallelChange.html): "Once all usages have been migrated to the new version, you perform the contract phase to remove the old version" | 2026-10-24 |
|
|
61
|
+
|
|
62
|
+
## Treat zombie code as a decision to make
|
|
63
|
+
|
|
64
|
+
| Bullet | Source | Read |
|
|
65
|
+
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
66
|
+
| Run the zero-consumers check on it | [agent-skills, deprecation and migration](https://github.com/addyosmani/agent-skills/blob/2686b620/skills/deprecation-and-migration/SKILL.md): removal waits until you "Verify zero active usage (metrics, logs, dependency analysis)" | 2026-10-24 |
|
|
67
|
+
| Remove it when the check is clean | [agent-skills, deprecation and migration](https://github.com/addyosmani/agent-skills/blob/2686b620/skills/deprecation-and-migration/SKILL.md): against "Someone might need it later", "If it's needed later, it can be rebuilt." | 2026-10-24 |
|
|
68
|
+
| An owner or a deprecation otherwise | [agent-skills, deprecation and migration](https://github.com/addyosmani/agent-skills/blob/2686b620/skills/deprecation-and-migration/SKILL.md): "Either assign an owner and maintain it properly, or deprecate it with a concrete migration plan." | 2026-10-24 |
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Design taste skill ledger
|
|
3
|
+
description: Sources for claude/skills/design-taste/SKILL.md, one row per bullet in its concern groups
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Design taste skill ledger
|
|
7
|
+
|
|
8
|
+
The field is visual design judgment. Jesse James Garrett's planes carry the layer order, the Nielsen Norman Group carries redesign strategy and tone, and Josh Comeau carries shadow lighting. The ten defaults are catalog observations, as in the `tells.md` ledger, recording model output and never cited as an authority. `## What this delegates` routes, so it takes no table.
|
|
9
|
+
|
|
10
|
+
No outside authority takes a side on the four grey-box rules, three layer rules, the focus ring lock, or the greenfield mode. Each of those nine rows is a house choice naming the failure it prevents.
|
|
11
|
+
|
|
12
|
+
## The defaults you are reaching past
|
|
13
|
+
|
|
14
|
+
| Bullet | Source | Read |
|
|
15
|
+
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
16
|
+
| Three equal cards | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Three equal card columns as feature row. This is the most generic AI layout." | 2026-10-24 |
|
|
17
|
+
| The centered hero | Catalog observation, [Taste-Skill tells](https://github.com/leonxlnx/taste-skill/blob/main/skills/taste-skill/references/tells.md): "Centred headline, subtitle, two buttons, screenshot below" | 2026-10-24 |
|
|
18
|
+
| The violet-to-blue accent | Catalog observation, [Taste-Skill tells](https://github.com/leonxlnx/taste-skill/blob/main/skills/taste-skill/references/tells.md): "Violet / indigo gradients on hero, buttons and glows" are banned, reached past with "flat colour" | 2026-10-24 |
|
|
19
|
+
| Numbered labels | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): "Step 1 / Step 2 / Step 3" is banned, since "The actual step content is the label" | 2026-10-24 |
|
|
20
|
+
| The scroll cue | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): "Scroll cues are banned." | 2026-10-24 |
|
|
21
|
+
| A dot before every item | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): a dot is "Only acceptable when conveying real semantic state" | 2026-10-24 |
|
|
22
|
+
| A glow for elevation | Catalog observation, [Impeccable craft floor](https://github.com/pbakaus/impeccable/blob/main/skill/reference/craft-floor.md): "shadows carry an offset and a soft blur. A zero-offset colored halo is decoration." | 2026-10-24 |
|
|
23
|
+
| A screenshot built of shapes | Catalog observation, [Taste-Skill v2 experimental](https://github.com/Leonxlnx/taste-skill-classics/blob/main/skills/taste-skill-v2-experimental/SKILL.md): "NO div-based fake product UI in the hero" | 2026-10-24 |
|
|
24
|
+
| Placeholder that announces | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Placeholder company names like "Acme Corp"", replaced with "contextual, believable brand names" | 2026-10-24 |
|
|
25
|
+
| Warm verbs over meaning | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Never use "Elevate", "Seamless", "Unleash"", and "Write plain, specific language" | 2026-10-24 |
|
|
26
|
+
|
|
27
|
+
## The layers, and the order they settle
|
|
28
|
+
|
|
29
|
+
| Bullet | Source | Read |
|
|
30
|
+
| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- |
|
|
31
|
+
| A higher layer over a broken lower one | [Garrett, The Elements of User Experience, ch. 2](http://www.jjg.net/elements/pdf/elements_ch02.pdf): "the choices available to us on each plane are constrained by the decisions we make about issues on the planes below it" | 2026-10-24 |
|
|
32
|
+
| A lower layer through a finished one | House choice: a finished palette, type, and imagery hide a weak composition or layout, so the round judges the wrong layer and passes it | 2026-10-24 |
|
|
33
|
+
| A round varies one layer | House choice: a round varying several layers yields a pick that cannot say which difference decided it, so the next round repeats the question | 2026-10-24 |
|
|
34
|
+
| Never settle a higher layer first | [Garrett, The Elements of User Experience, ch. 2](http://www.jjg.net/elements/pdf/elements_ch02.pdf): "Each plane is dependent on the planes below it." | 2026-10-24 |
|
|
35
|
+
| Real copy before the composition sets | House choice: a composition settled against stand-in copy breaks once real copy of another length and tone runs through it | 2026-10-24 |
|
|
36
|
+
| Check the layers below the complaint | [Garrett, The Elements of User Experience, ch. 2](http://www.jjg.net/elements/pdf/elements_ch02.pdf): "When the choices we make don't align with those above and below, projects often derail" | 2026-10-24 |
|
|
37
|
+
|
|
38
|
+
## Grey-box when judging layers 1 to 4
|
|
39
|
+
|
|
40
|
+
| Bullet | Source | Read |
|
|
41
|
+
| ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
42
|
+
| Flat neutral blocks | House choice: a fill, an accent, or an image left in a grey-box pulls the judgment toward a layer the round is not judging | 2026-10-24 |
|
|
43
|
+
| Real text at real length | House choice: greeked copy hides the wrapping and overflow that real copy at length produces, so a composition passes and then breaks | 2026-10-24 |
|
|
44
|
+
| FPO at true size | House choice: an unmarked placeholder region is read as a decided element and ships as one | 2026-10-24 |
|
|
45
|
+
| Return to the finished surface | House choice: a grey-box handed over as the deliverable reads to the operator as unfinished work rather than as the answer to a layer question | 2026-10-24 |
|
|
46
|
+
|
|
47
|
+
## Lock what must not vary across a surface
|
|
48
|
+
|
|
49
|
+
| Bullet | Source | Read |
|
|
50
|
+
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- |
|
|
51
|
+
| One accent | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "More than one accent color. Pick one. Remove the rest." | 2026-10-24 |
|
|
52
|
+
| One radius system | Catalog observation, [Taste-Skill tells](https://github.com/leonxlnx/taste-skill/blob/main/skills/taste-skill/references/tells.md): "One medium border radius (12–16px) on everything" is reached past with "Square or fully round, chosen once" | 2026-10-24 |
|
|
53
|
+
| One theme | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "A single dark-background section breaking an otherwise light page looks like a copy-paste accident." | 2026-10-24 |
|
|
54
|
+
| One copy register | [NN/g, The Four Dimensions of Tone of Voice](https://www.nngroup.com/articles/tone-of-voice-dimensions/): "Keep your brand personality consistent", the part that backs one register per composition | 2026-10-24 |
|
|
55
|
+
| One light source | [Comeau, Designing Beautiful Shadows in CSS](https://www.joshwcomeau.com/css/designing-shadows/): "we should decide on a single light source for all elements on the page", and black shadow "also desaturates it quite a bit" | 2026-10-24 |
|
|
56
|
+
| One focus ring weight | House choice: a focus ring varying by component reads as several products on one surface. The `ui-craft` skill owns the visibility floor | 2026-10-24 |
|
|
57
|
+
|
|
58
|
+
## Working on something that already exists
|
|
59
|
+
|
|
60
|
+
| Bullet | Source | Read |
|
|
61
|
+
| ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
62
|
+
| Greenfield | House choice: an existing surface misread as greenfield discards the brand, content, and routes its callers and readers rely on | 2026-10-24 |
|
|
63
|
+
| Preserve | [NN/g, Radical Redesign or Incremental Change?](https://www.nngroup.com/articles/radical-incremental-redesign/): "Usually Choose Incremental Changes Over a Major Overhaul" | 2026-10-24 |
|
|
64
|
+
| Overhaul | [NN/g, Radical Redesign or Incremental Change?](https://www.nngroup.com/articles/radical-incremental-redesign/): "Sometimes a Major Overhaul Is Best" | 2026-10-24 |
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Craft reference ledger
|
|
3
|
+
description: Sources for claude/skills/design-taste/references/craft.md, one row per bullet
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Craft reference ledger
|
|
7
|
+
|
|
8
|
+
The field is typography and visual design. The authorities are Practical Typography and MDN for type, and the Nielsen Norman Group for navigation and error messages.
|
|
9
|
+
|
|
10
|
+
Most rows here are catalog observations, being what a community prompt skill recorded models drawing unguided. A catalog row records model output and is never cited as an authority.
|
|
11
|
+
|
|
12
|
+
## Optical against mathematical
|
|
13
|
+
|
|
14
|
+
| Bullet | Source | Read |
|
|
15
|
+
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- |
|
|
16
|
+
| Centering by the numbers | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Icons next to text, play buttons in circles, or text in buttons often need 1-2px optical adjustments to feel right" | 2026-10-24 |
|
|
17
|
+
| Equal vertical padding bottom-heavy | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Top and bottom padding are always identical", and "bottom padding often needs to be slightly larger" | 2026-10-24 |
|
|
18
|
+
| Optical size beats declared size | [Wikipedia, Overshoot](https://en.wikipedia.org/wiki/Overshoot_%28typography%29): round letters overshoot "to achieve an optical effect of being the same size" | 2026-10-24 |
|
|
19
|
+
| Hang the opening mark | [hanging-punctuation](https://developer.mozilla.org/en-US/docs/Web/CSS/hanging-punctuation): "An opening bracket or quote at the start of the first formatted line" hangs | 2026-10-24 |
|
|
20
|
+
|
|
21
|
+
## Alignment across siblings
|
|
22
|
+
|
|
23
|
+
| Bullet | Source | Read |
|
|
24
|
+
| ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
25
|
+
| Shared elements align in a row | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "align shared elements (titles, descriptions, prices, buttons) across all items. Misaligned baselines make the layout look broken." | 2026-10-24 |
|
|
26
|
+
| Pin actions to the bottom | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Pin buttons to the bottom of each card so they form a clean horizontal line regardless of content above" | 2026-10-24 |
|
|
27
|
+
| Feature lists start level | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "the list of features should start at the same Y position across all columns", with "fixed-height title/price blocks" | 2026-10-24 |
|
|
28
|
+
| Forced equal height is wrong | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Cards of equal height forced by flexbox. Allow variable heights or use masonry when content varies in length." | 2026-10-24 |
|
|
29
|
+
|
|
30
|
+
## Hierarchy without scale
|
|
31
|
+
|
|
32
|
+
| Bullet | Source | Read |
|
|
33
|
+
| ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
34
|
+
| Weights between regular, bold | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Only Regular (400) and Bold (700) weights used. Introduce Medium (500) and SemiBold (600) for more subtle hierarchy." | 2026-10-24 |
|
|
35
|
+
| Color, space, position carry | [Practical Typography, Headings](https://practicaltypography.com/headings.html) backs the space half: "The best way to emphasize a heading is by putting space above and below". Color and position are a House choice: a level carried by size alone runs out of steps a reader can tell apart | 2026-10-24 |
|
|
36
|
+
| An enormous heading is shouting | [Practical Typography, Headings](https://practicaltypography.com/headings.html): "It's fine to make the point size bigger, but just a little." | 2026-10-24 |
|
|
37
|
+
|
|
38
|
+
## Type detail
|
|
39
|
+
|
|
40
|
+
| Bullet | Source | Read |
|
|
41
|
+
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
42
|
+
| Orphans | [text-wrap](https://developer.mozilla.org/en-US/docs/Web/CSS/text-wrap): `balance` suits "a short number of lines, such as headings, captions, and blockquotes" | 2026-10-24 |
|
|
43
|
+
| Measure | [Practical Typography, Line length](https://practicaltypography.com/line-length.html): "Aim for an average line length of 45–90 characters, including spaces." | 2026-10-24 |
|
|
44
|
+
| Figures in columns | [font-variant-numeric](https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant-numeric): `tabular-nums` sets figures "the same size, allowing them to be easily aligned" | 2026-10-24 |
|
|
45
|
+
| Tracking by size | [Practical Typography, Letterspacing](https://practicaltypography.com/letterspacing.html): "always add 5–12% extra letterspacing to text in all caps or small caps", and typographers "remove letterspacing from lowercase text used at larger sizes" | 2026-10-24 |
|
|
46
|
+
| Casing | [A to Z of GOV.UK style](https://www.gov.uk/guidance/style-guide/a-to-z-of-gov-uk-style): "Always use sentence case, even in page titles and service names", the source the `ui-craft` copy ledger records for the rule this bullet points at | 2026-10-24 |
|
|
47
|
+
|
|
48
|
+
## Depth and texture
|
|
49
|
+
|
|
50
|
+
| Bullet | Source | Read |
|
|
51
|
+
| ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
52
|
+
| Tint the shadow | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Tint shadows to match the background hue", rather than "pure black at low opacity" | 2026-10-24 |
|
|
53
|
+
| Zero texture reads sterile | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Flat design with zero texture. Add subtle noise, grain, or micro-patterns to backgrounds." | 2026-10-24 |
|
|
54
|
+
| The even linear gradient | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Perfectly even gradients", in place of "standard linear 45-degree fades" | 2026-10-24 |
|
|
55
|
+
| Let something cross a boundary | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "No overlap or depth. Elements sit flat next to each other." | 2026-10-24 |
|
|
56
|
+
|
|
57
|
+
## Small things that read as unfinished
|
|
58
|
+
|
|
59
|
+
| Bullet | Source | Read |
|
|
60
|
+
| ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
61
|
+
| A link that goes nowhere | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Dead links. Buttons that link to `#`." | 2026-10-24 |
|
|
62
|
+
| No current location | [NN/g, Navigation: You Are Here](https://www.nngroup.com/articles/navigation-you-are-here/): "Navigation should not only show where you can go but also where you are now." | 2026-10-24 |
|
|
63
|
+
| One portrait for many people | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Same avatar image for multiple users. Use unique assets for every distinct person." | 2026-10-24 |
|
|
64
|
+
| Every item dated alike | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "All blog post dates identical" | 2026-10-24 |
|
|
65
|
+
| An exclamation in success | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Exclamation marks in success messages. Remove them. Be confident, not loud." | 2026-10-24 |
|
|
66
|
+
| An error opening on sorry | [NN/g, Error-message guidelines](https://www.nngroup.com/articles/error-message-guidelines/) backs the fix half: "offer some potential remedies". The no-apology half is a catalog observation, [frontend-design](https://github.com/anthropics/skills/blob/main/skills/frontend-design/SKILL.md): "Errors don't apologize" | 2026-10-24 |
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Rules by kind ledger
|
|
3
|
+
description: Sources for claude/skills/design-taste/references/kinds.md, one row per bullet
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Rules by kind ledger
|
|
7
|
+
|
|
8
|
+
The field is interface design by surface kind. The authorities are Practical Typography for reading and the Nielsen Norman Group for wayfinding and command shortcuts.
|
|
9
|
+
|
|
10
|
+
Impeccable's three mode references sort a surface by what the visitor came to do, and most rows below restate them. Impeccable is a community prompt skill rather than an authority, so each such row is a catalog observation. A House choice row names the failure a routing or contrast bullet prevents.
|
|
11
|
+
|
|
12
|
+
## Marketing and promotional
|
|
13
|
+
|
|
14
|
+
| Bullet | Source | Read |
|
|
15
|
+
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
16
|
+
| Optimizes for comprehension | Catalog observation, [Impeccable persuade mode](https://github.com/pbakaus/impeccable/blob/main/skill/reference/mode-persuade.md): "the opening must make the offer intelligible and desirable, expose a clear action" | 2026-10-24 |
|
|
17
|
+
| Composition carries the weight | House choice: a palette round run against a flat composition changes nothing a stranger notices, since section order is what they judge first | 2026-10-24 |
|
|
18
|
+
| Vary the section shape | Catalog observation, [Taste-Skill tells](https://github.com/leonxlnx/taste-skill/blob/main/skills/taste-skill/references/tells.md): "Every section the same layout family" is a structural tell, reached past with "Different composition per section" | 2026-10-24 |
|
|
19
|
+
| Low density | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Dense layouts work for data dashboards, not for marketing pages." | 2026-10-24 |
|
|
20
|
+
| Every claim names a real thing | Catalog observation, [Impeccable persuade mode](https://github.com/pbakaus/impeccable/blob/main/skill/reference/mode-persuade.md): the opening must "demonstrate something only this product can prove" | 2026-10-24 |
|
|
21
|
+
| Motion permitted and rationed | Catalog observation, [frontend-design](https://github.com/anthropics/skills/blob/main/skills/frontend-design/SKILL.md): "Use non-user-triggered motion sparingly and deliberately, only to draw attention", since one orchestrated moment "lands better than scattered effects" | 2026-10-24 |
|
|
22
|
+
| Product rules wrong here | House choice: tables, persistent chrome, and state indicators ask a stranger to read state they hold none of, so a marketing page reads as a product screen | 2026-10-24 |
|
|
23
|
+
|
|
24
|
+
## Application and product UI
|
|
25
|
+
|
|
26
|
+
| Bullet | Source | Read |
|
|
27
|
+
| ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
28
|
+
| Optimizes for throughput | Catalog observation, [Impeccable operate mode](https://github.com/pbakaus/impeccable/blob/main/skill/reference/mode-operate.md): "On an Operate surface the visitor came to get a job done" | 2026-10-24 |
|
|
29
|
+
| High density is correct | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Dense layouts work for data dashboards" | 2026-10-24 |
|
|
30
|
+
| The states carry the weight | Catalog observation, [Impeccable operate mode](https://github.com/pbakaus/impeccable/blob/main/skill/reference/mode-operate.md): the first viewport names "the data the visitor reads first and its states" | 2026-10-24 |
|
|
31
|
+
| Whether each state exists | House choice: the coverage question asked in two skills drifts into two answers, so `ui-craft` holds it and this bullet routes there | 2026-10-24 |
|
|
32
|
+
| An agentic surface's states | House choice: a spinner over long agent work hides whether the work is reading, waiting on the person, or done, which is the one thing the reader came to learn | 2026-10-24 |
|
|
33
|
+
| Chrome persistent and quiet | Catalog observation, [Impeccable operate mode](https://github.com/pbakaus/impeccable/blob/main/skill/reference/mode-operate.md): "Someone who uses tools like this one should know where everything is before they notice the world." | 2026-10-24 |
|
|
34
|
+
| Motion is feedback | Catalog observation, [frontend-design](https://github.com/anthropics/skills/blob/main/skills/frontend-design/SKILL.md): "Motion that answers a person's action (opening, expanding, confirming) is welcome when it shows what changed." | 2026-10-24 |
|
|
35
|
+
| The direction lends four things | Catalog observation, [Impeccable operate mode](https://github.com/pbakaus/impeccable/blob/main/skill/reference/mode-operate.md): "The world lends four things and only these: type, palette, density, and one signature move. It never supplies the layout, the navigation model, or the controls." | 2026-10-24 |
|
|
36
|
+
| A borrowed interface lends four | Catalog observation, [Impeccable operate mode](https://github.com/pbakaus/impeccable/blob/main/skill/reference/mode-operate.md): a world taken from a terminal or instrument "comes back as a costume of that tool on a working screen" | 2026-10-24 |
|
|
37
|
+
| Check against the category | Catalog observation, [Impeccable operate mode](https://github.com/pbakaus/impeccable/blob/main/skill/reference/mode-operate.md): "with the name covered, does it read as a product of its category, could the visitor do the task from it" | 2026-10-24 |
|
|
38
|
+
| A command shows its shortcut | [NN/g, UI copy](https://www.nngroup.com/articles/ui-copy/): shortcuts sit "to the far right of the menu" and "alongside the command text in tool tips" | 2026-10-24 |
|
|
39
|
+
| Marketing rules wrong here | House choice: generous whitespace and entrance motion cost an operator a scroll or a wait on every glance, on a screen they read constantly | 2026-10-24 |
|
|
40
|
+
|
|
41
|
+
## Content and long-form
|
|
42
|
+
|
|
43
|
+
| Bullet | Source | Read |
|
|
44
|
+
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
45
|
+
| Optimizes for reading | Catalog observation, [Impeccable read mode](https://github.com/pbakaus/impeccable/blob/main/skill/reference/mode-read.md): "On a Read surface the visitor came to understand something", judged by "how fast a reader finds and understands the answer" | 2026-10-24 |
|
|
46
|
+
| Measure is capped | [Practical Typography, Line length](https://practicaltypography.com/line-length.html): "Aim for an average line length of 45–90 characters, including spaces." | 2026-10-24 |
|
|
47
|
+
| Hierarchy from weight, space | [Practical Typography, Headings](https://practicaltypography.com/headings.html): "The best way to emphasize a heading is by putting space above and below", and "Use bold, not italic." | 2026-10-24 |
|
|
48
|
+
| Navigation is a map | [NN/g, Navigation: You Are Here](https://www.nngroup.com/articles/navigation-you-are-here/): "Navigation should not only show where you can go but also where you are now." | 2026-10-24 |
|
|
49
|
+
| Code, tables, figures | Catalog observation, [Impeccable read mode](https://github.com/pbakaus/impeccable/blob/main/skill/reference/mode-read.md): "Code, tables, notes, and figures sit in the standard forms readers already know" | 2026-10-24 |
|
|
50
|
+
| Motion is almost always wrong | Catalog observation, [Impeccable read mode](https://github.com/pbakaus/impeccable/blob/main/skill/reference/mode-read.md): the reading column stays calm, with "nothing performing behind the text" | 2026-10-24 |
|
|
51
|
+
| Other kinds' rules wrong here | House choice: application density makes long prose tiring to read, and marketing whitespace between paragraphs breaks one argument into unrelated pieces | 2026-10-24 |
|
|
52
|
+
|
|
53
|
+
## Kinds this file does not cover
|
|
54
|
+
|
|
55
|
+
| Bullet | Source | Read |
|
|
56
|
+
| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
57
|
+
| Transactional flows | House choice: a checkout or settings flow given its own section here would restate state coverage and error recovery, which `ui-craft` holds and would drift from here | 2026-10-24 |
|
|
58
|
+
| Terminal and text-mode | House choice: a terminal has no layout engine and its own color rules, so a web rule borrowed for it is wrong in every case this file could state | 2026-10-24 |
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Systems reference ledger
|
|
3
|
+
description: Sources for claude/skills/design-taste/references/systems.md, one row per bullet
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Systems reference ledger
|
|
7
|
+
|
|
8
|
+
The field is visual design systems. The authorities are the Nielsen Norman Group for proximity, Practical Typography for the type scale, Apple's Human Interface Guidelines for dark mode, and W3C for text contrast.
|
|
9
|
+
|
|
10
|
+
A catalog row records what a community prompt skill observed models drawing, never an authority. A House choice row carries a count the toolkit set so a tell can be counted, and names the failure it prevents.
|
|
11
|
+
|
|
12
|
+
## Space
|
|
13
|
+
|
|
14
|
+
| Bullet | Source | Read |
|
|
15
|
+
| --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
16
|
+
| Every gap from one scale | Catalog observation, [Impeccable layout](https://github.com/pbakaus/impeccable/blob/main/skill/reference/layout.md): "Use a documented spacing scale rather than one-off values." The figure of about eight is a House choice: past it, a count tells a scale from arithmetic | 2026-10-24 |
|
|
17
|
+
| Steps grow rather than add | House choice: a scale stepping by a fixed amount spends its large steps on gaps a reader cannot tell apart, and has too few steps where small gaps need them | 2026-10-24 |
|
|
18
|
+
| Between groups beats within | [NN/g, Proximity](https://www.nngroup.com/articles/gestalt-proximity/): "Items close together are likely to be perceived as part of the same group" | 2026-10-24 |
|
|
19
|
+
| One gap everywhere | [NN/g, Proximity](https://www.nngroup.com/articles/gestalt-proximity/): a tight label reads as one group "compared to a larger margin before the next label-field pair" | 2026-10-24 |
|
|
20
|
+
| Two or three section tiers | House choice: enough tiers for rhythm, few enough that each section takes one, since a value per section leaves no rhythm to read | 2026-10-24 |
|
|
21
|
+
| Space follows the viewport | House choice: a layout scaling every value with the viewport arrives at a phone with body type too small to read, while space shrinks without harm | 2026-10-24 |
|
|
22
|
+
|
|
23
|
+
## Type
|
|
24
|
+
|
|
25
|
+
| Bullet | Source | Read |
|
|
26
|
+
| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
|
|
27
|
+
| Fewer steps than feel enough | [Practical Typography, Headings](https://practicaltypography.com/headings.html): "Limit yourself to three levels of headings. Two is better." The five to seven figure is a House choice: more holds steps nobody tells apart | 2026-10-24 |
|
|
28
|
+
| Adjacent steps differ | [Practical Typography, Headings](https://practicaltypography.com/headings.html): "Use the smallest increment necessary to make a visible difference." | 2026-10-24 |
|
|
29
|
+
| Body size anchors | House choice: a scale worked down from a display size leaves body text at whatever size was left, and body text is most of what a reader reads | 2026-10-24 |
|
|
30
|
+
| Line height against size | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): headlines "reduce line-height", and for body text "Increase line-height for readability" | 2026-10-24 |
|
|
31
|
+
| Weights beside sizes | [Practical Typography, Headings](https://practicaltypography.com/headings.html): "If you're using bold in your heading, you can also try reducing the point size" | 2026-10-24 |
|
|
32
|
+
|
|
33
|
+
## Palette
|
|
34
|
+
|
|
35
|
+
| Bullet | Source | Read |
|
|
36
|
+
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- |
|
|
37
|
+
| An accent is rare | Catalog observation, [Minimalist skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/minimalist-skill/SKILL.md): "Color is a scarce resource, utilized only for semantic meaning or subtle accents." | 2026-10-24 |
|
|
38
|
+
| One neutral temperature | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Mixing warm and cool grays. Stick to one gray family." | 2026-10-24 |
|
|
39
|
+
| Surfaces near, content far | [WCAG 2.2, Contrast (Minimum)](https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html) backs the content half: text needs "a contrast ratio of at least 4.5:1". The surface half is a catalog observation, [Taste-Skill tells](https://github.com/leonxlnx/taste-skill/blob/main/skills/taste-skill/references/tells.md): "Opaque surfaces one tone step from the ground" | 2026-10-24 |
|
|
40
|
+
| A semantic color is no accent | House choice: an accent borrowed for an error makes every accent read as an error, and leaves the surface no color free for emphasis | 2026-10-24 |
|
|
41
|
+
| Dark mode re-derived | [Apple HIG, Dark Mode](https://developer.apple.com/design/human-interface-guidelines/dark-mode): dark colors "aren't necessarily inversions of their light counterparts" | 2026-10-24 |
|
|
42
|
+
| Saturation has a budget | Catalog observation, [Redesign skill](https://github.com/nxpatterns/claude-taste-skill/blob/main/skills/redesign-skill/SKILL.md): "Desaturate accents so they blend with neutrals instead of screaming." | 2026-10-24 |
|