@ericrisco/rsc 1.0.34 → 1.1.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.
@@ -46,6 +46,11 @@ A check, not a question. Run it before any work and report in one block.
46
46
  render for a doc.
47
47
  - **Name the generation tools the goal needs** (image, video, voice) and confirm they are connected.
48
48
  - **Confirm the input files exist**: design system, brand doc, script.
49
+ - **Read the harness identity if it exists** — `02-DOCS/wiki/brand/`, reached from the root
50
+ `CLAUDE.md` `## Brand & voice` section, the same place `design`, `marketing` and
51
+ `presentations` read. A bar from outside cannot silently overrule the identity this project
52
+ already committed to: if the reference contradicts it, say which rule conflicts and let the
53
+ user decide which one wins. If no identity exists yet, say so — this run is what creates it.
49
54
 
50
55
  Then print what is working, what is missing, and **which critic goes blind** if something is
51
56
  missing. Never carry on quietly with a critic that cannot see — a verdict from a judge who cannot
@@ -64,7 +69,8 @@ Mechanisms, not adjectives. "Feels premium" is useless. These are useful:
64
69
  - whitespace above the fold is at least 40% of the frame
65
70
 
66
71
  Every line must be something a critic can check by looking. Show `bar.md` to the user before
67
- continuing.
72
+ continuing — and where a mechanism contradicts the harness identity, mark the conflict rather
73
+ than resolving it silently in favour of the reference.
68
74
 
69
75
  ## Phase 4 — Loop
70
76
 
@@ -135,3 +135,54 @@ Adapted for the rsc catalog from **[emilkowalski/skills](https://github.com/emil
135
135
  [Sonner](https://sonner.emilkowal.ski), [Vaul](https://vaul.emilkowal.ski) and
136
136
  [animations.dev](https://animations.dev). The craft bar here is his; the routing, gates and evals
137
137
  that make it an rsc skill are not. Nothing in this body is a substitute for his course.
138
+ ---
139
+
140
+ # Craft reference, inherited from the umbrella
141
+
142
+ *Moved here from `design-eng` (spec: `design-area-cleanup`), which routes and no longer teaches.
143
+ This is the same material by the same author; where it overlaps a rule stated above, the above is
144
+ the summary and this is the reasoning.*
145
+
146
+ ## Review Format (Required)
147
+
148
+ When reviewing UI code, you MUST use a markdown table with Before/After columns. Do NOT use a list with "Before:" and "After:" on separate lines. Always output an actual markdown table like this:
149
+
150
+ | Before | After | Why |
151
+ | --- | --- | --- |
152
+ | `transition: all 300ms` | `transition: transform 200ms ease-out` | Specify exact properties; avoid `all` |
153
+ | `transform: scale(0)` | `transform: scale(0.95); opacity: 0` | Nothing in the real world appears from nothing |
154
+ | `ease-in` on dropdown | `ease-out` with custom curve | `ease-in` feels sluggish; `ease-out` gives instant feedback |
155
+ | No `:active` state on button | `transform: scale(0.97)` on `:active` | Buttons must feel responsive to press |
156
+ | `transform-origin: center` on popover | `transform-origin: var(--transform-origin)` | Popovers should scale from their trigger (not modals — modals stay centered) |
157
+
158
+ Wrong format (never do this):
159
+
160
+ ```
161
+ Before: transition: all 300ms
162
+ After: transition: transform 200ms ease-out
163
+ ────────────────────────────
164
+ Before: scale(0)
165
+ After: scale(0.95)
166
+ ```
167
+
168
+ Correct format: A single markdown table with | Before | After | Why | columns, one row per issue found. The "Why" column briefly explains the reasoning.
169
+
170
+ ## Review Checklist
171
+
172
+ When reviewing UI code, check for:
173
+
174
+ | Issue | Fix |
175
+ | ------------------------------------------ | ---------------------------------------------------------------- |
176
+ | `transition: all` | Specify exact properties: `transition: transform 200ms ease-out` |
177
+ | `scale(0)` entry animation | Start from `scale(0.95)` with `opacity: 0` |
178
+ | `ease-in` on UI element | Switch to `ease-out` or custom curve |
179
+ | `transform-origin: center` on popover | Set to trigger location or use Base UI's `var(--transform-origin)` (modals are exempt — keep centered) |
180
+ | Animation on keyboard action | Remove animation entirely |
181
+ | Duration > 300ms on UI element | Reduce to 150-250ms |
182
+ | Hover animation without media query | Add `@media (hover: hover) and (pointer: fine)` |
183
+ | Keyframes on rapidly-triggered element | Use CSS transitions for interruptibility |
184
+ | Framer Motion `x`/`y` props under load | Use `transform: "translateX()"` for hardware acceleration |
185
+ | Same enter/exit transition speed | Make exit faster than enter (e.g., enter 2s, exit 200ms) |
186
+ | Elements all appear at once | Add stagger delay (30-80ms between items) |
187
+
188
+ ---