@ericrisco/rsc 3.3.1 → 3.5.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 (61) hide show
  1. package/README.md +3 -3
  2. package/manifest.json +43 -22
  3. package/package.json +1 -1
  4. package/scripts/lib/default-skill-floor.js +5 -1
  5. package/scripts/lib/domains.js +2 -2
  6. package/scripts/lib/retired-skills.js +4 -0
  7. package/scripts/rsc.js +1 -1
  8. package/skills/design/SKILL.md +4 -3
  9. package/skills/design/evals/cases.yaml +2 -2
  10. package/skills/ftd/SKILL.md +1 -1
  11. package/skills/react/SKILL.md +2 -1
  12. package/skills/ux/SKILL.md +149 -0
  13. package/skills/ux/THIRD_PARTY.md +32 -0
  14. package/skills/ux/evals/cases.yaml +40 -0
  15. package/skills/ux/references/flows.md +124 -0
  16. package/skills/ux/upstream/UPSTREAM.json +59 -0
  17. package/skills/ux/upstream/ux-designer/GUIDE.md +180 -0
  18. package/skills/ux/upstream/ux-designer/LICENSE +21 -0
  19. package/skills/ux/upstream/ux-designer/references/01-core-principles.md +251 -0
  20. package/skills/ux/upstream/ux-designer/references/02-laws-of-ux.md +330 -0
  21. package/skills/ux/upstream/ux-designer/references/03-accessibility.md +411 -0
  22. package/skills/ux/upstream/ux-designer/references/04-visual-design.md +433 -0
  23. package/skills/ux/upstream/ux-designer/references/05-information-architecture.md +432 -0
  24. package/skills/ux/upstream/ux-designer/references/06-interaction-design.md +495 -0
  25. package/skills/ux/upstream/ux-designer/references/07-forms-and-inputs.md +491 -0
  26. package/skills/ux/upstream/ux-designer/references/08-mobile-ux.md +539 -0
  27. package/skills/ux/upstream/ux-designer/references/09-ux-writing.md +493 -0
  28. package/skills/ux/upstream/ux-designer/references/10-user-research.md +533 -0
  29. package/skills/ux/upstream/ux-designer/references/11-design-systems.md +618 -0
  30. package/skills/ux/upstream/ux-designer/references/12a-presence-awareness.md +395 -0
  31. package/skills/ux/upstream/ux-designer/references/12b-conflict-resolution-sync.md +420 -0
  32. package/skills/ux/upstream/ux-designer/references/13a-canvas-navigation.md +388 -0
  33. package/skills/ux/upstream/ux-designer/references/13b-canvas-objects-performance.md +559 -0
  34. package/skills/ux/upstream/ux-designer/references/14-ai-ux-patterns.md +511 -0
  35. package/skills/ux/upstream/ux-designer/references/15-ethical-design.md +419 -0
  36. package/skills/ux/upstream/ux-designer/references/16-onboarding.md +430 -0
  37. package/skills/ux/upstream/ux-designer/references/17-notifications.md +461 -0
  38. package/skills/ux/upstream/ux-designer/references/18-data-visualization.md +453 -0
  39. package/skills/ux/upstream/ux-designer/references/19-search-ux.md +479 -0
  40. package/skills/ux/upstream/ux-designer/references/20-emotional-design.md +382 -0
  41. package/skills/ux/upstream/ux-designer/references/21-data-tables.md +629 -0
  42. package/skills/ux/upstream/ux-designer/references/22-performance-ux.md +626 -0
  43. package/skills/ux/upstream/ux-designer/references/23-internationalization.md +347 -0
  44. package/skills/ux/upstream/ux-designer/references/24-voice-and-multimodal.md +308 -0
  45. package/skills/ux/upstream/ux-designer/references/25a-barcode-camera-scanning.md +342 -0
  46. package/skills/ux/upstream/ux-designer/references/25b-barcode-scanner-workflows.md +412 -0
  47. package/skills/ux/upstream/ux-designer/references/25c-barcode-display.md +277 -0
  48. package/skills/ux/upstream/ux-usability-foundations/GUIDE.md +285 -0
  49. package/skills/ux/upstream/ux-usability-foundations/LICENSE +21 -0
  50. package/skills/ux/upstream/ux-usability-foundations/references/anti-patterns.md +267 -0
  51. package/skills/ux/upstream/ux-usability-foundations/references/checklists.md +130 -0
  52. package/skills/ux/upstream/ux-usability-foundations/references/decision-prompts.md +340 -0
  53. package/skills/ux/upstream/ux-usability-foundations/references/principle-cards.md +449 -0
  54. package/skills/worktrees/SKILL.md +19 -5
  55. package/targets/branch-guard.mjs +59 -4
  56. package/targets/clone-bootstrap.mjs +1 -1
  57. package/targets/session-memory-adapter.mjs +2 -2
  58. package/targets/team-safe-start.mjs +1 -0
  59. package/targets/worktree-reaper.mjs +14 -1
  60. package/skills/ui-engineering/SKILL.md +0 -113
  61. package/skills/ui-engineering/evals/cases.yaml +0 -38
@@ -0,0 +1,419 @@
1
+ # Ethical Design & Dark Patterns
2
+
3
+ Deceptive design patterns face increasing regulatory enforcement with real financial penalties. This reference provides a taxonomy of dark patterns, the regulatory landscape, and practical guidance for ethical design.
4
+
5
+ ---
6
+
7
+ ## Contents
8
+
9
+ - Dark Pattern Taxonomy
10
+ - Regulatory Landscape
11
+ - Consent Design
12
+ - Cookie / Privacy UX
13
+ - Subscription & Cancellation
14
+ - Pricing Transparency
15
+ - Children & Vulnerable Users
16
+ - Ethical Design Checklist
17
+ - Key Metrics
18
+ - Sources
19
+
20
+ ---
21
+
22
+ ## Dark Pattern Taxonomy
23
+
24
+ ### 1. Roach Motel
25
+ Easy to get into, hard to get out of.
26
+
27
+ ```
28
+ ❌ Sign up: 1 click → Cancel: call a phone number during business hours
29
+ ✅ Sign up: 1 click → Cancel: 1 click in the same place
30
+ ```
31
+
32
+ - Subscription cancellation buried in settings or requiring phone calls
33
+ - Account deletion requiring email to support team
34
+ - Free trial that auto-converts with no easy cancellation
35
+
36
+ ### 2. Confirmshaming
37
+ Using guilt-laden language to manipulate decisions.
38
+
39
+ ```
40
+ ❌ "No thanks, I don't want to save money"
41
+ ❌ "I'll pass on protecting my family"
42
+ ✅ "No thanks" / "Not now" / "Skip"
43
+ ```
44
+
45
+ - Opt-out buttons using shame language
46
+ - Modal dismissals that imply user is making a bad choice
47
+ - Emotional manipulation in decline copy
48
+
49
+ ### 3. Misdirection
50
+ Drawing attention away from important information.
51
+
52
+ ```
53
+ ❌ Large "Accept All" button, tiny "Manage preferences" link
54
+ ✅ Equal-sized "Accept" and "Reject" buttons side by side
55
+ ```
56
+
57
+ - Visual emphasis on the choice that benefits the company
58
+ - Using color, size, and position to guide toward preferred option
59
+ - Burying important notices in walls of text
60
+
61
+ ### 4. Forced Continuity
62
+ Silently charging after a free trial without adequate notice.
63
+
64
+ ```
65
+ ❌ Free trial ends → auto-charge with no warning
66
+ ✅ Free trial ends → email 7 days before → email 1 day before → charge
67
+ ```
68
+
69
+ - No reminder before trial-to-paid conversion
70
+ - Making it hard to find the charge after conversion
71
+ - Requiring payment info for "free" trials without clear disclosure
72
+
73
+ ### 5. Hidden Costs
74
+ Revealing unexpected charges late in the checkout process.
75
+
76
+ ```
77
+ ❌ $29.99 product → checkout reveals $8.99 shipping + $4.99 "service fee"
78
+ ✅ Show total cost including all fees from the product page
79
+ ```
80
+
81
+ - Drip pricing (adding fees throughout checkout)
82
+ - Service fees, processing fees, convenience fees added at the end
83
+ - Mandatory add-ons pre-selected in checkout
84
+
85
+ ### 6. Trick Questions
86
+ Confusing wording that causes users to make unintended choices.
87
+
88
+ ```
89
+ ❌ "Uncheck this box if you prefer not to not receive emails"
90
+ ✅ "Check this box to receive marketing emails" (unchecked by default)
91
+ ```
92
+
93
+ - Double negatives in opt-out language
94
+ - Confusing toggle labels (is "on" opting in or out?)
95
+ - Swapping the expected position of yes/no buttons
96
+
97
+ ### 7. Bait & Switch
98
+ Promising one thing and delivering another.
99
+
100
+ ```
101
+ ❌ "Free download" → requires paid subscription to access
102
+ ✅ Clear pricing and feature comparison before any action
103
+ ```
104
+
105
+ - Advertising features only available in premium tiers
106
+ - Changing terms after user commitment
107
+ - "Free" products that require payment for core functionality
108
+
109
+ ### 8. Disguised Ads
110
+ Ads designed to look like content or navigation elements.
111
+
112
+ ```
113
+ ❌ "Download" buttons that are actually ads
114
+ ✅ Clearly labeled "Advertisement" or "Sponsored" with visual distinction
115
+ ```
116
+
117
+ - Native ads without clear sponsorship labels
118
+ - Fake download buttons or system alerts
119
+ - Content recommendation widgets that mix ads with real content
120
+
121
+ ### 9. Friend Spam
122
+ Using access to contacts for unauthorized messaging.
123
+
124
+ ```
125
+ ❌ "Find friends" → sends invites to entire address book without review
126
+ ✅ "Find friends" → shows contact list for user to select individually
127
+ ```
128
+
129
+ - Auto-importing and messaging contacts
130
+ - "Invite friends" defaulting to select-all
131
+ - Social sharing without clear preview of what will be posted
132
+
133
+ ### 10. Privacy Zuckering
134
+ Making privacy settings confusing to encourage maximum data sharing.
135
+
136
+ ```
137
+ ❌ 47 pages of privacy settings across 8 different menus
138
+ ✅ Single privacy dashboard with clear toggles and plain-language explanations
139
+ ```
140
+
141
+ - Default to maximum data sharing
142
+ - Privacy controls scattered across multiple screens
143
+ - Confusing privacy policy language
144
+
145
+ ### 11. Sneak into Basket
146
+ Adding extra items to the shopping cart without user consent.
147
+
148
+ ```
149
+ ❌ Pre-selected insurance, warranties, or add-ons in checkout
150
+ ✅ All add-ons presented as opt-in with clear pricing
151
+ ```
152
+
153
+ - Pre-checked donation or insurance boxes
154
+ - Default-selected premium shipping
155
+ - Mandatory bundles disguised as individual products
156
+
157
+ ---
158
+
159
+ ## Regulatory Landscape
160
+
161
+ ### FTC (United States)
162
+ - **Click-to-Cancel Rule (2024)**: Must be as easy to cancel as to subscribe
163
+ - **Amazon settlement ($25M, 2023)**: Deceptive Prime enrollment/cancellation
164
+ - **Fortnite/Epic ($245M, 2022)**: Dark patterns in children's purchases
165
+ - Enforcement focus: subscriptions, negative option marketing, COPPA violations
166
+
167
+ ### EU Digital Services Act (DSA)
168
+ - Prohibits dark patterns on online platforms
169
+ - Bans: deceptive UI, manipulated choices, repeated nagging, obstruction of cancellation
170
+ - Applies to: all online intermediaries, with stricter rules for very large platforms
171
+ - Effective: February 2024
172
+
173
+ ### EU Digital Fairness Act (Upcoming)
174
+ - Extends dark pattern protections to all digital services
175
+ - Covers addictive design, virtual currencies, influencer marketing
176
+ - Expected proposal: 2025-2026
177
+
178
+ ### GDPR (EU)
179
+ - Consent must be freely given, specific, informed, and unambiguous
180
+ - Pre-checked consent boxes are invalid
181
+ - Withdrawing consent must be as easy as giving it
182
+ - Maximum penalty: 4% of annual global turnover or €20M
183
+
184
+ ### California CPRA
185
+ - Extends CCPA with additional consent requirements
186
+ - "Do Not Sell or Share My Personal Information" link required
187
+ - Equal prominence for opt-out as opt-in
188
+ - Dark pattern consent is not valid consent
189
+
190
+ ### COPPA (US Children's Privacy)
191
+ - Verifiable parental consent for under-13 data collection
192
+ - No behavioral advertising to children
193
+ - FTC actively enforcing against manipulative design targeting minors
194
+
195
+ ---
196
+
197
+ ## Consent Design
198
+
199
+ ### Button Parity
200
+
201
+ ```css
202
+ /* ❌ Dark pattern: asymmetric buttons */
203
+ .accept-btn {
204
+ background: #0066cc;
205
+ color: white;
206
+ font-size: 16px;
207
+ padding: 12px 24px;
208
+ }
209
+ .reject-link {
210
+ color: #999;
211
+ font-size: 12px;
212
+ text-decoration: underline;
213
+ }
214
+
215
+ /* ✅ Ethical: equal prominence */
216
+ .consent-btn {
217
+ font-size: 16px;
218
+ padding: 12px 24px;
219
+ border-radius: 6px;
220
+ }
221
+ .consent-btn.accept {
222
+ background: #0066cc;
223
+ color: white;
224
+ }
225
+ .consent-btn.reject {
226
+ background: white;
227
+ color: #0066cc;
228
+ border: 2px solid #0066cc;
229
+ }
230
+ ```
231
+
232
+ ### Consent Best Practices
233
+
234
+ - Accept and reject buttons must have **equal visual weight**
235
+ - No pre-checked boxes for optional data processing
236
+ - Clear, plain-language explanation of what users are consenting to
237
+ - Granular control: let users accept some and reject others
238
+ - Withdrawing consent must be as easy as giving it (same number of clicks)
239
+ - No "consent walls" that block access unless all is accepted (unless strictly necessary)
240
+ - Record consent with timestamp and version for compliance
241
+
242
+ ---
243
+
244
+ ## Cookie / Privacy UX
245
+
246
+ ### Banner Design
247
+
248
+ ```
249
+ ┌─────────────────────────────────────────────────────┐
250
+ │ We use cookies to improve your experience. │
251
+ │ [Learn more] │
252
+ │ │
253
+ │ [Accept All] [Reject All] [Manage Preferences] │
254
+ └─────────────────────────────────────────────────────┘
255
+ ```
256
+
257
+ **Requirements:**
258
+ - Show on first visit only (persist choice)
259
+ - No page interaction tracking before consent
260
+ - "Reject All" must be as prominent as "Accept All"
261
+ - Brief, clear description of cookie purposes
262
+ - Link to full privacy policy
263
+
264
+ ### Preference Center
265
+
266
+ ```
267
+ ┌─ Cookie Preferences ────────────────────┐
268
+ │ │
269
+ │ Necessary [Always on] │
270
+ │ Authentication, security, basic │
271
+ │ functionality │
272
+ │ │
273
+ │ Analytics [○ Off] │
274
+ │ Anonymous usage statistics │
275
+ │ │
276
+ │ Marketing [○ Off] │
277
+ │ Personalized ads and content │
278
+ │ │
279
+ │ Social Media [○ Off] │
280
+ │ Social sharing and embeds │
281
+ │ │
282
+ │ [Save Preferences] [Reject All] │
283
+ └──────────────────────────────────────────┘
284
+ ```
285
+
286
+ - Default all optional categories to OFF
287
+ - Clear descriptions for each category
288
+ - Easy toggle interface
289
+ - "Reject All" shortcut available
290
+ - Accessible from footer link at all times (not just the banner)
291
+
292
+ ---
293
+
294
+ ## Subscription & Cancellation
295
+
296
+ ### FTC Click-to-Cancel Rule
297
+
298
+ The cancellation process must be as simple as the sign-up process.
299
+
300
+ ```
301
+ Sign-up: Product page → Click "Subscribe" → Enter payment → Done (3 steps)
302
+ Cancellation: Settings → Click "Cancel" → Confirm → Done (3 steps max)
303
+
304
+ ❌ Cancel: Settings → Account → Billing → "Contact support" → Phone wait →
305
+ Agent pitch → Second pitch → "Are you sure?" → "Last chance offer" → Cancel
306
+ ```
307
+
308
+ ### Ethical Subscription Patterns
309
+
310
+ - Cancel button in the same location as the subscribe button
311
+ - No retention dark patterns (forced phone calls, multi-step cancellation)
312
+ - Show clear summary of what will happen on cancellation (access end date, data retention)
313
+ - Offer pause/downgrade as alternatives, not barriers
314
+ - Send cancellation confirmation immediately
315
+ - Allow easy resubscription if the user changes their mind
316
+
317
+ ---
318
+
319
+ ## Pricing Transparency
320
+
321
+ ### Drip Pricing Avoidance
322
+
323
+ ```
324
+ ❌ Drip pricing:
325
+ Product: $99 → Cart: $99 + $15 shipping → Checkout: $99 + $15 + $5.99 service fee
326
+
327
+ ✅ Transparent pricing:
328
+ Product: $119.99 (includes shipping & all fees)
329
+ — or —
330
+ Product: $99 + Shipping: $15 + Fees: $5.99 = Total: $119.99 (shown from start)
331
+ ```
332
+
333
+ - Show total price including all mandatory fees as early as possible
334
+ - Break down fees clearly if itemized
335
+ - No surprise charges at checkout
336
+ - Currency and tax handling clear for international users
337
+ - Comparison pricing (strikethrough) must reference genuine previous prices
338
+
339
+ ---
340
+
341
+ ## Children & Vulnerable Users
342
+
343
+ ### Age-Appropriate Design (AADC / ICO Code)
344
+
345
+ - Age verification at entry points (not just a "I am over 13" checkbox)
346
+ - Default to maximum privacy for minors
347
+ - No nudge techniques to encourage more data sharing
348
+ - No reward loops or variable reward schedules (addictive patterns)
349
+ - Parental controls accessible but not bypassable by children
350
+ - No profiling of children for personalization or advertising
351
+
352
+ ### Addictive Pattern Avoidance
353
+
354
+ ```
355
+ ❌ Addictive patterns:
356
+ - Infinite scroll with no natural stopping point
357
+ - Pull-to-refresh with variable rewards
358
+ - Streak counters that penalize breaks
359
+ - Autoplay with no natural stopping point
360
+ - Social approval metrics (like counts) as primary feedback
361
+
362
+ ✅ Ethical alternatives:
363
+ - "You're all caught up" markers
364
+ - Daily digest summaries
365
+ - "Time spent" dashboards
366
+ - Intentional session boundaries
367
+ - Content-focused rather than metric-focused design
368
+ ```
369
+
370
+ ---
371
+
372
+ ## Ethical Design Checklist
373
+
374
+ ### Pre-Launch Review
375
+
376
+ - [ ] **Symmetry**: Is it equally easy to opt out as to opt in?
377
+ - [ ] **Clarity**: Would a non-technical person understand what they're agreeing to?
378
+ - [ ] **Button parity**: Are accept/reject options equally prominent?
379
+ - [ ] **No pre-selection**: Are optional choices defaulted to off/unchecked?
380
+ - [ ] **No confirmshaming**: Is decline language neutral and respectful?
381
+ - [ ] **Pricing transparency**: Are all fees visible before the final step?
382
+ - [ ] **Cancellation ease**: Can users cancel in the same number of steps as subscribing?
383
+ - [ ] **Privacy defaults**: Are privacy settings defaulted to the most protective option?
384
+ - [ ] **Consent validity**: Is consent freely given, specific, informed, and unambiguous?
385
+ - [ ] **Children's safety**: Are there protections for underage users?
386
+ - [ ] **No misdirection**: Is the visual hierarchy honest about what options do?
387
+ - [ ] **Audit trail**: Are consent records stored with timestamps and versions?
388
+
389
+ ### Ongoing Monitoring
390
+
391
+ - Track unsubscribe/cancellation completion rates (should be near 100%)
392
+ - Monitor complaint rates related to billing or consent
393
+ - Review A/B tests for dark pattern creep (optimization that exploits users)
394
+ - Regular accessibility audit of consent interfaces
395
+ - Legal review of consent flows against current regulations
396
+
397
+ ---
398
+
399
+ ## Key Metrics
400
+
401
+ | Metric | Target | Context |
402
+ |--------|--------|---------|
403
+ | Consent rejection rate | Monitor (not minimize) | High rejection is honest UX |
404
+ | Cancel completion rate | > 95% | Easy cancellation |
405
+ | Complaint rate | < 0.1% | Billing/consent complaints |
406
+ | Cookie preference usage | Track | Users exercising choice |
407
+ | Time to cancel | ≤ sign-up time | Click-to-cancel compliance |
408
+
409
+ ---
410
+
411
+ ## Sources
412
+
413
+ - [FTC Dark Patterns Report (2022)](https://www.ftc.gov/reports/bringing-dark-patterns-light) — Regulatory guidance
414
+ - [Deceptive Design](https://www.deceptive.design/) — Harry Brignull's dark pattern catalog
415
+ - [EU Digital Services Act](https://digital-strategy.ec.europa.eu/en/policies/digital-services-act-package) — Platform regulation
416
+ - [GDPR consent guidelines](https://edpb.europa.eu/our-work-tools/documents/public-consultations/2020/guidelines-052020-consent-under-regulation_en) — EDPB guidance
417
+ - [ICO Age Appropriate Design Code](https://ico.org.uk/for-organisations/childrens-code-hub/) — Children's privacy
418
+ - [Nielsen Norman Group: Dark Patterns](https://www.nngroup.com/articles/dark-patterns/) — UX research
419
+ - [CPRA regulations](https://cppa.ca.gov/) — California privacy enforcement