@kensaurus/skills 0.0.0-stage → 2.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.
Files changed (425) hide show
  1. package/.claude-plugin/marketplace.json +53 -0
  2. package/.claude-plugin/plugin.json +40 -0
  3. package/.cursor-plugin/plugin.json +38 -0
  4. package/.mcp.json +28 -0
  5. package/CHANGELOG.md +1790 -0
  6. package/LICENSE +21 -0
  7. package/LICENSE-APACHE +62 -0
  8. package/NOTICE +13 -0
  9. package/README.md +821 -2
  10. package/SECURITY.md +55 -0
  11. package/agents/code-reviewer.md +60 -0
  12. package/agents/completion-judge.md +89 -0
  13. package/agents/db-migrator.md +125 -0
  14. package/agents/debugger.md +47 -0
  15. package/agents/deploy-checker.md +100 -0
  16. package/agents/perf-monitor.md +74 -0
  17. package/assets/favicon.png +0 -0
  18. package/assets/logo-light.png +0 -0
  19. package/assets/logo.png +0 -0
  20. package/assets/logo.svg +6 -0
  21. package/assets/og.png +0 -0
  22. package/bin/install.mjs +1127 -0
  23. package/bin/kenji.js +2 -0
  24. package/commands/adr.md +17 -0
  25. package/commands/aeo-plan.md +18 -0
  26. package/commands/arch-boundaries.md +17 -0
  27. package/commands/aso-plan.md +18 -0
  28. package/commands/auth-flows.md +19 -0
  29. package/commands/backup-plan.md +17 -0
  30. package/commands/burndown-full.md +25 -0
  31. package/commands/capacitor-plan.md +18 -0
  32. package/commands/codemod-safety.md +22 -0
  33. package/commands/commit.md +18 -0
  34. package/commands/complete-everything.md +40 -0
  35. package/commands/cost-plan.md +19 -0
  36. package/commands/deadcode-plan.md +26 -0
  37. package/commands/deadcode.md +32 -0
  38. package/commands/debug-issue.md +17 -0
  39. package/commands/deps-plan.md +18 -0
  40. package/commands/docs-plan.md +17 -0
  41. package/commands/doctrine.md +19 -0
  42. package/commands/error-plan.md +19 -0
  43. package/commands/feedback-to-closure.md +36 -0
  44. package/commands/fix-issue.md +76 -0
  45. package/commands/gate-logic.md +26 -0
  46. package/commands/green-repo.md +36 -0
  47. package/commands/grill-me.md +19 -0
  48. package/commands/gtm-plan.md +21 -0
  49. package/commands/gtm-weekly.md +17 -0
  50. package/commands/gtm.md +22 -0
  51. package/commands/handoff.md +15 -0
  52. package/commands/housekeep-backlog.md +18 -0
  53. package/commands/housekeep-files.md +22 -0
  54. package/commands/housekeep-gates.md +18 -0
  55. package/commands/instant-nav.md +11 -0
  56. package/commands/integrity-plan.md +19 -0
  57. package/commands/launch-kit.md +16 -0
  58. package/commands/mcp-guide.md +40 -0
  59. package/commands/mobile-plan.md +19 -0
  60. package/commands/native-rn-monorepo/README.md +78 -0
  61. package/commands/native-rn-monorepo/android-build.md +26 -0
  62. package/commands/native-rn-monorepo/android-install.md +32 -0
  63. package/commands/native-rn-monorepo/android-logcat.md +37 -0
  64. package/commands/native-rn-monorepo/ios-ci-logs.md +56 -0
  65. package/commands/native-rn-monorepo/ios-ci-status.md +52 -0
  66. package/commands/native-rn-monorepo/ios-ci-trigger.md +59 -0
  67. package/commands/native-rn-monorepo/rn-reset.md +50 -0
  68. package/commands/native-rn-monorepo/rn-ship-ios.md +67 -0
  69. package/commands/native-rn-monorepo/rn-verify.md +53 -0
  70. package/commands/perf-plan.md +18 -0
  71. package/commands/plan-mode.md +74 -0
  72. package/commands/pr.md +16 -0
  73. package/commands/pricing-plan.md +20 -0
  74. package/commands/privacy-plan.md +18 -0
  75. package/commands/readability.md +12 -0
  76. package/commands/readme.md +15 -0
  77. package/commands/refactor.md +15 -0
  78. package/commands/release-prep.md +17 -0
  79. package/commands/research.md +25 -0
  80. package/commands/responsive-audit.md +21 -0
  81. package/commands/review-code.md +18 -0
  82. package/commands/rls-plan.md +18 -0
  83. package/commands/secrets-plan.md +18 -0
  84. package/commands/security-plan.md +19 -0
  85. package/commands/ship-and-observe.md +36 -0
  86. package/commands/skill-conflicts.md +19 -0
  87. package/commands/slop-plan.md +18 -0
  88. package/commands/stub-plan.md +18 -0
  89. package/commands/test-mutation.md +16 -0
  90. package/commands/test-plan.md +17 -0
  91. package/commands/test.md +29 -0
  92. package/commands/thirdparty-web-interface-guidelines.md +185 -0
  93. package/commands/uiux-plan.md +18 -0
  94. package/commands/uiux.md +45 -0
  95. package/commands/update-deps.md +21 -0
  96. package/commands/validation-plan.md +19 -0
  97. package/commands-portable/fix-issue.md +72 -0
  98. package/commands-portable/plan-mode.md +92 -0
  99. package/commands-portable/research.md +91 -0
  100. package/docs/screenshots/README.md +5 -0
  101. package/docs/screenshots/audit-dark.png +0 -0
  102. package/docs/screenshots/build-dark.png +0 -0
  103. package/docs/screenshots/grill-dark.png +0 -0
  104. package/docs/screenshots/hero-dark.png +0 -0
  105. package/docs/screenshots/hero-light.png +0 -0
  106. package/docs/screenshots/ship-dark.png +0 -0
  107. package/docs/screenshots/src/showcase.html +320 -0
  108. package/hooks/completion-gate.mjs +258 -0
  109. package/hooks/cursor-hooks.json +13 -0
  110. package/hooks/hooks.json +15 -0
  111. package/install.sh +21 -0
  112. package/llms.txt +40 -0
  113. package/mcp/README.md +266 -0
  114. package/mcp/VERSIONS.md +41 -0
  115. package/mcp/mcp-full.json.template +124 -0
  116. package/mcp/mcp.json.template +29 -0
  117. package/mcp/pinned-versions.json +27 -0
  118. package/package.json +94 -4
  119. package/rules/approved-plan-execution.mdc +65 -0
  120. package/rules/full-stack-ship-discipline.mdc +37 -0
  121. package/rules/native-rn-monorepo/README.md +63 -0
  122. package/rules/native-rn-monorepo/_project.mdc +69 -0
  123. package/rules/native-rn-monorepo/native-android.mdc +72 -0
  124. package/rules/native-rn-monorepo/native-ios.mdc +61 -0
  125. package/rules/native-rn-monorepo/react-native-js.mdc +78 -0
  126. package/rules/native-rn-monorepo/web.mdc +60 -0
  127. package/rules/project-starter/components.mdc +54 -0
  128. package/rules/project-starter/data-fetching.mdc +77 -0
  129. package/rules/project-starter/git.mdc +41 -0
  130. package/rules/project-starter/supabase.mdc +37 -0
  131. package/rules/project-starter/tailwind.mdc +48 -0
  132. package/rules/project-starter/typescript.mdc +36 -0
  133. package/rules/project-starter/web-performance.mdc +42 -0
  134. package/rules/senior-engineer.mdc +30 -0
  135. package/rules/shell-first-search.mdc +19 -0
  136. package/rules/skill-workflows.mdc +35 -0
  137. package/rules/verification-before-completion.mdc +57 -0
  138. package/skills/audit-accessibility/SKILL.md +441 -0
  139. package/skills/audit-agent-speed/SKILL.md +181 -0
  140. package/skills/audit-agent-speed/scripts/stop-typecheck.mjs +151 -0
  141. package/skills/audit-analytics/SKILL.md +138 -0
  142. package/skills/audit-auth-flows/SKILL.md +267 -0
  143. package/skills/audit-backend-architecture/SKILL.md +266 -0
  144. package/skills/audit-backend-architecture/references/patterns.md +386 -0
  145. package/skills/audit-bundle-size/SKILL.md +295 -0
  146. package/skills/audit-cicd/SKILL.md +218 -0
  147. package/skills/audit-code-quality/SKILL.md +314 -0
  148. package/skills/audit-code-review/SKILL.md +289 -0
  149. package/skills/audit-codemod-safety/SKILL.md +159 -0
  150. package/skills/audit-db-schema/SKILL.md +465 -0
  151. package/skills/audit-db-schema/references/details.md +110 -0
  152. package/skills/audit-doctrine/SKILL.md +189 -0
  153. package/skills/audit-env-parity/SKILL.md +133 -0
  154. package/skills/audit-fe-api/SKILL.md +458 -0
  155. package/skills/audit-gate-logic/SKILL.md +219 -0
  156. package/skills/audit-i18n/SKILL.md +339 -0
  157. package/skills/audit-infra-cost/SKILL.md +142 -0
  158. package/skills/audit-langfuse-llm/SKILL.md +468 -0
  159. package/skills/audit-langfuse-llm/references/details.md +226 -0
  160. package/skills/audit-llm-security/SKILL.md +147 -0
  161. package/skills/audit-monetization-iap/SKILL.md +137 -0
  162. package/skills/audit-payment-system/SKILL.md +268 -0
  163. package/skills/audit-payment-system/references/checklist.md +283 -0
  164. package/skills/audit-performance/SKILL.md +383 -0
  165. package/skills/audit-performance/references/loading-priority-2026.md +81 -0
  166. package/skills/audit-realworld/SKILL.md +287 -0
  167. package/skills/audit-registry-listing/SKILL.md +122 -0
  168. package/skills/audit-resilience/SKILL.md +153 -0
  169. package/skills/audit-responsive/SKILL.md +221 -0
  170. package/skills/audit-responsive/references/checklist.md +166 -0
  171. package/skills/audit-security/SKILL.md +289 -0
  172. package/skills/audit-skill-conflicts/SKILL.md +178 -0
  173. package/skills/audit-ui-states/SKILL.md +146 -0
  174. package/skills/audit-uiux-design-system/SKILL.md +475 -0
  175. package/skills/audit-uiux-design-system/references/details.md +71 -0
  176. package/skills/audit-ux/SKILL.md +381 -0
  177. package/skills/audit-ux/references/details.md +245 -0
  178. package/skills/audit-ux-journeys/SKILL.md +215 -0
  179. package/skills/audit-ux-journeys/references/checklist.md +179 -0
  180. package/skills/backend-db-performance/SKILL.md +441 -0
  181. package/skills/backend-error-handling/SKILL.md +489 -0
  182. package/skills/backend-error-handling/references/details.md +58 -0
  183. package/skills/backend-observability/SKILL.md +88 -0
  184. package/skills/backend-patterns/SKILL.md +499 -0
  185. package/skills/backend-patterns/references/architecture-patterns.md +298 -0
  186. package/skills/backend-realtime/SKILL.md +403 -0
  187. package/skills/backend-realtime/references/patterns.md +74 -0
  188. package/skills/burndown-full/SKILL.md +174 -0
  189. package/skills/complete-everything/SKILL.md +295 -0
  190. package/skills/data-pipeline/SKILL.md +109 -0
  191. package/skills/data-visualization/SKILL.md +488 -0
  192. package/skills/debug-error/SKILL.md +322 -0
  193. package/skills/debug-fe-be-integration/SKILL.md +459 -0
  194. package/skills/debug-sentry-monitor/SKILL.md +497 -0
  195. package/skills/debug-sentry-monitor/references/details.md +165 -0
  196. package/skills/deploy-npm/SKILL.md +394 -0
  197. package/skills/deploy-npm/references/example-mushi-mushi.md +52 -0
  198. package/skills/deploy-verify/SKILL.md +489 -0
  199. package/skills/design-api/SKILL.md +379 -0
  200. package/skills/design-canvas/SKILL.md +155 -0
  201. package/skills/design-email/SKILL.md +370 -0
  202. package/skills/design-frontend/SKILL.md +143 -0
  203. package/skills/design-generative-art/SKILL.md +474 -0
  204. package/skills/design-mobile-first/SKILL.md +506 -0
  205. package/skills/design-motion/SKILL.md +333 -0
  206. package/skills/design-motion/references/delight-interactions.md +191 -0
  207. package/skills/design-prd/SKILL.md +443 -0
  208. package/skills/design-system/SKILL.md +457 -0
  209. package/skills/design-theme/SKILL.md +226 -0
  210. package/skills/design-theme/themes/tsumagoi-ranch.md +150 -0
  211. package/skills/docs-adr/SKILL.md +168 -0
  212. package/skills/docs-coauthor/SKILL.md +368 -0
  213. package/skills/docs-comparison-pages/SKILL.md +117 -0
  214. package/skills/docs-domain-modeling/SKILL.md +97 -0
  215. package/skills/docs-launch-kit/SKILL.md +139 -0
  216. package/skills/docs-writer/SKILL.md +469 -0
  217. package/skills/enhance-agent-guardrails/SKILL.md +164 -0
  218. package/skills/enhance-arch-boundaries/SKILL.md +154 -0
  219. package/skills/enhance-capacitor-ui/SKILL.md +463 -0
  220. package/skills/enhance-capacitor-ui/references/details.md +750 -0
  221. package/skills/enhance-email-deliverability/SKILL.md +143 -0
  222. package/skills/enhance-growth-loops/SKILL.md +122 -0
  223. package/skills/enhance-lifecycle-email/SKILL.md +130 -0
  224. package/skills/enhance-motion/SKILL.md +193 -0
  225. package/skills/enhance-onboarding/SKILL.md +148 -0
  226. package/skills/enhance-pwa/SKILL.md +303 -0
  227. package/skills/enhance-readability/SKILL.md +146 -0
  228. package/skills/enhance-readme/SKILL.md +496 -0
  229. package/skills/enhance-readme/package-lock.json +187 -0
  230. package/skills/enhance-readme/package.json +17 -0
  231. package/skills/enhance-readme/scripts/generate-readme-blocks.mjs +199 -0
  232. package/skills/enhance-readme/scripts/record-readme-tour.mjs +442 -0
  233. package/skills/enhance-skill-prompts/SKILL.md +167 -0
  234. package/skills/enhance-skill-prompts/references/exemplar-audit-auth-flows.md +311 -0
  235. package/skills/enhance-ux-laws/SKILL.md +409 -0
  236. package/skills/enhance-web-conversion/SKILL.md +155 -0
  237. package/skills/enhance-web-forms/SKILL.md +154 -0
  238. package/skills/enhance-web-instant-nav/SKILL.md +138 -0
  239. package/skills/enhance-web-instant-nav/references/bfcache-blockers.md +23 -0
  240. package/skills/enhance-web-instant-nav/references/early-hints.md +33 -0
  241. package/skills/enhance-web-instant-nav/references/speculation-rules.md +44 -0
  242. package/skills/enhance-web-landing/SKILL.md +459 -0
  243. package/skills/enhance-web-landing/references/details.md +773 -0
  244. package/skills/enhance-web-redesign/SKILL.md +228 -0
  245. package/skills/enhance-web-seo/SKILL.md +276 -0
  246. package/skills/enhance-web-ui/SKILL.md +473 -0
  247. package/skills/enhance-web-ui/references/details.md +674 -0
  248. package/skills/enhance-web-ux/HEURISTICS.md +248 -0
  249. package/skills/enhance-web-ux/PATTERNS.md +375 -0
  250. package/skills/enhance-web-ux/SKILL.md +464 -0
  251. package/skills/enhance-web-ux/examples.md +222 -0
  252. package/skills/enhance-web-ux/references/details.md +406 -0
  253. package/skills/enhance-web-web3d/SKILL.md +397 -0
  254. package/skills/enhance-web-web3d/references/css-canvas-effects.md +180 -0
  255. package/skills/handoff/SKILL.md +66 -0
  256. package/skills/housekeep-backlog/SKILL.md +149 -0
  257. package/skills/housekeep-dead-code/SKILL.md +387 -0
  258. package/skills/housekeep-dead-code/references/ratchet-ci.md +205 -0
  259. package/skills/housekeep-dead-code/references/supabase-hygiene.md +152 -0
  260. package/skills/housekeep-design/SKILL.md +207 -0
  261. package/skills/housekeep-files/SKILL.md +220 -0
  262. package/skills/housekeep-files/references/naming-and-catalog.md +86 -0
  263. package/skills/housekeep-files/scripts/housekeep-files.ps1 +360 -0
  264. package/skills/housekeep-files/scripts/housekeep-files.sh +238 -0
  265. package/skills/housekeep-gates/SKILL.md +174 -0
  266. package/skills/iterate-agent-harness/SKILL.md +137 -0
  267. package/skills/iterate-gtm-weekly/SKILL.md +103 -0
  268. package/skills/iterate-post-launch/SKILL.md +292 -0
  269. package/skills/meta-mcp-builder/SKILL.md +313 -0
  270. package/skills/meta-skill-creator/SKILL.md +304 -0
  271. package/skills/mobile-capacitor-platform/SKILL.md +103 -0
  272. package/skills/mobile-emulator-start/SKILL.md +296 -0
  273. package/skills/mobile-emulator-test/SKILL.md +491 -0
  274. package/skills/mobile-emulator-test/references/details.md +478 -0
  275. package/skills/mobile-rn-performance/SKILL.md +107 -0
  276. package/skills/mobile-rn-screen/SKILL.md +476 -0
  277. package/skills/mobile-rn-screen/references/details.md +785 -0
  278. package/skills/mushi-health/SKILL.md +206 -0
  279. package/skills/mushi-integration/SKILL.md +257 -0
  280. package/skills/plan-aeo-readiness/SKILL.md +166 -0
  281. package/skills/plan-antislop/SKILL.md +281 -0
  282. package/skills/plan-aso/SKILL.md +149 -0
  283. package/skills/plan-backup-dr/SKILL.md +131 -0
  284. package/skills/plan-capacitor-hardening/SKILL.md +217 -0
  285. package/skills/plan-data-integrity/SKILL.md +187 -0
  286. package/skills/plan-dead-code/SKILL.md +386 -0
  287. package/skills/plan-dead-code/references/knip-config.md +214 -0
  288. package/skills/plan-dead-code/references/output-templates.md +133 -0
  289. package/skills/plan-dead-code/references/preservation-contract.md +50 -0
  290. package/skills/plan-dead-code/references/residue-greps.md +84 -0
  291. package/skills/plan-dependency-provenance/SKILL.md +200 -0
  292. package/skills/plan-docs-sync/SKILL.md +143 -0
  293. package/skills/plan-docs-sync/references/drift-taxonomy.md +43 -0
  294. package/skills/plan-docs-sync/references/output-templates.md +33 -0
  295. package/skills/plan-docs-sync/references/preservation-contract.md +17 -0
  296. package/skills/plan-error-handling/SKILL.md +205 -0
  297. package/skills/plan-gtm/SKILL.md +276 -0
  298. package/skills/plan-gtm/references/benchmarks-2026.md +183 -0
  299. package/skills/plan-input-validation/SKILL.md +179 -0
  300. package/skills/plan-llm-cost-guardrails/SKILL.md +176 -0
  301. package/skills/plan-mobile-readiness/SKILL.md +171 -0
  302. package/skills/plan-perf-audit/SKILL.md +145 -0
  303. package/skills/plan-perf-audit/references/audit-scope.md +51 -0
  304. package/skills/plan-perf-audit/references/output-templates.md +33 -0
  305. package/skills/plan-perf-audit/references/preservation-contract.md +13 -0
  306. package/skills/plan-pricing/SKILL.md +173 -0
  307. package/skills/plan-privacy-compliance/SKILL.md +148 -0
  308. package/skills/plan-rls-audit/SKILL.md +231 -0
  309. package/skills/plan-secrets-audit/SKILL.md +181 -0
  310. package/skills/plan-security-audit/SKILL.md +168 -0
  311. package/skills/plan-security-audit/references/output-templates.md +36 -0
  312. package/skills/plan-security-audit/references/owasp-supabase-scope.md +55 -0
  313. package/skills/plan-security-audit/references/preservation-contract.md +18 -0
  314. package/skills/plan-stub-checker/SKILL.md +216 -0
  315. package/skills/plan-stub-checker/references/detection-methodology.md +75 -0
  316. package/skills/plan-stub-checker/references/detection-taxonomy.md +34 -0
  317. package/skills/plan-stub-checker/references/output-templates.md +63 -0
  318. package/skills/plan-stub-checker/references/preservation-contract.md +24 -0
  319. package/skills/plan-test-coverage/SKILL.md +170 -0
  320. package/skills/plan-test-coverage/references/methodology.md +54 -0
  321. package/skills/plan-test-coverage/references/output-templates.md +34 -0
  322. package/skills/plan-test-coverage/references/preservation-contract.md +15 -0
  323. package/skills/plan-uiux-unification/SKILL.md +230 -0
  324. package/skills/plan-uiux-unification/references/output-templates.md +67 -0
  325. package/skills/plan-uiux-unification/references/phase-workbook.md +85 -0
  326. package/skills/plan-uiux-unification/references/preservation-contract.md +24 -0
  327. package/skills/protocol-browser-anti-stall/SKILL.md +211 -0
  328. package/skills/protocol-browser-anti-stall/references/mcp-to-cli-map.md +113 -0
  329. package/skills/protocol-browser-anti-stall/references/playwright-session-coordination.md +170 -0
  330. package/skills/research/SKILL.md +422 -0
  331. package/skills/test-exploratory/SKILL.md +165 -0
  332. package/skills/test-exploratory/references/charter-template.md +29 -0
  333. package/skills/test-load/SKILL.md +126 -0
  334. package/skills/test-mutation/SKILL.md +160 -0
  335. package/skills/test-playwright/SKILL.md +354 -0
  336. package/skills/test-qa/SKILL.md +364 -0
  337. package/skills/test-qa/references/details.md +268 -0
  338. package/skills/test-red-team/SKILL.md +386 -0
  339. package/skills/test-red-team/references/owasp-attack-checklist.md +193 -0
  340. package/skills/test-unit/SKILL.md +259 -0
  341. package/skills/test-unit/references/details.md +267 -0
  342. package/skills/test-visual-regression/SKILL.md +132 -0
  343. package/skills/thirdparty-emil-design-eng/ATTRIBUTION.md +20 -0
  344. package/skills/thirdparty-emil-design-eng/SKILL.md +21 -0
  345. package/skills/thirdparty-emil-design-eng/references/emil-design-eng.md +676 -0
  346. package/skills/thirdparty-ui-ux-pro-max/ATTRIBUTION.md +22 -0
  347. package/skills/thirdparty-ui-ux-pro-max/SKILL.md +304 -0
  348. package/skills/thirdparty-ui-ux-pro-max/data/charts.csv +26 -0
  349. package/skills/thirdparty-ui-ux-pro-max/data/colors.csv +97 -0
  350. package/skills/thirdparty-ui-ux-pro-max/data/icons.csv +101 -0
  351. package/skills/thirdparty-ui-ux-pro-max/data/landing.csv +31 -0
  352. package/skills/thirdparty-ui-ux-pro-max/data/products.csv +97 -0
  353. package/skills/thirdparty-ui-ux-pro-max/data/react-performance.csv +45 -0
  354. package/skills/thirdparty-ui-ux-pro-max/data/stacks/astro.csv +54 -0
  355. package/skills/thirdparty-ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  356. package/skills/thirdparty-ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  357. package/skills/thirdparty-ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  358. package/skills/thirdparty-ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  359. package/skills/thirdparty-ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  360. package/skills/thirdparty-ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  361. package/skills/thirdparty-ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  362. package/skills/thirdparty-ui-ux-pro-max/data/stacks/react.csv +54 -0
  363. package/skills/thirdparty-ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  364. package/skills/thirdparty-ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  365. package/skills/thirdparty-ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  366. package/skills/thirdparty-ui-ux-pro-max/data/stacks/vue.csv +50 -0
  367. package/skills/thirdparty-ui-ux-pro-max/data/styles.csv +68 -0
  368. package/skills/thirdparty-ui-ux-pro-max/data/typography.csv +58 -0
  369. package/skills/thirdparty-ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  370. package/skills/thirdparty-ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  371. package/skills/thirdparty-ui-ux-pro-max/data/web-interface.csv +31 -0
  372. package/skills/thirdparty-ui-ux-pro-max/scripts/core.py +253 -0
  373. package/skills/thirdparty-ui-ux-pro-max/scripts/design_system.py +1067 -0
  374. package/skills/thirdparty-ui-ux-pro-max/scripts/search.py +114 -0
  375. package/skills/thirdparty-web-interface-guidelines/ATTRIBUTION.md +23 -0
  376. package/skills/thirdparty-web-interface-guidelines/SKILL.md +190 -0
  377. package/skills/workflow-build-feature/SKILL.md +118 -0
  378. package/skills/workflow-coding-discipline/SKILL.md +140 -0
  379. package/skills/workflow-environment-ready/SKILL.md +128 -0
  380. package/skills/workflow-feature-flag/SKILL.md +262 -0
  381. package/skills/workflow-feedback-to-closure/SKILL.md +165 -0
  382. package/skills/workflow-fix-and-ship/SKILL.md +136 -0
  383. package/skills/workflow-git-commit/SKILL.md +200 -0
  384. package/skills/workflow-green-repo/SKILL.md +166 -0
  385. package/skills/workflow-grilling/SKILL.md +73 -0
  386. package/skills/workflow-gtm/SKILL.md +153 -0
  387. package/skills/workflow-housekeep/SKILL.md +453 -0
  388. package/skills/workflow-housekeep/references/templates.md +109 -0
  389. package/skills/workflow-launch-ready/SKILL.md +145 -0
  390. package/skills/workflow-merge-conflicts/SKILL.md +62 -0
  391. package/skills/workflow-onboard/SKILL.md +99 -0
  392. package/skills/workflow-parallel-agents/SKILL.md +164 -0
  393. package/skills/workflow-pr/SKILL.md +197 -0
  394. package/skills/workflow-quality-gate/SKILL.md +147 -0
  395. package/skills/workflow-refactor/SKILL.md +274 -0
  396. package/skills/workflow-release-prep/SKILL.md +207 -0
  397. package/skills/workflow-ship-and-observe/SKILL.md +164 -0
  398. package/skills/workflow-spec-tdd/SKILL.md +141 -0
  399. package/skills/workflow-spec-tdd/references/spec-template.md +126 -0
  400. package/skills/workflow-spec-tdd/references/tdd-patterns.md +167 -0
  401. package/skills-cursor/babysit/SKILL.md +17 -0
  402. package/skills-cursor/canvas/SKILL.md +142 -0
  403. package/skills-cursor/canvas/sdk/canvas-tokens.d.ts +235 -0
  404. package/skills-cursor/canvas/sdk/chart-primitives.d.ts +200 -0
  405. package/skills-cursor/canvas/sdk/dag-layout.d.ts +102 -0
  406. package/skills-cursor/canvas/sdk/diff-view.d.ts +130 -0
  407. package/skills-cursor/canvas/sdk/form-primitives.d.ts +194 -0
  408. package/skills-cursor/canvas/sdk/hooks.d.ts +117 -0
  409. package/skills-cursor/canvas/sdk/index.d.ts +47 -0
  410. package/skills-cursor/canvas/sdk/theme.d.ts +61 -0
  411. package/skills-cursor/canvas/sdk/todo-list.d.ts +49 -0
  412. package/skills-cursor/canvas/sdk/ui-primitives.d.ts +549 -0
  413. package/skills-cursor/canvas/sdk/ui-primitives.test.d.ts +2 -0
  414. package/skills-cursor/create-hook/SKILL.md +238 -0
  415. package/skills-cursor/create-rule/SKILL.md +185 -0
  416. package/skills-cursor/create-skill/SKILL.md +269 -0
  417. package/skills-cursor/create-skill/references/authoring-guide.md +182 -0
  418. package/skills-cursor/create-subagent/SKILL.md +228 -0
  419. package/skills-cursor/migrate-to-skills/SKILL.md +121 -0
  420. package/skills-cursor/shell/SKILL.md +22 -0
  421. package/skills-cursor/split-to-prs/SKILL.md +47 -0
  422. package/skills-cursor/statusline/SKILL.md +193 -0
  423. package/skills-cursor/update-cli-config/SKILL.md +85 -0
  424. package/skills-cursor/update-cursor-settings/SKILL.md +137 -0
  425. package/skills.sh.json +297 -0
@@ -0,0 +1,674 @@
1
+ ### H5. Library-injected inline width beats your CSS rule
2
+
3
+ **Symptom:** "Column is squeezed and truncating important info while the
4
+ adjacent column has wasted space", "my responsive CSS isn't applying".
5
+
6
+ **Detection:** When using TanStack Table, AG-Grid, MUI DataGrid, Chakra
7
+ DataTable, react-table, or any headless data-grid, check whether the library
8
+ emits inline `style={{ width: ... }}` from `header.getSize()` /
9
+ `column.size`. Then check whether your overriding CSS rule uses `!important`
10
+ AND is unscoped (or scoped to the right viewport). Open DevTools → inspect
11
+ the `<th>` / `<td>` → look at "Computed → width" → if the value comes from
12
+ `element.style` and your rule shows as crossed-out, you've lost the
13
+ specificity war.
14
+
15
+ **Fix shape:** Three options, in order of preference:
16
+ 1. Add `width: auto !important; max-width: none !important;` to your
17
+ `[data-priority="primary"]` (or equivalent) rule, scoped to **all
18
+ viewports** (no `@media` wrapper unless you mean it).
19
+ 2. Set `table-layout: fixed` on the parent table so the browser ignores
20
+ per-cell intrinsic widths.
21
+ 3. Drive the library via CSS variables (`style={{ "--col-width":
22
+ header.getSize() + "px" }}`) and have your priority rule overwrite the
23
+ variable, not the inline width.
24
+
25
+ ### H6. Wasted-column / squeezed-column pair
26
+
27
+ **Symptom:** Same as H5 from the *user* perspective ("wasted space + truncation"),
28
+ but the cause may be your own column-def defaults, not a third-party
29
+ library.
30
+
31
+ **Detection:** For each table column, compute `reserved-width / max-content-width`.
32
+ If a column reserves ≥ 2.5× its widest content while a sibling column
33
+ truncates, the allocation is wrong. Easy probe: the user's "件数" (count)
34
+ column is 150 px wide for 2-digit numbers; the "書類" (name) column is
35
+ 150 px wide for 30-char Japanese strings. Ratio: 7.5× vs 0.4×.
36
+
37
+ **Fix shape:** Add a `priority` axis to your column meta (`primary` | `meta`
38
+ | `action`) and a CSS cascade that says:
39
+ - `[data-priority="primary"]` → `width: auto !important` (gets the slack)
40
+ - `[data-priority="meta"]` → `width: 1% !important; white-space: nowrap`
41
+ (shrinks to content)
42
+ - `[data-priority="action"]` → fixed pixel width matching the icon button
43
+ (e.g. `40px`). Apply at every viewport, not just mobile.
44
+
45
+ ### H7. Hover-only affordance on a touch device
46
+
47
+ **Symptom:** "I can't reach this button on my phone", silent because the user
48
+ didn't even know the button existed.
49
+
50
+ **Detection:** Grep for `group-hover:opacity-100`, `opacity-0 hover:opacity-100`,
51
+ `md:opacity-0`, or any pattern that hides an action behind hover. Check the
52
+ parent: does it have a touch fallback (`focus-within:opacity-100`,
53
+ `sm:opacity-0` only above the touch breakpoint, or always-visible on
54
+ `<sm`)?
55
+
56
+ **Fix shape:** Hover-reveal is acceptable only at `≥sm` (pointer breakpoint).
57
+ Below that, the action must be always-visible OR exposed via long-press /
58
+ swipe / a tap-to-open row menu. Pattern: `sm:opacity-0
59
+ sm:group-hover:opacity-100 focus-within:opacity-100`.
60
+
61
+ ### H8. Hit-area baked into visual chrome
62
+
63
+ **Symptom:** "This icon button feels chunky / button-shaped" even though the
64
+ icon itself is fine.
65
+
66
+ **Detection:** Look for icon buttons that are `w-11 h-11` (44 px) with a
67
+ `bg-card border` chrome. The visual chrome is sized for the *touch target*,
68
+ not for the *icon's optical weight*. Result: a 14-px icon sits in a 44-px
69
+ bordered card, looking marooned.
70
+
71
+ **Fix shape:** Separate hit area from visual chrome:
72
+ - Visual: 24–28 px square, no border, hover-paint only.
73
+ - Hit area: extend invisibly via `min-h-11 min-w-11 -my-1.5 -mx-1.5` (or
74
+ the equivalent negative-margin trick for your stack). The thumb still
75
+ gets 44 px; the eye gets a calm icon.
76
+
77
+ ### H9. Stale data-priority / hidden-on-mobile that no longer matches the column
78
+
79
+ **Symptom:** A column shows on desktop, disappears at tablet, then *reappears*
80
+ on mobile (or vice versa); user reports "missing column" or "duplicate info
81
+ on mobile".
82
+
83
+ **Detection:** Search for `hideOnMobile`, `hideBelowMd`, `mobile:hidden`,
84
+ `hidden md:table-cell`, etc., and confirm the breakpoints match the rest of
85
+ the responsive system. A column tagged `hideBelowMd: true` but rendered via
86
+ `sm:hidden` will appear on `sm` and disappear on `md+`, which is exactly
87
+ inverted.
88
+
89
+ **Fix shape:** Centralize the breakpoint axis in the column meta
90
+ (`hideBelowSm` | `hideBelowMd` | `hideBelowLg`) and have the renderer derive
91
+ the className from it, not vice versa. Audit by listing every column and
92
+ its visibility per viewport in a table; fix the inverted ones.
93
+
94
+ ### H10. Active state has no `aria-current`
95
+
96
+ **Symptom:** Visual active state is correct but screen-reader users (and
97
+ keyboard-tab users) can't tell which item is current.
98
+
99
+ **Detection:** Grep for the active-state className pattern (e.g.
100
+ `text-brand`, `bg-brand-soft`, `data-state="active"`) and check the same
101
+ JSX node for `aria-current`. Missing on tabs / nav links / breadcrumb final
102
+ crumb / dock items = bug.
103
+
104
+ **Fix shape:** Add `aria-current="page"` to nav links / dock items / breadcrumb
105
+ final crumb, `aria-selected="true"` (and `role="tab"`) to tabs. The visual
106
+ treatment + ARIA must always agree.
107
+
108
+ ### H11. Motion that fights motion
109
+
110
+ **Symptom:** Tab switch feels janky; sliding underline stutters; Framer
111
+ Motion enter animation overlaps a CSS transition.
112
+
113
+ **Detection:** Inspect the active-state element. If you have BOTH a
114
+ framer-motion `layoutId` shared element AND a CSS `transition: all 200ms`
115
+ on the same property, they fight. Same for `whileHover` + CSS `:hover`
116
+ transition on the same property.
117
+
118
+ **Fix shape:** One animation system per property. Prefer framer-motion
119
+ `layoutId` for layout-shared transitions; prefer CSS `transition-colors`
120
+ for color-only state changes. Never both. Always honor
121
+ `prefers-reduced-motion`.
122
+
123
+ ### H12. Conditional slot reserves space for absent content
124
+
125
+ **Symptom:** "Card looks empty / has a giant gap", "this section feels
126
+ unbalanced".
127
+
128
+ **Detection:** Find any wrapper with `min-height` on a slot whose child is
129
+ optional (`media`, `aside`, `eyebrow`, `cover`, `secondaryCTA`,
130
+ `illustration`). Render the page in zero-state and check whether the
131
+ reserved space collapses. If the wrapper still occupies its `min-h`, the
132
+ slot is reserving space for content that may never arrive.
133
+
134
+ **Fix shape:** Either drop the wrapper when the child is null (`{child &&
135
+ <Wrapper>{child}</Wrapper>}`) or collapse the floor at narrow viewports
136
+ (`min-h-0 sm:min-h-40`). Never pay vertical real estate for absent content.
137
+
138
+ ### H13. Wrapper-collapsed tiles (Tooltip / Slot inline-flex)
139
+
140
+ **Symptom:** "This week pills are weird", "tiles look small with huge
141
+ gaps between them", "the 3-up grid isn't filling the row". Visually:
142
+ 3 (or 4) repeated tiles render at content-width, anchored
143
+ left/middle/right of their grid cells, with large gaps that the grid
144
+ template should not produce.
145
+
146
+ **Detection:** Programmatic, not visual — screenshots can hide this:
147
+
148
+ ```js
149
+ // In the browser console / Playwright evaluate / playwright-cli
150
+ const tiles = [...document.querySelectorAll('<your-tile-selector>')]
151
+ .map(el => Math.round(el.getBoundingClientRect().width));
152
+ const span = Math.max(...tiles) - Math.min(...tiles);
153
+ console.table({ tiles, span });
154
+ // span > 1px on tiles in `grid-cols-N gap-N` === wrapper-collapse bug
155
+ ```
156
+
157
+ Then walk *up* the DOM from a leaf tile and `getComputedStyle(el).display`
158
+ each ancestor. The first one returning `inline-flex` / `inline-block` /
159
+ `inline` is the culprit. Common causes (any stack):
160
+
161
+ - A `Tooltip` / `Popover` / `Trigger` / `Slot` primitive defaults the
162
+ wrapper to `display: inline-flex` (Radix, Headless UI, custom).
163
+ - A grid template uses bare `1fr` (which is `minmax(auto, 1fr)`) and a
164
+ child has intrinsic content wider than the cell.
165
+ - A flex parent without `min-width: 0` lets a child's intrinsic content
166
+ size dictate the track width.
167
+ - An animation library (Framer Motion `m.div`, Reanimated, GSAP) injects
168
+ inline `display: inline-block` for transform performance.
169
+ - A `<Slot>` / `asChild` / `cloneElement` pattern where the inner
170
+ component drops `className` (so `w-full` is silently lost).
171
+
172
+ **Fix shape:** Patch the *wrapper*, not the leaf:
173
+
174
+ - Add a prop to the wrapper that lets the consumer opt into stretch
175
+ behaviour (`block`, `stretch`, `fillContainer`) and use it at the call
176
+ site. If most consumers want stretch, change the default and document
177
+ why in a code comment.
178
+ - Or: replace `grid-cols-N` with
179
+ `grid-cols-[repeat(N,minmax(0,1fr))]` so a single oversized child
180
+ can't blow out the track.
181
+ - Or: add `min-width: 0` to the grid item and `width: 100%` (or
182
+ `flex: 1 1 0`) to the inner element.
183
+
184
+ Verify with the same DOM probe — `widthSpan` must drop to `≤ 1px` after
185
+ the fix. See *Primitive-First Patch Rule* below for the propagation
186
+ playbook (one wrapper fix, N consumers fixed).
187
+
188
+ ### H14. Information duplication per viewport fold
189
+
190
+ **Symptom:** "Wasted space", "feels padded", "this is the third time
191
+ I've seen 0/10 today on the same screen". Each instance is innocent on
192
+ its own; together they flatten hierarchy and signal that no rank was
193
+ applied.
194
+
195
+ **Detection:** For each viewport-height fold of the rendered page,
196
+ list every datum (number, percentage, status word, date, count) and how
197
+ many times it appears. Anything appearing ≥ 2× is a duplicate.
198
+
199
+ ```
200
+ Fold 1 of /home @ 390×844:
201
+ - "0/10 words today" ×3 (eyebrow metric, action pill, footer strip)
202
+ - "0%" ×2 (action pill, Today metric tile)
203
+ - streak count "1d" ×2 (eyebrow metric, Streak tile)
204
+ ```
205
+
206
+ **Fix shape:** Pick the *most actionable* placement for each datum
207
+ (usually next to the primary CTA, or as the largest type in the focal
208
+ region) and delete every other instance. Replace the now-empty slots
209
+ with *complementary* data — if you kept the daily goal, replace
210
+ duplicates with streak count, reviews-due, or "vs last week"
211
+ trend. Each delete is a hierarchy upgrade for what stays.
212
+
213
+ Cite NN/g #8 (Aesthetic & Minimalist) in the write-up.
214
+
215
+ ### H15. Monochromatic surface (domain-colour-tier mismatch)
216
+
217
+ **Symptom:** "Looks really weird and monochromatic", "feels
218
+ AI-generated", "color could be bolder". On a tier-A/B product (consumer,
219
+ gamified, learning, lifestyle — see *Domain Colour Tier* in §1.5), the
220
+ 3-up of category tiles all read the same neutral hue when blurred, even
221
+ though every tile has a `tone` prop set.
222
+
223
+ **Detection:** Run the *category squint* (Step 3a):
224
+
225
+ 1. Take a desktop screenshot.
226
+ 2. Apply a 10–15px Gaussian blur (any image tool).
227
+ 3. Look at the repeated tile group: should you see 3–4 distinct colour
228
+ blobs (tier A/B) or near-uniform achromatic with one alert pop (tier
229
+ C/D)?
230
+ 4. Mismatch → token tints are the wrong tier for this product.
231
+
232
+ Generic cause: a `Card` / `Tile` / `MetricBox` primitive uses tints in
233
+ the `/5–/10` range (tier-D defaults). Faint enough to be "tasteful" on
234
+ a finance dashboard, far too faint for a learning app where colour *is*
235
+ the gamification signal (Duolingo: green=correct, red=hearts,
236
+ orange=streak…).
237
+
238
+ **Fix shape:** Identify the product tier (§1.5) and bump the token
239
+ scale to match:
240
+
241
+ - Tile background: `/5–/10` → `/15–/25` gradient.
242
+ - Tile ring: missing or `/10` → `ring-1 ring-<tone>/30` (separates
243
+ adjacent tiles even when blurred).
244
+ - Value text: neutral → `text-<tone>` (the number dominates the squint
245
+ test; colour the number, not just the icon).
246
+ - Icon background: `/10` → `bg-<tone>/25 ring-<tone>/40` so icons read
247
+ as semantic chips, not neutral glyphs.
248
+ - Reserve neutral surface for *zero-state* / disabled tiles only.
249
+
250
+ Patch at the primitive (token scale or shared tile component) so the
251
+ fix propagates — see *Primitive-First Patch Rule*.
252
+
253
+ ### H16. Left-anchored stacked cards (no horizontal balance)
254
+
255
+ **Symptom:** "Everything stacked on top of each without any designer
256
+ thought, aligned to left", "feels templated", "no rhythm". Every card
257
+ is full-width, every label sits at the left edge, every metadata pill
258
+ sits below the title — no horizontal counter-weight.
259
+
260
+ **Detection:** Take a desktop or tablet screenshot. Mentally draw a
261
+ vertical line down the middle of each stacked card. If every card's
262
+ visual centre of gravity sits left of that line, you have a
263
+ left-anchored stack. Common cause: every primitive (`Card`, `Row`,
264
+ `ListItem`) renders its action / metadata under the title in a vertical
265
+ flow, never to the right.
266
+
267
+ **Fix shape:** Re-introduce horizontal weight (one move per card is
268
+ enough; doing all four creates noise):
269
+
270
+ - **Pin metadata right.** Move timestamp, count, status pill,
271
+ chevron, or category badge to the right edge via Gestalt common
272
+ region (`flex justify-between`).
273
+ - **Promote one card to split layout.** Image-left + text-right (or
274
+ reverse) at the densities that allow it.
275
+ - **Vary card height by importance.** Hero card 1.4×, secondary 1.0×,
276
+ metadata 0.6× — uniform height is what makes the stack feel
277
+ templated.
278
+ - **Replace one full-width card with a 2-up grid** of equal-importance
279
+ siblings — the grid breaks the single-column rhythm without removing
280
+ content.
281
+
282
+ Avoid: adding decorative right-side icons that aren't tied to data —
283
+ that's just visual noise. Right-anchored elements must carry meaning.
284
+
285
+ ---
286
+
287
+ ## Pattern Library
288
+
289
+ ### Crowded Card
290
+
291
+ Before: title, subtitle, description, status, stats, tags, actions all top-stacked.
292
+
293
+ After:
294
+
295
+ - Top: eyebrow + title + one useful line.
296
+ - Middle: media or breathing room.
297
+ - Bottom: stats/metadata in a separated footer band.
298
+ - Action: stable corner, footer, or detail drawer CTA.
299
+
300
+ ### Dead Grid Space
301
+
302
+ Try:
303
+
304
+ - `grid-auto-flow: dense` / masonry-like placement if supported by the stack.
305
+ - Resize spans by content importance, not by project age or arbitrary order.
306
+ - Use wide cards for rich horizontal screenshots; portrait/device galleries for
307
+ mobile apps.
308
+ - Anchor content to top and metadata to bottom so empty space becomes rhythm.
309
+
310
+ ### Hard Scroll Cut
311
+
312
+ Try:
313
+
314
+ - `mask-image: linear-gradient(...)` with `-webkit-mask-image`.
315
+ - Top/bottom "curtain" gradients matching the surface.
316
+ - Scroll shadows or slim progress rails.
317
+ - Extra padding so content is not permanently hidden under the fade.
318
+
319
+ ### Flat Interaction
320
+
321
+ Try:
322
+
323
+ - 100-300ms ease-out feedback on direct actions.
324
+ - Slight lift/translate, underline draw, icon morph, or preview reveal.
325
+ - Motion that starts from the element the user acted on.
326
+ - Reduced-motion fallback that preserves state change without movement.
327
+
328
+ ### Overexplained Page
329
+
330
+ Try:
331
+
332
+ - Keep only the highest-scent labels visible.
333
+ - Move explanation into tooltips, detail drawers, or empty-state education.
334
+ - Use progressive disclosure for advanced filters and rarely used controls.
335
+
336
+ ### Heavy Active State (tabs, dock cells, sidebar items, breadcrumb)
337
+
338
+ Symptom: full-cell `bg-active` / `bg-brand-soft` background fill on the
339
+ active item makes it look 1.5× heavier than its inactive siblings, even
340
+ when layout dimensions are identical. User reports "highlight is weirdly
341
+ big", "heights are incoherent", "clunky".
342
+
343
+ Fix shape (pick by element type — same shape every time, generic across
344
+ stacks):
345
+
346
+ - **Tab row** → drop the cell background. Active = `text-<accent>` +
347
+ `font-semibold` + a 2 px accent underline at `bottom-0`. The count badge
348
+ tints to accent. Inactive padding === active padding.
349
+ - **Bottom dock cell** (Material 3 NavigationBar pattern) → drop the cell
350
+ background. Active = a `h-6 px-3 rounded-full bg-<accent>-soft` pill
351
+ wrapping ONLY the icon, plus `text-<accent> font-semibold` on the label.
352
+ Cell chrome stays neutral so the dock reads as a single calm strip.
353
+ - **Sidebar item** → drop the full-row background. Active = a leading 2 px
354
+ accent rail (`before:absolute before:left-0 before:w-0.5 before:bg-<accent>`)
355
+ + `text-foreground font-medium`. Hover paints `bg-muted/40` (calm wash,
356
+ visually distinct from active).
357
+ - **Breadcrumb current crumb** → drop the bordered card chrome entirely.
358
+ Active = `text-foreground font-semibold` plain inline span +
359
+ `aria-current="page"`. The row's tonal recess is the only background.
360
+
361
+ Rule of thumb: if the active treatment increases the bounding box's
362
+ *painted area* by more than ~15 %, the user will read it as "clunky".
363
+ Material 3, Stripe Apps, Linear, and Vercel all obey this — when in doubt,
364
+ copy them.
365
+
366
+ ### Wayfinding-on-Root Tautology
367
+
368
+ Symptom: on the root route (`/`, `/dashboard`, `/home`), the page name
369
+ appears 3+ times — breadcrumb chip says "Home", the dock has Home active,
370
+ the page H1 / greeting says "Home" — and the user calls it "atrocious" or
371
+ "redundant".
372
+
373
+ Fix shape:
374
+
375
+ - On the root path, suppress the entire breadcrumb / context row (e.g.
376
+ `showContextRow={false}` or gate at the layout: `pathname !== "/" &&
377
+ <BreadcrumbRow />`). The dock active indicator + the page's H1/greeting
378
+ already answer "where am I?".
379
+ - Breadcrumbs answer "how do I go up?" — at the root, there is no up, so
380
+ the row is dead weight.
381
+ - On nested pages, the breadcrumb earns its row again.
382
+
383
+ Generic rule: count how many chrome zones display the page name on the
384
+ current route. If ≥ 2 say the same word for the *current* page (excluding
385
+ the H1, which is the only authoritative one), the others are tautology.
386
+
387
+ > **Note on the failures formerly listed here.** "Wrapper-Collapsed
388
+ > Tiles", "Dead Conditional Slot", "Monochromatic Surface",
389
+ > "Information Duplication", and "Left-Anchored Stacked Cards" are now
390
+ > documented in *Hidden Failure Modes* (H12–H16) above — that section
391
+ > includes both detection probes (DOM measurement, blur tests, dup-datum
392
+ > scans, tier-mismatch checks) AND fix shapes. The Pattern Library is
393
+ > reserved for compositional patterns; failure modes with a "how to
394
+ > detect" component live in §Hidden Failure Modes.
395
+
396
+ ---
397
+
398
+ ## Primitive-First Patch Rule
399
+
400
+ When a UI bug repeats across pages, tiles, rows, or routes, **patch the
401
+ primitive that hosts the bug, not every consumer**. This is the
402
+ single highest-leverage move available to an enhancer.
403
+
404
+ Workflow:
405
+
406
+ 1. Find the bug live (e.g. tile widths uneven).
407
+ 2. Walk *up* the component tree from the broken leaf. Stop at the first
408
+ wrapper with a `display`, `width`, `flex-shrink`, `aspect-ratio`,
409
+ `min-h`, or `slot` constraint that is forcing the bug.
410
+ 3. Search for other call sites of that wrapper:
411
+
412
+ ```
413
+ grep -r "<Tooltip" src/ | wc -l # how many sites are affected?
414
+ grep -r "<EditorialHero" src/ | wc -l
415
+ grep -r "asChild={" src/ui/<wrapper>/ # slot-pattern check
416
+ ```
417
+ 4. If 3+ sites use the same wrapper, the fix lives in the wrapper:
418
+ - Add a prop that lets the consumer opt into the correct behaviour
419
+ (`block`, `stretch`, `fillContainer`, `compact`) — never break
420
+ existing call sites.
421
+ - Pick a default that matches what most consumers actually want.
422
+ - Document the intent in a code comment — a future enhancer must
423
+ understand *why* the prop exists, not just *what* it does.
424
+ 5. Verify with the *DOM uniformity gate* on at least two consumer
425
+ pages — same wrapper, different contexts.
426
+
427
+ Anti-pattern (do not do this): adding `w-full !w-[calc(100%-var(--gap))]`
428
+ to one specific tile to force-fix the visible page. The bug remains
429
+ everywhere else; you've just hidden it on the page you happened to look
430
+ at.
431
+
432
+ ---
433
+
434
+ ## Visual Psychology Map
435
+
436
+ Use these as design justifications:
437
+
438
+ - **NN/g visual hierarchy**: use contrast, scale, and grouping to guide the eye.
439
+ - **NN/g heuristic #8**: maximize signal, minimize noise; clarity beats flourish.
440
+ - **Progressive disclosure**: defer secondary or advanced detail until needed.
441
+ - **Fitts's Law**: make important targets large, close, and stable.
442
+ - **Hick's Law**: reduce visible choices or stage them.
443
+ - **Proximity/Common Region**: group related elements with spacing or containers.
444
+ - **Aesthetic-usability effect**: polish can increase perceived trust, but only
445
+ when the UI remains clear.
446
+ - **Change blindness**: subtle motion can confirm state changes users might miss.
447
+
448
+ ---
449
+
450
+ ## Motion Rules
451
+
452
+ - Direct feedback: 100-180ms.
453
+ - Small state change: 180-260ms.
454
+ - Drawer/modal/large spatial transition: 220-360ms.
455
+ - Prefer ease-out for entering/settling.
456
+ - Never animate layout so much that text being read moves unexpectedly.
457
+ - Avoid infinite motion except quiet status/progress.
458
+ - Always respect `prefers-reduced-motion` or the repo's motion abstraction.
459
+
460
+ Motion must answer at least one question:
461
+
462
+ - Did my action work?
463
+ - What changed?
464
+ - Where did this thing come from or go?
465
+ - What can I interact with?
466
+ - How far through this surface/process am I?
467
+
468
+ ---
469
+
470
+ ## Implementation Rules
471
+
472
+ 1. Change layout and information placement before color/motion.
473
+ 2. Keep edits local to the page and existing primitives.
474
+ 3. Use existing design tokens. Do not invent new colors/radii/shadows unless the
475
+ repo has no system.
476
+ 4. Wire UI state to real backend/domain state. Do not add hardcoded counts,
477
+ fake statuses, placeholder progress, decorative badges, or mock cards unless
478
+ the user explicitly asks for a prototype.
479
+ 5. When visual feedback needs data the frontend lacks, inspect the schema/API
480
+ boundary and add the smallest durable field or derived helper needed.
481
+ 6. Add comments only for non-obvious design intent.
482
+ 7. Prefer CSS/Tailwind composition over bespoke JS. Use JS only for stateful
483
+ scroll progress, measurement, or interaction state.
484
+ 8. Avoid accessibility regressions: focus rings, keyboard access, color contrast,
485
+ readable text, and reduced motion must survive.
486
+ 9. If adding masks/fades, ensure content remains reachable and not permanently
487
+ obscured at scroll boundaries.
488
+
489
+ ---
490
+
491
+ ## Enhancement Plan Template
492
+
493
+ ```
494
+ ## UI Enhancement Plan
495
+
496
+ Current state:
497
+ - [What the page visually does now]
498
+
499
+ Content rank:
500
+ - Primary:
501
+ - Secondary:
502
+ - Metadata:
503
+ - Actions:
504
+ - Ambient:
505
+
506
+ Planned changes:
507
+ | Pain | Principle | Move | File |
508
+ |------|-----------|------|------|
509
+ | Text is crowded at top | hierarchy, proximity | pin metadata to bottom band | ... |
510
+ | Footer cuts content | continuity | add scroll fade + padding | ... |
511
+ | Grid has dead space | balance | resize spans + dense placement | ... |
512
+
513
+ Verification:
514
+ - 1440:
515
+ - 1024:
516
+ - 800:
517
+ - Reduced motion:
518
+ - Dark/light:
519
+ ```
520
+
521
+ ---
522
+
523
+ ## Quick Sanity Checks
524
+
525
+ - [ ] Domain colour tier identified (A/B/C/D) and applied consistently.
526
+ - [ ] Primary content is obvious at a *hierarchy squint* (first eye target).
527
+ - [ ] Tier A/B: categories distinguishable at a *category squint* (colour alone).
528
+ - [ ] Repeated tiles measured: rendered widths within 1px of each other.
529
+ - [ ] No wrapper between a grid cell and its child is `inline-flex` /
530
+ `inline-block` / content-width-only when it should fill.
531
+ - [ ] Every conditional slot (`media`, `aside`, `cover`) tested with sparse
532
+ / zero-state content; no dead `min-h` floors on mobile.
533
+ - [ ] No datum (number, word, date, status) repeats inside one viewport
534
+ fold; duplicates either deleted or replaced with complementary data.
535
+ - [ ] At least one piece of right-anchored metadata per stacked card to
536
+ avoid left-alignment monotony.
537
+ - [ ] Metadata does not compete with headings.
538
+ - [ ] At most 2-3 type scales dominate the page.
539
+ - [ ] Related elements are grouped by proximity or common region.
540
+ - [ ] Empty space feels intentional, not accidental.
541
+ - [ ] Secondary details are progressively disclosed.
542
+ - [ ] Scroll/overflow edges are communicated, not chopped.
543
+ - [ ] Microinteractions have a purpose and respect reduced motion.
544
+ - [ ] No CTA wraps or changes hit-area shape across viewports.
545
+ - [ ] Repeating bug → patched at the primitive, not the consumer site.
546
+
547
+ ### Hidden-failure-mode audit (run before declaring done)
548
+ - [ ] **H1 active-state mass**: active tab/dock/nav item's bounding box ≈
549
+ inactive sibling's (within ~15 % painted area). Squint test passes —
550
+ no sibling looks "weirdly big".
551
+ - [ ] **H2 chrome tautology**: on the current route, the page name appears
552
+ in ≤ 1 chrome zone (the H1 is canonical; everything else is suppressed
553
+ if it would echo the same word — especially on root / index pages).
554
+ - [ ] **H3 card-on-card**: no chip with `bg-card border` sits on a row that
555
+ already has a tonal recess. One elevation per row.
556
+ - [ ] **H4 brand-color budget**: ≤ 1 brand-tinted surface per visual zone
557
+ (the primary CTA), excluding status chips that *carry* meaning and
558
+ the active micro-indicator.
559
+ - [ ] **H5 library inline width** (TanStack Table, AG-Grid, MUI DataGrid,
560
+ Chakra, react-table) is explicitly overridden when your responsive CSS
561
+ rule needs to win — confirm via DevTools `Computed → width` that your
562
+ rule is not crossed-out at every viewport.
563
+ - [ ] **H6 column allocation**: no column reserves ≥ 2.5× its widest content
564
+ while a sibling truncates.
565
+ - [ ] **H7 hover-reveal touch fallback**: every hover-revealed action has a
566
+ tap-only fallback below the pointer breakpoint.
567
+ - [ ] **H8 hit area vs visual chrome**: 44 px touch targets achieved via
568
+ invisible negative-margin extension, not by inflating the visual
569
+ chrome (no `w-11 h-11 bg-card border` icon buttons).
570
+ - [ ] **H9 responsive visibility breakpoints** match across the column-meta
571
+ flag (`hideBelowMd`) and the className (`md:table-cell`) — no
572
+ inverted ranges.
573
+ - [ ] **H10 active state has aria-current** (`aria-current="page"` for nav,
574
+ `aria-selected="true"` for tabs); ARIA and visual treatment agree.
575
+ - [ ] **H11 motion systems don't fight** on the same property
576
+ (framer `layoutId` xor CSS `transition`).
577
+ - [ ] **H12 conditional slots** collapse to zero when their child is null.
578
+ - [ ] **H13 wrapper-collapsed tiles**: every repeated tile group's
579
+ `widthSpan ≤ 1px` (run the DOM probe in §3b). No ancestor between
580
+ grid cell and tile is `inline-flex` / `inline-block` /
581
+ content-width-only when it should fill.
582
+ - [ ] **H14 information duplication per fold**: no datum (number, word,
583
+ status) appears more than once inside any single viewport fold.
584
+ Duplicates either deleted or replaced with complementary data.
585
+ - [ ] **H15 monochromatic surface**: tier-A/B products show distinct
586
+ colour blobs per category at the 10–15 px blur test; tier-C/D
587
+ products show near-uniform achromatic surfaces with colour
588
+ reserved for status alerts only.
589
+ - [ ] **H16 left-anchored stack**: every stacked card has at least one
590
+ piece of right-anchored metadata (timestamp, count, chevron,
591
+ status pill, badge) tied to data — no decorative right-side icons.
592
+
593
+ ### Repo health
594
+ - [ ] Lints/build/tests pass for touched files.
595
+
596
+ ---
597
+
598
+ ## When Not To Use
599
+
600
+ - Pure workflow correctness, data modeling, or task usability: use
601
+ `enhance-web-ux` first.
602
+ - Pure design-token compliance audit: use `audit-uiux-design-system`.
603
+ - Report-only heuristic audit: use `audit-ux`.
604
+ - Brand-new product/page from scratch: use `design-frontend`.
605
+
606
+ ---
607
+
608
+ ## Research Anchors
609
+
610
+ - **NN/g — Visual Hierarchy**: contrast, scale, grouping, and whitespace
611
+ guide focus; squint with 5–10px blur to verify intended hierarchy.
612
+ <https://www.nngroup.com/articles/visual-hierarchy-ux-definition/>
613
+ - **NN/g — Defer Secondary Content for Mobile**: first screen ruthlessly
614
+ focused on the minimum information needed to communicate the top point;
615
+ duplication = wall-of-text by another name.
616
+ <https://www.nngroup.com/articles/defer-secondary-content-for-mobile>
617
+ - **NN/g — Content Dispersion (Mobile-First on Desktop)**: stretching
618
+ design-mobile-first patterns to wide viewports fragments related content;
619
+ same logic applies in reverse to dense conditional slots on mobile.
620
+ <https://www.nngroup.com/articles/content-dispersion/>
621
+ - **NN/g — 5 Principles of Visual Design**: scale, hierarchy, balance,
622
+ contrast, Gestalt — and why "no more than 3 different sizes".
623
+ <https://www.nngroup.com/articles/principles-visual-design/>
624
+ - **MDN — `min-content` / `auto` sizing**: grid/flex children have
625
+ intrinsic `min-width: auto`; explicitly set `min-width: 0` to release
626
+ it. The canonical fix for "tiles won't shrink/fill evenly".
627
+ - **Adam Argyle (Chrome DevRel) — Unintuitive CSS Layout Solutions**:
628
+ `min-height: 0`, `min-width: 0`, `flex-shrink: 0`, and
629
+ `repeat(auto-fill, minmax(min(10rem, 100%), 1fr))` — short, generic.
630
+ <https://nerdy.dev/3-unintuitive-layout-solutions>
631
+ - **Duolingo — Core Tabs Redesign + Gamification as Design Language**:
632
+ reference for tier-A vibrant semantic palettes (green=correct,
633
+ red=hearts, orange=streak…). Each colour carries a system meaning;
634
+ muted palettes undermine the tone.
635
+ <https://blog.duolingo.com/core-tabs-redesign/>
636
+ - **Stripe / Vitality / ColorArchive on SaaS dashboards**: reference for
637
+ tier-D restraint — 60-30-10 rule, semantic colour reserved for status,
638
+ achromatic chrome.
639
+ <https://vitalitydesignsystem.com/foundations/colour/>
640
+ - **Figma — 2026 Web Design Trends**: vibrant maximalist returning,
641
+ especially for lifestyle / youth / learning brands; supports the
642
+ domain-tier framing.
643
+ <https://www.figma.com/resource-library/web-design-trends/>
644
+ - **Linear — A calmer interface for a product in motion (2025)**: "structure
645
+ should be felt, not seen" — chrome recedes so content takes precedence;
646
+ borders softened, sidebars dimmed, icon backgrounds removed. Canonical
647
+ reference for the *Calm Chrome* critical rule and Hidden Failure Mode H2.
648
+ <https://linear.app/now/behind-the-latest-design-refresh>
649
+ - **Linear — How we redesigned the Linear UI part II**: tonal recess on the
650
+ inverted-L app chrome; harmonized header bars; LCH-based theme generation
651
+ to enforce consistent elevations. Reference for chrome calm-down work.
652
+ <https://linear.app/now/how-we-redesigned-the-linear-ui>
653
+ - **Material 3 — NavigationBar spec**: active indicator is a 64×32
654
+ `cornerFull` pill in `SecondaryContainer` color wrapping the icon — never
655
+ a full-cell fill (`ActiveIndicatorWidth = 64dp`,
656
+ `ActiveIndicatorHeight = 32dp`, `ActiveIndicatorShape = CornerFull`).
657
+ Canonical reference for Hidden Failure Mode H1 and the *Heavy Active
658
+ State* fix shape on bottom navigation.
659
+ <https://m3.material.io/components/navigation-bar/overview>
660
+ - **NN/g — Navigation: You Are Here**: prominence (color, weight, offset)
661
+ is how users locate themselves; many active-state designs are too
662
+ subtle (missed) or too loud (clunky). Reference for active-state tuning.
663
+ <https://www.nngroup.com/articles/navigation-you-are-here/>
664
+ - **NN/g — Button States**: enabled / disabled / hover / focus / pressed
665
+ must each be visually distinct *without* changing layout dimensions.
666
+ Reference for the active-mass-mismatch fix.
667
+ <https://www.nngroup.com/articles/button-states-communicate-interaction/>
668
+ - **TanStack Table — Column Sizing Guide** + **Issue #5870**: `header.getSize()`
669
+ emits inline `style={{ width }}` per cell that beats unscoped CSS unless
670
+ `!important` or `table-layout: fixed`. Same gotcha applies to AG-Grid,
671
+ MUI DataGrid, Chakra DataTable, and most headless data-grid libraries.
672
+ Canonical reference for Hidden Failure Mode H5 and H6.
673
+ <https://tanstack.com/table/v8/docs/guide/column-sizing>
674
+ - **MDN CSS masking**: gradient `mask-image` for soft edge fades.