@tamsensedev/runner 0.13.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.
- package/LICENSE +5 -5
- package/README.md +61 -57
- package/dist/cli.js +646 -315
- package/dist/cli.js.map +1 -1
- package/dist/recorder.cjs.map +1 -1
- package/library/.claude-plugin/plugin.json +5 -5
- package/library/THIRD_PARTY_NOTICES.md +123 -123
- package/library/agents/code-architect.md +67 -67
- package/library/agents/code-explorer.md +61 -61
- package/library/agents/code-reviewer.md +73 -73
- package/library/agents/code-simplifier.md +62 -62
- package/library/agents/design-critic.md +52 -52
- package/library/agents/second-opinion.md +64 -64
- package/library/agents/security-auditor.md +86 -86
- package/library/agents/silent-failure-hunter.md +70 -70
- package/library/agents/test-coverage-analyzer.md +78 -78
- package/library/agents/test-runner.md +48 -48
- package/library/agents/ui-tester.md +50 -50
- package/library/licenses/Apache-2.0.txt +202 -202
- package/library/skills/accessibility/SKILL.md +144 -144
- package/library/skills/accessibility/references/wcag-checks.md +168 -168
- package/library/skills/addressing-review-feedback/SKILL.md +109 -109
- package/library/skills/app-screens/SKILL.md +96 -96
- package/library/skills/app-screens/references/shell-kpis-charts.md +108 -108
- package/library/skills/app-screens/references/states-density-phone.md +54 -54
- package/library/skills/app-screens/references/tables-forms-settings.md +104 -104
- package/library/skills/avoiding-generic-ai-design/SKILL.md +92 -92
- package/library/skills/avoiding-generic-ai-design/references/tells.md +112 -112
- package/library/skills/clean-commits/SKILL.md +85 -85
- package/library/skills/design-review/SKILL.md +107 -107
- package/library/skills/design-review/references/critique-passes.md +101 -101
- package/library/skills/design-review/references/screenshot-procedure.md +121 -121
- package/library/skills/differential-security-review/LICENSE +427 -427
- package/library/skills/differential-security-review/SKILL.md +105 -105
- package/library/skills/differential-security-review/references/adversarial.md +115 -115
- package/library/skills/differential-security-review/references/methodology.md +145 -145
- package/library/skills/differential-security-review/references/patterns.md +108 -108
- package/library/skills/false-positive-check/LICENSE +427 -427
- package/library/skills/false-positive-check/SKILL.md +95 -95
- package/library/skills/false-positive-check/references/bug-class-verification.md +128 -128
- package/library/skills/false-positive-check/references/deep-verification.md +113 -113
- package/library/skills/false-positive-check/references/evidence-templates.md +93 -93
- package/library/skills/false-positive-check/references/false-positive-patterns.md +122 -122
- package/library/skills/false-positive-check/references/gate-reviews.md +36 -36
- package/library/skills/false-positive-check/references/standard-verification.md +80 -80
- package/library/skills/focused-implementation/SKILL.md +104 -104
- package/library/skills/implementation-plan/SKILL.md +66 -66
- package/library/skills/interface-design/SKILL.md +144 -144
- package/library/skills/interface-design/references/craft-defaults.md +130 -130
- package/library/skills/interface-design/references/new-direction.md +62 -62
- package/library/skills/interface-design/references/writing.md +52 -52
- package/library/skills/interface-polish/SKILL.md +103 -103
- package/library/skills/interface-polish/references/detail-rules.md +154 -154
- package/library/skills/interface-polish/references/worst-case-data.md +158 -158
- package/library/skills/motion-design/SKILL.md +106 -106
- package/library/skills/motion-design/references/recipes.md +243 -243
- package/library/skills/postgres-performance/SKILL.md +97 -97
- package/library/skills/postgres-performance/references/rules.md +265 -265
- package/library/skills/project-orientation/SKILL.md +77 -77
- package/library/skills/reviewing-changes/SKILL.md +183 -183
- package/library/skills/safe-database-changes/SKILL.md +111 -111
- package/library/skills/safe-database-changes/references/backfills.md +75 -75
- package/library/skills/safe-database-changes/references/migration-tools.md +69 -69
- package/library/skills/safe-database-changes/references/postgres-ddl.md +199 -199
- package/library/skills/security-review/SKILL.md +132 -132
- package/library/skills/security-review/references/checks-by-area.md +107 -107
- package/library/skills/security-review/references/do-not-report.md +86 -86
- package/library/skills/spec-writing/SKILL.md +144 -144
- package/library/skills/systematic-debugging/SKILL.md +130 -130
- package/library/skills/systematic-debugging/references/flaky-tests.md +51 -51
- package/library/skills/systematic-debugging/references/root-cause-tracing.md +55 -55
- package/library/skills/task-interview/SKILL.md +84 -84
- package/library/skills/test-driven-development/SKILL.md +116 -116
- package/library/skills/test-driven-development/references/writing-good-tests.md +85 -85
- package/library/skills/ui-testing/SKILL.md +102 -102
- package/library/skills/ui-testing/references/headless-check.md +295 -295
- package/library/skills/ui-testing/references/local-stand.md +51 -51
- package/library/skills/ui-testing/references/playwright-patterns.md +134 -134
- package/library/skills/ui-testing/references/recording.md +61 -61
- package/library/skills/verification-before-completion/SKILL.md +113 -113
- package/library/skills/web-interface-guidelines/SKILL.md +202 -202
- package/package.json +46 -46
|
@@ -1,106 +1,106 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: motion-design
|
|
3
|
-
description: Use when adding, changing or reviewing UI animation or transitions: press and hover feedback, menus, dialogs, drawers, toasts, list changes, view transitions, marketing-page motion. Covers whether to animate at all, durations, easing, performance, interruption and reduced motion, CSS first, then the project's motion library.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Motion design
|
|
7
|
-
|
|
8
|
-
Motion should be felt, not watched. Good motion explains a change (where the menu came from, that the click registered, what was removed) and then gets out of the way. Generated UI tends to do the opposite: a fade-up on every block, hover lifts on every card, bounce easing, 400ms dropdowns.
|
|
9
|
-
|
|
10
|
-
The project's motion tokens, existing transitions and installed animation library win over every value here. If the codebase already animates dialogs at 200ms with its own curve, new dialogs do the same.
|
|
11
|
-
|
|
12
|
-
## Decide before you animate
|
|
13
|
-
|
|
14
|
-
### 1. Should this animate at all?
|
|
15
|
-
|
|
16
|
-
| How often people see it | Decision |
|
|
17
|
-
|---|---|
|
|
18
|
-
| 100+ times a day (keyboard shortcuts, command palette, typing, list navigation by keys) | No animation |
|
|
19
|
-
| Tens of times a day (hover, tab switches, row selection) | Instant, or a 100 to 150ms colour or opacity change |
|
|
20
|
-
| Occasionally (menus, dialogs, drawers, toasts, expanding sections) | Standard animation |
|
|
21
|
-
| Rarely (first run, a completed setup, an empty state the first time) | May carry a little more character |
|
|
22
|
-
|
|
23
|
-
Never animate keyboard-initiated actions. Product screens load into the task: no orchestrated page-load sequences.
|
|
24
|
-
|
|
25
|
-
### 2. What is it for?
|
|
26
|
-
|
|
27
|
-
Valid purposes: feedback (the press registered), state (open, selected, saved), spatial continuity (the toast leaves the way it came, the drawer slides from its edge), preventing a jarring jump (content appearing or disappearing), and on marketing pages, explaining how something works. "It looks nice" is not a purpose for something seen often.
|
|
28
|
-
|
|
29
|
-
### 3. Easing
|
|
30
|
-
|
|
31
|
-
- Entering or exiting: **ease-out**. Default curve `cubic-bezier(0.23, 1, 0.32, 1)`.
|
|
32
|
-
- Moving or morphing on screen: **ease-in-out**, `cubic-bezier(0.77, 0, 0.175, 1)`.
|
|
33
|
-
- Hover and colour changes: `ease`.
|
|
34
|
-
- Constant motion (progress, marquee): `linear`.
|
|
35
|
-
- Drawers and sheets: `cubic-bezier(0.32, 0.72, 0, 1)` reads like native mobile sheets.
|
|
36
|
-
- Never `ease-in` for UI: it delays the first frame, exactly when the person is watching. No bounce or elastic curves by reflex.
|
|
37
|
-
|
|
38
|
-
### 4. Duration
|
|
39
|
-
|
|
40
|
-
| Element | Duration |
|
|
41
|
-
|---|---|
|
|
42
|
-
| Press feedback | 100 to 160ms |
|
|
43
|
-
| Hover, colour | 100 to 150ms |
|
|
44
|
-
| Tooltip, small popover | 125 to 200ms |
|
|
45
|
-
| Dropdown, select, menu | 150 to 250ms |
|
|
46
|
-
| Dialog, drawer, sheet | 200 to 300ms (large drawers up to 500ms) |
|
|
47
|
-
| Layout or view transition | 250 to 400ms |
|
|
48
|
-
| Authored moment on a marketing page | 500 to 800ms |
|
|
49
|
-
|
|
50
|
-
UI motion stays under 300ms. Exits are faster and quieter than entrances (about 75% of the enter time, a small offset rather than the full distance).
|
|
51
|
-
|
|
52
|
-
## Rules
|
|
53
|
-
|
|
54
|
-
1. **Animate `transform` and `opacity`.** They skip layout and paint. Animate `width`, `height`, `top`, `left` or margins only with a technique built for it (FLIP, grid-template-rows `0fr` to `1fr`, View Transitions). `filter`, `clip-path` and shadows are fine on small, bounded elements.
|
|
55
|
-
2. **Never `transition: all`.** Name the properties.
|
|
56
|
-
3. **Interruptible by default.** Use CSS transitions (or springs) for anything the person can trigger again mid-way; they retarget. Keyframes restart from zero; keep them for one-shot sequences.
|
|
57
|
-
4. **Nothing appears from nothing.** Enter from `scale(0.95)` to `scale(0.97)` with opacity 0, never `scale(0)`.
|
|
58
|
-
5. **Origin-aware popovers.** Menus, popovers and tooltips scale from their trigger (`transform-origin` at the trigger side). Dialogs stay centred.
|
|
59
|
-
6. **Stagger only real lists**, 30 to 80ms between items, total under about 300ms, and never block interaction while it plays.
|
|
60
|
-
7. **Press feedback**: `scale(0.97)` on `:active` for buttons (not below 0.95).
|
|
61
|
-
8. **Tooltips**: a short delay before the first one; once one is open, neighbours open instantly with no animation.
|
|
62
|
-
9. **Hover motion only for fine pointers**: wrap it in `@media (hover: hover) and (pointer: fine)`.
|
|
63
|
-
10. **Content is visible by default.** If a script fails or an observer never fires, nothing stays hidden. Scroll reveals start from an already-visible state or have a no-script fallback.
|
|
64
|
-
11. **Reduced motion means fewer and gentler, not none.** Under `prefers-reduced-motion: reduce`, remove movement, scaling and parallax; keep short opacity and colour changes that confirm state. Stop decorative loops. Autoplaying motion over 5 seconds needs a pause control.
|
|
65
|
-
12. **Motion is never the only signal.** Every animated state change also has a static cue (colour, icon, text).
|
|
66
|
-
13. **`will-change` only to cure an observed first-frame stutter**, on the element and only during the animation.
|
|
67
|
-
14. **No new dependency for an effect the stack can already express.** CSS transitions, `@starting-style`, the Web Animations API and View Transitions cover most UI needs.
|
|
68
|
-
|
|
69
|
-
## Implement with what the project has
|
|
70
|
-
|
|
71
|
-
In order: CSS transitions and keyframes; the Web Animations API for programmatic control; the project's existing library (Vue `<Transition>`, Svelte transitions, Angular animations, Motion for React, GSAP); View Transitions for continuity between states or routes. Recipes for each are in [references/recipes.md](references/recipes.md).
|
|
72
|
-
|
|
73
|
-
## Marketing pages
|
|
74
|
-
|
|
75
|
-
A page read once may carry one authored moment: a hero sequence, one interactive demo, a single scroll-linked reveal whose scroll relationship means something. One strong idea beats an identical fade-up on every section. Keep it under about 800ms, make it skippable by scrolling, give it a reduced-motion version, and keep the page complete without it.
|
|
76
|
-
|
|
77
|
-
## Check
|
|
78
|
-
|
|
79
|
-
- Play it at slow speed (DevTools Animations panel at 10%, or multiply durations by 5 temporarily). Look for two states overlapping in a crossfade, wrong origins, properties out of sync, a jump at the end.
|
|
80
|
-
- Trigger it twice quickly and mid-way: it reverses smoothly, nothing sticks.
|
|
81
|
-
- Toggle reduced motion (DevTools rendering panel, or Playwright `reducedMotion: 'reduce'`): state changes still read.
|
|
82
|
-
- Throttle the CPU 4x: no dropped frames on the common path.
|
|
83
|
-
- A screenshot taken mid-load shows no blank bands where a reveal did not fire.
|
|
84
|
-
|
|
85
|
-
## Common mistakes
|
|
86
|
-
|
|
87
|
-
| Mistake | Fix |
|
|
88
|
-
|---|---|
|
|
89
|
-
| `transition: all 300ms` | `transition: transform 200ms var(--ease-out), opacity 200ms var(--ease-out)` |
|
|
90
|
-
| `scale(0)` entrance | `scale(0.95)` with opacity 0 |
|
|
91
|
-
| `ease-in` on a dropdown | ease-out, custom curve |
|
|
92
|
-
| Popover scaling from its centre | `transform-origin` at the trigger |
|
|
93
|
-
| Animation on a keyboard shortcut | Remove it |
|
|
94
|
-
| 400ms dropdown | 150 to 250ms |
|
|
95
|
-
| Keyframes on a toggle that can be re-triggered | A transition |
|
|
96
|
-
| Hover scale that fires on tap | Gate with the hover and pointer media query |
|
|
97
|
-
| Every section fades up on scroll | Remove; one authored moment at most, on marketing pages |
|
|
98
|
-
| Exit as slow as the enter | Shorter, smaller exit |
|
|
99
|
-
|
|
100
|
-
## Output in reviews
|
|
101
|
-
|
|
102
|
-
A table with **Before**, **After** and **Why**, one row per issue, citing `file:line`.
|
|
103
|
-
|
|
104
|
-
Related: `interface-polish`, `interface-design`, `accessibility`.
|
|
105
|
-
|
|
106
|
-
Sources: adapted from emilkowalski/skills emil-design-eng (MIT, changed: framework-neutral, React and Motion specifics moved to examples, "initial response" step removed), jakubkrehel/make-interfaces-feel-better animations reference (MIT) and pbakaus/impeccable animate and operate references (Apache-2.0, changed: rewritten, ask steps removed).
|
|
1
|
+
---
|
|
2
|
+
name: motion-design
|
|
3
|
+
description: Use when adding, changing or reviewing UI animation or transitions: press and hover feedback, menus, dialogs, drawers, toasts, list changes, view transitions, marketing-page motion. Covers whether to animate at all, durations, easing, performance, interruption and reduced motion, CSS first, then the project's motion library.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Motion design
|
|
7
|
+
|
|
8
|
+
Motion should be felt, not watched. Good motion explains a change (where the menu came from, that the click registered, what was removed) and then gets out of the way. Generated UI tends to do the opposite: a fade-up on every block, hover lifts on every card, bounce easing, 400ms dropdowns.
|
|
9
|
+
|
|
10
|
+
The project's motion tokens, existing transitions and installed animation library win over every value here. If the codebase already animates dialogs at 200ms with its own curve, new dialogs do the same.
|
|
11
|
+
|
|
12
|
+
## Decide before you animate
|
|
13
|
+
|
|
14
|
+
### 1. Should this animate at all?
|
|
15
|
+
|
|
16
|
+
| How often people see it | Decision |
|
|
17
|
+
|---|---|
|
|
18
|
+
| 100+ times a day (keyboard shortcuts, command palette, typing, list navigation by keys) | No animation |
|
|
19
|
+
| Tens of times a day (hover, tab switches, row selection) | Instant, or a 100 to 150ms colour or opacity change |
|
|
20
|
+
| Occasionally (menus, dialogs, drawers, toasts, expanding sections) | Standard animation |
|
|
21
|
+
| Rarely (first run, a completed setup, an empty state the first time) | May carry a little more character |
|
|
22
|
+
|
|
23
|
+
Never animate keyboard-initiated actions. Product screens load into the task: no orchestrated page-load sequences.
|
|
24
|
+
|
|
25
|
+
### 2. What is it for?
|
|
26
|
+
|
|
27
|
+
Valid purposes: feedback (the press registered), state (open, selected, saved), spatial continuity (the toast leaves the way it came, the drawer slides from its edge), preventing a jarring jump (content appearing or disappearing), and on marketing pages, explaining how something works. "It looks nice" is not a purpose for something seen often.
|
|
28
|
+
|
|
29
|
+
### 3. Easing
|
|
30
|
+
|
|
31
|
+
- Entering or exiting: **ease-out**. Default curve `cubic-bezier(0.23, 1, 0.32, 1)`.
|
|
32
|
+
- Moving or morphing on screen: **ease-in-out**, `cubic-bezier(0.77, 0, 0.175, 1)`.
|
|
33
|
+
- Hover and colour changes: `ease`.
|
|
34
|
+
- Constant motion (progress, marquee): `linear`.
|
|
35
|
+
- Drawers and sheets: `cubic-bezier(0.32, 0.72, 0, 1)` reads like native mobile sheets.
|
|
36
|
+
- Never `ease-in` for UI: it delays the first frame, exactly when the person is watching. No bounce or elastic curves by reflex.
|
|
37
|
+
|
|
38
|
+
### 4. Duration
|
|
39
|
+
|
|
40
|
+
| Element | Duration |
|
|
41
|
+
|---|---|
|
|
42
|
+
| Press feedback | 100 to 160ms |
|
|
43
|
+
| Hover, colour | 100 to 150ms |
|
|
44
|
+
| Tooltip, small popover | 125 to 200ms |
|
|
45
|
+
| Dropdown, select, menu | 150 to 250ms |
|
|
46
|
+
| Dialog, drawer, sheet | 200 to 300ms (large drawers up to 500ms) |
|
|
47
|
+
| Layout or view transition | 250 to 400ms |
|
|
48
|
+
| Authored moment on a marketing page | 500 to 800ms |
|
|
49
|
+
|
|
50
|
+
UI motion stays under 300ms. Exits are faster and quieter than entrances (about 75% of the enter time, a small offset rather than the full distance).
|
|
51
|
+
|
|
52
|
+
## Rules
|
|
53
|
+
|
|
54
|
+
1. **Animate `transform` and `opacity`.** They skip layout and paint. Animate `width`, `height`, `top`, `left` or margins only with a technique built for it (FLIP, grid-template-rows `0fr` to `1fr`, View Transitions). `filter`, `clip-path` and shadows are fine on small, bounded elements.
|
|
55
|
+
2. **Never `transition: all`.** Name the properties.
|
|
56
|
+
3. **Interruptible by default.** Use CSS transitions (or springs) for anything the person can trigger again mid-way; they retarget. Keyframes restart from zero; keep them for one-shot sequences.
|
|
57
|
+
4. **Nothing appears from nothing.** Enter from `scale(0.95)` to `scale(0.97)` with opacity 0, never `scale(0)`.
|
|
58
|
+
5. **Origin-aware popovers.** Menus, popovers and tooltips scale from their trigger (`transform-origin` at the trigger side). Dialogs stay centred.
|
|
59
|
+
6. **Stagger only real lists**, 30 to 80ms between items, total under about 300ms, and never block interaction while it plays.
|
|
60
|
+
7. **Press feedback**: `scale(0.97)` on `:active` for buttons (not below 0.95).
|
|
61
|
+
8. **Tooltips**: a short delay before the first one; once one is open, neighbours open instantly with no animation.
|
|
62
|
+
9. **Hover motion only for fine pointers**: wrap it in `@media (hover: hover) and (pointer: fine)`.
|
|
63
|
+
10. **Content is visible by default.** If a script fails or an observer never fires, nothing stays hidden. Scroll reveals start from an already-visible state or have a no-script fallback.
|
|
64
|
+
11. **Reduced motion means fewer and gentler, not none.** Under `prefers-reduced-motion: reduce`, remove movement, scaling and parallax; keep short opacity and colour changes that confirm state. Stop decorative loops. Autoplaying motion over 5 seconds needs a pause control.
|
|
65
|
+
12. **Motion is never the only signal.** Every animated state change also has a static cue (colour, icon, text).
|
|
66
|
+
13. **`will-change` only to cure an observed first-frame stutter**, on the element and only during the animation.
|
|
67
|
+
14. **No new dependency for an effect the stack can already express.** CSS transitions, `@starting-style`, the Web Animations API and View Transitions cover most UI needs.
|
|
68
|
+
|
|
69
|
+
## Implement with what the project has
|
|
70
|
+
|
|
71
|
+
In order: CSS transitions and keyframes; the Web Animations API for programmatic control; the project's existing library (Vue `<Transition>`, Svelte transitions, Angular animations, Motion for React, GSAP); View Transitions for continuity between states or routes. Recipes for each are in [references/recipes.md](references/recipes.md).
|
|
72
|
+
|
|
73
|
+
## Marketing pages
|
|
74
|
+
|
|
75
|
+
A page read once may carry one authored moment: a hero sequence, one interactive demo, a single scroll-linked reveal whose scroll relationship means something. One strong idea beats an identical fade-up on every section. Keep it under about 800ms, make it skippable by scrolling, give it a reduced-motion version, and keep the page complete without it.
|
|
76
|
+
|
|
77
|
+
## Check
|
|
78
|
+
|
|
79
|
+
- Play it at slow speed (DevTools Animations panel at 10%, or multiply durations by 5 temporarily). Look for two states overlapping in a crossfade, wrong origins, properties out of sync, a jump at the end.
|
|
80
|
+
- Trigger it twice quickly and mid-way: it reverses smoothly, nothing sticks.
|
|
81
|
+
- Toggle reduced motion (DevTools rendering panel, or Playwright `reducedMotion: 'reduce'`): state changes still read.
|
|
82
|
+
- Throttle the CPU 4x: no dropped frames on the common path.
|
|
83
|
+
- A screenshot taken mid-load shows no blank bands where a reveal did not fire.
|
|
84
|
+
|
|
85
|
+
## Common mistakes
|
|
86
|
+
|
|
87
|
+
| Mistake | Fix |
|
|
88
|
+
|---|---|
|
|
89
|
+
| `transition: all 300ms` | `transition: transform 200ms var(--ease-out), opacity 200ms var(--ease-out)` |
|
|
90
|
+
| `scale(0)` entrance | `scale(0.95)` with opacity 0 |
|
|
91
|
+
| `ease-in` on a dropdown | ease-out, custom curve |
|
|
92
|
+
| Popover scaling from its centre | `transform-origin` at the trigger |
|
|
93
|
+
| Animation on a keyboard shortcut | Remove it |
|
|
94
|
+
| 400ms dropdown | 150 to 250ms |
|
|
95
|
+
| Keyframes on a toggle that can be re-triggered | A transition |
|
|
96
|
+
| Hover scale that fires on tap | Gate with the hover and pointer media query |
|
|
97
|
+
| Every section fades up on scroll | Remove; one authored moment at most, on marketing pages |
|
|
98
|
+
| Exit as slow as the enter | Shorter, smaller exit |
|
|
99
|
+
|
|
100
|
+
## Output in reviews
|
|
101
|
+
|
|
102
|
+
A table with **Before**, **After** and **Why**, one row per issue, citing `file:line`.
|
|
103
|
+
|
|
104
|
+
Related: `interface-polish`, `interface-design`, `accessibility`.
|
|
105
|
+
|
|
106
|
+
Sources: adapted from emilkowalski/skills emil-design-eng (MIT, changed: framework-neutral, React and Motion specifics moved to examples, "initial response" step removed), jakubkrehel/make-interfaces-feel-better animations reference (MIT) and pbakaus/impeccable animate and operate references (Apache-2.0, changed: rewritten, ask steps removed).
|