@tamsensedev/runner 0.10.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/LICENSE +5 -5
  2. package/README.md +61 -50
  3. package/dist/cli.js +1188 -324
  4. package/dist/cli.js.map +1 -1
  5. package/dist/recorder.cjs +42 -6
  6. package/dist/recorder.cjs.map +1 -1
  7. package/library/.claude-plugin/plugin.json +5 -5
  8. package/library/THIRD_PARTY_NOTICES.md +123 -123
  9. package/library/agents/code-architect.md +67 -67
  10. package/library/agents/code-explorer.md +61 -61
  11. package/library/agents/code-reviewer.md +73 -73
  12. package/library/agents/code-simplifier.md +62 -62
  13. package/library/agents/design-critic.md +52 -52
  14. package/library/agents/second-opinion.md +64 -64
  15. package/library/agents/security-auditor.md +86 -86
  16. package/library/agents/silent-failure-hunter.md +70 -70
  17. package/library/agents/test-coverage-analyzer.md +78 -78
  18. package/library/agents/test-runner.md +48 -48
  19. package/library/agents/ui-tester.md +50 -50
  20. package/library/licenses/Apache-2.0.txt +202 -202
  21. package/library/skills/accessibility/SKILL.md +144 -144
  22. package/library/skills/accessibility/references/wcag-checks.md +168 -168
  23. package/library/skills/addressing-review-feedback/SKILL.md +109 -109
  24. package/library/skills/app-screens/SKILL.md +96 -96
  25. package/library/skills/app-screens/references/shell-kpis-charts.md +108 -108
  26. package/library/skills/app-screens/references/states-density-phone.md +54 -54
  27. package/library/skills/app-screens/references/tables-forms-settings.md +104 -104
  28. package/library/skills/avoiding-generic-ai-design/SKILL.md +92 -92
  29. package/library/skills/avoiding-generic-ai-design/references/tells.md +112 -112
  30. package/library/skills/clean-commits/SKILL.md +85 -85
  31. package/library/skills/design-review/SKILL.md +107 -107
  32. package/library/skills/design-review/references/critique-passes.md +101 -101
  33. package/library/skills/design-review/references/screenshot-procedure.md +121 -121
  34. package/library/skills/differential-security-review/LICENSE +427 -427
  35. package/library/skills/differential-security-review/SKILL.md +105 -105
  36. package/library/skills/differential-security-review/references/adversarial.md +115 -115
  37. package/library/skills/differential-security-review/references/methodology.md +145 -145
  38. package/library/skills/differential-security-review/references/patterns.md +108 -108
  39. package/library/skills/false-positive-check/LICENSE +427 -427
  40. package/library/skills/false-positive-check/SKILL.md +95 -95
  41. package/library/skills/false-positive-check/references/bug-class-verification.md +128 -128
  42. package/library/skills/false-positive-check/references/deep-verification.md +113 -113
  43. package/library/skills/false-positive-check/references/evidence-templates.md +93 -93
  44. package/library/skills/false-positive-check/references/false-positive-patterns.md +122 -122
  45. package/library/skills/false-positive-check/references/gate-reviews.md +36 -36
  46. package/library/skills/false-positive-check/references/standard-verification.md +80 -80
  47. package/library/skills/focused-implementation/SKILL.md +104 -104
  48. package/library/skills/implementation-plan/SKILL.md +66 -66
  49. package/library/skills/interface-design/SKILL.md +144 -144
  50. package/library/skills/interface-design/references/craft-defaults.md +130 -130
  51. package/library/skills/interface-design/references/new-direction.md +62 -62
  52. package/library/skills/interface-design/references/writing.md +52 -52
  53. package/library/skills/interface-polish/SKILL.md +103 -103
  54. package/library/skills/interface-polish/references/detail-rules.md +154 -154
  55. package/library/skills/interface-polish/references/worst-case-data.md +158 -158
  56. package/library/skills/motion-design/SKILL.md +106 -106
  57. package/library/skills/motion-design/references/recipes.md +243 -243
  58. package/library/skills/postgres-performance/SKILL.md +97 -97
  59. package/library/skills/postgres-performance/references/rules.md +265 -265
  60. package/library/skills/project-orientation/SKILL.md +77 -77
  61. package/library/skills/reviewing-changes/SKILL.md +183 -183
  62. package/library/skills/safe-database-changes/SKILL.md +111 -111
  63. package/library/skills/safe-database-changes/references/backfills.md +75 -75
  64. package/library/skills/safe-database-changes/references/migration-tools.md +69 -69
  65. package/library/skills/safe-database-changes/references/postgres-ddl.md +199 -199
  66. package/library/skills/security-review/SKILL.md +132 -132
  67. package/library/skills/security-review/references/checks-by-area.md +107 -107
  68. package/library/skills/security-review/references/do-not-report.md +86 -86
  69. package/library/skills/spec-writing/SKILL.md +144 -144
  70. package/library/skills/systematic-debugging/SKILL.md +130 -130
  71. package/library/skills/systematic-debugging/references/flaky-tests.md +51 -51
  72. package/library/skills/systematic-debugging/references/root-cause-tracing.md +55 -55
  73. package/library/skills/task-interview/SKILL.md +84 -84
  74. package/library/skills/test-driven-development/SKILL.md +116 -116
  75. package/library/skills/test-driven-development/references/writing-good-tests.md +85 -85
  76. package/library/skills/ui-testing/SKILL.md +102 -102
  77. package/library/skills/ui-testing/references/headless-check.md +295 -280
  78. package/library/skills/ui-testing/references/local-stand.md +51 -51
  79. package/library/skills/ui-testing/references/playwright-patterns.md +134 -134
  80. package/library/skills/ui-testing/references/recording.md +61 -58
  81. package/library/skills/verification-before-completion/SKILL.md +113 -113
  82. package/library/skills/web-interface-guidelines/SKILL.md +202 -202
  83. package/package.json +46 -46
@@ -1,62 +1,62 @@
1
- # Choosing a fresh direction
2
-
3
- Read this only when the product has no interface yet, or the task explicitly asks for a new look (a redesign, a new brand, a landing page with no existing site). In every other case, extend what exists.
4
-
5
- Nobody will choose between options for you. Work out one direction, check it against the generic default, build it, and state it in the report.
6
-
7
- ## 1. Ground it in the subject
8
-
9
- Write these in your notes before any visual decision:
10
-
11
- - **Subject, audience, job.** What the product is, who uses it, and the one thing the screen or page must get them to do. If the task does not say, infer it from the repository (README, package names, routes, seed data) and write the assumption down.
12
- - **Domain.** Five or more concepts, objects and words from the product's world (not features). A scheduling tool for clinics: rota, shift, cover, on call, ward, handover.
13
- - **Colour world.** Five or more colours that exist in that world, taken from its materials, places and printed things, not from "warm" or "cool".
14
- - **The defaults.** Three obvious choices you would make for this kind of interface without thinking (for example: violet gradient hero, three icon cards, Inter on white). You cannot avoid patterns you have not named.
15
- - **One signature.** A single element that could only belong to this product: a schedule set in the rhythm of a real rota, service health drawn as a route map, the product's own object shown large. If you cannot name one, keep exploring the domain.
16
-
17
- ## 2. Write a compact plan
18
-
19
- ```
20
- Direction: calm clinical tool, dense like a ward board, quiet colour
21
- Palette: ground #f7f8f7, surface #ffffff, ink #14211c, muted #56635d, accent #0f766e, danger #b42318
22
- Type: one grotesk for everything; 14px body, scale 1.2; tabular figures for times
23
- Layout: left rail with labelled nav, full-width rota grid, details in a right panel
24
- Depth: 1px borders, no resting shadows; radius 6/8
25
- Signature: the rota grid itself, cover gaps shown as hatched cells
26
- Rejected: gradient header -> flat ground; KPI cards with icons -> one divided summary strip
27
- ```
28
-
29
- - Palette: a small set of named roles (ground, surface, ink, muted, accent) plus status colours, with contrast checked.
30
- - Type: one or two families with clear roles. Use a face the project can load the way it loads its other assets; a system stack is acceptable for product UI. If a font needs a new dependency, say so in the report.
31
- - Layout: a one-sentence concept per screen and the alignment rule (left-aligned by default; centre at most one moment).
32
-
33
- ## 3. Check the plan against the generic version
34
-
35
- Ask: if a similar prompt went to another model, would it land on the same plan? For each part that would (the palette, the hero, the card grid), change it and note what you changed and why. The patterns to check against are in `avoiding-generic-ai-design`.
36
-
37
- Then build, following the main skill, and run the render-and-look loop.
38
-
39
- ## 4. Keep the signature where it means something
40
-
41
- Put the signature where it carries meaning and do not stamp it on every element; a style's move repeated everywhere becomes a costume. On a working screen the direction lends type, palette, density and the one signature, while navigation and controls stay the standard ones people already know. A distinctive direction still meets the craft floor: hierarchy, contrast, states, phone layout, keyboard focus, reduced motion.
42
-
43
- ## Pages (landing, marketing, docs home)
44
-
45
- A page is read and scrolled once, so it can carry more voice than an app screen. Rules that hold for pages:
46
-
47
- - **The first screen says what this is.** A clear title in the page's one `h1` (a name plus what it does, or a short claim of about five words), one supporting sentence directly under it that says plainly what the thing is, and one primary action as a real button. A stranger should know in five seconds what it is, who it is for and what to do.
48
- - **Headlines fit in two lines** at every width. About 32 characters is safe at a confident size. Cut words before shrinking type.
49
- - **Sections follow the argument, not the template.** List the page as claims with their proof, one line per section, and delete sections with no claim. The stock order (hero, logo strip, three features, testimonial, pricing, call to action) is the sign of no argument.
50
- - **Each section has a heading that names it** and a composition different from its neighbours. The same layout three times in a row is the template showing.
51
- - **Write the full content.** Every section the task asks for carries its real information (the whole price table, every plan's limits). Thin sections lose to busier pages.
52
- - **Type does the visible work:** a decisive jump from body to headline (three times or more), five sizes at most, body 16 to 20px in full ink, not grey.
53
- - **Equal outer margins** at every width, no stretch of blank space taller than half a screen, and the gap between sections clearly larger than any gap inside one.
54
- - **Imagery:** the project's own screenshots, product photos or footage first; real interface fragments of the product beat drawings of fake dashboards. Do not download images from the internet or invent photos of customers. If there is nothing, let type and colour carry the page rather than grey boxes or stock icons.
55
- - **Proof is never invented.** No made-up customers, logos, quotes, ratings, user counts or benchmarks. If the task asks for a testimonial section and none are supplied, build it with plainly fictional sample content and list it in the report for replacement.
56
- - **Motion:** one authored moment (a single entrance or one interactive demo) beats fade-ups on every section. Content must be visible if scripts fail. See `motion-design`.
57
-
58
- ## Report
59
-
60
- State the direction in two or three lines (palette, type, signature), what you rejected as generic, and any sample content or assets to be replaced.
61
-
62
- Sources: adapted from Dammyjay93/interface-design (MIT, changed: "does that direction feel right?" and "offer to save" removed, the agent decides and reports), Leonxlnx/taste-skill (MIT, changed: no direction library, no image downloads) and pbakaus/impeccable mode-operate and craft-floor references (Apache-2.0, changed: rewritten, no direction service or user choice).
1
+ # Choosing a fresh direction
2
+
3
+ Read this only when the product has no interface yet, or the task explicitly asks for a new look (a redesign, a new brand, a landing page with no existing site). In every other case, extend what exists.
4
+
5
+ Nobody will choose between options for you. Work out one direction, check it against the generic default, build it, and state it in the report.
6
+
7
+ ## 1. Ground it in the subject
8
+
9
+ Write these in your notes before any visual decision:
10
+
11
+ - **Subject, audience, job.** What the product is, who uses it, and the one thing the screen or page must get them to do. If the task does not say, infer it from the repository (README, package names, routes, seed data) and write the assumption down.
12
+ - **Domain.** Five or more concepts, objects and words from the product's world (not features). A scheduling tool for clinics: rota, shift, cover, on call, ward, handover.
13
+ - **Colour world.** Five or more colours that exist in that world, taken from its materials, places and printed things, not from "warm" or "cool".
14
+ - **The defaults.** Three obvious choices you would make for this kind of interface without thinking (for example: violet gradient hero, three icon cards, Inter on white). You cannot avoid patterns you have not named.
15
+ - **One signature.** A single element that could only belong to this product: a schedule set in the rhythm of a real rota, service health drawn as a route map, the product's own object shown large. If you cannot name one, keep exploring the domain.
16
+
17
+ ## 2. Write a compact plan
18
+
19
+ ```
20
+ Direction: calm clinical tool, dense like a ward board, quiet colour
21
+ Palette: ground #f7f8f7, surface #ffffff, ink #14211c, muted #56635d, accent #0f766e, danger #b42318
22
+ Type: one grotesk for everything; 14px body, scale 1.2; tabular figures for times
23
+ Layout: left rail with labelled nav, full-width rota grid, details in a right panel
24
+ Depth: 1px borders, no resting shadows; radius 6/8
25
+ Signature: the rota grid itself, cover gaps shown as hatched cells
26
+ Rejected: gradient header -> flat ground; KPI cards with icons -> one divided summary strip
27
+ ```
28
+
29
+ - Palette: a small set of named roles (ground, surface, ink, muted, accent) plus status colours, with contrast checked.
30
+ - Type: one or two families with clear roles. Use a face the project can load the way it loads its other assets; a system stack is acceptable for product UI. If a font needs a new dependency, say so in the report.
31
+ - Layout: a one-sentence concept per screen and the alignment rule (left-aligned by default; centre at most one moment).
32
+
33
+ ## 3. Check the plan against the generic version
34
+
35
+ Ask: if a similar prompt went to another model, would it land on the same plan? For each part that would (the palette, the hero, the card grid), change it and note what you changed and why. The patterns to check against are in `avoiding-generic-ai-design`.
36
+
37
+ Then build, following the main skill, and run the render-and-look loop.
38
+
39
+ ## 4. Keep the signature where it means something
40
+
41
+ Put the signature where it carries meaning and do not stamp it on every element; a style's move repeated everywhere becomes a costume. On a working screen the direction lends type, palette, density and the one signature, while navigation and controls stay the standard ones people already know. A distinctive direction still meets the craft floor: hierarchy, contrast, states, phone layout, keyboard focus, reduced motion.
42
+
43
+ ## Pages (landing, marketing, docs home)
44
+
45
+ A page is read and scrolled once, so it can carry more voice than an app screen. Rules that hold for pages:
46
+
47
+ - **The first screen says what this is.** A clear title in the page's one `h1` (a name plus what it does, or a short claim of about five words), one supporting sentence directly under it that says plainly what the thing is, and one primary action as a real button. A stranger should know in five seconds what it is, who it is for and what to do.
48
+ - **Headlines fit in two lines** at every width. About 32 characters is safe at a confident size. Cut words before shrinking type.
49
+ - **Sections follow the argument, not the template.** List the page as claims with their proof, one line per section, and delete sections with no claim. The stock order (hero, logo strip, three features, testimonial, pricing, call to action) is the sign of no argument.
50
+ - **Each section has a heading that names it** and a composition different from its neighbours. The same layout three times in a row is the template showing.
51
+ - **Write the full content.** Every section the task asks for carries its real information (the whole price table, every plan's limits). Thin sections lose to busier pages.
52
+ - **Type does the visible work:** a decisive jump from body to headline (three times or more), five sizes at most, body 16 to 20px in full ink, not grey.
53
+ - **Equal outer margins** at every width, no stretch of blank space taller than half a screen, and the gap between sections clearly larger than any gap inside one.
54
+ - **Imagery:** the project's own screenshots, product photos or footage first; real interface fragments of the product beat drawings of fake dashboards. Do not download images from the internet or invent photos of customers. If there is nothing, let type and colour carry the page rather than grey boxes or stock icons.
55
+ - **Proof is never invented.** No made-up customers, logos, quotes, ratings, user counts or benchmarks. If the task asks for a testimonial section and none are supplied, build it with plainly fictional sample content and list it in the report for replacement.
56
+ - **Motion:** one authored moment (a single entrance or one interactive demo) beats fade-ups on every section. Content must be visible if scripts fail. See `motion-design`.
57
+
58
+ ## Report
59
+
60
+ State the direction in two or three lines (palette, type, signature), what you rejected as generic, and any sample content or assets to be replaced.
61
+
62
+ Sources: adapted from Dammyjay93/interface-design (MIT, changed: "does that direction feel right?" and "offer to save" removed, the agent decides and reports), Leonxlnx/taste-skill (MIT, changed: no direction library, no image downloads) and pbakaus/impeccable mode-operate and craft-floor references (Apache-2.0, changed: rewritten, no direction service or user choice).
@@ -1,52 +1,52 @@
1
- # Writing interface text
2
-
3
- Read this when you write or change any visible text: labels, buttons, headings, empty states, errors, toasts, helper text. The product's existing voice, terminology and capitalization win; match the strings around yours.
4
-
5
- Words are part of the design, not decoration on it. Each string does one job: helping the person understand where they are and what to do.
6
-
7
- ## Defaults
8
-
9
- - **Sentence case** for headings, buttons, tabs, menu items, labels and table headers ("Invite members", not "Invite Members"), unless the product already uses Title Case.
10
- - **Name things by what people understand**, not by how the system is built: "Notifications", not "Webhook config".
11
- - **Active voice and plain verbs.** A button says exactly what happens: "Save changes", "Delete project", not "Submit", "OK" or "Continue" when a specific verb exists.
12
- - **One name per action through the flow.** The button "Publish" leads to the toast "Published". Do not switch between "remove", "delete" and "archive" for the same thing.
13
- - **Numerals for counts** ("8 deployments"), real plurals ("1 member", "2 members"; use the project's i18n or `Intl.PluralRules`), and units with a non-breaking space ("10 MB").
14
- - **Second person**, no first person from the product ("Your projects", not "My projects" or "We could not").
15
- - **Short.** Cut words that repeat the heading. If the title already explains the state, the line under it adds new information or goes.
16
-
17
- ## By situation
18
-
19
- | Situation | Write | Avoid |
20
- |---|---|---|
21
- | Button | Verb plus object: "Create invoice" | "Submit", "Click here", "Get started" when a precise verb exists |
22
- | Destructive confirmation | Name the object and consequence: "Delete 'Q3 launch'? Its 12 tasks are deleted too." Buttons: "Delete project" / "Cancel" | "Are you sure?" with "Yes" / "No" |
23
- | Error | What failed, why if known, how to recover: "Couldn't save the invoice. The connection dropped. Try again." | "Something went wrong", raw codes or stack traces, apologies, jokes |
24
- | Validation | Next to the field, says what is needed: "Enter a date after the start date" | Blaming ("Invalid input"), clearing what the person typed |
25
- | Empty, first use | Why it is empty and the first action: "No invoices yet. Create your first invoice to bill a client." | "Nothing here", illustrations with no action |
26
- | Empty, no results | Say the filter caused it and offer to clear it | The same text as first use |
27
- | Loading | Name the operation, end with an ellipsis: "Loading invoices…" | Invented progress percentages |
28
- | Success | Brief, past tense: "Invoice sent" | Celebration for routine actions |
29
- | Disabled control | Say why nearby or in a tooltip: "Add a payment method to upgrade" | A grey button with no reason |
30
- | Helper text | Answers the question the label raises: format, limits, why it is asked | Restating the label |
31
- | Placeholder | An example value, never the label | Placeholder as the only label |
32
-
33
- ## Things that read as generated
34
-
35
- Remove these unless the product's own voice uses them:
36
-
37
- - Genre verbs and adjectives: unlock, unleash, supercharge, elevate, empower, streamline, seamless, effortless, robust, cutting-edge, next-generation, world-class, all-in-one, blazing fast.
38
- - The correction pattern: "Not just X, it's Y." Tricolon headlines ("Fast. Simple. Secure.").
39
- - Performative section labels: "Field notes", "Our philosophy", "Quietly trusted by". A heading can just say "Pricing".
40
- - Furniture text: version stamps, coordinates, "Scroll to explore", "Available for work" status dots, strings joined by middle dots.
41
- - Long dashes as a habit; use a full stop or a comma.
42
- - Captions that narrate the design ("A clean, minimal layout for…").
43
- - Three items everywhere because three feels complete. Use the number the content has.
44
- - Invented proof: customer counts, ratings, quotes, logos, benchmarks. Never write these unless the task supplies them.
45
-
46
- ## Micro-typography
47
-
48
- - A real ellipsis (…) and curly quotes (“ ” ’) where the project's strings use them.
49
- - No centred paragraphs over three lines; no justified text.
50
- - Write complete translatable messages, not fragments glued together, so translators can reorder variables.
51
-
52
- Sources: adapted from the writing section of the frontend-design skill in anthropics/claude-plugins-official (Apache-2.0, changed: condensed into defaults and a table), pbakaus/impeccable clarify reference (Apache-2.0, changed: rewritten, "ask before changing" steps removed), Leonxlnx/taste-skill copy reference (MIT) and vercel-labs/web-interface-guidelines (MIT).
1
+ # Writing interface text
2
+
3
+ Read this when you write or change any visible text: labels, buttons, headings, empty states, errors, toasts, helper text. The product's existing voice, terminology and capitalization win; match the strings around yours.
4
+
5
+ Words are part of the design, not decoration on it. Each string does one job: helping the person understand where they are and what to do.
6
+
7
+ ## Defaults
8
+
9
+ - **Sentence case** for headings, buttons, tabs, menu items, labels and table headers ("Invite members", not "Invite Members"), unless the product already uses Title Case.
10
+ - **Name things by what people understand**, not by how the system is built: "Notifications", not "Webhook config".
11
+ - **Active voice and plain verbs.** A button says exactly what happens: "Save changes", "Delete project", not "Submit", "OK" or "Continue" when a specific verb exists.
12
+ - **One name per action through the flow.** The button "Publish" leads to the toast "Published". Do not switch between "remove", "delete" and "archive" for the same thing.
13
+ - **Numerals for counts** ("8 deployments"), real plurals ("1 member", "2 members"; use the project's i18n or `Intl.PluralRules`), and units with a non-breaking space ("10 MB").
14
+ - **Second person**, no first person from the product ("Your projects", not "My projects" or "We could not").
15
+ - **Short.** Cut words that repeat the heading. If the title already explains the state, the line under it adds new information or goes.
16
+
17
+ ## By situation
18
+
19
+ | Situation | Write | Avoid |
20
+ |---|---|---|
21
+ | Button | Verb plus object: "Create invoice" | "Submit", "Click here", "Get started" when a precise verb exists |
22
+ | Destructive confirmation | Name the object and consequence: "Delete 'Q3 launch'? Its 12 tasks are deleted too." Buttons: "Delete project" / "Cancel" | "Are you sure?" with "Yes" / "No" |
23
+ | Error | What failed, why if known, how to recover: "Couldn't save the invoice. The connection dropped. Try again." | "Something went wrong", raw codes or stack traces, apologies, jokes |
24
+ | Validation | Next to the field, says what is needed: "Enter a date after the start date" | Blaming ("Invalid input"), clearing what the person typed |
25
+ | Empty, first use | Why it is empty and the first action: "No invoices yet. Create your first invoice to bill a client." | "Nothing here", illustrations with no action |
26
+ | Empty, no results | Say the filter caused it and offer to clear it | The same text as first use |
27
+ | Loading | Name the operation, end with an ellipsis: "Loading invoices…" | Invented progress percentages |
28
+ | Success | Brief, past tense: "Invoice sent" | Celebration for routine actions |
29
+ | Disabled control | Say why nearby or in a tooltip: "Add a payment method to upgrade" | A grey button with no reason |
30
+ | Helper text | Answers the question the label raises: format, limits, why it is asked | Restating the label |
31
+ | Placeholder | An example value, never the label | Placeholder as the only label |
32
+
33
+ ## Things that read as generated
34
+
35
+ Remove these unless the product's own voice uses them:
36
+
37
+ - Genre verbs and adjectives: unlock, unleash, supercharge, elevate, empower, streamline, seamless, effortless, robust, cutting-edge, next-generation, world-class, all-in-one, blazing fast.
38
+ - The correction pattern: "Not just X, it's Y." Tricolon headlines ("Fast. Simple. Secure.").
39
+ - Performative section labels: "Field notes", "Our philosophy", "Quietly trusted by". A heading can just say "Pricing".
40
+ - Furniture text: version stamps, coordinates, "Scroll to explore", "Available for work" status dots, strings joined by middle dots.
41
+ - Long dashes as a habit; use a full stop or a comma.
42
+ - Captions that narrate the design ("A clean, minimal layout for…").
43
+ - Three items everywhere because three feels complete. Use the number the content has.
44
+ - Invented proof: customer counts, ratings, quotes, logos, benchmarks. Never write these unless the task supplies them.
45
+
46
+ ## Micro-typography
47
+
48
+ - A real ellipsis (…) and curly quotes (“ ” ’) where the project's strings use them.
49
+ - No centred paragraphs over three lines; no justified text.
50
+ - Write complete translatable messages, not fragments glued together, so translators can reorder variables.
51
+
52
+ Sources: adapted from the writing section of the frontend-design skill in anthropics/claude-plugins-official (Apache-2.0, changed: condensed into defaults and a table), pbakaus/impeccable clarify reference (Apache-2.0, changed: rewritten, "ask before changing" steps removed), Leonxlnx/taste-skill copy reference (MIT) and vercel-labs/web-interface-guidelines (MIT).
@@ -1,103 +1,103 @@
1
- ---
2
- name: interface-polish
3
- description: Use when finishing or refining UI so it feels right: alignment, radii, borders and shadows, icons, type details, hover, focus and press states, hit areas, overflow with long or missing data. Also for stress-testing a component with realistic worst-case data, or when a task says the UI "feels off" or needs polish.
4
- ---
5
-
6
- # Interface polish
7
-
8
- Polish is a hundred small details that compound: concentric corners, icons that sit optically centred, numbers that do not jitter, a name that wraps instead of pushing the menu off the row. It is refinement inside the existing design, never a redesign in disguise. If the concept itself is wrong, say so in the report instead of quietly replacing it.
9
-
10
- Express every fix in the project's own styling system (Tailwind in a Tailwind project, CSS modules, plain CSS, the established CSS-in-JS) and with its tokens. Never introduce a second styling system or a new dependency for a polish fix. The project's design system wins over every value below; the values are defaults where it has none.
11
-
12
- ## Process
13
-
14
- ### 1. Establish the system and scope
15
-
16
- Read the design sources (see `interface-design` step 1) and the components on the path you are polishing. Bound the scope: the screens and components the task touches.
17
-
18
- For each inconsistency, classify it before fixing:
19
-
20
- - **Missing token**: the system needs a reusable value it does not have. Add it in the token layer, once.
21
- - **One-off implementation**: a shared component or pattern already exists. Replace the copy with it.
22
- - **Conceptual mismatch**: this flow or hierarchy differs from comparable screens. Align it with its siblings.
23
- - **Local defect**: simply incomplete or inconsistent. Fix it in place.
24
-
25
- Fix at the narrowest correct level. Do not create a shared abstraction for a single exception.
26
-
27
- ### 2. Gather evidence
28
-
29
- Render the screens at desktop and phone widths and walk every state (procedure in `design-review`): hover, focus, active, disabled, loading, empty, error, long content. What looks slightly wrong in a screenshot is usually one of the rules below.
30
-
31
- ### 3. Triage and fix in this order
32
-
33
- 1. Broken or blocked tasks, misleading state, unreachable actions, inaccessible paths.
34
- 2. Missing states: loading, empty, error, success, disabled, permission.
35
- 3. Hierarchy, layout and responsive problems, drift from the design system.
36
- 4. Visual and motion inconsistencies (the rules below).
37
- 5. Code cleanup: dead styles, duplicated values, debug output.
38
-
39
- Do not perfect one corner while the rest of the path stays below the same bar.
40
-
41
- ### 4. Stress-test with worst-case data
42
-
43
- Demo data is chosen, usually without anyone noticing, to make the design look good. Feed the UI the realistic worst case: long and short names, unbreakable emails, missing optional fields, counts of 0, 1 and 1,284, translated labels, emoji, huge lists. Follow [references/worst-case-data.md](references/worst-case-data.md). Change the data at the boundary it enters (fixture, mock, API response), never by editing markup to provoke a break.
44
-
45
- ### 5. Verify
46
-
47
- Walk the path again with mouse, keyboard and touch-size viewports. Re-take screenshots. Check the diff for accidental churn and leftover debug code.
48
-
49
- ## The rules
50
-
51
- Code examples for each are in [references/detail-rules.md](references/detail-rules.md).
52
-
53
- **Surfaces**
54
- 1. **Concentric radius.** Outer radius = inner radius + padding. Equal radii on nested surfaces are the most common reason a card "feels off". Over about 24px of padding, treat layers as separate.
55
- 2. **Optical alignment.** When geometric centring looks wrong, align optically: the icon side of a button gets about 2px less padding than the text side; a play triangle shifts about 2px right; fix lopsided icons in the SVG itself when you can.
56
- 3. **Elevation follows the product's depth strategy.** A border or a shadow, not both. A layered transparent shadow (ring plus soft depth) can replace a border on cards and buttons that sit on varied backgrounds; keep real borders for dividers, table rules and input outlines.
57
- 4. **Image outlines.** A 1px inset outline in pure black at 10% opacity on light, pure white at 10% on dark. Never a tinted near-black, which reads as dirt on the edge.
58
- 5. **Hit areas.** 44 x 44px for touch, at least 40 x 40 in dense desktop UI. Extend small controls with padding or a pseudo-element. Two hit areas never overlap.
59
-
60
- **Type**
61
- 6. **Tabular figures** on numbers that update or line up: counters, prices, timers, table columns. Check the font actually has them.
62
- 7. **Text wrapping.** `text-wrap: balance` on headings and short centred text; `text-wrap: pretty` on paragraphs and captions; neither on long text or code.
63
- 8. **Font smoothing.** `-webkit-font-smoothing: antialiased` once on the root, if the project does not set it.
64
- 9. **Overflow.** Flex and grid children holding text get `min-width: 0`; long unbroken strings get `overflow-wrap: anywhere`; fixed-size items (avatars, icons, badges, trailing actions) get `flex-shrink: 0`.
65
-
66
- **Icons**
67
- 10. **Stroke matches the text beside it**: 1.5px next to regular text, 2px next to semibold. One icon set and one stroke weight per surface.
68
- 11. **One SVG, recoloured by state** with `currentColor`; outline by default, filled for the active state.
69
- 12. **Design at render size**: use the set's native sizes (16, 20, 24), check at the smallest size used.
70
-
71
- **Interaction**
72
- 13. **Every interactive element has hover, focus-visible, active and disabled states.** Hover, active and focus are more prominent than rest. Gate hover effects with `@media (hover: hover) and (pointer: fine)` when they move or scale things.
73
- 14. **Press feedback**: `scale(0.97)` on `:active` for buttons and pressable cards (never below 0.95), as an interruptible transition. Skip it where motion would distract (large surfaces, dense toolbars).
74
- 15. **Never `transition: all`.** Name the properties. Animate `transform` and `opacity` where possible. Timings in `motion-design`.
75
- 16. **Focus is visible** on keyboard focus (`:focus-visible`), never removed without a replacement, and not hidden under sticky headers.
76
- 17. **Overlays escape their container**: a dropdown inside an `overflow: hidden` parent gets clipped; use `<dialog>`, the popover API, `position: fixed` or the project's portal.
77
-
78
- **Content**
79
- 18. **Truncate, wrap or clamp per field**, never globally (rules in the worst-case reference). Never truncate numbers, amounts or dates.
80
- 19. **Images** have explicit dimensions or `aspect-ratio`, and `object-fit: cover` where the source ratio varies.
81
-
82
- ## Common mistakes
83
-
84
- | Mistake | Fix |
85
- |---|---|
86
- | Same radius on a card and the button inside it | Outer = inner + padding |
87
- | Icon looks off-centre in a button | Less padding on the icon side, or fix the SVG |
88
- | 1px border plus a wide soft shadow on resting cards | One or the other, per the product's depth strategy |
89
- | Numbers shift as they update | `tabular-nums` |
90
- | Avatar squashed into an oval in a long row | `flex-shrink: 0` on the avatar |
91
- | Email pushes the row menu off-screen | `min-width: 0` on the text column, `overflow-wrap: anywhere` on the email |
92
- | "1 members" | Plural rules from the project's i18n or `Intl.PluralRules` |
93
- | `transition: all 300ms` | Named properties, under 300ms, ease-out |
94
- | Hairline icon next to bold text | Match stroke to the text weight |
95
- | Polish fix written in a second styling system | Rewrite it in the project's system |
96
-
97
- ## Output
98
-
99
- In a code step: fix, re-check, and summarise the main fixes in the report. In a review (or when asked only to assess), return a table per category with **Severity** (high: inaccessible, misleading, unreadable or repeatedly disruptive; medium: noticeable usability or consistency problem; low: isolated polish), **Location** (`file:line` or screen and component), **Before**, **After** and **Why**. Merge a repeated issue into one row with all locations. List what you inspected per category, and label anything you did not verify as "Not verified".
100
-
101
- Related: `interface-design`, `motion-design`, `web-interface-guidelines`, `design-review`, `accessibility`.
102
-
103
- Sources: adapted from jakubkrehel/make-interfaces-feel-better (MIT, changed: React and Motion specifics made optional, values reconciled with other sources), emilkowalski/skills break-ui (MIT, changed: no stop-and-ask step, no shipped toggle), Dammyjay93/interface-design (MIT) and pbakaus/impeccable polish and harden references (Apache-2.0, changed: rewritten, critique storage and ask steps removed).
1
+ ---
2
+ name: interface-polish
3
+ description: Use when finishing or refining UI so it feels right: alignment, radii, borders and shadows, icons, type details, hover, focus and press states, hit areas, overflow with long or missing data. Also for stress-testing a component with realistic worst-case data, or when a task says the UI "feels off" or needs polish.
4
+ ---
5
+
6
+ # Interface polish
7
+
8
+ Polish is a hundred small details that compound: concentric corners, icons that sit optically centred, numbers that do not jitter, a name that wraps instead of pushing the menu off the row. It is refinement inside the existing design, never a redesign in disguise. If the concept itself is wrong, say so in the report instead of quietly replacing it.
9
+
10
+ Express every fix in the project's own styling system (Tailwind in a Tailwind project, CSS modules, plain CSS, the established CSS-in-JS) and with its tokens. Never introduce a second styling system or a new dependency for a polish fix. The project's design system wins over every value below; the values are defaults where it has none.
11
+
12
+ ## Process
13
+
14
+ ### 1. Establish the system and scope
15
+
16
+ Read the design sources (see `interface-design` step 1) and the components on the path you are polishing. Bound the scope: the screens and components the task touches.
17
+
18
+ For each inconsistency, classify it before fixing:
19
+
20
+ - **Missing token**: the system needs a reusable value it does not have. Add it in the token layer, once.
21
+ - **One-off implementation**: a shared component or pattern already exists. Replace the copy with it.
22
+ - **Conceptual mismatch**: this flow or hierarchy differs from comparable screens. Align it with its siblings.
23
+ - **Local defect**: simply incomplete or inconsistent. Fix it in place.
24
+
25
+ Fix at the narrowest correct level. Do not create a shared abstraction for a single exception.
26
+
27
+ ### 2. Gather evidence
28
+
29
+ Render the screens at desktop and phone widths and walk every state (procedure in `design-review`): hover, focus, active, disabled, loading, empty, error, long content. What looks slightly wrong in a screenshot is usually one of the rules below.
30
+
31
+ ### 3. Triage and fix in this order
32
+
33
+ 1. Broken or blocked tasks, misleading state, unreachable actions, inaccessible paths.
34
+ 2. Missing states: loading, empty, error, success, disabled, permission.
35
+ 3. Hierarchy, layout and responsive problems, drift from the design system.
36
+ 4. Visual and motion inconsistencies (the rules below).
37
+ 5. Code cleanup: dead styles, duplicated values, debug output.
38
+
39
+ Do not perfect one corner while the rest of the path stays below the same bar.
40
+
41
+ ### 4. Stress-test with worst-case data
42
+
43
+ Demo data is chosen, usually without anyone noticing, to make the design look good. Feed the UI the realistic worst case: long and short names, unbreakable emails, missing optional fields, counts of 0, 1 and 1,284, translated labels, emoji, huge lists. Follow [references/worst-case-data.md](references/worst-case-data.md). Change the data at the boundary it enters (fixture, mock, API response), never by editing markup to provoke a break.
44
+
45
+ ### 5. Verify
46
+
47
+ Walk the path again with mouse, keyboard and touch-size viewports. Re-take screenshots. Check the diff for accidental churn and leftover debug code.
48
+
49
+ ## The rules
50
+
51
+ Code examples for each are in [references/detail-rules.md](references/detail-rules.md).
52
+
53
+ **Surfaces**
54
+ 1. **Concentric radius.** Outer radius = inner radius + padding. Equal radii on nested surfaces are the most common reason a card "feels off". Over about 24px of padding, treat layers as separate.
55
+ 2. **Optical alignment.** When geometric centring looks wrong, align optically: the icon side of a button gets about 2px less padding than the text side; a play triangle shifts about 2px right; fix lopsided icons in the SVG itself when you can.
56
+ 3. **Elevation follows the product's depth strategy.** A border or a shadow, not both. A layered transparent shadow (ring plus soft depth) can replace a border on cards and buttons that sit on varied backgrounds; keep real borders for dividers, table rules and input outlines.
57
+ 4. **Image outlines.** A 1px inset outline in pure black at 10% opacity on light, pure white at 10% on dark. Never a tinted near-black, which reads as dirt on the edge.
58
+ 5. **Hit areas.** 44 x 44px for touch, at least 40 x 40 in dense desktop UI. Extend small controls with padding or a pseudo-element. Two hit areas never overlap.
59
+
60
+ **Type**
61
+ 6. **Tabular figures** on numbers that update or line up: counters, prices, timers, table columns. Check the font actually has them.
62
+ 7. **Text wrapping.** `text-wrap: balance` on headings and short centred text; `text-wrap: pretty` on paragraphs and captions; neither on long text or code.
63
+ 8. **Font smoothing.** `-webkit-font-smoothing: antialiased` once on the root, if the project does not set it.
64
+ 9. **Overflow.** Flex and grid children holding text get `min-width: 0`; long unbroken strings get `overflow-wrap: anywhere`; fixed-size items (avatars, icons, badges, trailing actions) get `flex-shrink: 0`.
65
+
66
+ **Icons**
67
+ 10. **Stroke matches the text beside it**: 1.5px next to regular text, 2px next to semibold. One icon set and one stroke weight per surface.
68
+ 11. **One SVG, recoloured by state** with `currentColor`; outline by default, filled for the active state.
69
+ 12. **Design at render size**: use the set's native sizes (16, 20, 24), check at the smallest size used.
70
+
71
+ **Interaction**
72
+ 13. **Every interactive element has hover, focus-visible, active and disabled states.** Hover, active and focus are more prominent than rest. Gate hover effects with `@media (hover: hover) and (pointer: fine)` when they move or scale things.
73
+ 14. **Press feedback**: `scale(0.97)` on `:active` for buttons and pressable cards (never below 0.95), as an interruptible transition. Skip it where motion would distract (large surfaces, dense toolbars).
74
+ 15. **Never `transition: all`.** Name the properties. Animate `transform` and `opacity` where possible. Timings in `motion-design`.
75
+ 16. **Focus is visible** on keyboard focus (`:focus-visible`), never removed without a replacement, and not hidden under sticky headers.
76
+ 17. **Overlays escape their container**: a dropdown inside an `overflow: hidden` parent gets clipped; use `<dialog>`, the popover API, `position: fixed` or the project's portal.
77
+
78
+ **Content**
79
+ 18. **Truncate, wrap or clamp per field**, never globally (rules in the worst-case reference). Never truncate numbers, amounts or dates.
80
+ 19. **Images** have explicit dimensions or `aspect-ratio`, and `object-fit: cover` where the source ratio varies.
81
+
82
+ ## Common mistakes
83
+
84
+ | Mistake | Fix |
85
+ |---|---|
86
+ | Same radius on a card and the button inside it | Outer = inner + padding |
87
+ | Icon looks off-centre in a button | Less padding on the icon side, or fix the SVG |
88
+ | 1px border plus a wide soft shadow on resting cards | One or the other, per the product's depth strategy |
89
+ | Numbers shift as they update | `tabular-nums` |
90
+ | Avatar squashed into an oval in a long row | `flex-shrink: 0` on the avatar |
91
+ | Email pushes the row menu off-screen | `min-width: 0` on the text column, `overflow-wrap: anywhere` on the email |
92
+ | "1 members" | Plural rules from the project's i18n or `Intl.PluralRules` |
93
+ | `transition: all 300ms` | Named properties, under 300ms, ease-out |
94
+ | Hairline icon next to bold text | Match stroke to the text weight |
95
+ | Polish fix written in a second styling system | Rewrite it in the project's system |
96
+
97
+ ## Output
98
+
99
+ In a code step: fix, re-check, and summarise the main fixes in the report. In a review (or when asked only to assess), return a table per category with **Severity** (high: inaccessible, misleading, unreadable or repeatedly disruptive; medium: noticeable usability or consistency problem; low: isolated polish), **Location** (`file:line` or screen and component), **Before**, **After** and **Why**. Merge a repeated issue into one row with all locations. List what you inspected per category, and label anything you did not verify as "Not verified".
100
+
101
+ Related: `interface-design`, `motion-design`, `web-interface-guidelines`, `design-review`, `accessibility`.
102
+
103
+ Sources: adapted from jakubkrehel/make-interfaces-feel-better (MIT, changed: React and Motion specifics made optional, values reconciled with other sources), emilkowalski/skills break-ui (MIT, changed: no stop-and-ask step, no shipped toggle), Dammyjay93/interface-design (MIT) and pbakaus/impeccable polish and harden references (Apache-2.0, changed: rewritten, critique storage and ask steps removed).