@prestyj/cli 5.28.1 → 5.29.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/assets/motion/bin/contact-sheet.mjs +9 -3
- package/assets/motion/bin/cues.mjs +337 -0
- package/assets/motion/bin/library.mjs +53 -10
- package/assets/motion/bin/motion-blur.mjs +943 -0
- package/assets/motion/bin/motion-check.mjs +354 -3
- package/assets/motion/bin/music-fit.mjs +436 -0
- package/assets/motion/bin/pdf-extract.mjs +22 -10
- package/assets/motion/bin/reference-study.mjs +346 -0
- package/assets/motion/bin/score-synth.mjs +1052 -93
- package/assets/motion/library/README.md +50 -14
- package/assets/motion/library/kit/moves.js +1981 -0
- package/assets/motion/library/library.json +232 -0
- package/assets/motion/library/pieces/camera-rig/meta.json +13 -0
- package/assets/motion/library/pieces/camera-rig/piece.html +153 -0
- package/assets/motion/library/pieces/camera-rig/preview.jpg +0 -0
- package/assets/motion/library/pieces/chain-knock/meta.json +13 -0
- package/assets/motion/library/pieces/chain-knock/piece.html +195 -0
- package/assets/motion/library/pieces/chain-knock/preview.jpg +0 -0
- package/assets/motion/library/pieces/gather-to-logo/meta.json +13 -0
- package/assets/motion/library/pieces/gather-to-logo/piece.html +159 -0
- package/assets/motion/library/pieces/gather-to-logo/preview.jpg +0 -0
- package/assets/motion/library/pieces/morph-carry/meta.json +13 -0
- package/assets/motion/library/pieces/morph-carry/piece.html +173 -0
- package/assets/motion/library/pieces/morph-carry/preview.jpg +0 -0
- package/assets/motion/library/pieces/one-shape-journey/meta.json +13 -0
- package/assets/motion/library/pieces/one-shape-journey/piece.html +195 -0
- package/assets/motion/library/pieces/one-shape-journey/preview.jpg +0 -0
- package/assets/motion/library/pieces/open-from-subject/meta.json +13 -0
- package/assets/motion/library/pieces/open-from-subject/piece.html +168 -0
- package/assets/motion/library/pieces/open-from-subject/preview.jpg +0 -0
- package/assets/motion/library/pieces/request-to-result/meta.json +13 -0
- package/assets/motion/library/pieces/request-to-result/piece.html +212 -0
- package/assets/motion/library/pieces/request-to-result/preview.jpg +0 -0
- package/assets/motion/library/pieces/scale-dive/meta.json +13 -0
- package/assets/motion/library/pieces/scale-dive/piece.html +321 -0
- package/assets/motion/library/pieces/scale-dive/preview.jpg +0 -0
- package/assets/motion/library/pieces/screen-replica-steps/meta.json +13 -0
- package/assets/motion/library/pieces/screen-replica-steps/piece.html +366 -0
- package/assets/motion/library/pieces/screen-replica-steps/preview.jpg +0 -0
- package/assets/motion/library/pieces/zoom-into-card/meta.json +13 -0
- package/assets/motion/library/pieces/zoom-into-card/piece.html +179 -0
- package/assets/motion/library/pieces/zoom-into-card/preview.jpg +0 -0
- package/assets/motion/library/sheets/diagram.jpg +0 -0
- package/assets/motion/library/sheets/frame.jpg +0 -0
- package/assets/motion/library/sheets/transition.jpg +0 -0
- package/assets/motion/library/sheets/ui.jpg +0 -0
- package/assets/motion/references/build-sheet.md +206 -0
- package/assets/motion/references/runtime/determinism-rules.md +1 -1
- package/assets/motion/references/runtime/gsap-easing-and-stagger.md +29 -29
- package/assets/motion/references/runtime/inputs-and-assets.md +7 -12
- package/assets/motion/references/runtime/lint-validate-inspect.md +3 -3
- package/assets/motion/references/runtime/minimal-composition.md +1 -1
- package/assets/motion/references/runtime/preview-render.md +3 -3
- package/assets/motion/skills/app-walkthrough/SKILL.md +66 -0
- package/assets/motion/skills/before-after/SKILL.md +53 -0
- package/assets/motion/skills/brand-kit/SKILL.md +3 -3
- package/assets/motion/skills/dev-tool-video/SKILL.md +57 -0
- package/assets/motion/skills/launch-video/SKILL.md +62 -0
- package/assets/motion/skills/match-reference/SKILL.md +58 -0
- package/assets/motion/skills/motion/SKILL.md +78 -85
- package/assets/motion/skills/source-ingest/SKILL.md +17 -6
- package/assets/motion/skills/website-video/SKILL.md +59 -0
- package/assets/skills/bulletproof/SKILL.md +36 -11
- package/assets/skills/bulletproof/references/agent-surface.md +19 -9
- package/assets/skills/bulletproof/references/audit-protocol.md +20 -5
- package/assets/skills/bulletproof/references/platform-playbooks.md +5 -4
- package/assets/skills/bulletproof/references/provenance.md +26 -1
- package/assets/skills/bulletproof/references/secure-defaults.md +6 -5
- package/assets/skills/bulletproof/references/supply-chain.md +21 -17
- package/assets/skills/bulletproof/references/threat-landscape.md +28 -26
- package/assets/skills/bulletproof/references/verification.md +2 -0
- package/assets/skills/clarify/SKILL.md +25 -16
- package/assets/skills/code-review/SKILL.md +71 -13
- package/assets/skills/code-review/references/agent-diffs.md +27 -0
- package/assets/skills/code-review/references/tests.md +19 -0
- package/assets/skills/compliance-guard/SKILL.md +20 -5
- package/assets/skills/compliance-guard/references/artifacts.md +1 -1
- package/assets/skills/compliance-guard/references/eu-uk.md +16 -16
- package/assets/skills/compliance-guard/references/lawsuit-vectors.md +5 -5
- package/assets/skills/compliance-guard/references/provenance.md +41 -2
- package/assets/skills/compliance-guard/references/sector-gates.md +3 -3
- package/assets/skills/compliance-guard/references/security-baseline.md +2 -2
- package/assets/skills/compliance-guard/references/trigger-map.md +5 -5
- package/assets/skills/compliance-guard/references/us.md +27 -21
- package/assets/skills/durable/SKILL.md +87 -79
- package/assets/skills/durable/references/agent-db-safety.md +69 -0
- package/assets/skills/durable/references/backups-and-runtime.md +19 -12
- package/assets/skills/durable/references/migrations-and-schema.md +13 -6
- package/assets/skills/evidence-led-ui/SKILL.md +69 -127
- package/assets/skills/evidence-led-ui/references/anti-defaults.md +107 -208
- package/assets/skills/evidence-led-ui/references/direction.md +124 -0
- package/assets/skills/evidence-led-ui/references/production-contract.md +8 -0
- package/assets/skills/evidence-led-ui/references/provenance.md +24 -1
- package/assets/skills/lean/SKILL.md +90 -71
- package/assets/skills/lean/references/memory-and-processes.md +3 -2
- package/assets/skills/lean/references/playbooks.md +37 -12
- package/assets/skills/refactoring/SKILL.md +24 -3
- package/assets/skills/refactoring/references/agent-pitfalls.md +4 -1
- package/assets/skills/refactoring/references/legacy.md +21 -0
- package/assets/skills/root-cause/SKILL.md +20 -10
- package/assets/skills/shared-language/SKILL.md +16 -14
- package/assets/skills/tdd/SKILL.md +27 -15
- package/dist/app-sidecar.js +203 -47
- package/dist/app-sidecar.js.map +1 -1
- package/dist/cli.js +17 -26
- package/dist/cli.js.map +1 -1
- package/dist/core/acceptance-checks.d.ts +48 -0
- package/dist/core/acceptance-checks.js +144 -0
- package/dist/core/acceptance-checks.js.map +1 -0
- package/dist/core/agent-session.d.ts +106 -72
- package/dist/core/agent-session.js +539 -399
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/agents.d.ts +6 -5
- package/dist/core/agents.js.map +1 -1
- package/dist/core/ask-user.d.ts +90 -8
- package/dist/core/ask-user.js +124 -13
- package/dist/core/ask-user.js.map +1 -1
- package/dist/core/bundled-agents.js +1 -3
- package/dist/core/bundled-agents.js.map +1 -1
- package/dist/core/cache-diagnostics.d.ts +68 -0
- package/dist/core/cache-diagnostics.js +196 -0
- package/dist/core/cache-diagnostics.js.map +1 -0
- package/dist/core/cache-expiry.d.ts +87 -0
- package/dist/core/cache-expiry.js +111 -0
- package/dist/core/cache-expiry.js.map +1 -0
- package/dist/core/compaction/compactor.js +78 -48
- package/dist/core/compaction/compactor.js.map +1 -1
- package/dist/core/compaction/plan-step-policy.d.ts +46 -0
- package/dist/core/compaction/plan-step-policy.js +57 -0
- package/dist/core/compaction/plan-step-policy.js.map +1 -0
- package/dist/core/destructive-git-guard.d.ts +90 -0
- package/dist/core/destructive-git-guard.js +871 -0
- package/dist/core/destructive-git-guard.js.map +1 -0
- package/dist/core/event-bus.d.ts +3 -0
- package/dist/core/event-bus.js +5 -0
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/injection-detect.d.ts +38 -0
- package/dist/core/injection-detect.js +232 -0
- package/dist/core/injection-detect.js.map +1 -0
- package/dist/core/keep-awake.d.ts +88 -0
- package/dist/core/keep-awake.js +251 -0
- package/dist/core/keep-awake.js.map +1 -0
- package/dist/core/mcp/client.d.ts +72 -0
- package/dist/core/mcp/client.js +264 -41
- package/dist/core/mcp/client.js.map +1 -1
- package/dist/core/mcp/content.js +6 -2
- package/dist/core/mcp/content.js.map +1 -1
- package/dist/core/mcp/store.d.ts +6 -1
- package/dist/core/mcp/store.js +12 -1
- package/dist/core/mcp/store.js.map +1 -1
- package/dist/core/mcp/types.d.ts +18 -0
- package/dist/core/model-unavailable.d.ts +14 -0
- package/dist/core/model-unavailable.js +23 -0
- package/dist/core/model-unavailable.js.map +1 -0
- package/dist/core/node-debugger.d.ts +148 -0
- package/dist/core/node-debugger.js +642 -0
- package/dist/core/node-debugger.js.map +1 -0
- package/dist/core/package-threats.d.ts +18 -0
- package/dist/core/package-threats.js +168 -0
- package/dist/core/package-threats.js.map +1 -0
- package/dist/core/persistent-shell.d.ts +58 -6
- package/dist/core/persistent-shell.js +331 -49
- package/dist/core/persistent-shell.js.map +1 -1
- package/dist/core/process-manager.d.ts +14 -0
- package/dist/core/process-manager.js +61 -0
- package/dist/core/process-manager.js.map +1 -1
- package/dist/core/progress/git-xp.js +8 -14
- package/dist/core/progress/git-xp.js.map +1 -1
- package/dist/core/session-history.d.ts +12 -0
- package/dist/core/session-history.js +27 -0
- package/dist/core/session-history.js.map +1 -1
- package/dist/core/session-manager.d.ts +13 -1
- package/dist/core/session-manager.js +38 -18
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-summary-index.d.ts +37 -0
- package/dist/core/session-summary-index.js +172 -0
- package/dist/core/session-summary-index.js.map +1 -0
- package/dist/core/settings-manager.d.ts +2 -0
- package/dist/core/settings-manager.js +10 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/shell-threats-popular-packages.d.ts +11 -0
- package/dist/core/shell-threats-popular-packages.js +675 -0
- package/dist/core/shell-threats-popular-packages.js.map +1 -0
- package/dist/core/shell-threats.d.ts +8 -0
- package/dist/core/shell-threats.js +186 -0
- package/dist/core/shell-threats.js.map +1 -0
- package/dist/core/skills.js +3 -1
- package/dist/core/skills.js.map +1 -1
- package/dist/core/stream-rules.d.ts +30 -0
- package/dist/core/stream-rules.js +151 -0
- package/dist/core/stream-rules.js.map +1 -0
- package/dist/core/subagent-manager.d.ts +20 -5
- package/dist/core/subagent-manager.js +22 -8
- package/dist/core/subagent-manager.js.map +1 -1
- package/dist/core/subagent-receipt.d.ts +54 -0
- package/dist/core/subagent-receipt.js +276 -0
- package/dist/core/subagent-receipt.js.map +1 -0
- package/dist/core/subagent-turn-record.d.ts +2 -0
- package/dist/core/subagent-turn-record.js.map +1 -1
- package/dist/core/test-impact.d.ts +73 -0
- package/dist/core/test-impact.js +467 -0
- package/dist/core/test-impact.js.map +1 -0
- package/dist/core/thinking-level.d.ts +1 -1
- package/dist/core/thinking-level.js +1 -1
- package/dist/core/thinking-level.js.map +1 -1
- package/dist/core/verification-gate.d.ts +2 -0
- package/dist/core/verification-gate.js +4 -0
- package/dist/core/verification-gate.js.map +1 -1
- package/dist/core/verification-snapshot.js +3 -5
- package/dist/core/verification-snapshot.js.map +1 -1
- package/dist/core/workspace-guard.d.ts +18 -7
- package/dist/core/workspace-guard.js +227 -60
- package/dist/core/workspace-guard.js.map +1 -1
- package/dist/interactive.js +2 -1
- package/dist/interactive.js.map +1 -1
- package/dist/modes/subagent-worker-mode.js +34 -6
- package/dist/modes/subagent-worker-mode.js.map +1 -1
- package/dist/motion-agent/motion-agent.d.ts +6 -2
- package/dist/motion-agent/motion-agent.js +5 -7
- package/dist/motion-agent/motion-agent.js.map +1 -1
- package/dist/motion-agent/motion-prompt.d.ts +1 -1
- package/dist/motion-agent/motion-prompt.js +14 -19
- package/dist/motion-agent/motion-prompt.js.map +1 -1
- package/dist/motion-agent/motion-review.d.ts +10 -3
- package/dist/motion-agent/motion-review.js +15 -7
- package/dist/motion-agent/motion-review.js.map +1 -1
- package/dist/motion-agent/motion-studio-context.js +1 -1
- package/dist/motion-agent/motion-studio-context.js.map +1 -1
- package/dist/system-prompt.js +3 -1
- package/dist/system-prompt.js.map +1 -1
- package/dist/test-support/keep-alive.d.ts +14 -0
- package/dist/test-support/keep-alive.js +17 -0
- package/dist/test-support/keep-alive.js.map +1 -0
- package/dist/tools/ask-user.js +3 -3
- package/dist/tools/ask-user.js.map +1 -1
- package/dist/tools/bash-read-evidence.d.ts +10 -0
- package/dist/tools/bash-read-evidence.js +133 -0
- package/dist/tools/bash-read-evidence.js.map +1 -0
- package/dist/tools/bash.d.ts +10 -1
- package/dist/tools/bash.js +115 -7
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/debug.d.ts +54 -0
- package/dist/tools/debug.js +233 -0
- package/dist/tools/debug.js.map +1 -0
- package/dist/tools/edit.js +12 -4
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/goals.d.ts +1 -1
- package/dist/tools/index.d.ts +19 -2
- package/dist/tools/index.js +47 -7
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/prompt-hints.js +2 -0
- package/dist/tools/prompt-hints.js.map +1 -1
- package/dist/tools/read-tracker.d.ts +5 -0
- package/dist/tools/read-tracker.js +19 -9
- package/dist/tools/read-tracker.js.map +1 -1
- package/dist/tools/read.js +3 -2
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/skill.js +5 -0
- package/dist/tools/skill.js.map +1 -1
- package/dist/tools/subagent-control.js +44 -8
- package/dist/tools/subagent-control.js.map +1 -1
- package/dist/tools/subagent-shared.d.ts +29 -8
- package/dist/tools/subagent-shared.js +45 -14
- package/dist/tools/subagent-shared.js.map +1 -1
- package/dist/tools/subagent.d.ts +8 -2
- package/dist/tools/subagent.js +28 -10
- package/dist/tools/subagent.js.map +1 -1
- package/dist/tools/task-output.js +3 -2
- package/dist/tools/task-output.js.map +1 -1
- package/dist/tools/task-send.d.ts +1 -1
- package/dist/tools/task-send.js +15 -1
- package/dist/tools/task-send.js.map +1 -1
- package/dist/tools/tool-tiers.d.ts +2 -2
- package/dist/tools/tool-tiers.js +3 -2
- package/dist/tools/tool-tiers.js.map +1 -1
- package/dist/tools/truncate.d.ts +21 -0
- package/dist/tools/truncate.js +187 -0
- package/dist/tools/truncate.js.map +1 -1
- package/dist/tools/ui-adopt.js +2 -0
- package/dist/tools/ui-adopt.js.map +1 -1
- package/dist/ui/App.d.ts +0 -4
- package/dist/ui/App.js +5 -28
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/components/ActivityIndicator.js +1 -0
- package/dist/ui/components/ActivityIndicator.js.map +1 -1
- package/dist/ui/hooks/useAgentLoop.d.ts +1 -8
- package/dist/ui/hooks/useAgentLoop.js +1 -119
- package/dist/ui/hooks/useAgentLoop.js.map +1 -1
- package/dist/ui/render.d.ts +0 -4
- package/dist/ui/render.js +0 -2
- package/dist/ui/render.js.map +1 -1
- package/dist/utils/git.d.ts +77 -0
- package/dist/utils/git.js +285 -21
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/github-ci.js +2 -1
- package/dist/utils/github-ci.js.map +1 -1
- package/dist/utils/github.js +11 -9
- package/dist/utils/github.js.map +1 -1
- package/dist/utils/image.d.ts +14 -0
- package/dist/utils/image.js +16 -0
- package/dist/utils/image.js.map +1 -1
- package/dist/utils/process.d.ts +20 -0
- package/dist/utils/process.js +98 -0
- package/dist/utils/process.js.map +1 -1
- package/package.json +5 -5
- package/assets/motion/references/motion-language.md +0 -128
- package/assets/motion/skills/video-qa/SKILL.md +0 -89
- package/dist/core/ideal-review-subagent.d.ts +0 -56
- package/dist/core/ideal-review-subagent.js +0 -112
- package/dist/core/ideal-review-subagent.js.map +0 -1
- package/dist/core/ideal-review.d.ts +0 -82
- package/dist/core/ideal-review.js +0 -242
- package/dist/core/ideal-review.js.map +0 -1
- package/dist/motion-agent/motion-check-tool.d.ts +0 -35
- package/dist/motion-agent/motion-check-tool.js +0 -514
- package/dist/motion-agent/motion-check-tool.js.map +0 -1
|
@@ -1,211 +1,110 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Slop Tells and Replacement Moves
|
|
2
2
|
|
|
3
3
|
## Contents
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
##
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
**Legitimate when:** The screen is genuinely an overview of heterogeneous modules and tile persistence supports scanning or rearrangement.
|
|
112
|
-
|
|
113
|
-
## Ambient perpetual motion
|
|
114
|
-
|
|
115
|
-
**AI tell:** Marquees, floating particles, pulsing glows, or auto-rotating cards that continue without user intent.
|
|
116
|
-
|
|
117
|
-
**Default action:** Keep the resting screen still; animate state change, spatial continuity, feedback, or a finite narrative beat.
|
|
118
|
-
|
|
119
|
-
**Legitimate when:** Motion is the content (audio, time, live system activity), remains comprehensible when paused, and has a reduced-motion alternative.
|
|
120
|
-
|
|
121
|
-
## Generic icon medallions
|
|
122
|
-
|
|
123
|
-
**AI tell:** Every section starts with a line icon inside the same tinted rounded square.
|
|
124
|
-
|
|
125
|
-
**Default action:** Remove icons that repeat the heading; use diagrams, imagery, or symbols only where recognition becomes faster.
|
|
126
|
-
|
|
127
|
-
**Legitimate when:** Icons support repeated navigation, status scanning, compact controls, or a real category system.
|
|
128
|
-
|
|
129
|
-
## False authenticity
|
|
130
|
-
|
|
131
|
-
**AI tell:** Invented testimonials, logos, avatars, customer counts, ratings, or precise business data.
|
|
132
|
-
|
|
133
|
-
**Default action:** Use real project content; if unavailable, label honest illustrative content plainly and avoid claims.
|
|
134
|
-
|
|
135
|
-
**Legitimate when:** The user explicitly supplies approved fixtures or asks for a clearly marked prototype dataset.
|
|
136
|
-
|
|
137
|
-
## Emoji used as interface imagery
|
|
138
|
-
|
|
139
|
-
**AI tell:** Emoji stand in for icons, status marks, bullets, empty-state art, or section decoration, producing platform-dependent color and inconsistent geometry.
|
|
140
|
-
|
|
141
|
-
**Default action:** Reuse the project's icon system or one coherent icon package, with accessible labels and consistent optical sizing.
|
|
142
|
-
|
|
143
|
-
**Legitimate when:** The user explicitly requests emoji, emoji is the actual content being entered or discussed, or exact supplied source copy must retain it.
|
|
144
|
-
|
|
145
|
-
## Mixed or improvised icon language
|
|
146
|
-
|
|
147
|
-
**AI tell:** Package icons, hand-drawn SVGs, text glyphs, and platform symbols appear together with mismatched stroke, fill, weight, and bounding boxes.
|
|
148
|
-
|
|
149
|
-
**Default action:** Select one installed family and one wrapper component. Normalize size, stroke/fill, color, target, label, and state treatment.
|
|
150
|
-
|
|
151
|
-
**Legitimate when:** A required third-party brand mark or native platform symbol carries meaning that the product icon family cannot replace.
|
|
152
|
-
|
|
153
|
-
## Generic hover lift
|
|
154
|
-
|
|
155
|
-
**AI tell:** Cards and buttons jump upward, scale, bob, or float on every hover regardless of material or task.
|
|
156
|
-
|
|
157
|
-
**Default action:** Use a short background, border, underline, icon-fill, opacity, or restrained shadow transition. Keep geometry stable.
|
|
158
|
-
|
|
159
|
-
**Legitimate when:** Spatial movement communicates actual drag, depth, stacking, or physical direct manipulation, and reduced motion removes non-essential travel.
|
|
160
|
-
|
|
161
|
-
## Abrupt interactive states
|
|
162
|
-
|
|
163
|
-
**AI tell:** Hover, press, expand, selection, loading, success, and error snap with no continuity or acknowledgement.
|
|
164
|
-
|
|
165
|
-
**Default action:** Give every relevant state clear feedback and transition interpolable properties with shared duration/easing tokens. Keep focus visible immediately.
|
|
166
|
-
|
|
167
|
-
**Legitimate when:** Reduced-motion preference, urgent safety feedback, or an inherently discrete state requires an immediate change; meaning must still remain clear.
|
|
168
|
-
|
|
169
|
-
## Accidental misalignment
|
|
170
|
-
|
|
171
|
-
**AI tell:** Almost-shared edges, drifting section widths, mismatched card padding, uneven control heights, and dividers that miss neighboring boundaries.
|
|
172
|
-
|
|
173
|
-
**Default action:** Establish key lines, grid, spacing tokens, component anatomy, and responsive alignment before adding decoration.
|
|
174
|
-
|
|
175
|
-
**Legitimate when:** A deliberate editorial or media break communicates hierarchy and remains visibly intentional across viewports.
|
|
176
|
-
|
|
177
|
-
## Reimplemented local styling
|
|
178
|
-
|
|
179
|
-
**AI tell:** A new button, modal, card, status color, icon wrapper, or focus ring duplicates an existing project primitive with slightly different values.
|
|
180
|
-
|
|
181
|
-
**Default action:** Reuse the existing component or extend its documented variant API. Add a new primitive only for a genuinely different semantic role.
|
|
182
|
-
|
|
183
|
-
**Legitimate when:** The project has no suitable primitive or reuse would corrupt semantics; document the new role and make it reusable.
|
|
184
|
-
|
|
185
|
-
## Generic type by neglect
|
|
186
|
-
|
|
187
|
-
**AI tell:** Net-new aesthetic work ships with Arial, Helvetica, or bare `system-ui` because typography was never designed.
|
|
188
|
-
|
|
189
|
-
**Default action:** Reuse the product type system or choose an intentional, efficiently loaded family/pairing from `craft-rulings.md`. Assign clear display, body, utility, and technical roles.
|
|
190
|
-
|
|
191
|
-
**Legitimate when:** The existing system requires it, native platform fidelity is the goal, network/self-hosted fonts are prohibited, or performance evidence favors the established stack.
|
|
192
|
-
|
|
193
|
-
## Generated em dash voice
|
|
194
|
-
|
|
195
|
-
**AI tell:** UI headings, descriptions, empty states, and helper text repeatedly use em dashes as an LLM writing habit.
|
|
196
|
-
|
|
197
|
-
**Default action:** Rewrite with a period, comma, colon, parentheses, or two sentences.
|
|
198
|
-
|
|
199
|
-
**Legitimate when:** The user explicitly wants em dashes or exact supplied, quoted, brand, or legal copy must remain unchanged.
|
|
200
|
-
|
|
201
|
-
## Anti-default review
|
|
202
|
-
|
|
203
|
-
Before implementation, flag every pattern above that appears in the thesis. Keep a flagged choice only with its one-sentence product-specific justification.
|
|
204
|
-
|
|
205
|
-
After the first screenshot:
|
|
206
|
-
|
|
207
|
-
1. Cover the logo and product name. Identify what still makes the screen specific.
|
|
208
|
-
2. Remove one decorative idea and compare hierarchy.
|
|
209
|
-
3. Replace one block of generic copy with real content.
|
|
210
|
-
4. Check whether the signature survives mobile without becoming clutter.
|
|
211
|
-
5. If another unrelated product could use the same screenshot unchanged, revise the weakest area.
|
|
5
|
+
1. How to use this list
|
|
6
|
+
2. Composition tells
|
|
7
|
+
3. Colour, type, and surface tells
|
|
8
|
+
4. Content and copy tells
|
|
9
|
+
5. Motion and interaction tells
|
|
10
|
+
6. Craft regressions
|
|
11
|
+
7. Calibration: the default clusters
|
|
12
|
+
8. Final slop review
|
|
13
|
+
|
|
14
|
+
## 1. How to use this list
|
|
15
|
+
|
|
16
|
+
A tell is not a ban. It is a choice that appears whatever the subject, so it signals "nobody decided this". Where the user's brief or the existing product pins down a direction, follow it exactly, even if it matches a tell. Where an axis is free, do not spend it on a tell.
|
|
17
|
+
|
|
18
|
+
For each tell found in a plan or render, apply the replacement move, or keep it only if the "Keep when" condition holds and you write one sentence: **"This belongs because…"** naming the product, audience, or content reason. "Modern", "premium", "clean", "engaging", or "on brand" is not a reason.
|
|
19
|
+
|
|
20
|
+
Run the list twice: on the written design thesis before code, and on desktop + mobile screenshots after.
|
|
21
|
+
|
|
22
|
+
## 2. Composition tells
|
|
23
|
+
|
|
24
|
+
| Tell | Replacement move | Keep when |
|
|
25
|
+
| --- | --- | --- |
|
|
26
|
+
| Centered gradient hero: oversized centered headline, violet/blue glow, two CTAs, floating screenshot below | Open with the most characteristic thing in the subject's world: real product state, real data, a working demo, a strong photograph, or a plain typographic claim. Choose alignment after content. | The brand owns the gradient/light, the page has one conversion job, and the centered pause serves the narrative. |
|
|
27
|
+
| Three equal icon-title-copy feature cards | Rank the content; give the main point more space; show the feature working; use a list or table for true peers. | Exactly three peer choices exist and comparison is the task. |
|
|
28
|
+
| Bento grid by default | Map module size to priority and reading order; use a sequence or list otherwise. | A genuine overview of heterogeneous modules that users scan or rearrange. |
|
|
29
|
+
| SaaS card kit: everything in identical rounded cards, one radius, same soft grey shadow | Group with whitespace and alignment. Containers only for real objects (selectable, draggable, separate records). Radius varies by role. | The items really are separate records. |
|
|
30
|
+
| Decorative eyebrow: tracked ALL-CAPS or mono label above every heading | Delete it. | It names real taxonomy, step, status, or technical context. |
|
|
31
|
+
| Numbered markers (01 / 02 / 03) on non-sequential content | Remove numbers. | The content is a real sequence: steps, timeline, ranking. |
|
|
32
|
+
| Big-number stat strip ("10x faster", "99.9%", "50k+") | Show a sourced metric with unit, time frame, and consequence, or remove it. | The metric is auditable and central to the screen's decision. |
|
|
33
|
+
| Floating tilted screenshot or fake dashboard mockup | Real UI at readable scale, cropped to the part that proves the adjacent claim. | Spatial overview matters, the image is current, perspective hides nothing. |
|
|
34
|
+
| Fake terminal or code theatre | Real, copyable, versioned commands and output, or ordinary product evidence. | The user's task is genuinely code/CLI. |
|
|
35
|
+
| Pills everywhere: nav, buttons, filters, badges, inputs | Pills for toggles/tags only; a small radius vocabulary elsewhere. | The product already uses a capsule motif deliberately. |
|
|
36
|
+
| Icon medallion: line icon in the same tinted square above every section | Remove icons that repeat the heading. | Icons speed navigation, status scanning, or a real category system. |
|
|
37
|
+
| Logo wall of invented or unlicensed customers | Real, permitted logos, or no social proof. | Supplied and approved. |
|
|
38
|
+
|
|
39
|
+
## 3. Colour, type, and surface tells
|
|
40
|
+
|
|
41
|
+
| Tell | Replacement move | Keep when |
|
|
42
|
+
| --- | --- | --- |
|
|
43
|
+
| Purple/indigo/violet gradient as the default brand; Tailwind `indigo-500`/`violet-600` primary | Derive the hue from the subject, materials, or existing brand; build an OKLCH ramp (`references/direction.md` § Colour). | The existing brand is that hue. |
|
|
44
|
+
| Out-of-box shadcn/Tailwind look: `slate`/`zinc` greys, `rounded-lg` everywhere, `ring-2 ring-offset-2`, default button set | Keep primitives for behaviour; restyle tokens: neutrals tinted toward the brand hue, a deliberate radius scale, the project's own focus treatment. | The project already ships that look; then preserve it. |
|
|
45
|
+
| Inter, Geist, or bare `system-ui` as the whole aesthetic; Arial/Helvetica by neglect | Choose a family or pairing for this subject (`references/direction.md` § Type). | The existing system uses it, native fidelity is the goal, webfonts are prohibited, or it is dense app chrome. |
|
|
46
|
+
| One headline word accented in gradient, italic, or colour | Let the whole headline carry the treatment, or make emphasis carry meaning (a value, a name). | The accented word is data. |
|
|
47
|
+
| Glass cards: blurred translucent panels over colour blobs | One clear material model (flat, tonal, bordered, or measured elevation), one reason per layer. | Content sits over live media/map/video, or translucency is the local platform material. |
|
|
48
|
+
| Dark equals premium; near-black `#0B0B0B`/`#111` with one acid-green or vermilion accent | Choose theme from environment, task duration, and media. If dark, tune OKLCH neutrals and measure contrast in both themes. | Media needs darkness, low-light use, or a tested dark-first brand. |
|
|
49
|
+
| Warm cream (~`#F4F1EA`) + high-contrast serif + terracotta (~`#D97757`) | Anthropic names this its own Claude-interaction look; on a user's brief it reads as a tell. Choose another direction. | The brief asks for it. |
|
|
50
|
+
| Broadsheet pastiche: hairline rules, zero radius, dense columns | Editorial structure only for editorial content. | The surface is editorial. |
|
|
51
|
+
| Soft semantic tint-on-tint (low-opacity hue bg + same-hue text/icon/border) | `references/craft-rulings.md` § No soft semantic tint-on-tint. This one is a binding default, not a style preference. | The user requests it or scope requires reusing an existing variant. |
|
|
52
|
+
| Huge type (96–160px) as the only idea | Build contrast from wording, measure, weight, width, and placement before size. | Campaign/editorial, short phrase, localization tested, type is the signature. |
|
|
53
|
+
| Monospace for small data labels by reflex | Mono only for code and IDs; tabular numerals of the body face for figures. | Technical context the user reads as code. |
|
|
54
|
+
|
|
55
|
+
## 4. Content and copy tells
|
|
56
|
+
|
|
57
|
+
| Tell | Replacement move | Keep when |
|
|
58
|
+
| --- | --- | --- |
|
|
59
|
+
| Lorem ipsum or "Feature one / Feature two" in review | Write real copy first (content-first rule in SKILL.md). | Never in review; label fixtures as fixtures. |
|
|
60
|
+
| Fake metrics, testimonials, ratings, avatars, customer names, precise business data | Real content, or plainly labelled example data, or omit. | The user supplies approved fixtures or asks for a clearly marked prototype dataset. |
|
|
61
|
+
| Generic CTAs: "Get started", "Learn more", "Submit", "Unlock the power of…" | Name the outcome ("Create invoice", "Book a table"). Keep the verb through the flow ("Publish" → toast "Published"). | Never as a default. |
|
|
62
|
+
| Hype voice: "seamless", "effortless", "supercharge", "next-level", "revolutionize" | Say what it does in the user's own words. | Supplied brand copy. |
|
|
63
|
+
| Middle-dot meta strings, `WORD — fragment` labels, `→` on every link | Plain sentence-case labels; arrows only where direction is literal. | Supplied copy. |
|
|
64
|
+
| Emoji as icons, bullets, status, empty-state art | One coherent icon family (`references/craft-rulings.md` § 1). | Requested, or emoji is the content itself. |
|
|
65
|
+
| Placeholder illustration: blob people, abstract 3D shapes, generic stock, unrelated generated hero art | Real product imagery, photography, data, or no image. | Requested and appropriate to the subject. |
|
|
66
|
+
| Subtitle under every heading restating it | `references/craft-rulings.md` § Copy must earn its space. | It adds information needed here. |
|
|
67
|
+
| Em dashes in UI copy | Full stop, comma, colon, parentheses, or two sentences. | Requested, or exact supplied/quoted/legal copy. |
|
|
68
|
+
| Apologetic or vague errors ("Oops! Something went wrong") | Say what happened and how to fix it; no apology. | Never. |
|
|
69
|
+
|
|
70
|
+
## 5. Motion and interaction tells
|
|
71
|
+
|
|
72
|
+
| Tell | Replacement move | Keep when |
|
|
73
|
+
| --- | --- | --- |
|
|
74
|
+
| Fade-and-slide-up on every section as it scrolls in | At most one orchestrated moment; content readable with motion off. | A single deliberate narrative beat. |
|
|
75
|
+
| Hover lift, bob, or scale on every card/button | Colour, border, underline, icon-fill, opacity, or restrained shadow; stable geometry. | Movement communicates real drag, depth, or direct manipulation. |
|
|
76
|
+
| Ambient perpetual motion: particles, gradient drift, marquees, auto-rotating cards | Still resting screen; animate state change only. Pause control if > 5 s. | Motion is the content (audio, time, live activity) and works paused. |
|
|
77
|
+
| `transition: all` | Name properties; shared duration/easing tokens. | Never. |
|
|
78
|
+
| Abrupt state swaps; layout shift on load | Short transitions on interpolable properties; skeletons matching final geometry; focus visible immediately. | Reduced motion or urgent feedback needs an instant change. |
|
|
79
|
+
| Whole card clickable with nested buttons | One link target per card, or explicit buttons; never nested interactive elements. | Never. |
|
|
80
|
+
|
|
81
|
+
## 6. Craft regressions
|
|
82
|
+
|
|
83
|
+
Treat each as a tell when found in a render; fixes live in `references/craft-rulings.md`:
|
|
84
|
+
|
|
85
|
+
- accidental misalignment and drifting content rails;
|
|
86
|
+
- a local button, modal, card, status colour, or focus ring duplicating an existing primitive with slightly different values;
|
|
87
|
+
- mixed icon families (package icons, hand-drawn SVG, text glyphs together);
|
|
88
|
+
- sticky pointer focus, stacked focus rings, edge-hugging dropdown chevrons.
|
|
89
|
+
|
|
90
|
+
## 7. Calibration: the default clusters
|
|
91
|
+
|
|
92
|
+
Generated UI clusters into a few looks that appear whatever the subject (SNAPSHOT/DEDUCED; sources in `references/provenance.md` § Slop-tell sources). Recognise them in your own plan:
|
|
93
|
+
|
|
94
|
+
1. Purple-to-blue SaaS: centered hero, glow, Inter, three feature cards, logo wall, three-tier pricing.
|
|
95
|
+
2. shadcn default: zinc greys, `rounded-lg` cards, outline buttons, four KPI cards over a line chart.
|
|
96
|
+
3. Dark "premium": near-black, one neon accent, glass cards, grid-line background, mono labels.
|
|
97
|
+
4. Warm editorial: cream, serif display, terracotta accent, hairline rules.
|
|
98
|
+
5. Template chrome: ALL-CAPS eyebrows, middle-dot meta, `→` on links, emoji section markers.
|
|
99
|
+
|
|
100
|
+
Ask: "Would I produce this same plan for a neighbouring product?" If yes, change the most transferable axis (usually colour, type, or hero composition) and state what changed and why.
|
|
101
|
+
|
|
102
|
+
## 8. Final slop review
|
|
103
|
+
|
|
104
|
+
On the rendered desktop and mobile screenshots:
|
|
105
|
+
|
|
106
|
+
1. Cover the logo and accent colour. Can you still name the product and task?
|
|
107
|
+
2. Does any tell from §§ 2–5 remain without a "This belongs because…" sentence?
|
|
108
|
+
3. Is every number, quote, and logo traceable to real content or labelled as a fixture?
|
|
109
|
+
4. Is there exactly one memorable device, with everything around it quiet, and does it survive mobile without clutter?
|
|
110
|
+
5. Remove one decorative element. If the screen did not get worse, leave it removed.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Picking a Direction
|
|
2
|
+
|
|
3
|
+
## Contents
|
|
4
|
+
|
|
5
|
+
1. Content first
|
|
6
|
+
2. The thesis template
|
|
7
|
+
3. Type
|
|
8
|
+
4. Colour (OKLCH, measured)
|
|
9
|
+
5. Spacing, density, radius
|
|
10
|
+
6. Imagery
|
|
11
|
+
7. Motion
|
|
12
|
+
8. Platform features worth using (verified Baseline status)
|
|
13
|
+
9. Responsiveness and INP practice
|
|
14
|
+
|
|
15
|
+
Use for net-new UI, redesigns, or when the existing product leaves an axis free. If the project already has a system, preserve it and skip to § 8–9.
|
|
16
|
+
|
|
17
|
+
## 1. Content first
|
|
18
|
+
|
|
19
|
+
Before any layout:
|
|
20
|
+
|
|
21
|
+
1. Write the real headline, primary action label, and the copy for every section, in the user's vocabulary.
|
|
22
|
+
2. Gather or write realistic data: longest names, empty values, large numbers, 0/1/many items, localized strings.
|
|
23
|
+
3. Rank it: what must be seen first, second, and what is the one action.
|
|
24
|
+
4. Only then pick layout. If a section has nothing true to say, delete the section, do not design a container for it.
|
|
25
|
+
|
|
26
|
+
Fixtures must be labelled as fixtures. Never invent proof (`references/anti-defaults.md` § 4).
|
|
27
|
+
|
|
28
|
+
## 2. The thesis template
|
|
29
|
+
|
|
30
|
+
Write this before code (in `DESIGN.md` for broad work, in notes otherwise). Max ~12 lines.
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
Subject + audience + single job:
|
|
34
|
+
Signature (one memorable device, from the subject's world):
|
|
35
|
+
Type: display / body / utility roles, families, scale ratio
|
|
36
|
+
Colour: 4–6 named OKLCH tokens + intended contrast pairs
|
|
37
|
+
Space/density: base unit, scale, density mode
|
|
38
|
+
Radius + material: scale by role; surface model (flat / tonal / bordered / elevated)
|
|
39
|
+
Imagery: source and treatment, or "none"
|
|
40
|
+
Motion: the one orchestrated moment + feedback durations/easing
|
|
41
|
+
Alignment: rail width, grid, left/center rule
|
|
42
|
+
Rejected defaults: which slop tells this plan avoided and what replaced them
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Then run the neighbour test from `references/anti-defaults.md` § 7 on the plan and revise once.
|
|
46
|
+
|
|
47
|
+
## 3. Type
|
|
48
|
+
|
|
49
|
+
- One family or two; if two, make them clearly different (e.g. a characterful display + a quiet text face, or a serif text + a grotesque UI face). Three only when a mono is needed for code.
|
|
50
|
+
- Choose from the subject: technical precision, warmth, editorial authority, playfulness. Name the reason in the thesis.
|
|
51
|
+
- Avoid Inter/Geist/system-ui as the identity of a marketing or brand surface. They remain fine for dense application chrome or when the project already uses them.
|
|
52
|
+
- Scale: one ratio (e.g. 1.2 for dense apps, 1.25–1.333 for marketing) mapped to named tokens; no ad-hoc sizes.
|
|
53
|
+
- Measure: body text under ~75 characters; serif body gets slightly more line-height.
|
|
54
|
+
- Use `text-wrap: balance` on headings and `text-wrap: pretty` on paragraphs as progressive enhancement.
|
|
55
|
+
- Tabular numerals (`font-variant-numeric: tabular-nums`) for columns of figures.
|
|
56
|
+
- Loading and font candidates: `references/craft-rulings.md` § 5.
|
|
57
|
+
|
|
58
|
+
## 4. Colour (OKLCH, measured)
|
|
59
|
+
|
|
60
|
+
- Start from one brand hue derived from the subject or existing brand. Not violet/indigo by default.
|
|
61
|
+
- Define tokens in `oklch()` (Baseline widely available). Build ramps by stepping lightness (L) at fixed hue; reduce chroma (C) near the light and dark ends so colours stay in gamut.
|
|
62
|
+
- Neutrals: tint toward the brand hue with very low chroma (about 0.005–0.02) instead of stock `slate`/`zinc`.
|
|
63
|
+
- Roles, not hues: `bg`, `surface`, `text`, `text-muted`, `border`, `accent`, `accent-contrast`, `focus`, `danger`, `success`. Components consume roles only.
|
|
64
|
+
- Accent covers a small share of the screen; status colours are reserved for status.
|
|
65
|
+
- Themes: `light-dark()` (Baseline newly available) or `prefers-color-scheme` tokens; tune dark neutrals separately rather than inverting.
|
|
66
|
+
- Contrast is measured, not eyeballed. WCAG 2.2 AA: 4.5:1 normal text, 3:1 large text, 3:1 for UI component boundaries, icons, and focus indicators against adjacent colours. Compute ratios from the resolved sRGB values (browser devtools, axe, or a script) for every text/background pair in both themes and record them. OKLCH lightness is a design aid, not a WCAG measurement.
|
|
67
|
+
- `color-mix()` (Baseline widely available) for hover/pressed derivations from tokens instead of new hard-coded values.
|
|
68
|
+
|
|
69
|
+
## 5. Spacing, density, radius
|
|
70
|
+
|
|
71
|
+
- One base unit (4 or 8 px) and a named scale; no off-scale values.
|
|
72
|
+
- Density by task: data-dense tools use compact rows and small gaps; marketing uses generous section spacing. Do not mix densities within one view without reason.
|
|
73
|
+
- Group with proximity first, then alignment, then borders, then fills. Shadows last and with one reason.
|
|
74
|
+
- Radius scale by role (e.g. inputs and buttons share one, overlays another, avatars full). Never one radius for everything by reflex.
|
|
75
|
+
- One shared content rail (`references/craft-rulings.md` § Shared content rails).
|
|
76
|
+
|
|
77
|
+
## 6. Imagery
|
|
78
|
+
|
|
79
|
+
Priority: real product UI at readable scale → real photography of the subject → real data visualised → typography alone. Generated or stock illustration only when requested. Every image needs dimensions (no layout shift), meaningful `alt` or empty `alt` if decorative, and responsive sources.
|
|
80
|
+
|
|
81
|
+
## 7. Motion
|
|
82
|
+
|
|
83
|
+
- One orchestrated moment per page at most (a load sequence or one reveal). Everything else is feedback to user action.
|
|
84
|
+
- Feedback: about 100–200 ms for hover/press, about 200–300 ms for panels; ease-out for entering, ease-in for leaving. Use tokens.
|
|
85
|
+
- Animate `transform` and `opacity`; name transitioned properties.
|
|
86
|
+
- Every motion has a `prefers-reduced-motion` path that keeps meaning.
|
|
87
|
+
- Auto-playing motion longer than 5 s needs pause/stop/hide (WCAG 2.2.2).
|
|
88
|
+
|
|
89
|
+
## 8. Platform features worth using (verified Baseline status)
|
|
90
|
+
|
|
91
|
+
Status from the `web-features` package v3.40.1 (published 1 Oct 2026), read 3 Oct 2026 (SNAPSHOT). Re-check on https://webstatus.dev before relying on newer items.
|
|
92
|
+
|
|
93
|
+
| Feature | Baseline | Use by default? |
|
|
94
|
+
| --- | --- | --- |
|
|
95
|
+
| Container queries (size) | Widely available | Yes, for components that live in varying containers. |
|
|
96
|
+
| `:has()` | Widely available | Yes, for parent/state styling instead of JS class toggling. |
|
|
97
|
+
| `oklch()` / `oklab()`, `color-mix()` | Widely available | Yes, for tokens. |
|
|
98
|
+
| `<dialog>`, `inert` | Widely available | Yes, for modals and disabling background regions. |
|
|
99
|
+
| Subgrid | Widely available | Yes, for aligning card internals across a row. |
|
|
100
|
+
| Popover API | Newly available (Jan 2025) | Yes for menus/tooltips/popovers, with tested focus behaviour. |
|
|
101
|
+
| `text-wrap: balance` | Newly available | Yes on headings (harmless fallback). |
|
|
102
|
+
| `light-dark()` | Newly available | Yes when the project supports themes. |
|
|
103
|
+
| `@starting-style` | Newly available | Yes for entry transitions; content must work without it. |
|
|
104
|
+
| Same-document view transitions | Newly available (Oct 2025) | Yes as progressive enhancement with reduced-motion opt-out. |
|
|
105
|
+
| `details name` (exclusive accordions) | Newly available | Yes for simple accordions. |
|
|
106
|
+
| `field-sizing: content` | Newly available (Jun 2026) | Progressive enhancement for auto-growing textareas; keep a min/max size. |
|
|
107
|
+
| `text-wrap: pretty` | Not Baseline | Progressive enhancement only. |
|
|
108
|
+
| CSS anchor positioning | Not Baseline (Interop 2026 focus area) | Enhancement with a fallback position, or use the project's positioning library. |
|
|
109
|
+
| Scroll-driven animations | Not Baseline (Interop 2026 focus area) | Decorative enhancement only; never required for content. |
|
|
110
|
+
| Cross-document view transitions | Not Baseline (Interop 2026 focus area) | Enhancement only. |
|
|
111
|
+
| `interpolate-size` | Not Baseline | Enhancement only. |
|
|
112
|
+
|
|
113
|
+
"Newly available" means supported in current versions of all core browsers but not yet for 30 months; check the project's support policy before relying on it without a fallback.
|
|
114
|
+
|
|
115
|
+
## 9. Responsiveness and INP practice
|
|
116
|
+
|
|
117
|
+
Interaction to Next Paint (INP) is the Core Web Vital for responsiveness; "good" is 200 ms or less at the 75th percentile (web.dev, SNAPSHOT).
|
|
118
|
+
|
|
119
|
+
- Paint feedback first: update the pressed/pending state synchronously, then do heavy work after yielding (`await scheduler.yield()` where supported, otherwise `setTimeout`/`requestAnimationFrame` fallback).
|
|
120
|
+
- Keep event handlers small; debounce typing-driven filtering; virtualize long lists; avoid layout thrash (read then write).
|
|
121
|
+
- Prefer CSS state (`:has()`, `:focus-visible`, popover, `<details>`) over JS-driven re-renders for simple UI state.
|
|
122
|
+
- Use `content-visibility: auto` for long offscreen sections when it does not break find-in-page or anchors in the target browsers.
|
|
123
|
+
- Reserve space for images, ads, embeds, and async content to avoid layout shift.
|
|
124
|
+
- Report measurements as RUNTIME only when measured; otherwise say unmeasured.
|
|
@@ -30,6 +30,13 @@ WCAG 2.2 Level AA is the default technical floor for web UI. Conformance means e
|
|
|
30
30
|
|
|
31
31
|
ADA is a civil-rights and equal-access obligation, not a technical certification. WCAG 2.2 Level AA is the engineering baseline, but meeting it does not by itself establish full ADA compliance. When ADA applies, verify the current Title II or Title III obligations, scope, exceptions, effective-communication duties, and alternative arrangements with the responsible product or legal owner. Never claim `ADA compliant` or `WCAG conformant` without evidence for a defined scope.
|
|
32
32
|
|
|
33
|
+
Dated legal and standards context (SNAPSHOT 3 Oct 2026, sources in `references/provenance.md`; re-check before citing to a user):
|
|
34
|
+
|
|
35
|
+
- WCAG 2.2 is the current W3C Recommendation. WCAG 3.0 is still a Working Draft (latest 10 Sep 2026): do not target or claim it.
|
|
36
|
+
- US ADA Title II web rule (state and local government): technical standard WCAG 2.1 AA. An April 2026 DOJ interim final rule moved compliance dates to 26 April 2027 (population 50,000+) and 26 April 2028 (smaller entities and special districts); substance unchanged. Private-sector (Title III) has no adopted technical standard; the equal-access duty still applies.
|
|
37
|
+
- EU European Accessibility Act: applies since 28 June 2025 to covered products and services (including e-commerce and consumer banking) placed on the EU market. The harmonised technical standard is expected to be EN 301 549 (WCAG-based); confirm the version the applicable national law references.
|
|
38
|
+
- Meeting WCAG 2.2 AA covers the WCAG 2.1 AA criteria these regimes reference. Applicability, exemptions, and legal claims belong to the product or legal owner; this skill never makes them.
|
|
39
|
+
|
|
33
40
|
- Define the conformance scope before broad implementation: routes/screens, complete user processes, content types, components and states, supported technologies, and the browser, device, input, and assistive-technology matrix. Audit against the current official [WCAG 2.2 Quick Reference](https://www.w3.org/WAI/WCAG22/quickref/), criterion by criterion; this summary is not a substitute. Track every applicable Level A and AA criterion as pass, fail, or not applicable with a rationale and evidence.
|
|
34
41
|
- Satisfy all five WCAG conformance requirements: the claimed level, full pages, every page in each complete process, only accessibility-supported uses of technology, and non-interference from any non-conforming content. One unresolved applicable failure blocks conformance.
|
|
35
42
|
- Use native semantics and controls first. Supply meaningful text alternatives for informative images, controls, and graphics; mark decoration as decorative. Preserve programmatic information and relationships, headings, landmarks, lists, tables, meaningful sequence, page and passage language, reading order, and a bypass route for repeated blocks.
|
|
@@ -83,6 +90,7 @@ For web surfaces, use current Core Web Vitals as the shared target at the 75th p
|
|
|
83
90
|
## 6. Modern platform features and progressive enhancement
|
|
84
91
|
|
|
85
92
|
- Set a browser and device support policy from project evidence. Prefer features in the project's Baseline/support range; use feature detection and a simpler fallback for newer capabilities.
|
|
93
|
+
- Verified Baseline status for common modern features is in `references/direction.md` § 8. Do not state a feature's support status from memory.
|
|
86
94
|
- Use native `dialog`, Popover, `inert`, constraint validation, and other platform primitives when their semantics match the job and the support policy allows them. Do not choose a new API merely because it is fashionable.
|
|
87
95
|
- Treat View Transitions and similar enhancements as optional continuity layers. Navigation and state changes must still work without them and under reduced motion.
|
|
88
96
|
- Preserve the essential task when scripts, media, fonts, animation, clipboard access, or a preferred input mode are unavailable whenever progressive enhancement is feasible for the product.
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
- Production-practice research
|
|
10
10
|
- Design-process references
|
|
11
11
|
- Skill-architecture research
|
|
12
|
+
- Q4 2026 refresh (3 October 2026): slop tells, platform status, legal dates
|
|
12
13
|
- Refresh policy
|
|
13
14
|
|
|
14
15
|
## Included corpus
|
|
@@ -47,7 +48,7 @@ Therefore this skill must not bulk-scrape Refero, call undocumented Refero endpo
|
|
|
47
48
|
- **Web conformance floor:** [Web Content Accessibility Guidelines (WCAG) 2.2](https://www.w3.org/TR/WCAG22/), W3C Recommendation dated 12 December 2024 in the current publication fetched 2026-07-21. The [W3C WCAG overview](https://www.w3.org/WAI/standards-guidelines/wcag/) encourages the latest version and states that WCAG 2.2 conformance is backward compatible with WCAG 2.1 and 2.0.
|
|
48
49
|
- **Native application guidance:** [WCAG2ICT](https://www.w3.org/TR/wcag2ict-22/) explains how Level A and AA criteria apply to non-web software. It is informative guidance, not a normative standard, and native work still needs platform and product-specific accessibility requirements.
|
|
49
50
|
- **U.S. ADA context:** The Department of Justice [ADA web accessibility guidance](https://www.ada.gov/resources/web-guidance/) explains equal access and effective communication under Titles II and III. The current [Title II web and mobile app rule fact sheet](https://www.ada.gov/resources/2024-03-08-web-rule/) names WCAG 2.1 Level AA as its technical standard and documents scope, exceptions, and compliance timing. These sources were checked 2026-07-21.
|
|
50
|
-
- **Not the conformance target:** [W3C Accessibility Guidelines (WCAG) 3.0](https://www.w3.org/TR/wcag-3.0/) is a W3C Working Draft dated 3
|
|
51
|
+
- **Not the conformance target:** [W3C Accessibility Guidelines (WCAG) 3.0](https://www.w3.org/TR/wcag-3.0/) is a W3C Working Draft (dated 10 September 2026 when re-checked 3 October 2026). W3C says publication as a Working Draft does not imply endorsement and that it is inappropriate to cite as anything other than work in progress.
|
|
51
52
|
|
|
52
53
|
WCAG 2.2 Level AA is the default engineering floor because it includes and extends WCAG 2.1, but technical WCAG conformance alone does not prove compliance with the ADA or another law. Project, procurement, contractual, platform, and jurisdictional requirements may exceed this floor. Use the current official standard and obtain qualified product or legal review before making a legal-compliance claim.
|
|
53
54
|
|
|
@@ -105,6 +106,28 @@ The package structure was checked against the [Agent Skills specification](https
|
|
|
105
106
|
|
|
106
107
|
`SKILL.md` remains below the recommended 500-line limit. Reference files over 100 lines include a contents overview so an agent preview exposes the file's scope. Detailed corpus data stays out of runtime context unless a specific claim requires it. The existing external A/B artifacts are unscored and predate the current contracts, so they are benchmark inputs rather than evidence that the current skill improves quality.
|
|
107
108
|
|
|
109
|
+
## Q4 2026 refresh (3 October 2026)
|
|
110
|
+
|
|
111
|
+
All accessed 3 October 2026 (SNAPSHOT).
|
|
112
|
+
|
|
113
|
+
### Slop-tell sources
|
|
114
|
+
|
|
115
|
+
- [Anthropic `frontend-design` SKILL.md](https://github.com/anthropics/skills/blob/main/skills/frontend-design/SKILL.md) (last changed 3 Sep 2026): named default clusters (cream/serif/terracotta, near-black + single accent, broadsheet, SaaS card kit, template chrome), single-word headline accents, all-caps labels, numbered markers on non-sequences, scattered fade-up entrances, plan-then-review-against-brief process, outcome-named CTAs. Paraphrased, not bundled.
|
|
116
|
+
- [Vercel Web Interface Guidelines](https://github.com/vercel-labs/web-interface-guidelines): no `transition: all`, compositor-friendly motion, reduced motion, focus-visible, hit targets, links are links, loading-state timing, ellipsis conventions.
|
|
117
|
+
- The tells table in `references/anti-defaults.md` merges these with the earlier synthesis; the clusters are DEDUCED, not measured.
|
|
118
|
+
|
|
119
|
+
### Platform status
|
|
120
|
+
|
|
121
|
+
- Baseline statuses in `references/direction.md` § 8 read from the [`web-features`](https://www.npmjs.com/package/web-features) package v3.40.1 (published 1 Oct 2026), the data behind [webstatus.dev](https://webstatus.dev).
|
|
122
|
+
- [Interop 2026 focus areas](https://github.com/web-platform-tests/interop/blob/main/2026/README.md) and [WebKit's announcement](https://webkit.org/blog/17818/announcing-interop-2026/): anchor positioning, scroll-driven animations, view transitions, dialogs and popovers, container style queries, among others.
|
|
123
|
+
- [WCAG 2.2](https://www.w3.org/TR/WCAG22/) Recommendation 12 Dec 2024; [WCAG 3.0](https://www.w3.org/TR/wcag-3.0/) Working Draft 10 Sep 2026.
|
|
124
|
+
- [web.dev INP](https://web.dev/articles/inp): good at 200 ms or less, 75th percentile.
|
|
125
|
+
|
|
126
|
+
### Legal dates
|
|
127
|
+
|
|
128
|
+
- ADA Title II: DOJ interim final rule published 20 April 2026 (91 Fed. Reg. 20902) extends compliance to 26 April 2027 / 26 April 2028; WCAG 2.1 AA unchanged. Secondary confirmations: [Reed Smith](https://www.reedsmith.com/articles/doj-extends-digital-accessibility-compliance-dates-under-title-ii-of-the-ada/), [Seyfarth](https://www.adatitleiii.com/2026/04/doj-extends-ada-title-ii-website-accessibility-deadlines-for-governmental-entities-but-litigation-and-compliance-risks-remain/). Primary: [ada.gov web rule](https://www.ada.gov/resources/2024-03-08-web-rule/).
|
|
129
|
+
- European Accessibility Act (Directive (EU) 2019/882): applies from 28 June 2025; [European Commission EAA page](https://commission.europa.eu/strategy-and-policy/policies/justice-and-fundamental-rights/disability/union-equality-strategy-rights-persons-disabilities-2021-2030/european-accessibility-act_en).
|
|
130
|
+
|
|
108
131
|
## Refresh policy
|
|
109
132
|
|
|
110
133
|
A corpus refresh must be explicit:
|