@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,476 @@
1
+ ---
2
+ name: mobile-rn-screen
3
+ description: >
4
+ Polish an existing React Native screen so it feels native and intentional.
5
+ Use for "this screen looks off", "feels clunky on iOS", "Android version
6
+ looks wrong", "jank when scrolling", or "button is unreachable".
7
+ license: MIT
8
+ paths:
9
+ - "**/ios/**"
10
+ - "**/android/**"
11
+ - "**/app.json"
12
+ - "**/app.config.*"
13
+ - "**/capacitor.config.*"
14
+ - "**/*.gradle"
15
+ - "**/Podfile"
16
+ ---
17
+
18
+ > Surface router: `/uiux`. You are here: `mobile-rn-screen`. Native iOS/Android (SwiftUI / Compose, no web layer) is out of scope — use Apple HIG / Material directly.
19
+
20
+ # Enhance Screen — React Native
21
+
22
+ **Degree of freedom: MIXED.** Pain, tier, and heuristic mapping
23
+ `[HIGH freedom]`; recon, screenshots, no-hex, and ReduceMotion
24
+ `[LOW freedom — run exactly]`.
25
+
26
+ Turn an existing RN screen into a composed, native-feeling interface:
27
+ calmer hierarchy, correct platform idioms, tight safe-area and keyboard
28
+ handling, purposeful motion, and component primitives that work on both
29
+ iOS and Android without forking.
30
+
31
+ ## How to reason
32
+
33
+ 1. **Recon** — screen file, tree, tokens, safe-area chain
34
+ 2. **Rank** — primary / secondary / metadata / actions
35
+ 3. **Forensics** — 3 sizes + keyboard + silent pains
36
+ 4. **Primitive** — fix the shared wrapper; no hex in the screen
37
+
38
+ ## Worked example
39
+
40
+ > **Recon:** Home uses `ScreenContainer` + extra `useSafeAreaInsets().top` on the back button.
41
+ > **Rank:** title is primary; streak count is metadata — it appears twice.
42
+ > **Forensics:** 360px back overlaps title (S1/S18); streak ×2 (S10).
43
+ > **Primitive:** drop the child inset; keep the hero streak; no new hex.
44
+
45
+ ## Self-critique before reporting
46
+
47
+ - **Compose first** — hierarchy/safe-area/targets before color or motion
48
+ - **Both platforms** — iOS shadow + Android elevation/ripple were both written
49
+ - **Tokens only** — no hex literals; ReduceMotion falls back to instant
50
+ - **Right owner** — FPS / bundle / Hermes → `mobile-rn-performance`; emulator down → `mobile-emulator-start`
51
+
52
+ > **Vague-but-visceral native feedback ("button is weirdly big", "text
53
+ > gets cut off on my phone", "scrolling feels janky", "can't tap that",
54
+ > "looks like a web page") almost always maps to one of the Hidden
55
+ > Failure Modes (N1–N15) below — start there, not at decoration.**
56
+
57
+ > Before taking any screenshots, follow `mobile-emulator-start` SKILL.md to
58
+ > bring up a working dev loop on the Android emulator. For iOS, trigger
59
+ > a CI build and install via TestFlight; the JS layer is verified on
60
+ > Android first (90%+ of "iOS bugs" are platform-agnostic RN/JS bugs).
61
+
62
+ ---
63
+
64
+ ## Rules
65
+
66
+ > **Compose before decorating.** Fix hierarchy, grouping, alignment,
67
+ > safe-area handling, and touch targets before adding colour, motion, blur,
68
+ > or shadows. An overlapping status bar is worse than a dull palette.
69
+
70
+ > **iOS and Android are co-equal targets.** Every change must be verified
71
+ > on both platforms. Shadow props are platform-split (iOS: `shadow*`; Android:
72
+ > `elevation`). Haptics are iOS-first. Ripple is Android-first. Write both.
73
+
74
+ > **No hex literals in screen/component code.** Route all colours through the
75
+ > design-token system (`theme.colors.*`, `withAlpha`, named constants from
76
+ > `@<org>/design-tokens`). Hard-coded hex values bypass dark/high-contrast
77
+ > mode support and make tier-A → tier-B colour scaling impossible.
78
+
79
+ > **Touch targets: 44×44 pt (iOS HIG) / 48×48 dp (M3) minimum.** A 16 dp
80
+ > icon inside a 40×40 dp Pressable is too small. Extend invisibly with
81
+ > `hitSlop` or a negative-margin Pressable wrapper; do not inflate the
82
+ > visual chrome to achieve the target.
83
+
84
+ > **Safe area is ScreenContainer's job — never add it twice.** If
85
+ > `ScreenContainer` (or your repo's equivalent) already applies
86
+ > `useSafeAreaInsets()`, adding insets again in a child component produces
87
+ > a double-counted gap. `ScreenBackButton` uses `top: 8`, not
88
+ > `top: 8 + insets.top`, for exactly this reason.
89
+
90
+ > **Primitive-first patch.** When a layout, colour, or wrap bug appears on
91
+ > multiple screens, fix the shared primitive — not every consumer site.
92
+ > A `HubRowItem` with wrong spacing fixed in one place heals every screen
93
+ > that uses it.
94
+
95
+ > **Never ship mock, dead, or rogue UI.** Visual feedback must be backed by
96
+ > real data contracts, backend state, or domain helpers. Don't fake progress
97
+ > bars, streak counts, or status chips in the component; wire them to the
98
+ > real source or add the smallest schema extension needed.
99
+
100
+ > **Respect `ReduceMotion`.** Every animation must check
101
+ > `AccessibilityInfo.isReduceMotionEnabled()` (or your repo's
102
+ > `ReduceMotionContext`) and fall back to an instant state change. This is
103
+ > non-negotiable; it is required by both Apple HIG and Android accessibility
104
+ > guidelines.
105
+
106
+ > **Use the local design system.** The repo's token system and component
107
+ > primitives exist for a reason. Extend an existing primitive before
108
+ > inventing a one-off `<View style={{...}}>`.
109
+
110
+ ---
111
+
112
+ ## Workflow Checklist [LOW freedom — do not skip]
113
+
114
+ Copy and track:
115
+
116
+ ```
117
+ RN ENHANCE /<ScreenName>
118
+ - [ ] 0. PLATFORM TIER: domain class → colour-tier (A vibrant / B expressive /
119
+ C productive / D restrained) — see §1.5
120
+ - [ ] 1. RECON: screen file, component tree, navigation type, data shape, tokens,
121
+ primitives, ScreenContainer/safe-area wrapper chain
122
+ - [ ] 2. CONTENT RANK: primary / secondary / metadata / actions / ambient
123
+ - [ ] 3. LIVE READ: screenshots at 3 device configs (small / standard / large phone)
124
+ + tablet if relevant; inspect safe area, keyboard behaviour, landscape
125
+ - [ ] 3.5 DEVICE FORENSICS: onLayout measurements for repeated elements, conditional-
126
+ slot zero-state, dup-datum scan per screen, accessibility large-text probe
127
+ - [ ] 4. PAIN INVENTORY: user-reported + silent issues from forensics pass
128
+ - [ ] 5. HEURISTIC MAP: each pain → NN/g # + RN-specific failure mode
129
+ - [ ] 6. PRIMITIVE MATCH: each fix → existing component / token / helper
130
+ - [ ] 7. IMPLEMENT: primitive-level fixes first, smallest per-screen diffs after
131
+ - [ ] 8. VERIFY: re-screenshot at 3 configs + keyboard up + large-text + dark/light +
132
+ Android + iOS (TestFlight or CI screenshot)
133
+ - [ ] 9. WRITE-UP: pain → heuristic → fix → before/after
134
+ ```
135
+
136
+ ---
137
+
138
+ ## Step 1 — Recon: Understand the Screen Before Touching It [LOW freedom — run exactly]
139
+
140
+ ### 1a. Read the screen file
141
+
142
+ ```
143
+ Glob: **/screens/**/<ScreenName>.tsx # adapt to the repo layout (apps/mobile/src, src/screens, app/); same for the api/core/design-tokens reads below
144
+ Read: the screen file in full
145
+ ```
146
+
147
+ Extract:
148
+
149
+ - **Navigation context**: native stack / modal / bottom sheet / tab root?
150
+ What presents this screen, what does it navigate to?
151
+ - **Primary task**: the ONE thing a user comes here to do.
152
+ - **Data shape**: entities displayed, all fields available (not just shown).
153
+ - **ScreenContainer / SafeAreaView chain**: which wrapper handles safe-area
154
+ insets? Is `headerShown: false`? Are there nested scroll containers?
155
+
156
+ ### 1b. Map the component tree
157
+
158
+ Build a small ASCII tree:
159
+
160
+ ```
161
+ <ScreenContainer>
162
+ ├── <BlurHeader> — title + back button
163
+ ├── <EditorialScrollView> — main scrollable body
164
+ │ ├── <HubRowItem> — list rows (repeated)
165
+ │ └── <FooterBand> — stats / actions
166
+ └── <FloatingCTA> — primary action
167
+ ```
168
+
169
+ Also note every **wrapper in the layout chain** from the outer safe-area
170
+ provider down to the leaf Pressable. This is where double-inset bugs and
171
+ gesture conflicts hide.
172
+
173
+ ### 1c. Inventory the data shape
174
+
175
+ For every entity rendered, list ALL fields available — including unused ones.
176
+ Many enhancement opportunities are "we already have this data, we just don't
177
+ show it" (e.g. `lastStudied`, `masteryPercent`, `streakCount`).
178
+
179
+ ```
180
+ Read: packages/api/src/<entity>/index.ts
181
+ Read: apps/mobile/src/state/<entity>.ts
182
+ Read: packages/core/src/<entity>/ helpers
183
+ ```
184
+
185
+ ### 1d. Inventory primitives + tokens (NON-NEGOTIABLE)
186
+
187
+ ```
188
+ Glob: apps/mobile/src/components/ui/*.tsx
189
+ Glob: apps/mobile/src/components/layout/*.tsx
190
+ Read: packages/design-tokens/src/ — semantic colour tokens, grove tokens,
191
+ market-card constants, shadow tokens
192
+ Read: apps/mobile/src/lib/theme.ts (or your repo's theme hook)
193
+ ```
194
+
195
+ Write the token/primitive list down. Every fix in Step 7 must reference one
196
+ of these — never invent a one-off `{backgroundColor: '#2C2C2E'}`.
197
+
198
+ ### 1e. Check forbidden patterns
199
+
200
+ ```
201
+ Grep: "DO NOT|FORBIDDEN|avoid|deprecated" in the screen file + component headers
202
+ Grep: hex literals in apps/mobile/src/ (ESLint no-restricted-syntax should catch these)
203
+ ```
204
+
205
+ ---
206
+
207
+ ## Step 1.5 — Domain Colour & Density Tier [HIGH freedom]
208
+
209
+ Before touching any colour, name the product class. The same `/8` tint that
210
+ reads "premium and restrained" on a B2B dashboard reads "monochromatic and
211
+ dead" on a learning app.
212
+
213
+ | Tier | Examples | Surface bg tint | Accent fill | Categorical hue use |
214
+ |------|----------|-----------------|-------------|---------------------|
215
+ | **A — Vibrant / Gamified** | Duolingo, language learning, fitness, casual games | `/15–/25` + ring `/30–/40` | solid token, white-on-solid | every meaningful category has a distinct hue (correct/error/streak/xp/premium) |
216
+ | **B — Expressive Consumer** | Spotify, Notion playful, lifestyle apps | `/10–/18` + ring `/20–/28` | semi-solid | 3–5 semantic hues, decorative palette restrained |
217
+ | **C — Productive / Pro Tools** | Linear, GitHub Mobile, design tools | `/6–/12` tint + ring `/15` | one accent + 4 semantic states | accent for primary action only |
218
+ | **D — Restrained / Data-Dense** | Finance, analytics, healthcare, admin | mostly neutral; `/4–/8` on status only | one accent for CTA | colour reserved for data signal |
219
+
220
+ **How to detect tier:**
221
+ 1. Read the app's onboarding — "play, streak, level, fun, journey, master" → A/B; "workspace, dashboard, report, audit, pipeline" → C/D.
222
+ 2. Look at the primary CTA: solid saturated with chunky shadow → A; solid muted → B/C; outline/ghost → D.
223
+ 3. Count semantic hues in the token set. More than 5 with brand meaning (xp, streak, premium, tone-1..6, correct, error) → tier A.
224
+
225
+ **Tier mismatch is the top hidden cause of "looks dull" feedback on consumer apps.**
226
+ A tier-A app with tier-D `/8` tints will look washed-out even though every
227
+ token is technically "correct".
228
+
229
+ ---
230
+
231
+ ## Step 2 — Content Rank Before Layout [HIGH freedom]
232
+
233
+ Classify every visible element:
234
+
235
+ | Rank | Meaning | Default treatment in RN |
236
+ |------|---------|--------------------------|
237
+ | Primary | What the screen is about | largest `fontSize`, strongest contrast, most vertical space |
238
+ | Secondary | Helps interpret primary | near primary, smaller, grouped |
239
+ | Metadata | Dates, counts, stats, status | bottom row of a card, trailing Text in a row |
240
+ | Actions | What user can do | stable `Pressable` hit area, no overlap with keyboard |
241
+ | Ambient | Brand, mood, decorative | background, low-opacity, non-tappable |
242
+
243
+ Rules:
244
+ - If everything is primary, nothing is primary.
245
+ - Never stack metadata above the headline; pin it to the row's trailing edge or a card footer.
246
+ - If an action has `numberOfLines={1}` and still wraps on a small phone, abbreviate it.
247
+ - If a grid has dead space, adjust `numColumns`, card `flex`, or aspect ratio before adding more content.
248
+
249
+ ---
250
+
251
+ ## Step 3 — Live Read: Screenshot on Real Devices [LOW freedom — run exactly]
252
+
253
+ ### 3a. Three-device-config pass
254
+
255
+ Use the `mobile-emulator-start` SKILL.md to bring up the Android emulator.
256
+ Take screenshots at these three configs (change with `adb shell wm size`):
257
+
258
+ ```
259
+ 360×800 compact phone (Android S, older iPhones at ~375pt)
260
+ 412×917 standard phone (Pixel 7 / iPhone 16 default) — PRIMARY test target
261
+ 430×932 large phone (iPhone 16 Plus / large Android)
262
+ ```
263
+
264
+ For tablet-relevant screens add:
265
+ ```
266
+ 768×1024 tablet portrait (iPad / Android medium tablet)
267
+ ```
268
+
269
+ Screenshot commands:
270
+ ```bash
271
+ adb shell screencap -p /sdcard/sc.png && adb pull /sdcard/sc.png ./screenshot-360.png
272
+ adb shell wm size 412x917 && adb shell screencap -p /sdcard/sc.png && adb pull /sdcard/sc.png ./screenshot-412.png
273
+ adb shell wm size 430x932 && adb shell screencap -p /sdcard/sc.png && adb pull /sdcard/sc.png ./screenshot-430.png
274
+ adb shell wm size reset
275
+ ```
276
+
277
+ ### 3b. What to note per screenshot
278
+
279
+ For each config, write 2–3 lines:
280
+
281
+ ```
282
+ 360×800 — "XP bar truncates label to 2 lines; bottom CTA hidden behind tab bar"
283
+ 412×917 — "Layout looks clean; streak count duplicated in header AND in hero card"
284
+ 430×932 — "Dead space in the 2-up grid; right card 40px wider than left"
285
+ ```
286
+
287
+ ### 3c. Keyboard probe
288
+
289
+ Tap the first text input on any screen that has one. Note:
290
+ - Does `KeyboardAvoidingView` / `KeyboardAwareScrollView` scroll the focused input into view?
291
+ - Does the primary CTA remain tappable above the keyboard?
292
+ - On Android: `behavior='height'`. On iOS: `behavior='padding'`.
293
+
294
+ ### 3d. Squint test — two passes
295
+
296
+ Run both; the second is the one most enhancers skip:
297
+
298
+ | Pass | Question | Failure |
299
+ |------|----------|---------|
300
+ | **Hierarchy squint** | "Where is my eye pulled first?" | Multiple elements equally loud — primary not chosen |
301
+ | **Category squint** | "Can I tell related items apart by colour alone, without reading?" | All tiles same neutral → must read every label (NN/g #6 violation) |
302
+
303
+ ---
304
+
305
+ ## Step 3.5 — Device Forensics (catch the silent bugs) [LOW freedom — run exactly]
306
+
307
+ Screenshots show *what looks wrong*. Device forensics shows *why*. Run this
308
+ before declaring the screen understood.
309
+
310
+ ### 3.5a — Repeated-element measurement gate
311
+
312
+ For every group that should render with uniform widths/heights — grid cards,
313
+ tab bar items, stat chips, row cells — measure them with `onLayout`:
314
+
315
+ ```tsx
316
+ // Drop this temporarily on any repeated component to measure it:
317
+ <View onLayout={e => console.log('MEASURE', e.nativeEvent.layout)} />
318
+ ```
319
+
320
+ Or use a quick probe in the JS console (Metro/Hermes debugger):
321
+
322
+ ```js
323
+ // In Metro remote debugger / React DevTools
324
+ // Add onLayout logging to the repeated element, trigger a render,
325
+ // read the Metro output for { x, y, width, height } per instance.
326
+ ```
327
+
328
+ Expected: widths within 1–2dp of each other for elements in the same row or grid.
329
+ Width spread > 4dp on elements that *should* be equal → Yoga flex bug (see N-F1).
330
+
331
+ ### 3.5b — Conditional-slot zero-state probe
332
+
333
+ For every optional region (media slot, illustration, `aside`, `footerBand`,
334
+ `secondaryCTA`), test with the smallest realistic content (empty account,
335
+ zero streak, no achievements). Look for:
336
+
337
+ - A `minHeight` floor reserving space when the slot's content is absent.
338
+ - A `View` that renders an empty container with visible padding.
339
+ - A card that is ≥ 120 dp tall but contains only an icon and "0".
340
+
341
+ Fix: conditionally render the wrapper (`{slot && <Region>{slot}</Region>}`)
342
+ or collapse the floor on compact screens.
343
+
344
+ ### 3.5c — Information-duplication scan per screen
345
+
346
+ List every datum (number, percentage, status word, streak count) visible on
347
+ the screen and how many times it appears:
348
+
349
+ ```
350
+ HomeScreen @ 412×917:
351
+ - "12 words today" ×3 (hero chip, progress bar label, footer row)
352
+ - streak "5d" ×2 (hero badge, streak section title)
353
+ - "68%" ×2 (progress bar, Today metric tile)
354
+ ```
355
+
356
+ Anything appearing ≥2× on the same screen is a duplicate. Pick the most
357
+ actionable placement; delete the others. Each delete is a hierarchy upgrade
358
+ for what stays. (NN/g #8 Aesthetic & Minimalist.)
359
+
360
+ ### 3.5d — Category-squint colour pass
361
+
362
+ For a tier-A/B product, take the standard-phone screenshot and apply a
363
+ 10–15px blur. A 3-up or 4-up of category tiles should show as 3–4 *distinct*
364
+ colour blobs. If they blur to the same neutral → token tints are the wrong
365
+ tier (see H15 in this skill's Hidden Failure Modes).
366
+
367
+ ### 3.5e — Large dynamic type probe
368
+
369
+ In the emulator: Settings → Accessibility → Font size → set to the largest
370
+ option. Reload the app and screenshot. Look for:
371
+
372
+ - Text overflowing its container (fixed-height Views with Text inside).
373
+ - Row items wrapping to 2 lines when they should stay on one.
374
+ - Buttons that clip their label.
375
+
376
+ Fix: remove fixed heights on Text containers; use `numberOfLines={1}` +
377
+ `adjustsFontSizeToFit` for labels that must stay on one line;
378
+ `maxFontSizeMultiplier={2}` on critical UI labels.
379
+
380
+ ---
381
+
382
+ ## Step 4 — Pain Inventory [HIGH freedom]
383
+
384
+ Maintain a single table. Include user-reported pains AND silent ones from Step 3.5.
385
+
386
+ | # | Source | Pain | Config | Notes |
387
+ |---|--------|------|--------|-------|
388
+ | 1 | user | "Back button overlaps the header title" | 390pt | double safe-area inset |
389
+ | 2 | user | "Streak number shows up twice on the home screen" | all | dup-datum — H14 |
390
+ | 3 | live | Tab bar clips last row of FlatList | 360px | missing contentInset |
391
+ | 4 | live | CTA wraps to 2 lines on 360px | compact | label too long — S9 |
392
+ | 5 | live | All 3 tone cards blur to same neutral | 412px | tier-A with tier-D tints |
393
+
394
+ **Do not skip silent pains.** The user reports the loudest issue; the worst ones
395
+ are often invisible to them.
396
+
397
+ ### 4b — Silent-Pain Catalogue for RN (always check these)
398
+
399
+ | # | Pain class | Where to look | NN/g | Symptom |
400
+ |---|-----------|---------------|------|---------|
401
+ | S1 | Safe area violation | Screenshot on notched device; check top/bottom edges | #1 Visibility | Status bar overlaps content; home indicator covers CTA |
402
+ | S2 | Sub-minimum touch target | `onLayout` on Pressable; < 44×44pt (iOS) / 48×48dp (Android) | Fitts's, #4 | Users mis-tap; icon buttons always affected |
403
+ | S3 | Keyboard occlusion | Tap input, keyboard opens; is the field visible? | #1 Visibility | Active input hidden behind keyboard |
404
+ | S4 | Tab bar content clipping | Scroll FlatList to last item | #8 Minimalist | Bottom card partially hidden behind tab bar |
405
+ | S5 | Large text breakage | Enable Accessibility → largest font size | #4 Consistency | Labels wrap; containers clip; icons misalign |
406
+ | S6 | Platform shadow mismatch | Compare iOS and Android screenshots | #4 Consistency | Cards flat on Android, lifted on iOS (or vice versa) |
407
+ | S7 | Gesture conflict | Try swipe on a SwipeRow inside a ScrollView | #3 User Control | Swipe opens but also scrolls; one gesture cancels the other |
408
+ | S8 | JS-thread jank | Trigger animation while scrolling a long list | #1 Visibility | Animation stutters; 60fps drops below 30fps |
409
+ | S9 | Wrapping label / CTA | Screenshot at 360×800 | #4 Consistency, Fitts's | Button text breaks to 2 lines at compact width |
410
+ | S10 | Information duplication | Step 3.5c scan | #8 Minimalist | Same count/status shown 2–3× on one screen |
411
+ | S11 | Wrapper-collapsed tiles | Step 3.5a onLayout measurements | #4 Consistency | Grid tiles uneven; some narrower than expected |
412
+ | S12 | Dead conditional slot | Step 3.5b zero-state probe | #8 Minimalist | Reserved space for absent illustration/media |
413
+ | S13 | Active-state mass mismatch | Compare active vs inactive tab/dock items | #4 Consistency | Active tab uses full-cell background fill — looks 1.5× heavier |
414
+ | S14 | Brand-color competition | Count brand-tinted elements per zone | Visual hierarchy | Multiple brand-colored surfaces in one region; CTA loses scent |
415
+ | S15 | Monochromatic surface | Step 3.5d category squint | #1 Visibility, #6 Recognition | Tier-A app with tier-D /5–/8 tints; tiles all same neutral |
416
+ | S16 | Left-anchored stacked cards | Screenshot | #4 Consistency | Every card full-width, every label left; no horizontal balance |
417
+ | S17 | Missing Android ripple | Tap Pressable on Android with ripple=null | #1 Visibility | No visual feedback on Android tap |
418
+ | S18 | Double safe-area inset | Check wrapper chain for 2× useSafeAreaInsets | #4 Consistency | Extra gap at top/bottom; ScreenBackButton appears too low |
419
+
420
+ ---
421
+
422
+ ## Step 5 — Heuristic Map [HIGH freedom]
423
+
424
+ For each pain, name the violated heuristic. A pain that cannot be tied to
425
+ a heuristic is probably a personal taste call — defer it.
426
+
427
+ | # | Pain | NN/g # | RN failure mode | Why it violates |
428
+ |---|------|--------|-----------------|-----------------|
429
+ | 1 | Back button overlaps title | #4 Consistency | N13 (double inset) | Two inset additions produce layout inconsistency |
430
+ | 2 | Streak shown twice | #8 Minimalist | S10 (info duplication) | Redundant copies fragment attention |
431
+ | 3 | Tab bar clips FlatList | #1 Visibility | N4 (tab bar clipping) | System-status element (tab bar) hides content |
432
+ | 4 | CTA wraps at 360px | #4 Consistency, Fitts | S9 (wrapping CTA) | Hit-target shape unstable across screen widths |
433
+ | 5 | All tone cards same neutral | #1 Visibility, #6 Recognition | S15 (monochromatic) | Category signal hidden; user must read every label |
434
+
435
+ ---
436
+
437
+ ## Step 6 — Primitive Match (no inventions) [HIGH freedom]
438
+
439
+ For each fix, match an existing primitive or token:
440
+
441
+ | # | Fix | Primitive / token | File |
442
+ |---|-----|-------------------|------|
443
+ | 1 | Remove double inset | ScreenContainer already applies insets; remove the extra `useSafeAreaInsets().top` from the child | ScreenName.tsx |
444
+ | 2 | Delete duplicate streak display | Remove the footer strip; keep the hero badge (most actionable placement) | HomeScreen.tsx |
445
+ | 3 | Add `contentInsetAdjustmentBehavior` or `contentInset` to FlatList | `FlatList` prop | ScreenName.tsx |
446
+ | 4 | Abbreviate CTA label or use `numberOfLines={1}` + icon | existing `Button` primitive | ScreenName.tsx |
447
+ | 5 | Bump tile tint from `/8` to `/20` + ring | design-token constants from `@org/design-tokens` | tile component |
448
+
449
+ **If a fix would add a new primitive, stop and ask: "could this be a variant on
450
+ an existing component?" Almost always: yes.**
451
+
452
+ ### 6b — Primitive-First Patch Decision
453
+
454
+ Same rule as `enhance-web-ui` — fix the wrapper, not the consumer:
455
+
456
+ ```
457
+ Does the bug appear on more than one screen?
458
+ ├── Yes → Walk UP the component tree. Find the first shared component
459
+ │ that hosts the bug. If ≥ 3 screens use it → fix at the primitive.
460
+ └── No → Fix at the consumer. Document: "if a 2nd screen reuses this
461
+ pattern, move the fix to the primitive."
462
+ ```
463
+
464
+ Concrete RN cues that the primitive is broken:
465
+
466
+ - `FlatList` on 3 screens all missing `contentInset` → add it to a shared `ScreenList` wrapper.
467
+ - Every `Pressable` in the codebase has `hitSlop={{ top: 8, bottom: 8, left: 8, right: 8 }}`
468
+ copy-pasted → make it the default in a `TouchablePrimitive` wrapper.
469
+ - Every screen's `Text` for metadata has `fontSize: 12, color: theme.colors.secondary` inline
470
+ → create a `MetaText` primitive.
471
+
472
+ ---
473
+
474
+ ## Further reading
475
+
476
+ - [Step 7 — Enhancement Plan and more](references/details.md)