@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,491 @@
1
+ ---
2
+ name: mobile-emulator-test
3
+ description: >
4
+ QA a native Android or Expo dev-client build end to end on the emulator,
5
+ checking UI, Supabase, and Sentry for each CRUD step. Use for "test on
6
+ emulator", "QA Android build", "verify native build", or "white screen".
7
+ license: MIT
8
+ ---
9
+
10
+ # mobile-emulator-test — Native build QA on Android emulator + MCP loop
11
+
12
+ **Degree of freedom: MIXED.** Walk judgment and findings `[HIGH freedom]`;
13
+ bring-up, Phase 1.5 freshness, and three-layer CRUD
14
+ `[LOW freedom — run exactly]`.
15
+
16
+ End-to-end verification of any native mobile build through a real Android
17
+ emulator session, with backend truth (Supabase MCP) and crash telemetry
18
+ (Sentry MCP) wired into the same loop. Catches the failure modes that pure
19
+ unit tests and CI bundle builds miss: white screens, prototype-stripped
20
+ cache rehydration, missing migrations, sync-disabled empty states, infinite
21
+ refetch loops, and silent error swallows.
22
+
23
+ ## How to reason
24
+
25
+ 1. **Discover** — stack, tabs, MCP, signed-in test account
26
+ 2. **Freshness** — source + Metro bundle + device (Phase 1.5)
27
+ 3. **Walk** — guest AND signed-in; every tab
28
+ 4. **Three-layer** — UI success + DB row + cold refetch; evidence per finding
29
+
30
+ ## Worked example
31
+
32
+ > **Discover:** Expo router; five tabs; Supabase MCP live; Sentry MCP missing (mark BLOCKED).
33
+ > **Freshness:** user said "nothing changed"; bundle `grep` of the patch string = 0 → `--clear` Metro, then reload.
34
+ > **Walk:** guest create fails closed; signed-in create shows toast.
35
+ > **Three-layer:** toast yes, `execute_sql` finds the row, kill/reopen still shows it. Finding: guest path only.
36
+
37
+ ## Self-critique before reporting
38
+
39
+ - **Fresh build** — source, bundle, and screencap all show the patched string
40
+ - **Both identities** — guest and signed-in walks ran; empty-state is not the only path
41
+ - **Three layers** — no mutation called "tested" on UI toast alone
42
+ - **Right owner** — bring-up only → `mobile-emulator-start`; store/plugins/OTA → `mobile-capacitor-platform`
43
+
44
+ ## Rules
45
+
46
+ > **Test as a real signed-in user AND as a brand-new guest.**
47
+ > Walk the app the way a paying customer would — sign in, browse every tab,
48
+ > add a real entry, edit it, delete it — AND the way a new user would —
49
+ > open the app fresh, hit the guest path, drive a CRUD round-trip without
50
+ > any account. Both paths exercise different code (sync replica vs cloud
51
+ > direct vs local-only adapter) and both regress independently. While
52
+ > walking, watch logcat, Sentry, and the DB at the same time.
53
+
54
+ > **Always verify the build under test is the latest source.**
55
+ > A "nothing changed" report is almost always a stale build: Metro served
56
+ > a cached bundle, the dev launcher cached a JS-bundle URL, or the
57
+ > emulator is running a previously-installed APK while the new one sits
58
+ > in `android/app/build/outputs/`. Phase 1.5 is non-negotiable.
59
+
60
+ > **Every mutation gets verified at three layers.**
61
+ > A create/edit/delete is not "tested" until: (1) the app shows success,
62
+ > (2) the row exists/changes/disappears in the DB via Supabase MCP, and
63
+ > (3) re-opening the screen reflects the same state from a cold fetch.
64
+
65
+ > **Evidence for every finding.**
66
+ > Each bug needs: `screencap` PNG, last 30 lines of `logcat ReactNativeJS`,
67
+ > the failing Sentry issue ID (if captured), and the exact reproduction taps.
68
+
69
+ > **Don't trust a "white screen".**
70
+ > A blank surface is almost always one of three things: Metro died, the
71
+ > bundle threw inside the React tree (caught by ErrorBoundary into Sentry),
72
+ > or the persisted cache hydrated a class instance as a plain object.
73
+ > Diagnose, don't restart blindly.
74
+
75
+ > **Clean up server state.**
76
+ > Anything you POST during the walk gets deleted before you finish, via the
77
+ > same Supabase MCP that verified it.
78
+
79
+ ---
80
+
81
+ ## Phase 0: Codebase + Environment Discovery [HIGH freedom]
82
+
83
+ Before launching anything, understand the build.
84
+
85
+ ### 0a. Detect the native stack
86
+
87
+ | Signal | Stack |
88
+ |---|---|
89
+ | `apps/*/app.json` or `apps/*/app.config.{js,ts}` + `expo` in deps | **Expo / React Native** |
90
+ | `react-native` in deps but no `expo` | **bare React Native** |
91
+ | `capacitor.config.{ts,json}` + a `web/` or `dist/` build | **Capacitor** |
92
+ | `pubspec.yaml` with `flutter:` block | **Flutter** |
93
+ | `src-tauri/` with `tauri.conf.json` | **Tauri mobile** |
94
+ | `android/app/src/main/AndroidManifest.xml` only | **native Android** |
95
+
96
+ Read the dependency manifest (`package.json`, `pubspec.yaml`, etc.) to extract:
97
+ - bundler / dev server (Metro, Vite, Capacitor Live Reload, Flutter daemon)
98
+ - bundler port (Metro defaults to 8081; check `scripts.start` / `expo start --port`)
99
+ - backend client (Supabase, Firebase, Amplify, custom REST)
100
+ - error tracker (Sentry, Bugsnag, Crashlytics) — needed for Phase 5
101
+ - offline/sync layer (PowerSync, Watermelon, Realm) — needed for Phase 4 fallback
102
+ - query cache (TanStack Query, RTK Query, SWR) — needed for Phase 6 cache audit
103
+
104
+ ### 0b. Inventory routes / tabs / mutation surfaces
105
+
106
+ | Stack | Where routes live |
107
+ |---|---|
108
+ | Expo Router | `app/**/*.{tsx,ts}` (file-based) |
109
+ | React Navigation | grep `createNativeStackNavigator`, `Tab.Screen`, `Stack.Screen` |
110
+ | Capacitor + React Router | `src/App.tsx` route table |
111
+ | Flutter | `lib/**/router.dart`, `MaterialApp.routes` |
112
+
113
+ For each route record: path, dynamic params, auth guard, primary CRUD entity.
114
+ Also list the **bottom tabs** explicitly — they are the spine of the walk.
115
+
116
+ ### 0c. Discover backend + telemetry config
117
+
118
+ ```bash
119
+ # Supabase project ref
120
+ grep -r "EXPO_PUBLIC_SUPABASE_URL\|SUPABASE_URL" .env .env.local apps/*/app.config.* 2>/dev/null
121
+ # Sentry DSN + project slug
122
+ grep -r "EXPO_PUBLIC_SENTRY_DSN\|SENTRY_DSN" .env .env.local 2>/dev/null
123
+ # PowerSync (or other sync) URL
124
+ grep -r "POWERSYNC_URL\|FIREBASE_DATABASE_URL" .env .env.local 2>/dev/null
125
+ ```
126
+
127
+ Also list available MCP servers:
128
+ - **supabase** → `list_tables`, `execute_sql`, `apply_migration`, `query_logs`, `get_advisors`
129
+ - **sentry** → `find_organizations`, `search_issues`, `get_sentry_resource`, `update_issue`
130
+
131
+ If either MCP is missing, mark that verification path BLOCKED but keep walking.
132
+
133
+ ### 0d. Test account
134
+
135
+ Find or ask for a **real signed-in user** with a non-trivial dataset. The
136
+ empty-state path is its own test (Phase 7), but the main walk MUST exercise
137
+ populated screens — that is where the cache-corruption, FX-conversion, and
138
+ sync-empty-state bugs live.
139
+
140
+ ---
141
+
142
+ ## Phase 0.5: Tall-handset AVD + skin/display truth (any Android app) [LOW freedom — run exactly]
143
+
144
+ Use this whenever layout QA benefits from extra vertical runway (multi-section
145
+ homes, drawers, FAB stacks) or whenever the emulator exits immediately / shows
146
+ the wrong logical resolution after editing `hw.lcd.*`.
147
+
148
+ ### 0.5a. Target profile (recommended debug geometry)
149
+
150
+ Goal: **`Physical size: 1080x4000`** (or `4000x1080` in landscape — verify with
151
+ `adb shell wm size` after boot).
152
+
153
+ Typical knobs live in **`%USERPROFILE%\.android\avd\<Something>.avd\config.ini`**
154
+ (or `~/Library/Android/avd/` on macOS). Set at least:
155
+
156
+ - `hw.lcd.width=1080`
157
+ - `hw.lcd.height=4000`
158
+ - `hw.lcd.density=<match your production class, often 420–480>`
159
+ - `showDeviceFrame=no` *(optional but keeps focus on pixels, not chrome)*
160
+
161
+ **Authoritative display check** (never trust the window chrome alone):
162
+
163
+ ```bash
164
+ adb shell wm size
165
+ adb shell wm density
166
+ ```
167
+
168
+ ### 0.5b. The `_no_skin` / invalid-skin trap (recent emulator builds)
169
+
170
+ Older templates or blog posts recommend `skin.name=_no_skin` and
171
+ `skin.path=_no_skin` to silence device frames on custom resolutions. Current
172
+ Studio / emulator builds often terminate with **`unknown skin name '_no_skin'`**
173
+ and **`exit_code: 1`** — so the emulator never joins `adb devices`, and helper
174
+ scripts that wait for reverse / intent time out.
175
+
176
+ **Rule:** Pick a skin path that resolves to an **existing** SDK skin directory,
177
+ or ship a **minimal custom skin** next to the AVD.
178
+
179
+ ### 0.5c. Minimal custom skin folder (generic pattern for any app)
180
+
181
+ Problem: pointing `skin.path` at a stock skin like `WXGA720` can force the guest
182
+ framebuffer to **`720×1280`** even when `config.ini` declares `hw.lcd.*`;
183
+ `adb shell wm size` will disagree with what you configured.
184
+
185
+ Mitigation:
186
+
187
+ 1. Create e.g.
188
+ **`%USERPROFILE%\.android\avd\<YourAvdFolder>\emulator_skin_1080x4000/`**
189
+ (name is arbitrary; keep it alphanumeric + underscores).
190
+ 2. Copy **all PNG + `hardware.ini`** from any stock SDK skin (for example
191
+ `platforms/android-*/skins/WXGA720/`) so background assets exist — the emulator
192
+ parser expects referenced files.
193
+ 3. Replace **`layout`** in that folder with a definition whose `device.display`
194
+ block matches **1080×4000** and whose **portrait** canvas includes small
195
+ margins (≈ 27 px gutters mirror stock skins):
196
+
197
+ ```txt
198
+ parts {
199
+ portrait {
200
+ background { image background_port.png }
201
+ }
202
+ landscape {
203
+ background { image background_land.png }
204
+ }
205
+
206
+ device {
207
+ display {
208
+ width 1080
209
+ height 4000
210
+ x 0
211
+ y 0
212
+ }
213
+ }
214
+ }
215
+
216
+ layouts {
217
+ portrait {
218
+ width 1134 # 1080 + 27*2 gutters
219
+ height 4054 # 4000 + 27*2 gutters
220
+ color 0xe0e0e0
221
+ event EV_SW:0:1
222
+ part1 { name portrait; x 0; y 0 }
223
+ part2 { name landscape; x 4000; y 0 } # parked off-screen; adjust if emulator complains
224
+ part3 { name device; x 27; y 27 }
225
+ }
226
+
227
+ landscape {
228
+ width 4055 # swapped-ish canvas — tune if rotating AVD heavily
229
+ height 1175
230
+ color 0xe0e0e0
231
+ event EV_SW:0:0
232
+ dpad-rotation 3
233
+ part1 { name portrait; x 4000; y 0 }
234
+ part2 { name landscape; x 0; y 0 }
235
+ part3 {
236
+ name device
237
+ x 26
238
+ y 26
239
+ rotation 3
240
+ }
241
+ }
242
+ }
243
+
244
+ keyboard { charmap qwerty2 }
245
+ network { speed full; delay none }
246
+ ```
247
+
248
+ 4. Update **`config.ini`**:
249
+
250
+ ```
251
+ skin.dynamic=no
252
+ skin.name=emulator_skin_1080x4000
253
+ skin.path=C:\\Users\\<you>\\.android\\avd\\<YourAvdFolder>\\emulator_skin_1080x4000
254
+ ```
255
+
256
+ Reboot the AVD after edits. Expect first boot warnings about **unable to resume
257
+ snapshot** after geometry/skin changes (`default_boot`) — cold boot once is OK.
258
+
259
+ ### 0.5d. adb / emulator ergonomics reminders
260
+
261
+ | Issue | Typical fix |
262
+ |------|-------------|
263
+ | Stuck transports / duplicate `adb.exe` orphans on Windows | `taskkill /IM adb.exe /F /T` then `adb start-server` (prefer one supervised helper than many shells) |
264
+ | Need to recycle guest without wiping data | `adb emu kill`, relaunch same AVD |
265
+ | Ensure bundler reachable from emulator | `adb reverse tcp:<metroPort> tcp:<metroPort>` *per device attachment* |
266
+
267
+ These apply equally to RN, Flutter, Compose, Kotlin XML, Cordova/Ionic shells,
268
+ and Expo dev-client builds — only the URLs / ports change.
269
+
270
+ ---
271
+
272
+ ## Phase 1: Bring the loop online [LOW freedom — run exactly]
273
+
274
+ ### 1a. Verify the emulator + adb
275
+
276
+ ```bash
277
+ adb devices
278
+ # Expect: emulator-5554 device (transport_id ...)
279
+ ```
280
+
281
+ If no device appears **within the script’s polling window**:
282
+
283
+ - Boot/repair the AVD (Phase 0.5 if emulator exits instantly or wrong `wm size`).
284
+ - Re-run **`adb reverse tcp:<port> tcp:<port>` after the serial shows `device`** — reverse mappings do not magically backfill when a late emulator attaches.
285
+
286
+ If an automation script enumerated devices **once at startup**, it may skip
287
+ reverse + deeplink when the emulator was offline. Prefer **polling** or a
288
+ manual second step: reverse + intent once `adb devices` is non-empty.
289
+
290
+ ### 1b. Confirm the bundler is alive *(and reachable from the emulator)*
291
+
292
+ ```bash
293
+ METRO_PORT=8081
294
+ curl -sf "http://localhost:${METRO_PORT}/status"
295
+ # PASS: contains "packager-status:running" (Metro/Expo) or HTTP 200 with running flag
296
+ ```
297
+
298
+ **Other stacks:**
299
+
300
+ - Capacitor / Vite: usually `5173` / dev server ping you choose (`curl /`).
301
+ - Flutter: tool-specific (often aggregator on `localhost`).
302
+
303
+ If dead, boot the bundler in the background, then **poll aggressively** (`2–5s`
304
+ backoff up to **`~180s` on cold cache wipes**):
305
+
306
+ ```bash
307
+ while ! curl -sf "http://127.0.0.1:${METRO_PORT}/status" | grep -q running; do sleep 4; done
308
+ ```
309
+
310
+ Only after **`/status`** is green should you fire a dev-client deeplink /
311
+ reload — launching first produces logcat variants of **Cannot connect** /
312
+ **ECONNREFUSED** to **`127.0.0.1:<port>`** even when Metro comes up seconds later.
313
+
314
+ When the emulator is attached:
315
+
316
+ ```bash
317
+ adb reverse tcp:${METRO_PORT} tcp:${METRO_PORT}
318
+ ```
319
+
320
+ Re-run whenever `adb reconnect` / `adb kill-server` / new emulator session clears
321
+ the tunnel.
322
+
323
+ ### 1c. Launch the app *(scheme-agnostic placeholders)*
324
+
325
+ | Stack | Intent pattern |
326
+ |---|---|
327
+ | Expo dev client | Replace `<SCHEME>` with `app.json`/`app.config.*` **`scheme`** (often **without** literal `exp+` unless using classic Expo Go tokens — follow the repo’s deeplink snippet). Typical shape: `"<SCHEME>://expo-development-client/?url=http%3A%2F%2Flocalhost%3A<PORT>"` |
328
+ | Bare RN Android | `adb shell am start -W -n <applicationId>/.MainActivity` (+ dev menu attach if configured) |
329
+ | Flutter | `adb shell am start -W -n <bundleId>/<activity>` or `flutter run` |
330
+ | Capacitor / WebView shells | `-n <appId>/.MainActivity` plus ensure dev server URL reachable (reverse or LAN IP in config) |
331
+
332
+ **Example (substitute placeholders):**
333
+
334
+ ```bash
335
+ adb shell am start -W -a android.intent.action.VIEW \
336
+ -d "<SCHEME>://expo-development-client/?url=http%3A%2F%2Flocalhost%3A8081"
337
+ ```
338
+
339
+ If `am start` reports the intent delivered to an already-running activity,
340
+ that is OK — Metro may still hot-reload afterward.
341
+
342
+ After launch, wait `~12-15s` for the JS bundle (longer cold start), then
343
+ `screencap` to disk.
344
+
345
+ ### 1d. Health-check the first paint
346
+
347
+ The first screen MUST be:
348
+ 1. Not pure white (= Metro died OR JS threw before mount)
349
+ 2. Not the dev launcher's "Error loading app · unexpected end of stream"
350
+ (= bundler unreachable from device — fix `adb reverse`, wrong port, **or**
351
+ dev client opened before `curl /status` showed running — see Phase `1b`)
352
+ 3. Not the dev launcher's "last time you tried to open … crashed" warning
353
+ left as the only content (= a recent change crashed before mount)
354
+
355
+ If any of those: collect logcat, fix, relaunch — do **not** start walking
356
+ on a half-broken app.
357
+
358
+ ```bash
359
+ # Tail JS errors only
360
+ adb logcat -d ReactNativeJS:V '*:S' | tail -50
361
+ # Or for Capacitor / Cordova:
362
+ adb logcat -d Capacitor:V SystemWebChromeClient:V '*:S' | tail -50
363
+ ```
364
+
365
+ ---
366
+
367
+ ## Phase 1.5: Build-freshness verification [LOW freedom — run exactly]
368
+
369
+ > A "nothing changed" report is almost never the patch failing — it is the device running yesterday's bytecode — so this phase runs before any walk.
370
+
371
+ The fundamental risk: **three separate caches** can each serve stale code
372
+ to the device. They must each be invalidated explicitly, in order, before
373
+ trusting any walkthrough finding.
374
+
375
+ ### 1.5a. Source freshness — does the file on disk reflect the patch?
376
+
377
+ ```bash
378
+ # Confirm the change you "just made" is actually saved
379
+ git diff --stat HEAD -- <changed_file>
380
+ # Or grep for a unique string from the patch
381
+ grep -n "<unique_string_from_patch>" <changed_file>
382
+ ```
383
+
384
+ If the file shows no change, the editor lost the buffer or the StrReplace
385
+ silently no-op'd. Re-apply the patch before going further.
386
+
387
+ ### 1.5b. Bundler freshness — is Metro/Vite serving the new source?
388
+
389
+ For Metro:
390
+ ```bash
391
+ # Hit the bundle URL the device uses; the body should contain the unique
392
+ # string from the patch. Use the device's bundle URL, NOT just /status.
393
+ curl -s "http://localhost:8081/index.bundle?platform=android&dev=true" \
394
+ | grep -c "<unique_string_from_patch>"
395
+ # Expect: ≥1
396
+ ```
397
+
398
+ If the count is 0, Metro served a cached bundle. Restart Metro with a
399
+ hard cache wipe:
400
+
401
+ ```bash
402
+ # Kill the Metro process holding port 8081
403
+ lsof -i :8081 -t | xargs -r kill -9 # macOS / Linux
404
+ # Windows / Git-Bash:
405
+ netstat -ano | grep :8081 | awk '{print $5}' | sort -u | xargs -r -I{} taskkill //F //PID {}
406
+
407
+ # Restart with cache wipe (Expo example; adapt for bare RN / Capacitor)
408
+ ( cd apps/<mobile-app> && npx expo start --clear --port 8081 ) &
409
+ ```
410
+
411
+ Wait for Metro to print `Bundling complete` then re-curl the bundle to
412
+ confirm the unique string is now present.
413
+
414
+ ### 1.5c. Device freshness — is the device running the new bundle?
415
+
416
+ The dev launcher caches the bundle URL between sessions. Even with fresh
417
+ Metro, the device may still hold the old JS in memory. Force a reload:
418
+
419
+ ```bash
420
+ # Method 1: Metro reload endpoint (best — works without device interaction)
421
+ curl -s -X POST http://localhost:8081/reload && echo "reload triggered"
422
+
423
+ # Method 2: Send the React Native dev-menu R+R shortcut
424
+ adb shell input keyevent 46 # send 'R' once
425
+ sleep 0.1
426
+ adb shell input keyevent 46 # send 'R' twice → reload
427
+
428
+ # Method 3: Force-stop the app and re-launch via deep link
429
+ adb shell am force-stop <app.id>
430
+ adb shell am start -W -a android.intent.action.VIEW \
431
+ -d "exp+<scheme>://expo-development-client/?url=http%3A%2F%2Flocalhost%3A8081"
432
+
433
+ # Method 4 (nuclear): Wipe app data, including persisted query cache
434
+ adb shell pm clear <app.id>
435
+ # Then relaunch — note this also signs the user out
436
+ ```
437
+
438
+ After reload, wait `~10s` and `screencap`. The unique change you patched
439
+ should be visible.
440
+
441
+ ### 1.5d. Native-code freshness — for changes that touch `android/`
442
+
443
+ If the patch modified anything under `android/`, `ios/`, or any native
444
+ module (`react-native-*` with autolinked native code), Metro reload is
445
+ **not enough**. The Hermes bytecode and the APK both need rebuilding:
446
+
447
+ ```bash
448
+ # Bare RN
449
+ ( cd android && ./gradlew installDebug )
450
+ adb shell am force-stop <app.id>
451
+ adb shell am start -n <app.id>/.MainActivity
452
+
453
+ # Expo dev client
454
+ npx expo run:android --variant debug --no-install # build only
455
+ adb install -r android/app/build/outputs/apk/debug/app-debug.apk
456
+ adb shell am force-stop <app.id>
457
+ adb shell monkey -p <app.id> 1
458
+ ```
459
+
460
+ ### 1.5e. Verify-by-evidence
461
+
462
+ The build is "fresh" only when ALL of the following are true:
463
+ - ✅ Source file on disk contains the patched string (`git diff` shows it)
464
+ - ✅ Bundle served by Metro contains the patched string (curl + grep ≥1)
465
+ - ✅ A unique on-screen marker from the patch is visible in `screencap`
466
+ - ✅ Logcat shows the new bundle hash in the `Running application` line
467
+
468
+ If any of those fails, do not start Phase 2 — the walk will report stale
469
+ behaviour and waste cycles.
470
+
471
+ ### 1.5f. Stale-build smell tests
472
+
473
+ Run these whenever the user says "nothing changed" or a fix appears not
474
+ to have landed:
475
+
476
+ | Smell | Likely cause | Fix |
477
+ |---|---|---|
478
+ | Same screen pixels after patch | Metro served cached bundle | 1.5b restart with `--clear` |
479
+ | Patch visible in some sessions only | Two Metro instances on different ports | `lsof -i :8081 -i :19000 -i :19001`, kill all, restart one |
480
+ | Hot reload silently broken | File-watcher hit OS handle limit | Restart Metro; on Linux `sysctl fs.inotify.max_user_watches=524288` |
481
+ | New Sentry capture has old source-map line numbers | Sentry source-maps not re-uploaded for the dev build | Acceptable for dev; flag for release builds |
482
+ | Native module change doesn't take effect | APK still old | 1.5d full Gradle build |
483
+ | `pm clear` didn't fix it either | Wrong `app.id` (release vs debug variant) | `adb shell pm list packages \| grep <project>` |
484
+
485
+ ---
486
+
487
+ ## Phase 2: Tap-driven walk of every tab [HIGH freedom]
488
+
489
+ ## Further reading
490
+
491
+ - [2a. Coord math (don't skip this — most failed taps come from getting it wrong) and more](references/details.md)