@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,222 @@
1
+ # Enhancement Walkthroughs
2
+
3
+ Real-world before/after enhancements that follow the SKILL.md workflow. Each walkthrough is
4
+ short and shows how RECON → LIVE → PAIN → HEURISTIC → PRIMITIVE → IMPLEMENT → VERIFY plays
5
+ out on a concrete page.
6
+
7
+ ---
8
+
9
+ ## Example 1 — `/files` (file explorer)
10
+
11
+ ### Step 1 — Recon
12
+
13
+ - **Workflow position:** central document hub. Users land here from notifications,
14
+ reimbursement, tax-filing, and from the global breadcrumb.
15
+ - **Primary task:** find a file or folder, then either open it, link it to an entry,
16
+ or download.
17
+ - **Data domain:** `UploadedFile`, `Folder`, `TreeItem`. Files carry `aiData`,
18
+ `confirmedData`, `fileMetadata`. Folders carry `description`, `linkedDocumentTitle`,
19
+ `linkedDocumentType`, `isDocumentLinked`.
20
+ - **Adjacent screens:** `/notifications`, `/reimbursement`, `/tax-compliance`.
21
+ - **Component tree:**
22
+
23
+ ```
24
+ <FileManagementPage>
25
+ ├── <PageHeader> — title, breadcrumbs, summary KPIs
26
+ ├── <Toolbar> — search, "+フォルダ", "アップロード", "通知書ZIP"
27
+ └── <FolderManagement>
28
+ └── <TreeNode> — file or folder row
29
+ ```
30
+
31
+ - **Primitives available:** `Badge`, `Button`, `AnimatedButton`, `Tooltip`, `Card`.
32
+ Tokens: `signal-warn`, `signal-out`, `signal-in`, `ai`, `ai-soft`, `brand`, `muted`.
33
+ Helpers: `getFileIcon`, `getFileStatus`, `getFolderFileCount`, `formatFileSize`,
34
+ `formatFileCount`.
35
+
36
+ ### Step 2 — Live (3 viewports)
37
+
38
+ | Viewport | Observation |
39
+ |----------|-------------|
40
+ | 1440 | Toolbar fits, but every folder uses the same blue `<Folder>` icon. `金額` and `サイズ` columns are blank for all folder rows. |
41
+ | 1024 | `通知書ZIP` button label competes for space; about to wrap. Always-on hint row "☐ チェックで選択 / Shift+クリック / Ctrl+A" repeats above every list. |
42
+ | 800 | Toolbar buttons wrap to 2 lines. Category labels (`経費`, `通知書`) wrap under names. |
43
+ | Expand notice folder | `未処理` status badge inside 64px column wraps to `未処` / `理`. |
44
+
45
+ ### Step 3 — Pain inventory
46
+
47
+ | # | Source | Pain | Viewport |
48
+ |---|--------|------|----------|
49
+ | 1 | user | "Hard to see which were document link" | all |
50
+ | 2 | user | "Which folder had AI analysis" | all |
51
+ | 3 | user | "Which folder were linked to other document types" | all |
52
+ | 4 | user | Buttons overflow text in 2 lines | 1024 |
53
+ | 5 | live | All folder icons identical | all |
54
+ | 6 | live | Empty `金額` / `サイズ` columns for folder rows | desktop |
55
+ | 7 | live | `未処理` badge wraps to 2 lines | desktop |
56
+ | 8 | live | Always-on hint row consumes vertical space | all |
57
+ | 9 | live | Date duplicated (under name AND in column) | all |
58
+ | 10 | live | Empty (0件) folders look identical to populated ones | all |
59
+
60
+ ### Step 4 — Heuristic mapping
61
+
62
+ | # | Heuristic | Why |
63
+ |---|-----------|-----|
64
+ | 1, 3, 5 | #1 Visibility, #6 Recognition, #2 Match Real World, Miller's | linked / categorised state hidden in label text |
65
+ | 2 | #1 Visibility, Tesler's | AI is an expensive async result rendered invisibly |
66
+ | 4, 7 | #4 Consistency, Fitts's | Japanese 2-character labels in a fixed column without nowrap |
67
+ | 6, 9 | #8 Minimalist | empty / duplicate cells fight for attention |
68
+ | 8 | #6 Recognition, #8 Minimalist | repeating affordance hint = recall, wastes a row forever |
69
+ | 10 | #8 Minimalist | populated rows should dominate |
70
+
71
+ ### Step 5 — Primitive match
72
+
73
+ | # | Fix | Primitive / token |
74
+ |---|-----|-------------------|
75
+ | 1, 5 | category-aware icon + chip | new `getFolderCategory` helper → `Badge` + `lucide-react` icons + tone tokens |
76
+ | 2 | AI chip | `Badge`-style chip with `bg-ai-soft text-ai` |
77
+ | 3 | linked-document chip | `Link2` icon + `bg-signal-in/10 text-signal-in` |
78
+ | 4 | toolbar buttons | `whitespace-nowrap flex-shrink-0`, progressive `md:inline / lg:inline` labels, Tooltip with full label |
79
+ | 6 | folder aggregates | new `getFolderAggregates` → cells render `formatJpy` + `formatBytesShort` |
80
+ | 7 | non-wrapping status | pass `whitespace-nowrap` per call site, widen status column 64→78 |
81
+ | 8 | drop hint, add `?` tooltip | `Tooltip` on column header |
82
+ | 9 | drop inline date | delete inline date in `TreeNode` |
83
+ | 10 | dim empty folders | `opacity-70` |
84
+
85
+ ### Step 6 — Plan
86
+
87
+ | Pri | File | Change | Risk |
88
+ |-----|------|--------|------|
89
+ | 1 | `helpers/get-folder-category.tsx` (NEW) | category → `{ Icon, label, tone }` | low |
90
+ | 2 | `helpers/get-folder-utils.tsx` | add `getFolderAggregates(files, folderId)` | low |
91
+ | 3 | `components/tree-node.tsx` | use category icon, drop empty cells, AI chip, nowrap | med |
92
+ | 4 | `components/folder-management.tsx` | drop hint row, retitle columns, sticky `?` | low |
93
+ | 5 | `pages/file-management-page.tsx` | toolbar nowrap + progressive labels | low |
94
+ | 6 | `tree-node.tsx` (grid) | status column 64→78, count 60→56 | low |
95
+
96
+ ### Step 7 — Implement
97
+
98
+ Land helpers first; component refactor next; page-level toolbar last. After each diff,
99
+ lint the touched files (ReadLints in Cursor; the repo's lint script in Claude Code). Comment the *intent* only — e.g.:
100
+
101
+ ```tsx
102
+ // Status column widened 64→78px so stacked AI+status chips never collide
103
+ // with the count column. Count column tightened 60→56px to compensate.
104
+ export const FILE_ROW_GRID_COLS = "… sm:grid-cols-[… 78px 56px 28px]"
105
+ ```
106
+
107
+ ### Step 8 — Verify
108
+
109
+ Re-screenshot at 1440 / 1024 / 800. Click into the same notice folder. Confirm:
110
+
111
+ - folder icons differentiated by category
112
+ - AI / 未処理 / 連携 chips inline on rows
113
+ - toolbar buttons single-line at all widths (icon-only at narrow)
114
+ - status badges single-line; AI + 未処理 stacked vertically when both present
115
+ - empty folders at `opacity-70`
116
+ - always-on hint replaced by `?` tooltip; live hint only when selecting
117
+
118
+ ### Step 9 — Write-up table
119
+
120
+ | Pain | Heuristic | Fix | Primitive |
121
+ |------|-----------|-----|-----------|
122
+ | Hard to see linked-document folders | #1, #6 | `Link2` chip + linked tone | `Badge`, `signal-in` |
123
+ | Which folders had AI | #1 | inline `AI` chip on folder + file | `Badge`, `ai`/`ai-soft` |
124
+ | Generic folder icons | #6, #2 | `getFolderCategory` per-domain icon + tone | helper + Lucide |
125
+ | Toolbar wrap | #4, Fitts's | `whitespace-nowrap` + progressive labels | `Button` + `Tooltip` |
126
+ | Empty `金額` / `サイズ` | #8 | folder aggregates | `getFolderAggregates` |
127
+ | Status badge wrap | #4 | `whitespace-nowrap` + widened column | `Badge` + grid |
128
+ | Always-on hint row | #6, #8 | `?` tooltip; live hint only when selecting | `Tooltip` |
129
+ | Empty folders compete | #8 | `opacity-70` | utility class |
130
+
131
+ ---
132
+
133
+ ## Example 2 — `/notifications` zip viewer (single notice)
134
+
135
+ ### Step 1 — Recon
136
+
137
+ - **Workflow position:** terminal — user opens a single notification document received
138
+ from e-Gov / e-Tax / eLTAX.
139
+ - **Primary task:** read the notice content; understand which file inside the zip is
140
+ the meaningful one.
141
+ - **Data domain:** `Notice` with attached files (`xml`, `xsl`, `kagami` cover sheet,
142
+ `zip` original). `xsl` files contain the styled view; `xml` files contain the data.
143
+ - **Adjacent screens:** `/notifications` list (back), `/files` (where the zip is stored).
144
+
145
+ ### Step 2 — Live
146
+
147
+ | Viewport | Observation |
148
+ |----------|-------------|
149
+ | 1440 | Single document panel takes full width. The other zip files are nowhere visible. Clicking on `kagami.xsl` triggers download instead of view. |
150
+ | 1024 | Same — no way to navigate between files inside the zip. |
151
+ | 800 | Same. |
152
+
153
+ ### Step 3 — Pain
154
+
155
+ | # | Pain |
156
+ |---|------|
157
+ | 1 | Other files in the zip are invisible — user can't browse them |
158
+ | 2 | Click on .xsl/.xml/.zip downloads instead of previewing |
159
+ | 3 | XML / XSL preview is raw monospace dump — unreadable |
160
+ | 4 | Labels `適用結果`, `成形結果` are jargon — user doesn't understand which to read |
161
+
162
+ ### Step 4 — Heuristic
163
+
164
+ | # | Heuristic | Why |
165
+ |---|-----------|-----|
166
+ | 1 | #1 Visibility, #6 Recognition | siblings inside the zip are hidden |
167
+ | 2 | #2 Match Real World | a "view" intent should not download |
168
+ | 3 | #8 Minimalist, #4 Consistency | raw dump is not human-friendly |
169
+ | 4 | #2 Match Real World | engineering jargon in a user surface |
170
+
171
+ ### Step 5 — Primitive match
172
+
173
+ | # | Fix | Primitive |
174
+ |---|-----|-----------|
175
+ | 1 | left tree-list of all files inside the zip | `TreeView` primitive (or extend `<FolderManagement>`) |
176
+ | 2 | inline reader instead of download | `<NoticeFileReadableView>` component |
177
+ | 3 | XSL-styled rendering for `.xml`+`.xsl`, syntax-highlighted for raw `.xml` | use `xslt-processor` or `xmldom`; primitives: `<CodeBlock>` for fallback |
178
+ | 4 | rename labels `適用結果`→`通知書(読みやすく整形)`, `成形結果`→… | content fix |
179
+
180
+ ### Step 6 — Plan
181
+
182
+ | Pri | File | Change |
183
+ |-----|------|--------|
184
+ | 1 | `notice-file-tree.tsx` (NEW) | left-panel tree of files inside zip |
185
+ | 2 | `notice-file-readable-view.tsx` (NEW) | inline reader component |
186
+ | 3 | `notice-detail-panel.tsx` | merge tree + reader, drop download-on-click |
187
+ | 4 | (content) | rename jargon labels |
188
+
189
+ ### Step 7 — Implement
190
+
191
+ (Already shipped in the codebase — see `src/features/notice-document/components/`.)
192
+
193
+ ---
194
+
195
+ ## Template — Use This for Future Enhancements
196
+
197
+ When this skill runs, end the session with a write-up in this format. The user should be
198
+ able to scan it in 30 seconds:
199
+
200
+ ```markdown
201
+ ## Enhanced /<route>
202
+
203
+ ### What changed
204
+ - [primitive] [behaviour change] — heuristic #N
205
+ - …
206
+
207
+ ### Files changed
208
+ - `<path>` — [one-line purpose]
209
+
210
+ ### Verified
211
+ - 1440 / 1024 / 800 viewport screenshots — no wrap, no overflow, no collision
212
+ - Lint clean
213
+ - Console clean
214
+
215
+ ### Pain → Heuristic → Fix
216
+ | Pain | Heuristic | Fix | Primitive |
217
+ |------|-----------|-----|-----------|
218
+ | … | … | … | … |
219
+ ```
220
+
221
+ Add the latest enhancement here (Example 3, 4, …) every time this skill ships changes,
222
+ so future runs can mine concrete past patterns.
@@ -0,0 +1,406 @@
1
+ ### 5b — Primitive-First Patch Decision
2
+
3
+ Before writing the diff, decide: **does this bug live at the leaf I'm
4
+ looking at, or at a wrapper / token / helper higher up?** Use this
5
+ decision tree:
6
+
7
+ ```
8
+ Is the bug visible on more than one page / route / row?
9
+ ├── Yes → Walk UP the component tree from the broken leaf.
10
+ │ Find the first wrapper / helper / token that hosts the bug.
11
+ │ Search for other consumers of that wrapper.
12
+ │ If consumers ≥ 3 → fix at the wrapper (with a backward-compatible
13
+ │ prop / opt-in behaviour / new default).
14
+ │ If consumers ≤ 2 → fix at each call site, but file a TODO to
15
+ │ extract the wrapper when a 3rd consumer appears.
16
+ └── No → Fix at the consumer. But still ask: "what shape of bug would
17
+ appear if a 2nd consumer reused this pattern?" Document it.
18
+ ```
19
+
20
+ Concrete cues that the wrapper is broken (not the leaf):
21
+
22
+ - Same primitive used N times, only some sites display the bug → **the
23
+ bug is in a *combination* of wrapper default + consumer assumption**.
24
+ Fix by making the consumer assumption explicit (new prop) and changing
25
+ the default to match the common case.
26
+ - The leaf has `w-full` / `min-w-0` / `flex-1` already and is *still*
27
+ collapsing → the wrapper is content-sizing the leaf. Patch the wrapper.
28
+ - The leaf has correct semantic tokens but renders monochromatically →
29
+ the *token scale* is too faint for the product tier. Bump the token,
30
+ not the leaf.
31
+ - A `min-h` / `aspect-ratio` floor reserves space for content the leaf
32
+ doesn't have → the wrapper's *layout contract* assumes rich content.
33
+ Patch the wrapper to make the floor conditional.
34
+
35
+ Anti-pattern (do not do this): adding `!w-full` / `!min-h-0` / inline
36
+ overrides to one specific site to force-fix the page you're looking at.
37
+ The bug lives on every other consumer page — you've just hidden it
38
+ locally.
39
+
40
+ **Document the why in a code comment on the wrapper change.** Future
41
+ enhancers must understand *why* the prop / default exists, or they will
42
+ revert it. Comment template:
43
+
44
+ ```ts
45
+ // `block` makes the Tooltip wrapper a full-width flex column so a child
46
+ // `w-full` button actually fills its grid cell. Without this, the wrapper
47
+ // defaults to `inline-flex` and every stat tile shrinks to content width,
48
+ // leaving huge gaps in the 3-up grid (visible bug on /account → This Week
49
+ // before this fix). Repro: 3 StatExplainer tiles in `grid-cols-3 gap-2`
50
+ // — measure rect widths, expect uniform thirds.
51
+ ```
52
+
53
+ ---
54
+
55
+ ## Step 6 — ENHANCEMENT PLAN (the deliverable)
56
+
57
+ A single, reviewable table. Order by impact / risk:
58
+
59
+ ```
60
+ | Pri | File | Change | Heuristic | Risk |
61
+ |-----|------|--------|-----------|------|
62
+ | 1 | helpers/get-folder-category.tsx (NEW) | category → {icon, label, tone} | #2,#6 | low |
63
+ | 2 | helpers/get-folder-aggregates.tsx (NEW) | files[] + folderId → { count, ai, ¥, bytes } | #1,#8 | low |
64
+ | 3 | components/tree-node.tsx | use category icon + chips, drop empty cells | #1,#6,#8 | med |
65
+ | 4 | components/folder-management.tsx | drop hint row, retitle columns | #6,#8 | low |
66
+ | 5 | pages/<route>.tsx | toolbar nowrap + progressive labels | #4,#8 | low |
67
+ | 6 | components/ui/badge.tsx | (optional) add `whitespace-nowrap` to base | #4 | med |
68
+ ```
69
+
70
+ For each row also note: edge cases, what to test, what NOT to touch.
71
+
72
+ ---
73
+
74
+ ## Step 7 — IMPLEMENT (smallest possible diffs)
75
+
76
+ Rules during implementation:
77
+
78
+ 1. **Helper-first**. Land helpers (pure functions, no JSX) before touching the component
79
+ that uses them. They're easier to lint, test, and review.
80
+ 2. **One concern per edit**. If a single diff changes layout AND data AND tokens, split it.
81
+ 3. **Data contract before decoration**. If the enhancement depends on status,
82
+ progress, ownership, counts, validation, permissions, or timestamps, wire it
83
+ to the existing backend/schema/API or add the smallest durable field/helper
84
+ needed. Do not create mock arrays or fake visual state to make the screen
85
+ look richer.
86
+ 4. **Comment the WHY only**. Code that says "added `whitespace-nowrap`" is noise; a comment
87
+ that says "Japanese 2-character labels in a 64px column wrap to 2 lines without nowrap"
88
+ is gold. Future you (or another agent) won't undo it.
89
+ 5. **Use semantic tokens**. `bg-signal-warn/10 text-signal-warn` not `bg-orange-100 text-orange-700`.
90
+ Honour any "do NOT pair bg-X with text-X" warnings on the primitives you use.
91
+ 6. **No new colours, no new sizes, no new radii.** If you reach for one, you missed step 1d.
92
+ 7. **Empty / zero-state de-emphasis.** Apply `opacity-70` or a `muted` variant to rows with
93
+ zero children / zero amount / zero activity. Don't hide them — the user still needs them
94
+ in the count, but they shouldn't fight for attention.
95
+ 8. **Density gradient via Tailwind breakpoints.** Show full labels at `lg:`, abbreviate at
96
+ `md:`, icon-only at default. Never let a label wrap.
97
+ 9. **Stack tight columns vertically.** A 64-78px status column with TWO chips (AI + status)
98
+ stacks vertically (`flex-col gap-0.5`) — never horizontally.
99
+ 10. **Match colour saturation to product tier.** Tier A/B (vibrant /
100
+ consumer / learning / lifestyle) needs `/15–/25` tints with `/30–/40`
101
+ rings to read as semantic categories at a squint. Tier C/D
102
+ (productive / data-dense) keeps `/5–/10` for restraint. Tier mismatch
103
+ = monochromatic / washed-out feel even when every token is correct.
104
+ See *Domain Colour Tier* in `enhance-web-ui` SKILL.md.
105
+ 11. **Make conditional slots collapse when empty.** Any optional region
106
+ (`media`, `aside`, `cover`, `eyebrow`, `secondaryCTA`) must drop its
107
+ wrapper or its `min-h` floor when its content is sparse. Reserve
108
+ space only at densities where the slot will be filled. Inline
109
+ sparse data into the action row instead of letting it float in a
110
+ half-empty card.
111
+ 12. **Delete duplicate datums; replace with complementary data.** When
112
+ the same number/word/status appears twice in one fold, keep the
113
+ most actionable placement and replace the others with a sibling
114
+ datum (streak, "vs last week", reviews-due, etc.). Each delete is
115
+ a hierarchy upgrade for what stays.
116
+ 13. **Override third-party inline styles explicitly.** Headless data-grid
117
+ libraries (TanStack Table, AG-Grid, MUI DataGrid, Chakra DataTable,
118
+ react-table) emit inline `style={{ width: header.getSize() + 'px' }}`
119
+ on every `<th>` / `<td>` from a JS API. Inline styles beat scoped
120
+ CSS unless you use one of: (a) `!important` on the property, (b)
121
+ `table-layout: fixed` on the parent table so intrinsic widths are
122
+ ignored, or (c) drive widths through CSS variables that your rule
123
+ overwrites. Apply at **every viewport**, not just the one you tested.
124
+ Verify via DevTools `Computed → width`: your rule must not appear
125
+ crossed-out at 1440 / 1024 / 800. Same gotcha applies to MUI Tabs,
126
+ Mantine SegmentedControl, Chart.js / D3 default sizing, etc. — any
127
+ library that injects layout from JS.
128
+ 14. **Calm chrome before touching content.** If the brief includes chrome
129
+ (header / breadcrumb / tab / dock / sidebar / toolbar) the first move
130
+ is **subtraction**: strip backgrounds → borders → tints → fills, in
131
+ that order, until chrome reads as a tonal recess that frames content.
132
+ For active states, prefer micro-indicators (underline, M3 32×16 pill
133
+ on icon, count-badge tint, font-weight bump) over full-cell fills —
134
+ see "Heavy Active State" pattern + Hidden Failure Modes H1, H3 in
135
+ `enhance-web-ui`. On root / index routes, actively suppress the
136
+ breadcrumb / context row — the dock active indicator + page H1
137
+ already answer "where am I?", and the breadcrumb on root is pure
138
+ tautology (Failure Mode H2 / S13).
139
+ 15. **Audit the brand-color budget per zone.** Before adding a brand-tinted
140
+ surface (border / fill / ring / text in the brand color) anywhere in
141
+ chrome, count existing brand-tinted surfaces in that visual zone. If
142
+ ≥ 1 already exists for non-CTA reasons (a brand-bordered home icon,
143
+ a brand-tinted breadcrumb chip, a brand-tinted tab background),
144
+ **demote it** to neutral typography first. The brand color is
145
+ finite — spend it on the action the user came to take, status chips
146
+ that *carry* meaning, and the active micro-indicator only.
147
+ 16. **Set aria-current parity with the visual active state.** Whenever
148
+ you paint an active tab / nav link / breadcrumb crumb / dock cell,
149
+ also set `aria-current="page"` (or `aria-selected="true"` for tabs).
150
+ Visual + AT treatment must agree; keyboard and screen-reader users
151
+ depend on it. Grep for active-state classNames; for each, confirm
152
+ the same JSX node carries the matching ARIA attribute.
153
+
154
+ After every meaningful edit:
155
+
156
+ ```
157
+ Lint the modified files (ReadLints in Cursor; the repo's lint script in Claude Code) — fix anything you introduced.
158
+ ```
159
+
160
+ ---
161
+
162
+ ## Step 8 — VERIFY (the same three viewports, before/after)
163
+
164
+ ```
165
+ Re-screenshot at 1440 × 900, 1024 × 700, 800 × 700.
166
+ Click into the same representative items as step 2b.
167
+ Check: no wrap, no overflow, no collision, no jarring state change, console clean.
168
+ ```
169
+
170
+ If any pain from step 3 still shows visually, do not declare done. Iterate.
171
+
172
+ ### 8b — Re-run the silent-bug gates
173
+
174
+ Screenshots prove the surface; the gates from Step 2.5 prove the
175
+ underlying contract. After each enhancement, re-run:
176
+
177
+ | Gate | What to re-check | Pass criterion |
178
+ |------|------------------|----------------|
179
+ | Uniformity | rect widths of every repeated tile group you fixed | `widthSpan ≤ 1px` per group |
180
+ | Conditional slot | sparse / zero-state render of every slot you touched | no `min-h` reservation > 1.5× actual content height |
181
+ | Dup-datum | each fold of the page | every datum (number, word, status) appears exactly once |
182
+ | Category squint | desktop screenshot at 10–15px Gaussian blur | tier-A/B: distinct colour blobs per category. tier-C/D: near-uniform achromatic with saturated alerts only |
183
+ | Wrapper-fix consumers | every other consumer of any wrapper you patched | same wrapper, different page, no regression |
184
+
185
+ A passed silent-bug gate is *worth more than a clean screenshot*: it
186
+ prevents the bug class from re-appearing on adjacent pages your future
187
+ enhancers never thought to check.
188
+
189
+ ---
190
+
191
+ ## Step 9 — WRITE-UP
192
+
193
+ Use the template in `examples.md`. Each user-facing pain gets:
194
+
195
+ - a one-line **before** description
196
+ - the **NN/g heuristic** it violated
197
+ - the **primitive / token** used in the fix
198
+ - the **after** behaviour
199
+ - a small screenshot or code reference
200
+
201
+ Keep the message structured so the user can scan it in 30 seconds.
202
+
203
+ ---
204
+
205
+ ## Heuristic Mapping Cheat Sheet (quick reference)
206
+
207
+ | Symptom on screen | Likely NN/g heuristic |
208
+ |-------------------|------------------------|
209
+ | Async result invisible (AI ran, link made, file processed) | #1 Visibility of System Status |
210
+ | Domain term feels engineering-y (`fileStatus=unlinked`) | #2 Match Real World |
211
+ | No way to undo / cancel / back out | #3 User Control & Freedom |
212
+ | Two pages style the same thing differently | #4 Consistency & Standards |
213
+ | Destructive action with no confirm; mis-keyable forms | #5 Error Prevention |
214
+ | All items look identical, must read names to find one | #6 Recognition over Recall |
215
+ | No keyboard shortcut, no bulk action, no saved filters | #7 Flexibility & Efficiency |
216
+ | Empty columns, repeating hints, decorative chrome | #8 Aesthetic & Minimalist |
217
+ | Error messages with codes, no suggested next step | #9 Help Users Recover |
218
+ | Onboarding with no in-context help, opaque controls | #10 Help & Documentation |
219
+ | Active tab/dock/nav painted heavier than siblings (full-cell wash) | #4 Consistency + NN/g *Navigation: You Are Here* (too loud) |
220
+ | Same word ("Home") echoed in breadcrumb + dock + H1 on root route | #8 Aesthetic & Minimalist (chrome tautology) |
221
+ | Brand color on chrome chips dilutes the actual primary CTA | NN/g *Visual Hierarchy* (every brand-tinted thing claims primacy) |
222
+ | Card-on-card chip (`bg-card border` on a `bg-muted` row) | #4 Consistency, #8 Minimalist (one elevation per row) |
223
+ | Hover-only row action with no touch fallback | #6 Recognition over Recall, #7 Flexibility (silent on touch) |
224
+ | Library inline `width` beats your CSS at one viewport but not another | #4 Consistency (rule loses specificity war) |
225
+ | Column with 44px content reserves 150px while sibling truncates | #8 Aesthetic & Minimalist (allocation mismatch) |
226
+
227
+ ### Silent-bug → heuristic shortcuts
228
+
229
+ | Silent-bug class (Step 3b) | Likely NN/g heuristic | Why |
230
+ |----------------------------|------------------------|-----|
231
+ | Wrapper-collapsed tiles | #4 Consistency, #8 Minimalist | hit area unstable across rows; whitespace doesn't communicate grouping |
232
+ | Dead conditional slot | #8 Aesthetic & Minimalist | reserved space competes with focal content but holds no signal |
233
+ | Information duplication per fold | #8 Aesthetic & Minimalist | every duplicate steals attention from primary copy |
234
+ | Monochromatic surface (tier mismatch) | #1 Visibility, #6 Recognition | category signal hidden in the design-token scale |
235
+ | Left-anchored stack (no horizontal balance) | #4 Consistency | uniform layout hides true content hierarchy |
236
+ | Generic icon stack | #2 Match real world, #6 Recognition | mental categories collapse; user must read every name |
237
+
238
+ For depth on each heuristic and the supporting Laws of UX, read `HEURISTICS.md`.
239
+ For specific anti-patterns and their replacements, read `PATTERNS.md`.
240
+ For complete before/after enhancement examples, read `examples.md`.
241
+
242
+ ---
243
+
244
+ ## Quick Sanity Checks Before You Stop
245
+
246
+ - [ ] Product tier identified (A/B/C/D) and applied consistently
247
+ - [ ] Every change cites a heuristic in the write-up
248
+ - [ ] No new colour / spacing / radius value invented
249
+ - [ ] No new top-level primitive invented
250
+ - [ ] No mock/dead/rogue UI state introduced
251
+ - [ ] Feedback indicators are backed by real schema/API/domain state
252
+ - [ ] **DOM uniformity gate passed**: rect widths within 1px on every
253
+ repeated tile group fixed
254
+ - [ ] **Conditional-slot zero-state gate passed**: no slot reserves >1.5×
255
+ its actual content height on mobile
256
+ - [ ] **Dup-datum gate passed**: no datum (number, word, status) appears
257
+ more than once per fold
258
+ - [ ] **Category-squint gate passed**: tier-A/B → distinct colour blobs;
259
+ tier-C/D → near-uniform achromatic
260
+ - [ ] All labels stay on one line at 800 / 1024 / 1440
261
+ - [ ] Empty / zero-state rows are visually de-emphasised
262
+ - [ ] No always-on instruction row that repeats affordance text
263
+ - [ ] Async results (AI, link, error) are visible inline as chips, not behind a click
264
+ - [ ] **Repeating bug → patched at the wrapper / token / helper, not the
265
+ consumer** (with intent comment on why)
266
+
267
+ ### Hidden-failure-mode audit (the difficult-to-spot ones)
268
+ - [ ] **S11 Library specificity**: every responsive table/grid CSS rule was
269
+ verified at all 3 viewports via DevTools `Computed → width`; the
270
+ rule is *not* crossed-out by inline `style.width` from the
271
+ data-grid library at any viewport.
272
+ - [ ] **S12 Active-state mass**: bounding box of active tab / dock cell /
273
+ nav item ≈ bounding box of inactive sibling (within ~15 % painted
274
+ area). No active sibling reads as "weirdly big" at the squint test.
275
+ - [ ] **S13 Chrome tautology**: on root / index routes, the page name does
276
+ not appear in ≥ 2 chrome zones. Suppress the breadcrumb / context
277
+ row when redundant with the page H1 + dock active indicator.
278
+ - [ ] **S14 Card-on-card**: no chip with `bg-card border` sits on a row
279
+ whose own background is already a tonal recess. One elevation per row.
280
+ - [ ] **S15 Hover-only affordance**: every hover-revealed action has a
281
+ tap-only fallback below the pointer breakpoint
282
+ (`focus-within:opacity-100` or always-visible at `<sm`).
283
+ - [ ] **S16 Brand-color budget**: ≤ 1 brand-tinted surface per visual zone
284
+ excluding the active micro-indicator and meaningful status chips.
285
+ - [ ] **S17 Hit area vs visual chrome**: 44 px touch targets achieved via
286
+ invisible negative-margin extension, not by inflating the visual
287
+ chrome (no `w-11 h-11 bg-card border` icon buttons).
288
+ - [ ] **S18 Responsive visibility**: column-meta `hideBelowMd` flags and
289
+ className breakpoints are not inverted (no column appearing at `sm`
290
+ and disappearing at `md+`).
291
+ - [ ] **aria-current parity**: every visually-active nav / tab / dock /
292
+ breadcrumb item carries the matching `aria-current` /
293
+ `aria-selected` attribute.
294
+ - [ ] **S19 wrapper-collapsed tiles** (Step 2.5a / 3b S1): rendered
295
+ widths of every repeated tile group are within 1 px of each other.
296
+ No `inline-flex` / `inline-block` ancestor between grid cell and
297
+ tile is silently shrinking the children.
298
+ - [ ] **S20 dead conditional slot** (Step 2.5b / 3b S2): every optional
299
+ region tested with sparse / zero-state content; no slot reserves
300
+ `min-h` > 1.5× actual content height on mobile.
301
+ - [ ] **S21 information duplication per fold** (Step 2.5c / 3b S3): each
302
+ datum (number, word, status, date) appears exactly once per
303
+ viewport fold; duplicates deleted or replaced with complementary
304
+ data.
305
+ - [ ] **S22 monochromatic surface / domain-tier mismatch** (Step 2.5d /
306
+ 3b S4): category-squint at 10–15 px blur shows distinct colour
307
+ blobs (tier A/B) or near-uniform achromatic with status-only
308
+ colour (tier C/D).
309
+ - [ ] **S23 left-anchored stacked cards** (Step 3b S5): every stacked
310
+ card has at least one right-anchored piece of metadata tied to
311
+ data — no decorative right-side icons.
312
+
313
+ ### Repo health
314
+ - [ ] Lint passes on every modified file
315
+ - [ ] Three-viewport screenshots show no wrap / overflow / collision
316
+ - [ ] Write-up table maps each pain → heuristic → primitive → file → after
317
+
318
+ ---
319
+
320
+ ## When NOT to Use This Skill
321
+
322
+ - The user wants a **report only** (no code changes) → use `audit-ux` or
323
+ `audit-uiux-design-system`
324
+ - The user wants to **build a brand new feature** from scratch → use `design-frontend`
325
+ - The change is a single-line **bug fix** with no UX dimension → just fix it
326
+ - The user wants a **README / marketing page** prettied up → use `enhance-readme`
327
+
328
+ ---
329
+
330
+ ## Companion Files
331
+
332
+ - [`HEURISTICS.md`](HEURISTICS.md) — NN/g 10 + Laws of UX, condensed
333
+ - [`PATTERNS.md`](PATTERNS.md) — anti-pattern → replacement library
334
+ - [`examples.md`](examples.md) — complete before / after enhancement walkthroughs
335
+ - [`enhance-web-ui` SKILL.md](../../enhance-web-ui/SKILL.md) — companion
336
+ artistic/composition skill. The §"Hidden Failure Modes" section there
337
+ enumerates H1–H12 with detection probes and fix shapes that this skill's
338
+ S11–S18 reference. Read both together when feedback is vague-but-visceral
339
+ ("clunky", "atrocious", "wasted space", "incoherent height").
340
+
341
+ ---
342
+
343
+ ## Research Anchors (for the new failure-mode rules)
344
+
345
+ - **Linear — A calmer interface for a product in motion (2025)**: the
346
+ canonical reference for the *Calm Chrome* rule. Names the principle
347
+ "structure should be felt, not seen"; chrome recedes, content
348
+ takes precedence. <https://linear.app/now/behind-the-latest-design-refresh>
349
+ - **Material 3 — NavigationBar spec**: active indicator is a 64×32
350
+ `cornerFull` pill in `SecondaryContainer` color wrapping the **icon**,
351
+ not the cell. Reference for the *Heavy Active State* fix shape (S12).
352
+ <https://m3.material.io/components/navigation-bar/overview>
353
+ - **NN/g — Navigation: You Are Here**: prominence (color, weight, offset)
354
+ must be present, but not so loud it competes with content. Reference
355
+ for active-state tuning. <https://www.nngroup.com/articles/navigation-you-are-here/>
356
+ - **NN/g — Visual Hierarchy in UX**: contrast/scale/grouping create rank;
357
+ the squint test reveals real (vs intended) hierarchy. Reference for the
358
+ brand-color-budget audit (S16).
359
+ <https://www.nngroup.com/articles/visual-hierarchy-ux-definition/>
360
+ - **TanStack Table — Column Sizing Guide** + **Issue #5870**:
361
+ `header.getSize()` emits inline `style={{ width }}` per cell that beats
362
+ unscoped CSS unless `!important` or `table-layout: fixed`. Same gotcha
363
+ applies to AG-Grid, MUI DataGrid, Chakra DataTable, and most headless
364
+ data-grid libraries. Canonical reference for S11.
365
+ <https://tanstack.com/table/v8/docs/guide/column-sizing>
366
+ - **Adam Argyle (Chrome DevRel) — 3 Unintuitive CSS Layout Solutions**:
367
+ the `min-width: 0` / `min-height: 0` / `flex-shrink: 0` /
368
+ `repeat(N, minmax(0, 1fr))` recipe for grid/flex children that won't
369
+ shrink or fill evenly. Canonical reference for S19 (wrapper-collapsed
370
+ tiles). <https://nerdy.dev/3-unintuitive-layout-solutions>
371
+ - **Playwright — Locator boundingBox / evaluateAll**: programmatic API
372
+ for measuring rendered widths across repeated elements (the DOM
373
+ uniformity gate in §2.5a). Same pattern works in DevTools console
374
+ with `getBoundingClientRect()`.
375
+ <https://playwright.dev/docs/locators>
376
+ - **YOOtheme Pro — Collapsing Layouts**: explicit "collapsing cascade"
377
+ contract for editorial layouts — element collapses if empty → column
378
+ collapses if all elements collapsed → row collapses → section
379
+ collapses. Reference for S20 (dead conditional slot).
380
+ <https://yootheme.com/support/yootheme-pro/wordpress/collapsing-layouts>
381
+ - **NN/g — Defer Secondary Content for Mobile**: first screen ruthlessly
382
+ focused on the minimum information needed; duplication is a
383
+ wall-of-text by another name. Reference for S21 (information
384
+ duplication per fold).
385
+ <https://www.nngroup.com/articles/defer-secondary-content-for-mobile>
386
+ - **NN/g — Content Dispersion (design-mobile-first on desktop)**: stretching
387
+ design-mobile-first patterns wastes space on wide viewports; the inverse
388
+ failure is dense conditional slots wasting space on narrow viewports.
389
+ Reference for S20.
390
+ <https://www.nngroup.com/articles/content-dispersion/>
391
+ - **Duolingo — Core Tabs Redesign + Gamification as Design Language**:
392
+ reference for tier-A vibrant semantic palettes (green=correct,
393
+ red=hearts, orange=streak, yellow=XP, purple=premium). Each colour
394
+ carries a system meaning; muted palettes undermine the playful tone.
395
+ Reference for S22 (monochromatic surface).
396
+ <https://blog.duolingo.com/core-tabs-redesign/>
397
+ - **Stripe / Vitality / ColorArchive — SaaS Dashboard Color**: reference
398
+ for tier-D restraint — 60-30-10 rule, semantic colour reserved for
399
+ status, achromatic chrome. The other end of the same axis as
400
+ Duolingo. Use to diagnose whether you're applying tier-D tints to a
401
+ tier-A product (the "monochromatic" failure).
402
+ <https://vitalitydesignsystem.com/foundations/colour/>
403
+ - **Figma — 2026 Web Design Trends**: vibrant maximalist palettes
404
+ returning, especially for lifestyle / youth / learning brands.
405
+ Validates the *Domain Colour Tier* framing in `enhance-web-ui`.
406
+ <https://www.figma.com/resource-library/web-design-trends/>