exonous 0.0.0-stage → 2.10.4

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 (385) hide show
  1. package/README.md +100 -2
  2. package/assets/THIRD-PARTY-NOTICES.md +29 -0
  3. package/assets/adapters/opencode/exonous.js +54 -0
  4. package/assets/agents/exo-backend.md +22 -0
  5. package/assets/agents/exo-cto.md +22 -0
  6. package/assets/agents/exo-data-ai.md +22 -0
  7. package/assets/agents/exo-designer.md +22 -0
  8. package/assets/agents/exo-devops.md +22 -0
  9. package/assets/agents/exo-frontend.md +22 -0
  10. package/assets/agents/exo-infra.md +22 -0
  11. package/assets/agents/exo-mobile.md +22 -0
  12. package/assets/agents/exo-pm.md +22 -0
  13. package/assets/agents/exo-qa.md +22 -0
  14. package/assets/agents/exo-researcher.md +22 -0
  15. package/assets/agents/exo-security.md +22 -0
  16. package/assets/agents/roster.json +209 -0
  17. package/assets/agents/taxis.js +189 -0
  18. package/assets/editors/cursor/frontend-skills.mdc +27 -0
  19. package/assets/editors/hooks/cursor/hooks.json +11 -0
  20. package/assets/machine/PR-TEMPLATE.md +21 -0
  21. package/assets/machine/hooks/anamnesis.cjs +61 -0
  22. package/assets/machine/hooks/ethos.cjs +48 -0
  23. package/assets/machine/hooks/kairos.cjs +46 -0
  24. package/assets/machine/hooks/lib/cli-options.cjs +133 -0
  25. package/assets/machine/hooks/lib/memory.cjs +488 -0
  26. package/assets/machine/hooks/lib/metron.cjs +52 -0
  27. package/assets/machine/hooks/lib/paths.cjs +99 -0
  28. package/assets/machine/hooks/lib/payload.cjs +81 -0
  29. package/assets/machine/hooks/lib/pr-template-validate.cjs +103 -0
  30. package/assets/machine/hooks/lib/release.cjs +58 -0
  31. package/assets/machine/hooks/lib/repo.cjs +138 -0
  32. package/assets/machine/hooks/lib/sanitize.cjs +37 -0
  33. package/assets/machine/hooks/lib/selfupdate.cjs +354 -0
  34. package/assets/machine/hooks/lib/shell.cjs +722 -0
  35. package/assets/machine/hooks/lib/template.cjs +70 -0
  36. package/assets/machine/hooks/lib/token.cjs +110 -0
  37. package/assets/machine/hooks/lib/validate-pr-body.cjs +21 -0
  38. package/assets/machine/hooks/pyle.cjs +302 -0
  39. package/assets/rules/nomos.md +59 -0
  40. package/assets/rules/praxis.md +38 -0
  41. package/assets/skills/code-review/SKILL.md +124 -0
  42. package/assets/skills/commit-changes/SKILL.md +49 -0
  43. package/assets/skills/deliver/SKILL.md +114 -0
  44. package/assets/skills/deliver/references/parallel.md +37 -0
  45. package/assets/skills/doc/SKILL.md +140 -0
  46. package/assets/skills/doc/doc.mjs +277 -0
  47. package/assets/skills/issue-board/SKILL.md +84 -0
  48. package/assets/skills/issue-board/board.mjs +389 -0
  49. package/assets/skills/issue-board/config.example.json +9 -0
  50. package/assets/skills/issue-board/render.py +189 -0
  51. package/assets/skills/make-pr/SKILL.md +24 -0
  52. package/assets/skills/native-ui/SKILL.md +67 -0
  53. package/assets/skills/native-ui/reference/apple.md +180 -0
  54. package/assets/skills/native-ui/reference/mobile-feel.md +221 -0
  55. package/assets/skills/native-ui/reference/swift.md +289 -0
  56. package/assets/skills/project-memory/SKILL.md +59 -0
  57. package/assets/skills/project-memory/config.example.json +4 -0
  58. package/assets/skills/project-memory/project-memory.mjs +478 -0
  59. package/assets/skills/security-review/SKILL.md +102 -0
  60. package/assets/skills/session-handoff/SKILL.md +23 -0
  61. package/assets/skills/session-handoff/config.example.json +3 -0
  62. package/assets/skills/ui-design/SKILL.md +75 -0
  63. package/assets/skills/ui-design/reference/adapt.md +151 -0
  64. package/assets/skills/ui-design/reference/adapt.native.md +35 -0
  65. package/assets/skills/ui-design/reference/android.md +50 -0
  66. package/assets/skills/ui-design/reference/animate.md +87 -0
  67. package/assets/skills/ui-design/reference/audit.md +76 -0
  68. package/assets/skills/ui-design/reference/audit.native.md +126 -0
  69. package/assets/skills/ui-design/reference/bolder.md +33 -0
  70. package/assets/skills/ui-design/reference/clarify.md +84 -0
  71. package/assets/skills/ui-design/reference/colorize.md +86 -0
  72. package/assets/skills/ui-design/reference/craft-floor.md +25 -0
  73. package/assets/skills/ui-design/reference/critique.md +345 -0
  74. package/assets/skills/ui-design/reference/degraded/asset-producer.md +35 -0
  75. package/assets/skills/ui-design/reference/degraded/documenter.md +23 -0
  76. package/assets/skills/ui-design/reference/degraded/finish-reviewer.md +43 -0
  77. package/assets/skills/ui-design/reference/degraded/manual-edit-applier.md +56 -0
  78. package/assets/skills/ui-design/reference/delight.md +63 -0
  79. package/assets/skills/ui-design/reference/distill.md +98 -0
  80. package/assets/skills/ui-design/reference/doctor.md +49 -0
  81. package/assets/skills/ui-design/reference/document.md +273 -0
  82. package/assets/skills/ui-design/reference/extract.md +52 -0
  83. package/assets/skills/ui-design/reference/harden.md +122 -0
  84. package/assets/skills/ui-design/reference/hooks.md +114 -0
  85. package/assets/skills/ui-design/reference/init.md +47 -0
  86. package/assets/skills/ui-design/reference/ios.md +55 -0
  87. package/assets/skills/ui-design/reference/layout.md +81 -0
  88. package/assets/skills/ui-design/reference/live-setup.md +75 -0
  89. package/assets/skills/ui-design/reference/live.md +326 -0
  90. package/assets/skills/ui-design/reference/new-work.md +350 -0
  91. package/assets/skills/ui-design/reference/onboard.md +85 -0
  92. package/assets/skills/ui-design/reference/operate.md +29 -0
  93. package/assets/skills/ui-design/reference/optimize.md +101 -0
  94. package/assets/skills/ui-design/reference/overdrive.md +83 -0
  95. package/assets/skills/ui-design/reference/polish.md +77 -0
  96. package/assets/skills/ui-design/reference/quieter.md +95 -0
  97. package/assets/skills/ui-design/reference/routing.md +37 -0
  98. package/assets/skills/ui-design/reference/shape.md +43 -0
  99. package/assets/skills/ui-design/reference/styles/brutalist.md +45 -0
  100. package/assets/skills/ui-design/reference/styles/design-md.md +70 -0
  101. package/assets/skills/ui-design/reference/styles/direction.md +95 -0
  102. package/assets/skills/ui-design/reference/styles/full-output.md +42 -0
  103. package/assets/skills/ui-design/reference/styles/minimalist.md +64 -0
  104. package/assets/skills/ui-design/reference/styles/premium.md +65 -0
  105. package/assets/skills/ui-design/reference/styles/redesign.md +59 -0
  106. package/assets/skills/ui-design/reference/typeset.md +73 -0
  107. package/assets/skills/ui-design/reference/visualize.md +156 -0
  108. package/assets/skills/ui-design/scripts/ENGINE-LICENSE +191 -0
  109. package/assets/skills/ui-design/scripts/VERSION +1 -0
  110. package/assets/skills/ui-design/scripts/bin/darwin-arm64/impeccable +0 -0
  111. package/assets/skills/ui-design/scripts/command-metadata.json +94 -0
  112. package/assets/skills/ui-design/scripts/data/font-index-failures.json +121 -0
  113. package/assets/skills/ui-design/scripts/data/font-index.json +1 -0
  114. package/assets/skills/ui-design/scripts/impeccable +206 -0
  115. package/assets/skills/ui-design/scripts/impeccable.cmd +214 -0
  116. package/assets/skills/ui-design/scripts/live-browser-dom.js +167 -0
  117. package/assets/skills/ui-design/scripts/live-browser-ignores.js +242 -0
  118. package/assets/skills/ui-design/scripts/live-browser-session.js +144 -0
  119. package/assets/skills/ui-design/scripts/live-browser.js +12990 -0
  120. package/assets/skills/ui-design/scripts/modern-screenshot.umd.js +14 -0
  121. package/assets/skills/ui-design/scripts/ui-design +6 -0
  122. package/assets/skills/ui-design/scripts/ui-design.cmd +3 -0
  123. package/assets/skills/ui-design/scripts/ui-design.mjs +124 -0
  124. package/assets/skills/ui-mockup/SKILL.md +68 -0
  125. package/assets/skills/ui-mockup/reference/brandkit.md +101 -0
  126. package/assets/skills/ui-mockup/reference/image-to-code.md +83 -0
  127. package/assets/skills/ui-mockup/reference/mobile-comps.md +94 -0
  128. package/assets/skills/ui-mockup/reference/web-comps.md +83 -0
  129. package/assets/skills/ui-motion/SKILL.md +112 -0
  130. package/assets/skills/ui-motion/reference/expo.md +224 -0
  131. package/assets/skills/ui-motion/reference/opportunities.md +81 -0
  132. package/assets/skills/ui-motion/reference/prototype.md +238 -0
  133. package/assets/skills/ui-motion/reference/review.md +163 -0
  134. package/assets/skills/ui-motion/reference/toasts.md +144 -0
  135. package/assets/skills/ui-motion/reference/ui-libraries.md +71 -0
  136. package/assets/skills/ui-motion/reference/vocabulary.md +130 -0
  137. package/assets/skills/ui-motion/reference/web.md +294 -0
  138. package/assets/skills/ui-patterns/SKILL.md +105 -0
  139. package/assets/skills/ui-patterns/references/stacks/html-tailwind.md +40 -0
  140. package/assets/skills/ui-patterns/references/stacks/nextjs.md +52 -0
  141. package/assets/skills/ui-patterns/references/stacks/nuxt.md +100 -0
  142. package/assets/skills/ui-patterns/references/stacks/react-native.md +48 -0
  143. package/assets/skills/ui-patterns/references/stacks/react.md +49 -0
  144. package/assets/skills/ui-patterns/references/stacks/shadcn.md +57 -0
  145. package/assets/skills/ui-patterns/references/stacks/vue.md +37 -0
  146. package/assets/techne/.claude-plugin/marketplace.json +31 -0
  147. package/assets/techne/.claude-plugin/plugin.json +24 -0
  148. package/assets/techne/.mcp.json +8 -0
  149. package/assets/techne/commands/build-fix.md +48 -0
  150. package/assets/techne/commands/refactor-clean.md +46 -0
  151. package/assets/techne/commands/test-coverage.md +42 -0
  152. package/assets/techne/hooks/hooks.json +49 -0
  153. package/assets/techne/rules/angular/coding-style.md +49 -0
  154. package/assets/techne/rules/angular/hooks.md +23 -0
  155. package/assets/techne/rules/angular/patterns.md +48 -0
  156. package/assets/techne/rules/angular/security.md +26 -0
  157. package/assets/techne/rules/angular/testing.md +46 -0
  158. package/assets/techne/rules/arkts/coding-style.md +63 -0
  159. package/assets/techne/rules/arkts/hooks.md +38 -0
  160. package/assets/techne/rules/arkts/patterns.md +42 -0
  161. package/assets/techne/rules/arkts/security.md +35 -0
  162. package/assets/techne/rules/arkts/testing.md +39 -0
  163. package/assets/techne/rules/common/agents.md +6 -0
  164. package/assets/techne/rules/common/code-review.md +15 -0
  165. package/assets/techne/rules/common/coding-style.md +13 -0
  166. package/assets/techne/rules/common/development-workflow.md +5 -0
  167. package/assets/techne/rules/common/git-workflow.md +30 -0
  168. package/assets/techne/rules/common/hooks.md +7 -0
  169. package/assets/techne/rules/common/patterns.md +3 -0
  170. package/assets/techne/rules/common/performance.md +3 -0
  171. package/assets/techne/rules/common/security.md +5 -0
  172. package/assets/techne/rules/common/testing.md +3 -0
  173. package/assets/techne/rules/cpp/coding-style.md +31 -0
  174. package/assets/techne/rules/cpp/hooks.md +26 -0
  175. package/assets/techne/rules/cpp/patterns.md +31 -0
  176. package/assets/techne/rules/cpp/security.md +37 -0
  177. package/assets/techne/rules/cpp/testing.md +31 -0
  178. package/assets/techne/rules/csharp/coding-style.md +30 -0
  179. package/assets/techne/rules/csharp/hooks.md +24 -0
  180. package/assets/techne/rules/csharp/patterns.md +28 -0
  181. package/assets/techne/rules/csharp/security.md +32 -0
  182. package/assets/techne/rules/csharp/testing.md +27 -0
  183. package/assets/techne/rules/dart/coding-style.md +47 -0
  184. package/assets/techne/rules/dart/hooks.md +26 -0
  185. package/assets/techne/rules/dart/patterns.md +38 -0
  186. package/assets/techne/rules/dart/security.md +44 -0
  187. package/assets/techne/rules/dart/testing.md +39 -0
  188. package/assets/techne/rules/fsharp/coding-style.md +34 -0
  189. package/assets/techne/rules/fsharp/hooks.md +25 -0
  190. package/assets/techne/rules/fsharp/patterns.md +43 -0
  191. package/assets/techne/rules/fsharp/security.md +32 -0
  192. package/assets/techne/rules/fsharp/testing.md +27 -0
  193. package/assets/techne/rules/golang/coding-style.md +30 -0
  194. package/assets/techne/rules/golang/hooks.md +17 -0
  195. package/assets/techne/rules/golang/patterns.md +43 -0
  196. package/assets/techne/rules/golang/security.md +33 -0
  197. package/assets/techne/rules/golang/testing.md +20 -0
  198. package/assets/techne/rules/java/coding-style.md +51 -0
  199. package/assets/techne/rules/java/hooks.md +18 -0
  200. package/assets/techne/rules/java/patterns.md +55 -0
  201. package/assets/techne/rules/java/security.md +33 -0
  202. package/assets/techne/rules/java/testing.md +33 -0
  203. package/assets/techne/rules/kotlin/coding-style.md +50 -0
  204. package/assets/techne/rules/kotlin/hooks.md +17 -0
  205. package/assets/techne/rules/kotlin/patterns.md +44 -0
  206. package/assets/techne/rules/kotlin/security.md +34 -0
  207. package/assets/techne/rules/kotlin/testing.md +38 -0
  208. package/assets/techne/rules/nuxt/coding-style.md +20 -0
  209. package/assets/techne/rules/nuxt/hooks.md +16 -0
  210. package/assets/techne/rules/nuxt/patterns.md +46 -0
  211. package/assets/techne/rules/nuxt/security.md +19 -0
  212. package/assets/techne/rules/nuxt/testing.md +15 -0
  213. package/assets/techne/rules/perl/coding-style.md +33 -0
  214. package/assets/techne/rules/perl/hooks.md +22 -0
  215. package/assets/techne/rules/perl/patterns.md +43 -0
  216. package/assets/techne/rules/perl/security.md +39 -0
  217. package/assets/techne/rules/perl/testing.md +42 -0
  218. package/assets/techne/rules/php/coding-style.md +30 -0
  219. package/assets/techne/rules/php/hooks.md +24 -0
  220. package/assets/techne/rules/php/patterns.md +26 -0
  221. package/assets/techne/rules/php/security.md +27 -0
  222. package/assets/techne/rules/php/testing.md +28 -0
  223. package/assets/techne/rules/python/coding-style.md +38 -0
  224. package/assets/techne/rules/python/fastapi.md +57 -0
  225. package/assets/techne/rules/python/hooks.md +19 -0
  226. package/assets/techne/rules/python/patterns.md +37 -0
  227. package/assets/techne/rules/python/security.md +26 -0
  228. package/assets/techne/rules/python/testing.md +32 -0
  229. package/assets/techne/rules/react/coding-style.md +24 -0
  230. package/assets/techne/rules/react/hooks.md +62 -0
  231. package/assets/techne/rules/react/patterns.md +48 -0
  232. package/assets/techne/rules/react/security.md +45 -0
  233. package/assets/techne/rules/react/testing.md +42 -0
  234. package/assets/techne/rules/react-native/accessibility.md +14 -0
  235. package/assets/techne/rules/react-native/coding-style.md +16 -0
  236. package/assets/techne/rules/react-native/hooks.md +16 -0
  237. package/assets/techne/rules/react-native/patterns.md +18 -0
  238. package/assets/techne/rules/react-native/performance.md +14 -0
  239. package/assets/techne/rules/react-native/production-readiness.md +16 -0
  240. package/assets/techne/rules/react-native/security.md +16 -0
  241. package/assets/techne/rules/react-native/testing.md +14 -0
  242. package/assets/techne/rules/ruby/coding-style.md +40 -0
  243. package/assets/techne/rules/ruby/hooks.md +33 -0
  244. package/assets/techne/rules/ruby/patterns.md +33 -0
  245. package/assets/techne/rules/ruby/security.md +39 -0
  246. package/assets/techne/rules/ruby/testing.md +35 -0
  247. package/assets/techne/rules/rust/coding-style.md +41 -0
  248. package/assets/techne/rules/rust/hooks.md +16 -0
  249. package/assets/techne/rules/rust/patterns.md +42 -0
  250. package/assets/techne/rules/rust/security.md +33 -0
  251. package/assets/techne/rules/rust/testing.md +30 -0
  252. package/assets/techne/rules/swift/coding-style.md +30 -0
  253. package/assets/techne/rules/swift/hooks.md +20 -0
  254. package/assets/techne/rules/swift/patterns.md +30 -0
  255. package/assets/techne/rules/swift/security.md +22 -0
  256. package/assets/techne/rules/swift/testing.md +28 -0
  257. package/assets/techne/rules/typescript/coding-style.md +38 -0
  258. package/assets/techne/rules/typescript/hooks.md +14 -0
  259. package/assets/techne/rules/typescript/patterns.md +12 -0
  260. package/assets/techne/rules/typescript/security.md +14 -0
  261. package/assets/techne/rules/typescript/testing.md +12 -0
  262. package/assets/techne/rules/vue/coding-style.md +19 -0
  263. package/assets/techne/rules/vue/hooks.md +13 -0
  264. package/assets/techne/rules/vue/patterns.md +29 -0
  265. package/assets/techne/rules/vue/security.md +11 -0
  266. package/assets/techne/rules/vue/testing.md +11 -0
  267. package/assets/techne/rules/web/coding-style.md +25 -0
  268. package/assets/techne/rules/web/design-quality.md +21 -0
  269. package/assets/techne/rules/web/hooks.md +39 -0
  270. package/assets/techne/rules/web/patterns.md +23 -0
  271. package/assets/techne/rules/web/performance.md +25 -0
  272. package/assets/techne/rules/web/security.md +23 -0
  273. package/assets/techne/rules/web/testing.md +21 -0
  274. package/assets/techne/scripts/hooks/config-guard.js +50 -0
  275. package/assets/techne/scripts/hooks/edit-tracker.js +26 -0
  276. package/assets/techne/scripts/hooks/lib/shell.js +204 -0
  277. package/assets/techne/scripts/hooks/no-verify-guard.js +205 -0
  278. package/assets/techne/scripts/hooks/run.js +92 -0
  279. package/assets/techne/scripts/hooks/stop-checks.js +136 -0
  280. package/assets/techne/skills/angular/SKILL.md +34 -0
  281. package/assets/techne/skills/angular/reference/components-and-templates.md +63 -0
  282. package/assets/techne/skills/angular/reference/dependency-injection.md +44 -0
  283. package/assets/techne/skills/angular/reference/forms.md +97 -0
  284. package/assets/techne/skills/angular/reference/routing.md +50 -0
  285. package/assets/techne/skills/angular/reference/signals-and-state.md +59 -0
  286. package/assets/techne/skills/angular/reference/styling-motion-a11y.md +54 -0
  287. package/assets/techne/skills/angular/reference/testing.md +52 -0
  288. package/assets/techne/skills/angular/reference/tooling.md +31 -0
  289. package/assets/techne/skills/cpp/SKILL.md +27 -0
  290. package/assets/techne/skills/cpp/reference/coding-standards.md +160 -0
  291. package/assets/techne/skills/databases/SKILL.md +35 -0
  292. package/assets/techne/skills/databases/reference/clickhouse.md +102 -0
  293. package/assets/techne/skills/databases/reference/migrations.md +94 -0
  294. package/assets/techne/skills/databases/reference/mysql.md +101 -0
  295. package/assets/techne/skills/databases/reference/postgres.md +72 -0
  296. package/assets/techne/skills/databases/reference/prisma.md +105 -0
  297. package/assets/techne/skills/databases/reference/redis.md +108 -0
  298. package/assets/techne/skills/delivery/SKILL.md +35 -0
  299. package/assets/techne/skills/delivery/reference/deployment-patterns.md +58 -0
  300. package/assets/techne/skills/delivery/reference/docker-patterns.md +77 -0
  301. package/assets/techne/skills/delivery/reference/git-workflow.md +64 -0
  302. package/assets/techne/skills/delivery/reference/github-ops.md +67 -0
  303. package/assets/techne/skills/delivery/reference/jira-integration.md +53 -0
  304. package/assets/techne/skills/delivery/reference/kubernetes-patterns.md +67 -0
  305. package/assets/techne/skills/dotnet/SKILL.md +27 -0
  306. package/assets/techne/skills/dotnet/reference/dotnet-core.md +131 -0
  307. package/assets/techne/skills/flutter/SKILL.md +29 -0
  308. package/assets/techne/skills/flutter/reference/code-review.md +76 -0
  309. package/assets/techne/skills/flutter/reference/patterns.md +201 -0
  310. package/assets/techne/skills/go/SKILL.md +28 -0
  311. package/assets/techne/skills/go/reference/patterns.md +87 -0
  312. package/assets/techne/skills/go/reference/testing.md +142 -0
  313. package/assets/techne/skills/java/SKILL.md +29 -0
  314. package/assets/techne/skills/java/reference/java-standards.md +117 -0
  315. package/assets/techne/skills/java/reference/springboot.md +108 -0
  316. package/assets/techne/skills/kotlin/SKILL.md +35 -0
  317. package/assets/techne/skills/kotlin/reference/android-clean-architecture.md +115 -0
  318. package/assets/techne/skills/kotlin/reference/compose-multiplatform-patterns.md +113 -0
  319. package/assets/techne/skills/kotlin/reference/kotlin-coroutines-flows.md +93 -0
  320. package/assets/techne/skills/kotlin/reference/kotlin-patterns.md +74 -0
  321. package/assets/techne/skills/kotlin/reference/kotlin-testing.md +115 -0
  322. package/assets/techne/skills/ml/SKILL.md +34 -0
  323. package/assets/techne/skills/ml/reference/ai-regression-testing.md +99 -0
  324. package/assets/techne/skills/ml/reference/cost-aware-llm-pipeline.md +133 -0
  325. package/assets/techne/skills/ml/reference/eval-harness.md +94 -0
  326. package/assets/techne/skills/ml/reference/mle-workflow.md +177 -0
  327. package/assets/techne/skills/ml/reference/prompt-optimizer.md +107 -0
  328. package/assets/techne/skills/ml/reference/pytorch-patterns.md +164 -0
  329. package/assets/techne/skills/php/SKILL.md +27 -0
  330. package/assets/techne/skills/php/reference/laravel.md +142 -0
  331. package/assets/techne/skills/python/SKILL.md +33 -0
  332. package/assets/techne/skills/python/reference/django.md +104 -0
  333. package/assets/techne/skills/python/reference/fastapi.md +118 -0
  334. package/assets/techne/skills/python/reference/python-core.md +88 -0
  335. package/assets/techne/skills/python/reference/python-testing.md +105 -0
  336. package/assets/techne/skills/quality/SKILL.md +34 -0
  337. package/assets/techne/skills/quality/reference/benchmark.md +55 -0
  338. package/assets/techne/skills/quality/reference/browser-qa.md +60 -0
  339. package/assets/techne/skills/quality/reference/coding-standards.md +88 -0
  340. package/assets/techne/skills/quality/reference/e2e-testing.md +99 -0
  341. package/assets/techne/skills/quality/reference/tdd-workflow.md +89 -0
  342. package/assets/techne/skills/quality/reference/verification-loop.md +80 -0
  343. package/assets/techne/skills/react/SKILL.md +30 -0
  344. package/assets/techne/skills/react/reference/nextjs-turbopack.md +42 -0
  345. package/assets/techne/skills/react/reference/react-patterns.md +139 -0
  346. package/assets/techne/skills/react/reference/react-performance.md +101 -0
  347. package/assets/techne/skills/react/reference/react-testing.md +139 -0
  348. package/assets/techne/skills/react-native/SKILL.md +28 -0
  349. package/assets/techne/skills/react-native/reference/expo-patterns.md +196 -0
  350. package/assets/techne/skills/research/SKILL.md +35 -0
  351. package/assets/techne/skills/research/reference/architecture-decision-records.md +65 -0
  352. package/assets/techne/skills/research/reference/codebase-onboarding.md +44 -0
  353. package/assets/techne/skills/research/reference/deep-research.md +50 -0
  354. package/assets/techne/skills/research/reference/iterative-retrieval.md +62 -0
  355. package/assets/techne/skills/research/reference/product-lens.md +38 -0
  356. package/assets/techne/skills/research/reference/search-first.md +50 -0
  357. package/assets/techne/skills/rust/SKILL.md +28 -0
  358. package/assets/techne/skills/rust/reference/patterns.md +108 -0
  359. package/assets/techne/skills/rust/reference/testing.md +142 -0
  360. package/assets/techne/skills/services/SKILL.md +32 -0
  361. package/assets/techne/skills/services/reference/api-contracts.md +139 -0
  362. package/assets/techne/skills/services/reference/backend-layers.md +95 -0
  363. package/assets/techne/skills/services/reference/errors-and-resilience.md +146 -0
  364. package/assets/techne/skills/services/reference/hexagonal-boundaries.md +93 -0
  365. package/assets/techne/skills/services/reference/mcp-servers.md +50 -0
  366. package/assets/techne/skills/services/reference/nestjs.md +96 -0
  367. package/assets/techne/skills/swift/SKILL.md +29 -0
  368. package/assets/techne/skills/swift/reference/concurrency.md +83 -0
  369. package/assets/techne/skills/swift/reference/swiftui.md +139 -0
  370. package/assets/techne/skills/vue/SKILL.md +29 -0
  371. package/assets/techne/skills/vue/reference/nuxt4-patterns.md +90 -0
  372. package/assets/techne/skills/vue/reference/ui-to-vue.md +90 -0
  373. package/assets/techne/skills/vue/reference/vue-patterns.md +151 -0
  374. package/assets/techne/skills/web/SKILL.md +30 -0
  375. package/assets/techne/skills/web/reference/bun-runtime.md +55 -0
  376. package/assets/techne/skills/web/reference/frontend-patterns.md +54 -0
  377. package/assets/techne/skills/web/reference/seo.md +77 -0
  378. package/assets/techne/skills/web/reference/vite-patterns.md +96 -0
  379. package/bin/native.cjs +30 -0
  380. package/native/aarch64-apple-darwin/exonous +0 -0
  381. package/native/aarch64-unknown-linux-gnu/exonous +0 -0
  382. package/native/x86_64-apple-darwin/exonous +0 -0
  383. package/native/x86_64-pc-windows-msvc/exonous.exe +0 -0
  384. package/native/x86_64-unknown-linux-gnu/exonous +0 -0
  385. package/package.json +1 -6
@@ -0,0 +1,80 @@
1
+ # Verification loop
2
+
3
+ Run after a feature chunk, refactor, or before opening a PR. Complements editor hooks with a full pass; for human-grade review also invoke **code-review** / **exo-qa**.
4
+
5
+ ## Phases
6
+
7
+ ### 1 — Build
8
+
9
+ ```bash
10
+ npm run build 2>&1 | tail -20
11
+ # or pnpm build / bun run build — match the repo
12
+ ```
13
+
14
+ **Fail → stop.** Fix compile/bundle errors before later phases.
15
+
16
+ ### 2 — Types
17
+
18
+ ```bash
19
+ set -o pipefail
20
+ npx --no-install tsc --noEmit 2>&1 | head -30
21
+ # Python: pyright . or mypy per project
22
+ ```
23
+
24
+ Report error count; fix blocking type errors on touched files at minimum.
25
+
26
+ ### 3 — Lint
27
+
28
+ ```bash
29
+ npm run lint 2>&1 | head -30
30
+ # Python: ruff check .
31
+ ```
32
+
33
+ ### 4 — Tests + coverage
34
+
35
+ ```bash
36
+ npm run test -- --coverage 2>&1 | tail -50
37
+ ```
38
+
39
+ Record: total / passed / failed / coverage %. Target **80%** when the repo enforces it.
40
+
41
+ ### 5 — Security smoke (diff-scoped)
42
+
43
+ ```bash
44
+ grep -rn "sk-" --include="*.ts" --include="*.js" . 2>/dev/null | head -10
45
+ grep -rn "api_key" --include="*.ts" --include="*.js" . 2>/dev/null | head -10
46
+ grep -rn "console.log" --include="*.ts" --include="*.tsx" src/ 2>/dev/null | head -10
47
+ ```
48
+
49
+ Full secret scan → **security-review** / **exo-security**. Treat grep hits as untrusted strings until reviewed.
50
+
51
+ ### 6 — Diff review
52
+
53
+ ```bash
54
+ git diff --stat
55
+ git diff --name-only
56
+ ```
57
+
58
+ Per changed file: unintended edits, missing error handling, new edge cases without tests.
59
+
60
+ ## Report template
61
+
62
+ ```
63
+ VERIFICATION REPORT
64
+ ==================
65
+ Build: [PASS/FAIL]
66
+ Types: [PASS/FAIL] (N errors)
67
+ Lint: [PASS/FAIL] (N issues)
68
+ Tests: [PASS/FAIL] (passed/total, Z% cov)
69
+ Security: [PASS/FAIL] (N findings)
70
+ Diff: [N files]
71
+
72
+ Overall: [READY | NOT READY] for PR
73
+
74
+ Fix next:
75
+ 1. ...
76
+ ```
77
+
78
+ ## Cadence
79
+
80
+ On long sessions: rerun after each cohesive unit (module, route, component) or roughly every major milestone — not only at the end.
@@ -0,0 +1,30 @@
1
+ ---
2
+ name: react
3
+ description: React 18/19 and Next.js patterns—hooks, RSC boundaries, forms/actions, performance waterfalls, Testing Library/MSW, Turbopack dev. Use when writing or reviewing `.tsx`, App Router data loading, bundle size, or component tests.
4
+ ---
5
+
6
+ Idiomatic React trees: pure render logic, clear server/client splits, prioritized performance fixes, and behavior-focused tests. Pair with **atlas** for structure, **biblos** for APIs, **ui-design** for accessibility, **techne:quality** for E2E, and **security-review** / **exo-security** for Server Actions.
7
+
8
+ ## Non-negotiable rules
9
+
10
+ 1. **Render is a function of props and state** — compute derived values inline; do not sync them through effects.
11
+ 2. **Hooks: top-level only**, with cleanup; use functional updates when the next state depends on the previous.
12
+ 3. **Do not memoize by default** — add `useMemo`/`useCallback`/`memo` only when profiling or stable child props require it.
13
+ 4. **Never import a Server Component from a Client file** — pass server output via `children` or serializable props.
14
+ 5. **Treat every Server Action as a public API** — authenticate and authorize inside the action, not in UI gating alone.
15
+ 6. **Eliminate async waterfalls first** — cheap sync guards before `await`; parallelize independent work with `Promise.all`; split async server children for parallel RSC fetch.
16
+ 7. **No `useEffect` + `fetch` for app data** — use TanStack Query, SWR, RSC `fetch`, or event-handler fetches.
17
+ 8. **Direct imports over barrels** — enable Next.js `optimizePackageImports` where available; dynamic-import heavy client-only UI.
18
+ 9. **Lists: stable keys and virtualization** when ~50+ non-trivial rows; use ternary conditionals, not `count &&` when `count` may be zero.
19
+ 10. **Tests assert user-visible behavior** — RTL query priority (role/label), `userEvent`, MSW at the network layer; axe on interactive components.
20
+ 11. **Next.js 16+ dev defaults to Turbopack** — use root **`proxy.ts`** for edge middleware (not legacy `middleware.ts` on 16+).
21
+ 12. **No module-level mutable state on the server** — request scope via headers/cookies/`React.cache()` per request.
22
+
23
+ ## References
24
+
25
+ | File | Load when |
26
+ |------|-----------|
27
+ | [reference/react-patterns.md](reference/react-patterns.md) | Composition, state placement, RSC, Suspense, forms, data-fetch matrix |
28
+ | [reference/react-performance.md](reference/react-performance.md) | Waterfalls, bundles, server/client perf, re-renders, rendering micro-opts |
29
+ | [reference/react-testing.md](reference/react-testing.md) | Vitest/Jest, RTL, MSW, hooks, a11y asserts, E2E boundary |
30
+ | [reference/nextjs-turbopack.md](reference/nextjs-turbopack.md) | Turbopack dev, webpack fallback, proxy filename, bundle analysis |
@@ -0,0 +1,42 @@
1
+ # Next.js dev bundler & routing files
2
+
3
+ Next.js 16+ uses **Turbopack** by default for `next dev`: incremental Rust bundler with filesystem cache under `.next` for faster restarts and HMR.
4
+
5
+ ## Commands
6
+
7
+ ```bash
8
+ next dev # Turbopack default on 16+
9
+ next build
10
+ next start
11
+ ```
12
+
13
+ ## When to switch bundler
14
+
15
+ | Mode | Use |
16
+ |------|-----|
17
+ | Turbopack (default dev) | Daily development, large apps |
18
+ | Webpack dev | Turbopack bug or webpack-only plugin — pass `--webpack` or version-specific no-turbopack flag per **biblos** / current Next release notes |
19
+
20
+ Production bundler depends on Next version—confirm in docs for your pin.
21
+
22
+ ## Practices
23
+
24
+ - Stay on supported 16.x for cache stability.
25
+ - If dev feels slow, confirm Turbopack is active and cache is not wiped each run.
26
+ - Bundle size: use version-appropriate analyzer (16.1+ experimental analyzer per docs).
27
+ - Prefer App Router + Server Components where they fit.
28
+
29
+ ## Middleware filename (version-specific)
30
+
31
+ | Next version | Root file |
32
+ |--------------|-----------|
33
+ | 16+ | **`proxy.ts`** |
34
+ | < 16 | `middleware.ts` |
35
+
36
+ This is a **framework version** rule, not a bundler choice. On Next 16+, **`proxy.ts` is correct**—do not rename to `middleware.ts` or edge logic will not run.
37
+
38
+ Confirm against official Next.js proxy/middleware docs for your exact release via **biblos** MCP.
39
+
40
+ ## Related
41
+
42
+ App Router data patterns → **react-patterns** and **react-performance** references. Shared Vite/Bun/SEO → **techne:web**.
@@ -0,0 +1,139 @@
1
+ # React component patterns
2
+
3
+ React 18/19 function components, hooks, RSC-aware composition.
4
+
5
+ ## Core rules
6
+
7
+ - **Pure render**: derive totals, filters, labels in render body—not `useEffect` syncing from props.
8
+ - **Effects for external sync**: subscriptions, DOM bridges, logging—not for derived UI state.
9
+ - **Composition**: slots via `children`, named props, or compound components with context.
10
+
11
+ ## Hooks
12
+
13
+ - Call hooks unconditionally at top level.
14
+ - Clean up listeners/intervals/subscriptions in effect returns.
15
+ - Functional `setState` when next value depends on previous.
16
+ - Extract custom hooks when the same hook bundle repeats in 2+ components.
17
+ - Default: no memoization until profiler or child memo requires stable references.
18
+
19
+ ## State decision tree
20
+
21
+ ```
22
+ One component only → useState
23
+ Parent + shallow tree → lift state
24
+ Rare global reads → split Context per concern
25
+ Hot shared updates → Zustand/Jotai/RTK
26
+ Server-backed → TanStack Query / SWR / RSC fetch
27
+ ```
28
+
29
+ ## Server / Client (App Router)
30
+
31
+ ```tsx
32
+ // Server (default): async, no client JS for this module
33
+ export default async function Page({ params }: { params: { id: string } }) {
34
+ const row = await db.item.findUnique({ where: { id: params.id } })
35
+ if (!row) notFound()
36
+ return <Detail item={row} />
37
+ }
38
+
39
+ 'use client'
40
+ export function BuyButton({ sku }: { sku: string }) {
41
+ const [busy, start] = useTransition()
42
+ return (
43
+ <button disabled={busy} onClick={() => start(() => addToCart(sku))}>
44
+ {busy ? 'Adding…' : 'Add'}
45
+ </button>
46
+ )
47
+ }
48
+ ```
49
+
50
+ - Pass serializable props or `children` from server → client.
51
+ - Server Actions from forms or events; never import server modules into client files.
52
+
53
+ ## Suspense + errors
54
+
55
+ Nest `<Suspense>` near data consumers; wrap with error boundary (class or `react-error-boundary`). Boundaries catch render/lifecycle throws—not event handler errors.
56
+
57
+ ## Forms
58
+
59
+ - React 19: `useActionState` + server action with schema validation (Zod, etc.).
60
+ - Controlled inputs when value drives other UI or live validation.
61
+ - Non-trivial wizards → React Hook Form / TanStack Form.
62
+
63
+ ## Data fetching matrix
64
+
65
+ | Need | Tool |
66
+ |------|------|
67
+ | Per-request in App Router | RSC `await fetch()` |
68
+ | Client cache + mutations | TanStack Query |
69
+ | Lightweight revalidate | SWR |
70
+ | One-off user action | `fetch` in handler |
71
+
72
+ ## Composition recipes
73
+
74
+ Named slots: `<Shell header={<Nav />} aside={<Filters />}>{body}</Shell>`
75
+
76
+ Compound tabs pattern with context (see **techne:web** reference) or headless UI primitives.
77
+
78
+ ## Performance (basics)
79
+
80
+ `React.memo` only if child is expensive and props often unchanged. Split context so theme changes do not rerender notification consumers. List keys = stable ids; virtualize long lists.
81
+
82
+ ## Accessibility
83
+
84
+ Semantic HTML before ARIA. Label every input. Move focus on route/modal changes. Component tests: axe (see **react-testing** reference). Full audit → **ui-design**.
85
+
86
+ ## Examples
87
+
88
+ **Debounced search + query**
89
+
90
+ ```tsx
91
+ function useDebounced<T>(value: T, ms = 300) {
92
+ const [out, setOut] = useState(value)
93
+ useEffect(() => {
94
+ const t = setTimeout(() => setOut(value), ms)
95
+ return () => clearTimeout(t)
96
+ }, [value, ms])
97
+ return out
98
+ }
99
+
100
+ function Search() {
101
+ const [q, setQ] = useState('')
102
+ const debounced = useDebounced(q)
103
+ const { data } = useQuery({
104
+ queryKey: ['search', debounced],
105
+ queryFn: () => apiSearch(debounced),
106
+ enabled: debounced.length > 0,
107
+ })
108
+ return (
109
+ <>
110
+ <input value={q} onChange={e => setQ(e.target.value)} />
111
+ <ResultList items={data ?? []} />
112
+ </>
113
+ )
114
+ }
115
+ ```
116
+
117
+ **Optimistic list (React 19)**
118
+
119
+ ```tsx
120
+ 'use client'
121
+ import { useOptimistic } from 'react'
122
+
123
+ export function Thread({ messages }: { messages: Msg[] }) {
124
+ const [view, append] = useOptimistic(messages, (cur, msg: Msg) => [...cur, msg])
125
+ async function send(fd: FormData) {
126
+ const text = String(fd.get('text'))
127
+ append({ id: 'tmp', text })
128
+ await persist(text)
129
+ }
130
+ return (
131
+ <>
132
+ <ul>{view.map(m => <li key={m.id}>{m.text}</li>)}</ul>
133
+ <form action={send}><input name="text" /><button>Send</button></form>
134
+ </>
135
+ )
136
+ }
137
+ ```
138
+
139
+ Router-specific loaders (React Router, TanStack Router) follow that router's docs—patterns above are core React.
@@ -0,0 +1,101 @@
1
+ # React / Next.js performance
2
+
3
+ Prioritized checklist for reviews. When React Compiler ships in project, treat manual memo rules as secondary.
4
+
5
+ ## Priority map
6
+
7
+ | P | Area | Trigger |
8
+ |---|------|---------|
9
+ | 1 | Async waterfalls | Sequential independent `await` |
10
+ | 2 | Bundle size | First-load JS, heavy imports |
11
+ | 3 | Server (RSC, actions) | SSR data paths, serialization |
12
+ | 4 | Client fetching | Shared remote state in hooks |
13
+ | 5 | Re-renders | Store subscriptions, prop identity |
14
+ | 6 | Rendering | Lists, animation, hydration |
15
+ | 7 | JS micro | Hot loops, allocations |
16
+ | 8 | Advanced | Effect events, ref indirection |
17
+
18
+ ## 1 — Waterfalls
19
+
20
+ - Guard with sync checks before first `await`.
21
+ - Defer `await` to the branch that needs the result.
22
+ - Independent calls: `Promise.all([...])`.
23
+ - Start promises early, await late when dependencies differ.
24
+ - RSC: split async siblings instead of one sequential parent.
25
+
26
+ Streaming: tight Suspense boundaries; reserve space to limit CLS.
27
+
28
+ ## 2 — Bundle
29
+
30
+ - Import from concrete module paths, not `@/components` barrels.
31
+ - Next 13.5+: `experimental.optimizePackageImports` for listed packages.
32
+ - No dynamic template imports—use explicit branches.
33
+ - `next/dynamic` for heavy client-only widgets (`ssr: false` when needed).
34
+ - Defer analytics/support with `next/script` `afterInteractive` / `lazyOnload`.
35
+ - Preload route chunks on hover/focus when UX warrants.
36
+
37
+ ## 3 — Server
38
+
39
+ - AuthZ inside Server Actions (same bar as HTTP handlers).
40
+ - `React.cache()` dedupes per-request reads.
41
+ - Cross-request static data: LRU / `unstable_cache`, not module globals.
42
+ - Hoist static file reads to module scope once.
43
+ - **No mutable module state** shared across requests.
44
+ - Minimize props serialized to client components.
45
+ - Nested enrichment: `Promise.all` over items.
46
+ - Next 15+: `after()` for logging/analytics post-response.
47
+
48
+ ## 4 — Client data
49
+
50
+ - TanStack Query / SWR for shared reads—one cache, one flight.
51
+ - One global scroll/resize listener via shared hook, not per component.
52
+ - `{ passive: true }` on scroll listeners when not preventing default.
53
+ - `localStorage`: version field + small payloads (sync blocking).
54
+
55
+ ## 5 — Re-renders
56
+
57
+ - Read store inside event handler with `.getState()` when render does not need subscription.
58
+ - Memoize heavy child; hoist `const EMPTY: T[] = []` for default array props.
59
+ - Effect deps: primitives, not fresh object literals.
60
+ - Select derived booleans from store (`length > 0`) not whole cart object.
61
+ - Derive strings in render, not effect → setState.
62
+ - `useState(() => expensiveInit())` for costly initial state.
63
+ - Skip memo on trivial primitive math.
64
+ - Split hooks with unrelated deps.
65
+ - Prefer event handlers over effects for user-driven logic.
66
+ - `startTransition` / `useDeferredValue` for non-urgent/filter UI.
67
+ - `useRef` for high-frequency non-visual state.
68
+ - Never define components inside components.
69
+
70
+ ## 6 — Rendering
71
+
72
+ - Animate wrapper div, not raw SVG transforms.
73
+ - `content-visibility: auto` + intrinsic size for long lists.
74
+ - Hoist static JSX fragments.
75
+ - Trim SVG path precision.
76
+ - Theme/locale before hydration: inline script on `documentElement` when needed.
77
+ - `suppressHydrationWarning` only on known leaf mismatches (e.g. live clock).
78
+ - React 19 `<Activity mode="hidden">` vs unmount for tabs.
79
+ - `{n > 0 ? <Badge /> : null}` not `{n && <Badge />}`.
80
+ - `preload` / `preconnect` from `react-dom`.
81
+
82
+ ## 7 — JS micro
83
+
84
+ Batch DOM class changes; `Map`/`Set` for hot lookups; combine filter+map passes; early returns; hoist RegExp; min/max via loop not sort; `requestIdleCallback` for deferrable work.
85
+
86
+ ## 8 — Advanced
87
+
88
+ Stable handler via ref + empty-deps callback; `useLatest` helper; do not list `useEffectEvent` values in effect deps.
89
+
90
+ ## Tooling
91
+
92
+ Next Optimize Package Imports, bundle analyzer, Turbopack dev builds. React Compiler (when enabled) reduces manual memo need.
93
+
94
+ ## Web Vitals mapping
95
+
96
+ | Metric | Focus |
97
+ |--------|--------|
98
+ | LCP | Waterfalls, bundle, hints |
99
+ | INP | Re-renders, main-thread JS |
100
+ | CLS | Suspense placement, media dimensions |
101
+ | TBT | Bundle, third-party defer |
@@ -0,0 +1,139 @@
1
+ # React testing
2
+
3
+ Behavior-first tests with React Testing Library (RTL). Accessibility depth → **ui-design**; full flows → **techne:quality** / Playwright.
4
+
5
+ ## Principle
6
+
7
+ Assert what users see and do:
8
+
9
+ - Render with production-like providers
10
+ - Query by role, label, text; interact with `@testing-library/user-event`
11
+ - Check visible outcomes and side effects (callbacks, network)
12
+
13
+ Avoid: internal state, hook call counts, shallow DOM snapshots of components, mocking React.
14
+
15
+ ## Runners
16
+
17
+ | Tool | Typical stack |
18
+ |------|----------------|
19
+ | Vitest | Vite, modern ESM |
20
+ | Jest | Next.js, older repos |
21
+ | Playwright CT | Needs real layout/browser APIs |
22
+
23
+ Pick one primary unit/component runner unless lanes are explicit.
24
+
25
+ ## Queries (priority)
26
+
27
+ 1. `getByRole`, `getByLabelText`, `getByPlaceholderText`, `getByText`
28
+ 2. `getByAltText`, `getByTitle`
29
+ 3. `getByTestId` last
30
+
31
+ Variants: `getBy*` (must exist), `queryBy*` (absence), `findBy*` (async appear).
32
+
33
+ ## userEvent
34
+
35
+ ```tsx
36
+ const user = userEvent.setup()
37
+ await user.type(screen.getByLabelText('Email'), 'a@b.co')
38
+ await user.click(screen.getByRole('button', { name: /save/i }))
39
+ ```
40
+
41
+ Always await; prefer userEvent over raw `fireEvent`.
42
+
43
+ ## Async
44
+
45
+ ```tsx
46
+ expect(await screen.findByText('Done')).toBeInTheDocument()
47
+ await waitFor(() => expect(spy).toHaveBeenCalled())
48
+ await waitForElementToBeRemoved(() => screen.queryByText('Loading'))
49
+ ```
50
+
51
+ No arbitrary `setTimeout`.
52
+
53
+ ## MSW
54
+
55
+ Network-layer mocks; unhandled requests should fail tests:
56
+
57
+ ```typescript
58
+ import { setupServer } from 'msw/node'
59
+ import { http, HttpResponse } from 'msw'
60
+
61
+ export const server = setupServer(
62
+ http.get('/api/users/:id', ({ params }) =>
63
+ HttpResponse.json({ id: params.id, name: 'Ada' }),
64
+ ),
65
+ )
66
+
67
+ beforeAll(() => server.listen({ onUnhandledRequest: 'error' }))
68
+ afterEach(() => server.resetHandlers())
69
+ afterAll(() => server.close())
70
+ ```
71
+
72
+ Per-test override with `server.use(...)`.
73
+
74
+ ## Providers
75
+
76
+ Central `renderWithProviders` wrapping QueryClient (retry: false), theme, router—import from `test-utils` in specs.
77
+
78
+ ## Hooks
79
+
80
+ `renderHook` + `act` for updates. QueryClient instance **outside** wrapper factory to avoid cache reset flakiness.
81
+
82
+ ## Accessibility in tests
83
+
84
+ ```tsx
85
+ import { axe, toHaveNoViolations } from 'vitest-axe'
86
+ expect.extend(toHaveNoViolations)
87
+
88
+ test('card a11y', async () => {
89
+ const { container } = render(<Card user={mock} />)
90
+ expect(await axe(container)).toHaveNoViolations()
91
+ })
92
+ ```
93
+
94
+ Contrast in JSDOM is limited—visual contrast in browser E2E.
95
+
96
+ ## Snapshots
97
+
98
+ Avoid DOM snapshots for components. OK for pure serializers or generated config strings. Visual diffs → Playwright/Chromatic.
99
+
100
+ ## RTL vs E2E
101
+
102
+ | RTL | Playwright / Cypress |
103
+ |-----|----------------------|
104
+ | Hook logic, forms, presentational UI | Layout, scroll, DnD, multi-page flows |
105
+ | Fast feedback | Real browser |
106
+
107
+ ## Coverage (orienting targets)
108
+
109
+ | Layer | Aim |
110
+ |-------|-----|
111
+ | Pure utils | ~90% |
112
+ | Hooks | ~85% |
113
+ | Presentational | ~80% behavior |
114
+ | Containers | ~70% happy + error paths |
115
+ | Pages | E2E smoke + critical RTL |
116
+
117
+ ```typescript
118
+ // vitest.config.ts excerpt
119
+ coverage: {
120
+ provider: 'v8',
121
+ thresholds: { lines: 80, functions: 80, branches: 70, statements: 80 },
122
+ }
123
+ ```
124
+
125
+ ## Anti-patterns
126
+
127
+ `container.querySelector`, mocking children by default, ignoring `act` warnings, shared mutable fixtures, `jest.mock('react')`.
128
+
129
+ ## TDD loop
130
+
131
+ Red → minimal green → refactor; start from simplest prop/render test, grow cases.
132
+
133
+ ## Commands
134
+
135
+ ```bash
136
+ vitest run
137
+ vitest run --coverage
138
+ CI=true vitest run --coverage
139
+ ```
@@ -0,0 +1,28 @@
1
+ ---
2
+ name: react-native
3
+ description: React Native and Expo engineering — Expo Router file routes, Zod-validated params, TanStack Query server state, list virtualization, StyleSheet/NativeWind styling, native module hooks, and secure token storage. Use when building or reviewing RN/Expo screens, navigation, data layers, or device APIs.
4
+ ---
5
+
6
+ Mobile React patterns for the managed Expo workflow and New Architecture defaults. Not for web DOM stacks — use **techne:react** / **techne:web** there. Native look-and-feel and platform conventions → **native-ui**.
7
+
8
+ ## Non-negotiable rules
9
+
10
+ 1. **Thin routes** — Files under `app/` parse/validate params and render a screen from `features/` or `components/`.
11
+ 2. **Validate externals** — Zod (or equivalent) on deep-link params, push payloads, and JSON from APIs before use.
12
+ 3. **Server state in the cache** — TanStack Query (or similar) owns remote data; do not mirror it into Zustand/Jotai.
13
+ 4. **Virtualized lists** — `FlatList` / FlashList for non-trivial collections; never `ScrollView` + `.map` for long arrays.
14
+ 5. **Stable list props** — Memoized row components, `useCallback` `renderItem`, deterministic `keyExtractor`.
15
+ 6. **One styling system** — `StyleSheet.create` at module scope **or** utility classes (e.g. NativeWind); avoid fresh inline objects on hot paths.
16
+ 7. **Secrets** — `expo-secure-store` (Keychain/Keystore) for tokens; AsyncStorage/MMKV only for non-sensitive prefs.
17
+ 8. **UI states** — Every screen handles loading, error (with `accessibilityRole="alert"` when appropriate), and empty data explicitly.
18
+ 9. **Native side effects in hooks** — Permissions, location, subscriptions live in `use*` hooks with cancellation flags / cleanup.
19
+ 10. **No privileged keys in bundle** — Payment and admin secrets stay server-side; ship public keys only.
20
+ 11. **Animation thread** — Prefer Reanimated for motion; keep heavy work off the JS thread.
21
+ 12. **Dependency check** — Confirm New Architecture support before adding native modules.
22
+ 13. **Support skills** — Shared TS idioms → **techne:quality** / coding standards; E2E → **techne:quality** browser-qa/e2e patterns with RN test libs; security → **exo-security**; API docs → **biblos** MCP.
23
+
24
+ ## References
25
+
26
+ | File | Load when |
27
+ |------|-----------|
28
+ | [reference/expo-patterns.md](reference/expo-patterns.md) | Router layout, queries/mutations, lists, forms, hooks, anti-patterns |