@haposoft/cafekit 0.16.0-rc.8 → 0.16.1

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 (323) hide show
  1. package/README.md +117 -28
  2. package/bin/__tests__/codex-hooks-ownership.test.js +239 -0
  3. package/bin/__tests__/codex-hooks.test.js +175 -0
  4. package/bin/__tests__/codex-native.test.js +1882 -70
  5. package/bin/__tests__/develop-contract.test.js +442 -23
  6. package/bin/__tests__/grok-envelope.test.js +271 -0
  7. package/bin/__tests__/grok-platform.test.js +133 -0
  8. package/bin/__tests__/hook-payload.test.js +194 -0
  9. package/bin/__tests__/installer-safety.test.js +3 -3
  10. package/bin/__tests__/omp-bridge.test.js +168 -0
  11. package/bin/__tests__/omp-hooks.test.js +178 -0
  12. package/bin/__tests__/omp-runtime.test.js +150 -0
  13. package/bin/__tests__/optional-skill-inventory.test.js +249 -0
  14. package/bin/__tests__/output-styles.test.js +214 -0
  15. package/bin/__tests__/package-inventory.test.js +1735 -98
  16. package/bin/__tests__/runtime-dir.test.js +158 -0
  17. package/bin/__tests__/runtime-schema.test.js +113 -0
  18. package/bin/__tests__/secret-output-guardrail.test.js +122 -0
  19. package/bin/__tests__/skill-routing-source.test.js +172 -0
  20. package/bin/__tests__/specs-v2-execution-closeout.test.js +28 -1
  21. package/bin/install.js +15 -5
  22. package/bin/lib/codex-install.js +170 -5
  23. package/bin/lib/context.js +64 -3
  24. package/bin/lib/i18n.js +15 -36
  25. package/bin/lib/skill-deps.js +5 -5
  26. package/bin/phases/claude-runtime.js +23 -0
  27. package/bin/phases/claude-settings.js +8 -0
  28. package/bin/phases/codex-hooks.js +156 -0
  29. package/bin/phases/codex-runtime.js +29 -38
  30. package/bin/phases/copy-payload.js +15 -2
  31. package/bin/phases/omp-runtime.js +140 -0
  32. package/bin/phases/root-config.js +3 -0
  33. package/bin/phases/select-platform.js +22 -1
  34. package/bin/phases/select-skill-bundles.js +96 -0
  35. package/bin/phases/skill-inventory.js +71 -0
  36. package/bin/phases/skills-setup.js +9 -2
  37. package/bin/phases/summary.js +0 -4
  38. package/bin/phases/write-metadata.js +8 -5
  39. package/package.json +8 -2
  40. package/src/claude/CLAUDE.md +3 -3
  41. package/src/claude/agents/brainstormer.md +52 -69
  42. package/src/claude/agents/code-auditor.md +32 -14
  43. package/src/claude/agents/debugger.md +35 -20
  44. package/src/claude/agents/deployer.md +12 -5
  45. package/src/claude/agents/docs-keeper.md +11 -1
  46. package/src/claude/agents/implementer.md +25 -13
  47. package/src/claude/agents/inspector.md +6 -3
  48. package/src/claude/agents/project-manager.md +1 -1
  49. package/src/claude/agents/researcher.md +26 -55
  50. package/src/claude/agents/spec-maker.md +12 -7
  51. package/src/claude/agents/strategist.md +52 -0
  52. package/src/claude/agents/test-runner.md +117 -132
  53. package/src/claude/agents/ui-ux-designer.md +1 -1
  54. package/src/claude/hooks/__tests__/fixtures/statusline-default.golden +1 -0
  55. package/src/claude/hooks/__tests__/precompact.test.js +158 -0
  56. package/src/claude/hooks/__tests__/semantic-review-authority.test.js +2 -0
  57. package/src/claude/hooks/__tests__/spec-gate.test.js +348 -3
  58. package/src/claude/hooks/__tests__/state.test.js +7 -0
  59. package/src/claude/hooks/__tests__/statusline.test.js +196 -0
  60. package/src/claude/hooks/agent.cjs +13 -8
  61. package/src/claude/hooks/completion-authority.cjs +10 -4
  62. package/src/claude/hooks/docs-sync.cjs +14 -11
  63. package/src/claude/hooks/inspect-block.cjs +28 -8
  64. package/src/claude/hooks/lib/config.cjs +8 -2
  65. package/src/claude/hooks/lib/counter.cjs +7 -5
  66. package/src/claude/hooks/lib/hook-payload.cjs +160 -0
  67. package/src/claude/hooks/lib/hook-state-dir.cjs +39 -0
  68. package/src/claude/hooks/lib/runtime-dir.cjs +49 -0
  69. package/src/claude/hooks/lib/secret-keywords.cjs +42 -0
  70. package/src/claude/hooks/precompact.cjs +106 -0
  71. package/src/claude/hooks/privacy-block.cjs +4 -2
  72. package/src/claude/hooks/rules.cjs +5 -3
  73. package/src/claude/hooks/secret-output-guardrail.cjs +44 -0
  74. package/src/claude/hooks/semantic-review-authority.cjs +6 -4
  75. package/src/claude/hooks/session.cjs +37 -9
  76. package/src/claude/hooks/spec-gate.cjs +21 -11
  77. package/src/claude/hooks/spec-state.cjs +11 -7
  78. package/src/claude/hooks/state.cjs +7 -5
  79. package/src/claude/hooks/task-scaffold-guard.cjs +30 -9
  80. package/src/claude/hooks/usage.cjs +6 -5
  81. package/src/claude/migration-manifest.json +31 -15
  82. package/src/claude/output-styles/coding-level-0-eli5.md +103 -0
  83. package/src/claude/output-styles/coding-level-1-junior.md +124 -0
  84. package/src/claude/output-styles/coding-level-2-mid.md +146 -0
  85. package/src/claude/output-styles/coding-level-3-senior.md +148 -0
  86. package/src/claude/output-styles/coding-level-4-lead.md +159 -0
  87. package/src/claude/output-styles/coding-level-5-god.md +91 -0
  88. package/src/claude/references/debugger/core-philosophy.md +5 -3
  89. package/src/claude/references/debugger/frontend-verification.md +2 -2
  90. package/src/claude/references/debugger/log-ci-analysis.md +13 -1
  91. package/src/claude/references/debugger/parallel-agent-hydration.md +19 -34
  92. package/src/claude/references/debugger/performance-diagnostics.md +2 -2
  93. package/src/claude/references/debugger/root-cause-tracing.md +37 -6
  94. package/src/claude/references/debugger/side-effect-gate.md +3 -1
  95. package/src/claude/references/debugger/verification-protocol.md +13 -12
  96. package/src/claude/rules/orchestrator.md +7 -1
  97. package/src/claude/rules/process-management.md +39 -0
  98. package/src/claude/rules/review-audit-self-decision.md +48 -0
  99. package/src/claude/rules/skill-domain-routing.md +26 -24
  100. package/src/claude/rules/skill-workflow-routing.md +22 -14
  101. package/src/claude/rules/state-sync.md +7 -1
  102. package/src/claude/rules/workflow.md +5 -3
  103. package/src/claude/runtime.json +1 -0
  104. package/src/claude/runtime.schema.json +205 -0
  105. package/src/claude/scripts/generate-skill-catalog.cjs +156 -122
  106. package/src/claude/scripts/provenance.cjs +29 -9
  107. package/src/claude/scripts/spec-receipt.cjs +65 -4
  108. package/src/claude/scripts/workflow-policy.cjs +1 -1
  109. package/src/claude/settings/settings.json +16 -0
  110. package/src/claude/skills/agent-browser/SKILL.md +1 -1
  111. package/src/claude/skills/ai-multimodal/SKILL.md +1 -1
  112. package/src/claude/skills/brainstorm/SKILL.md +193 -172
  113. package/src/claude/skills/brainstorm/references/question-framework.md +105 -167
  114. package/src/claude/skills/chrome-devtools/SKILL.md +1 -1
  115. package/src/claude/skills/code-review/SKILL.md +43 -25
  116. package/src/claude/skills/code-review/references/spec-compliance-review.md +3 -4
  117. package/src/claude/skills/code-review/references/verification-gate.md +1 -1
  118. package/src/claude/skills/debug/SKILL.md +48 -19
  119. package/src/claude/skills/delegate/SKILL.md +1 -1
  120. package/src/claude/skills/develop/SKILL.md +92 -65
  121. package/src/claude/skills/develop/references/parallel-waves.md +36 -63
  122. package/src/claude/skills/develop/references/quality-gate.md +31 -4
  123. package/src/claude/skills/develop/references/subagent-patterns.md +21 -7
  124. package/src/claude/skills/docs/SKILL.md +42 -23
  125. package/src/claude/skills/docs/references/init-workflow.md +4 -4
  126. package/src/claude/skills/docs/references/reconstruct-workflow.md +6 -6
  127. package/src/claude/skills/docs/references/standard-docs-workflow.md +6 -2
  128. package/src/claude/skills/docs/references/summarize-workflow.md +2 -2
  129. package/src/claude/skills/docs/references/update-workflow.md +9 -7
  130. package/src/claude/skills/docs/templates/requirements-as-is.md +1 -1
  131. package/src/claude/skills/docx/SKILL.md +1 -1
  132. package/src/claude/skills/git/SKILL.md +1 -1
  133. package/src/claude/skills/git/references/commit-protocols.md +1 -1
  134. package/src/claude/skills/git/references/finish-branch.md +1 -1
  135. package/src/claude/skills/hotfix/SKILL.md +159 -170
  136. package/src/claude/skills/hotfix/references/diagnosis-protocol.md +14 -9
  137. package/src/claude/skills/hotfix/references/parallel-patterns.md +27 -13
  138. package/src/claude/skills/hotfix/references/prevention-gate.md +5 -0
  139. package/src/claude/skills/hotfix/references/review-cycle.md +21 -15
  140. package/src/claude/skills/hotfix/references/workflow-specialized.md +53 -21
  141. package/src/claude/skills/inspect/SKILL.md +55 -46
  142. package/src/claude/skills/inspect/references/internal-inspection.md +21 -5
  143. package/src/claude/skills/loop/SKILL.md +114 -0
  144. package/src/claude/skills/loop/references/bounded-loop-protocol.md +104 -0
  145. package/src/claude/skills/loop/references/metric-and-guard-contract.md +76 -0
  146. package/src/claude/skills/pdf/SKILL.md +1 -1
  147. package/src/claude/skills/pptx/SKILL.md +1 -1
  148. package/src/claude/skills/question/SKILL.md +16 -13
  149. package/src/claude/skills/research/SKILL.md +70 -43
  150. package/src/claude/skills/route/SKILL.md +94 -0
  151. package/src/claude/skills/route/references/agent-timing.md +46 -0
  152. package/src/claude/skills/route/references/chaining-patterns.md +53 -0
  153. package/src/claude/skills/route/references/task-taxonomy.md +48 -0
  154. package/src/claude/skills/specs/SKILL.md +51 -71
  155. package/src/claude/skills/specs/references/review.md +11 -8
  156. package/src/claude/skills/specs/references/templates.md +34 -18
  157. package/src/claude/skills/specs/templates/requirements-init.md +1 -1
  158. package/src/claude/skills/specs/templates/research.md +2 -2
  159. package/src/claude/skills/sync/SKILL.md +6 -6
  160. package/src/claude/skills/sync/references/sync-protocols.md +1 -1
  161. package/src/claude/skills/test/SKILL.md +120 -120
  162. package/src/claude/skills/test/references/execution-strategy.md +208 -361
  163. package/src/claude/skills/test/references/failure-triage.md +55 -121
  164. package/src/claude/skills/test/references/test-memory.md +20 -34
  165. package/src/claude/skills/ui-ux-pro-max/SKILL.md +1 -1
  166. package/src/claude/skills/web-testing/SKILL.md +1 -1
  167. package/src/claude/skills/xlsx/SKILL.md +1 -1
  168. package/src/claude/status.cjs +135 -33
  169. package/src/codex/AGENTS.md +14 -4
  170. package/src/codex/hooks/docs-sync.cjs +8 -3
  171. package/src/codex/hooks/lib/hook-context.cjs +18 -4
  172. package/src/codex/hooks/rules.cjs +29 -1
  173. package/src/codex/hooks/secret-output-guardrail.cjs +30 -0
  174. package/src/codex/hooks/spec-gate.cjs +3 -8
  175. package/src/codex/hooks/spec-state.cjs +3 -2
  176. package/src/codex/hooks.json +5 -0
  177. package/src/codex/rules/state-sync.md +7 -1
  178. package/src/codex/runtime.json +2 -0
  179. package/src/common/.env.example +1 -1
  180. package/src/omp/extensions/cafekit-bridge.mjs +233 -0
  181. package/src/omp/hooks/privacy-block.cjs +250 -0
  182. package/src/omp/runtime.json +33 -0
  183. package/bin/lib/rtk-run.js +0 -28
  184. package/bin/phases/setup-rtk.js +0 -159
  185. package/src/claude/skills/backend-development/SKILL.md +0 -101
  186. package/src/claude/skills/backend-development/references/backend-api-design.md +0 -495
  187. package/src/claude/skills/backend-development/references/backend-architecture.md +0 -454
  188. package/src/claude/skills/backend-development/references/backend-authentication.md +0 -338
  189. package/src/claude/skills/backend-development/references/backend-code-quality.md +0 -659
  190. package/src/claude/skills/backend-development/references/backend-debugging.md +0 -904
  191. package/src/claude/skills/backend-development/references/backend-devops.md +0 -491
  192. package/src/claude/skills/backend-development/references/backend-mindset.md +0 -387
  193. package/src/claude/skills/backend-development/references/backend-performance.md +0 -397
  194. package/src/claude/skills/backend-development/references/backend-security.md +0 -342
  195. package/src/claude/skills/backend-development/references/backend-technologies.md +0 -256
  196. package/src/claude/skills/backend-development/references/backend-testing.md +0 -429
  197. package/src/claude/skills/devops/.env.example +0 -76
  198. package/src/claude/skills/devops/SKILL.md +0 -102
  199. package/src/claude/skills/devops/references/browser-rendering.md +0 -305
  200. package/src/claude/skills/devops/references/cloudflare-d1-kv.md +0 -123
  201. package/src/claude/skills/devops/references/cloudflare-platform.md +0 -271
  202. package/src/claude/skills/devops/references/cloudflare-r2-storage.md +0 -280
  203. package/src/claude/skills/devops/references/cloudflare-workers-advanced.md +0 -312
  204. package/src/claude/skills/devops/references/cloudflare-workers-apis.md +0 -309
  205. package/src/claude/skills/devops/references/cloudflare-workers-basics.md +0 -418
  206. package/src/claude/skills/devops/references/docker-basics.md +0 -297
  207. package/src/claude/skills/devops/references/docker-compose.md +0 -292
  208. package/src/claude/skills/devops/references/gcloud-platform.md +0 -297
  209. package/src/claude/skills/devops/references/gcloud-services.md +0 -304
  210. package/src/claude/skills/devops/references/kubernetes-basics.md +0 -95
  211. package/src/claude/skills/devops/references/kubernetes-helm-advanced.md +0 -70
  212. package/src/claude/skills/devops/references/kubernetes-helm.md +0 -81
  213. package/src/claude/skills/devops/references/kubernetes-kubectl.md +0 -74
  214. package/src/claude/skills/devops/references/kubernetes-security-advanced.md +0 -94
  215. package/src/claude/skills/devops/references/kubernetes-security.md +0 -89
  216. package/src/claude/skills/devops/references/kubernetes-troubleshooting-advanced.md +0 -74
  217. package/src/claude/skills/devops/references/kubernetes-troubleshooting.md +0 -49
  218. package/src/claude/skills/devops/references/kubernetes-workflows-advanced.md +0 -75
  219. package/src/claude/skills/devops/references/kubernetes-workflows.md +0 -76
  220. package/src/claude/skills/devops/scripts/cloudflare_deploy.py +0 -269
  221. package/src/claude/skills/devops/scripts/docker_optimize.py +0 -332
  222. package/src/claude/skills/devops/scripts/requirements.txt +0 -20
  223. package/src/claude/skills/devops/scripts/tests/requirements.txt +0 -3
  224. package/src/claude/skills/devops/scripts/tests/test_cloudflare_deploy.py +0 -285
  225. package/src/claude/skills/devops/scripts/tests/test_docker_optimize.py +0 -436
  226. package/src/claude/skills/frontend-design/SKILL.md +0 -135
  227. package/src/claude/skills/frontend-design/references/ai-multimodal-overview.md +0 -165
  228. package/src/claude/skills/frontend-design/references/analysis-best-practices.md +0 -80
  229. package/src/claude/skills/frontend-design/references/analysis-prompts.md +0 -141
  230. package/src/claude/skills/frontend-design/references/analysis-techniques.md +0 -118
  231. package/src/claude/skills/frontend-design/references/animejs.md +0 -396
  232. package/src/claude/skills/frontend-design/references/anti-slop-rules.md +0 -103
  233. package/src/claude/skills/frontend-design/references/asset-generation.md +0 -337
  234. package/src/claude/skills/frontend-design/references/bento-motion-engine.md +0 -142
  235. package/src/claude/skills/frontend-design/references/design-extraction-overview.md +0 -71
  236. package/src/claude/skills/frontend-design/references/extraction-best-practices.md +0 -141
  237. package/src/claude/skills/frontend-design/references/extraction-output-templates.md +0 -162
  238. package/src/claude/skills/frontend-design/references/extraction-prompts.md +0 -127
  239. package/src/claude/skills/frontend-design/references/magicui-components.md +0 -129
  240. package/src/claude/skills/frontend-design/references/performance-guardrails.md +0 -169
  241. package/src/claude/skills/frontend-design/references/premium-design-patterns.md +0 -93
  242. package/src/claude/skills/frontend-design/references/redesign-audit-checklist.md +0 -114
  243. package/src/claude/skills/frontend-design/references/technical-accessibility.md +0 -119
  244. package/src/claude/skills/frontend-design/references/technical-best-practices.md +0 -97
  245. package/src/claude/skills/frontend-design/references/technical-optimization.md +0 -44
  246. package/src/claude/skills/frontend-design/references/technical-overview.md +0 -90
  247. package/src/claude/skills/frontend-design/references/technical-workflows.md +0 -150
  248. package/src/claude/skills/frontend-design/references/visual-analysis-overview.md +0 -95
  249. package/src/claude/skills/frontend-design/references/workflow-3d.md +0 -102
  250. package/src/claude/skills/frontend-design/references/workflow-describe.md +0 -87
  251. package/src/claude/skills/frontend-design/references/workflow-immersive.md +0 -87
  252. package/src/claude/skills/frontend-design/references/workflow-quick.md +0 -57
  253. package/src/claude/skills/frontend-design/references/workflow-screenshot.md +0 -63
  254. package/src/claude/skills/frontend-design/references/workflow-video.md +0 -74
  255. package/src/claude/skills/frontend-development/SKILL.md +0 -406
  256. package/src/claude/skills/frontend-development/resources/common-patterns.md +0 -331
  257. package/src/claude/skills/frontend-development/resources/complete-examples.md +0 -872
  258. package/src/claude/skills/frontend-development/resources/component-patterns.md +0 -502
  259. package/src/claude/skills/frontend-development/resources/data-fetching.md +0 -767
  260. package/src/claude/skills/frontend-development/resources/file-organization.md +0 -502
  261. package/src/claude/skills/frontend-development/resources/loading-and-error-states.md +0 -501
  262. package/src/claude/skills/frontend-development/resources/performance.md +0 -406
  263. package/src/claude/skills/frontend-development/resources/routing-guide.md +0 -364
  264. package/src/claude/skills/frontend-development/resources/styling-guide.md +0 -428
  265. package/src/claude/skills/frontend-development/resources/typescript-standards.md +0 -418
  266. package/src/claude/skills/mobile-development/SKILL.md +0 -218
  267. package/src/claude/skills/mobile-development/references/mobile-android.md +0 -604
  268. package/src/claude/skills/mobile-development/references/mobile-best-practices.md +0 -544
  269. package/src/claude/skills/mobile-development/references/mobile-debugging.md +0 -1089
  270. package/src/claude/skills/mobile-development/references/mobile-frameworks.md +0 -465
  271. package/src/claude/skills/mobile-development/references/mobile-ios.md +0 -496
  272. package/src/claude/skills/mobile-development/references/mobile-mindset.md +0 -542
  273. package/src/claude/skills/react-best-practices/AGENTS.md +0 -2249
  274. package/src/claude/skills/react-best-practices/README.md +0 -123
  275. package/src/claude/skills/react-best-practices/SKILL.md +0 -128
  276. package/src/claude/skills/react-best-practices/metadata.json +0 -15
  277. package/src/claude/skills/react-best-practices/rules/_sections.md +0 -46
  278. package/src/claude/skills/react-best-practices/rules/_template.md +0 -28
  279. package/src/claude/skills/react-best-practices/rules/advanced-event-handler-refs.md +0 -55
  280. package/src/claude/skills/react-best-practices/rules/advanced-use-latest.md +0 -49
  281. package/src/claude/skills/react-best-practices/rules/async-api-routes.md +0 -38
  282. package/src/claude/skills/react-best-practices/rules/async-defer-await.md +0 -80
  283. package/src/claude/skills/react-best-practices/rules/async-dependencies.md +0 -36
  284. package/src/claude/skills/react-best-practices/rules/async-parallel.md +0 -28
  285. package/src/claude/skills/react-best-practices/rules/async-suspense-boundaries.md +0 -99
  286. package/src/claude/skills/react-best-practices/rules/bundle-barrel-imports.md +0 -59
  287. package/src/claude/skills/react-best-practices/rules/bundle-conditional.md +0 -31
  288. package/src/claude/skills/react-best-practices/rules/bundle-defer-third-party.md +0 -49
  289. package/src/claude/skills/react-best-practices/rules/bundle-dynamic-imports.md +0 -35
  290. package/src/claude/skills/react-best-practices/rules/bundle-preload.md +0 -50
  291. package/src/claude/skills/react-best-practices/rules/client-event-listeners.md +0 -74
  292. package/src/claude/skills/react-best-practices/rules/client-swr-dedup.md +0 -56
  293. package/src/claude/skills/react-best-practices/rules/js-batch-dom-css.md +0 -82
  294. package/src/claude/skills/react-best-practices/rules/js-cache-function-results.md +0 -80
  295. package/src/claude/skills/react-best-practices/rules/js-cache-property-access.md +0 -28
  296. package/src/claude/skills/react-best-practices/rules/js-cache-storage.md +0 -70
  297. package/src/claude/skills/react-best-practices/rules/js-combine-iterations.md +0 -32
  298. package/src/claude/skills/react-best-practices/rules/js-early-exit.md +0 -50
  299. package/src/claude/skills/react-best-practices/rules/js-hoist-regexp.md +0 -45
  300. package/src/claude/skills/react-best-practices/rules/js-index-maps.md +0 -37
  301. package/src/claude/skills/react-best-practices/rules/js-length-check-first.md +0 -49
  302. package/src/claude/skills/react-best-practices/rules/js-min-max-loop.md +0 -82
  303. package/src/claude/skills/react-best-practices/rules/js-set-map-lookups.md +0 -24
  304. package/src/claude/skills/react-best-practices/rules/js-tosorted-immutable.md +0 -57
  305. package/src/claude/skills/react-best-practices/rules/rendering-activity.md +0 -26
  306. package/src/claude/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
  307. package/src/claude/skills/react-best-practices/rules/rendering-conditional-render.md +0 -40
  308. package/src/claude/skills/react-best-practices/rules/rendering-content-visibility.md +0 -38
  309. package/src/claude/skills/react-best-practices/rules/rendering-hoist-jsx.md +0 -46
  310. package/src/claude/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
  311. package/src/claude/skills/react-best-practices/rules/rendering-svg-precision.md +0 -28
  312. package/src/claude/skills/react-best-practices/rules/rerender-defer-reads.md +0 -39
  313. package/src/claude/skills/react-best-practices/rules/rerender-dependencies.md +0 -45
  314. package/src/claude/skills/react-best-practices/rules/rerender-derived-state.md +0 -29
  315. package/src/claude/skills/react-best-practices/rules/rerender-functional-setstate.md +0 -74
  316. package/src/claude/skills/react-best-practices/rules/rerender-lazy-state-init.md +0 -58
  317. package/src/claude/skills/react-best-practices/rules/rerender-memo.md +0 -44
  318. package/src/claude/skills/react-best-practices/rules/rerender-transitions.md +0 -40
  319. package/src/claude/skills/react-best-practices/rules/server-after-nonblocking.md +0 -73
  320. package/src/claude/skills/react-best-practices/rules/server-cache-lru.md +0 -41
  321. package/src/claude/skills/react-best-practices/rules/server-cache-react.md +0 -26
  322. package/src/claude/skills/react-best-practices/rules/server-parallel-fetching.md +0 -79
  323. package/src/claude/skills/react-best-practices/rules/server-serialization.md +0 -38
@@ -1,429 +0,0 @@
1
- # Backend Testing Strategies
2
-
3
- Comprehensive testing approaches, frameworks, and quality assurance practices (2025).
4
-
5
- ## Test Pyramid (70-20-10 Rule)
6
-
7
- ```
8
- /\
9
- /E2E\ 10% - End-to-End Tests
10
- /------\
11
- /Integr.\ 20% - Integration Tests
12
- /----------\
13
- / Unit \ 70% - Unit Tests
14
- /--------------\
15
- ```
16
-
17
- **Rationale:**
18
- - Unit tests: Fast, cheap, isolate bugs quickly
19
- - Integration tests: Verify component interactions
20
- - E2E tests: Expensive, slow, but validate real user flows
21
-
22
- ## Unit Testing
23
-
24
- ### Frameworks by Language
25
-
26
- **TypeScript/JavaScript:**
27
- - **Vitest** - Faster than Jest in CI/CD, ESM native
28
- - **Jest** - Mature, large ecosystem, snapshot testing
29
-
30
- **Python:**
31
- - **Pytest** - Industry standard, fixtures, parametrization
32
- - **Unittest** - Built-in, standard library
33
-
34
- **Go:**
35
- - **testing** - Built-in, table-driven tests
36
- - **testify** - Assertions and mocking
37
-
38
- ### Best Practices
39
-
40
- ```typescript
41
- // Good: Test single responsibility
42
- describe('UserService', () => {
43
- describe('createUser', () => {
44
- it('should create user with valid data', async () => {
45
- const userData = { email: 'test@example.com', name: 'Test' };
46
- const user = await userService.createUser(userData);
47
-
48
- expect(user).toMatchObject(userData);
49
- expect(user.id).toBeDefined();
50
- });
51
-
52
- it('should throw error with duplicate email', async () => {
53
- const userData = { email: 'existing@example.com', name: 'Test' };
54
-
55
- await expect(userService.createUser(userData))
56
- .rejects.toThrow('Email already exists');
57
- });
58
-
59
- it('should hash password before storing', async () => {
60
- const userData = { email: 'test@example.com', password: 'plain123' };
61
- const user = await userService.createUser(userData);
62
-
63
- expect(user.password).not.toBe('plain123');
64
- expect(user.password).toMatch(/^\$argon2id\$/);
65
- });
66
- });
67
- });
68
- ```
69
-
70
- ### Mocking
71
-
72
- ```typescript
73
- // Mock external dependencies
74
- jest.mock('./emailService');
75
-
76
- it('should send welcome email after user creation', async () => {
77
- const emailService = require('./emailService');
78
- emailService.sendWelcomeEmail = jest.fn();
79
-
80
- await userService.createUser({ email: 'test@example.com' });
81
-
82
- expect(emailService.sendWelcomeEmail).toHaveBeenCalledWith('test@example.com');
83
- });
84
- ```
85
-
86
- ## Integration Testing
87
-
88
- ### API Integration Tests
89
-
90
- ```typescript
91
- import request from 'supertest';
92
- import { app } from '../app';
93
-
94
- describe('POST /api/users', () => {
95
- beforeAll(async () => {
96
- await db.connect(); // Real database connection (test DB)
97
- });
98
-
99
- afterAll(async () => {
100
- await db.disconnect();
101
- });
102
-
103
- beforeEach(async () => {
104
- await db.users.deleteMany({}); // Clean state
105
- });
106
-
107
- it('should create user and return 201', async () => {
108
- const response = await request(app)
109
- .post('/api/users')
110
- .send({ email: 'test@example.com', name: 'Test User' })
111
- .expect(201);
112
-
113
- expect(response.body).toMatchObject({
114
- email: 'test@example.com',
115
- name: 'Test User',
116
- });
117
-
118
- // Verify database persistence
119
- const user = await db.users.findOne({ email: 'test@example.com' });
120
- expect(user).toBeDefined();
121
- });
122
-
123
- it('should return 400 for invalid email', async () => {
124
- await request(app)
125
- .post('/api/users')
126
- .send({ email: 'invalid-email', name: 'Test' })
127
- .expect(400)
128
- .expect((res) => {
129
- expect(res.body.error).toBe('Invalid email format');
130
- });
131
- });
132
- });
133
- ```
134
-
135
- ### Database Testing with TestContainers
136
-
137
- ```typescript
138
- import { GenericContainer } from 'testcontainers';
139
-
140
- let container;
141
- let db;
142
-
143
- beforeAll(async () => {
144
- // Spin up real PostgreSQL in Docker
145
- container = await new GenericContainer('postgres:15')
146
- .withEnvironment({ POSTGRES_PASSWORD: 'test' })
147
- .withExposedPorts(5432)
148
- .start();
149
-
150
- const port = container.getMappedPort(5432);
151
- db = await createConnection({
152
- host: 'localhost',
153
- port,
154
- database: 'test',
155
- password: 'test',
156
- });
157
- }, 60000);
158
-
159
- afterAll(async () => {
160
- await container.stop();
161
- });
162
- ```
163
-
164
- ## Contract Testing (Microservices)
165
-
166
- ### Pact (Consumer-Driven Contracts)
167
-
168
- ```typescript
169
- // Consumer test
170
- import { Pact } from '@pact-foundation/pact';
171
-
172
- const provider = new Pact({
173
- consumer: 'UserService',
174
- provider: 'AuthService',
175
- });
176
-
177
- describe('Auth Service Contract', () => {
178
- beforeAll(() => provider.setup());
179
- afterEach(() => provider.verify());
180
- afterAll(() => provider.finalize());
181
-
182
- it('should validate user token', async () => {
183
- await provider.addInteraction({
184
- state: 'user token exists',
185
- uponReceiving: 'a request to validate token',
186
- withRequest: {
187
- method: 'POST',
188
- path: '/auth/validate',
189
- headers: { 'Content-Type': 'application/json' },
190
- body: { token: 'valid-token-123' },
191
- },
192
- willRespondWith: {
193
- status: 200,
194
- body: { valid: true, userId: '123' },
195
- },
196
- });
197
-
198
- const response = await authClient.validateToken('valid-token-123');
199
- expect(response.valid).toBe(true);
200
- });
201
- });
202
- ```
203
-
204
- ## Load Testing
205
-
206
- ### Tools Comparison
207
-
208
- **k6** (Modern, Developer-Friendly)
209
- ```javascript
210
- import http from 'k6/http';
211
- import { check, sleep } from 'k6';
212
-
213
- export const options = {
214
- stages: [
215
- { duration: '2m', target: 100 }, // Ramp up to 100 users
216
- { duration: '5m', target: 100 }, // Stay at 100 users
217
- { duration: '2m', target: 0 }, // Ramp down to 0 users
218
- ],
219
- thresholds: {
220
- http_req_duration: ['p(95)<500'], // 95% requests under 500ms
221
- },
222
- };
223
-
224
- export default function () {
225
- const res = http.get('https://api.example.com/users');
226
- check(res, {
227
- 'status is 200': (r) => r.status === 200,
228
- 'response time < 500ms': (r) => r.timings.duration < 500,
229
- });
230
- sleep(1);
231
- }
232
- ```
233
-
234
- **Gatling** (JVM-based, Advanced Scenarios)
235
- **JMeter** (GUI-based, Traditional)
236
-
237
- ### Performance Thresholds
238
-
239
- - **Response time:** p95 < 500ms, p99 < 1s
240
- - **Throughput:** 1000+ req/sec (target based on SLA)
241
- - **Error rate:** < 1%
242
- - **Concurrent users:** Test at 2x expected peak
243
-
244
- ## E2E Testing
245
-
246
- ### Playwright (Modern, Multi-Browser)
247
-
248
- ```typescript
249
- import { test, expect } from '@playwright/test';
250
-
251
- test('user can register and login', async ({ page }) => {
252
- // Navigate to registration page
253
- await page.goto('https://app.example.com/register');
254
-
255
- // Fill registration form
256
- await page.fill('input[name="email"]', 'test@example.com');
257
- await page.fill('input[name="password"]', 'SecurePass123!');
258
- await page.click('button[type="submit"]');
259
-
260
- // Verify redirect to dashboard
261
- await expect(page).toHaveURL('/dashboard');
262
- await expect(page.locator('h1')).toContainText('Welcome');
263
-
264
- // Verify API call was made
265
- const response = await page.waitForResponse('/api/users');
266
- expect(response.status()).toBe(201);
267
- });
268
- ```
269
-
270
- ## Database Migration Testing
271
-
272
- **Migrations fail without proper testing**
273
-
274
- ```typescript
275
- describe('Database Migrations', () => {
276
- it('should migrate from v1 to v2 without data loss', async () => {
277
- // Insert test data in v1 schema
278
- await db.query(`
279
- INSERT INTO users (id, email, name)
280
- VALUES (1, 'test@example.com', 'Test User')
281
- `);
282
-
283
- // Run migration
284
- await runMigration('v2-add-created-at.sql');
285
-
286
- // Verify v2 schema
287
- const result = await db.query('SELECT * FROM users WHERE id = 1');
288
- expect(result.rows[0]).toMatchObject({
289
- id: 1,
290
- email: 'test@example.com',
291
- name: 'Test User',
292
- created_at: expect.any(Date),
293
- });
294
- });
295
-
296
- it('should rollback migration successfully', async () => {
297
- await runMigration('v2-add-created-at.sql');
298
- await rollbackMigration('v2-add-created-at.sql');
299
-
300
- // Verify v1 schema restored
301
- const columns = await db.query(`
302
- SELECT column_name FROM information_schema.columns
303
- WHERE table_name = 'users'
304
- `);
305
- expect(columns.rows.map(r => r.column_name)).not.toContain('created_at');
306
- });
307
- });
308
- ```
309
-
310
- ## Security Testing
311
-
312
- ### SAST (Static Application Security Testing)
313
-
314
- ```bash
315
- # SonarQube for code quality + security
316
- sonar-scanner \
317
- -Dsonar.projectKey=my-backend \
318
- -Dsonar.sources=src \
319
- -Dsonar.host.url=http://localhost:9000
320
-
321
- # Semgrep for security patterns
322
- semgrep --config auto src/
323
- ```
324
-
325
- ### DAST (Dynamic Application Security Testing)
326
-
327
- ```bash
328
- # OWASP ZAP for runtime security scanning
329
- docker run -t owasp/zap2docker-stable zap-baseline.py \
330
- -t https://api.example.com \
331
- -r zap-report.html
332
- ```
333
-
334
- ### Dependency Scanning (SCA)
335
-
336
- ```bash
337
- # npm audit for Node.js
338
- npm audit fix
339
-
340
- # Snyk for multi-language
341
- snyk test
342
- snyk monitor # Continuous monitoring
343
- ```
344
-
345
- ## Code Coverage
346
-
347
- ### Target Metrics (SonarQube Standards)
348
-
349
- - **Overall coverage:** 80%+
350
- - **Critical paths:** 100% (authentication, payment, data integrity)
351
- - **New code:** 90%+
352
-
353
- ### Implementation
354
-
355
- ```bash
356
- # Vitest with coverage
357
- vitest run --coverage
358
-
359
- # Jest with coverage
360
- jest --coverage --coverageThreshold='{"global":{"branches":80,"functions":80,"lines":80}}'
361
- ```
362
-
363
- ## CI/CD Testing Pipeline
364
-
365
- ```yaml
366
- # GitHub Actions example
367
- name: Test Pipeline
368
-
369
- on: [push, pull_request]
370
-
371
- jobs:
372
- test:
373
- runs-on: ubuntu-latest
374
- steps:
375
- - uses: actions/checkout@v3
376
-
377
- - name: Unit Tests
378
- run: npm run test:unit
379
-
380
- - name: Integration Tests
381
- run: npm run test:integration
382
-
383
- - name: E2E Tests
384
- run: npm run test:e2e
385
-
386
- - name: Load Tests
387
- run: k6 run load-test.js
388
-
389
- - name: Security Scan
390
- run: npm audit && snyk test
391
-
392
- - name: Coverage Report
393
- run: npm run test:coverage
394
-
395
- - name: Upload to Codecov
396
- uses: codecov/codecov-action@v3
397
- ```
398
-
399
- ## Testing Best Practices
400
-
401
- 1. **Arrange-Act-Assert (AAA) Pattern**
402
- 2. **One assertion per test** (when practical)
403
- 3. **Descriptive test names** - `should throw error when email is invalid`
404
- 4. **Test edge cases** - Empty inputs, boundary values, null/undefined
405
- 5. **Clean test data** - Reset database state between tests
406
- 6. **Fast tests** - Unit tests < 10ms, Integration < 100ms
407
- 7. **Deterministic** - No flaky tests, avoid sleep(), use waitFor()
408
- 8. **Independent** - Tests don't depend on execution order
409
-
410
- ## Testing Checklist
411
-
412
- - [ ] Unit tests cover 70% of codebase
413
- - [ ] Integration tests for all API endpoints
414
- - [ ] Contract tests for microservices
415
- - [ ] Load tests configured (k6/Gatling)
416
- - [ ] E2E tests for critical user flows
417
- - [ ] Database migration tests
418
- - [ ] Security scanning in CI/CD (SAST, DAST, SCA)
419
- - [ ] Code coverage reports automated
420
- - [ ] Tests run on every PR
421
- - [ ] Flaky tests eliminated
422
-
423
- ## Resources
424
-
425
- - **Vitest:** https://vitest.dev/
426
- - **Playwright:** https://playwright.dev/
427
- - **k6:** https://k6.io/docs/
428
- - **Pact:** https://docs.pact.io/
429
- - **TestContainers:** https://testcontainers.com/
@@ -1,76 +0,0 @@
1
- # DevOps Skill - Environment Variables
2
-
3
- # =============================================================================
4
- # Cloudflare Configuration
5
- # =============================================================================
6
- # Get these from: https://dash.cloudflare.com
7
- # API Token: Profile -> API Tokens -> Create Token
8
- # Account ID: Overview -> Account ID (right sidebar)
9
-
10
- CLOUDFLARE_API_TOKEN=your_cloudflare_api_token_here
11
- CLOUDFLARE_ACCOUNT_ID=your_cloudflare_account_id_here
12
-
13
- # Optional: Specific zone configuration
14
- # CLOUDFLARE_ZONE_ID=your_zone_id_here
15
-
16
- # =============================================================================
17
- # Google Cloud Configuration
18
- # =============================================================================
19
- # Authentication via service account key file or gcloud CLI
20
- # Download from: IAM & Admin -> Service Accounts -> Create Key
21
-
22
- # Option 1: Service account key file path
23
- GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account-key.json
24
-
25
- # Option 2: Project configuration
26
- # GCP_PROJECT_ID=your-project-id
27
- # GCP_REGION=us-central1
28
- # GCP_ZONE=us-central1-a
29
-
30
- # =============================================================================
31
- # Docker Configuration
32
- # =============================================================================
33
- # Optional: Docker registry authentication
34
-
35
- # Docker Hub
36
- # DOCKER_USERNAME=your_docker_username
37
- # DOCKER_PASSWORD=your_docker_password
38
-
39
- # Google Container Registry (GCR)
40
- # GCR_HOSTNAME=gcr.io
41
- # GCR_PROJECT_ID=your-project-id
42
-
43
- # AWS ECR
44
- # AWS_ACCOUNT_ID=123456789012
45
- # AWS_REGION=us-east-1
46
-
47
- # =============================================================================
48
- # CI/CD Configuration
49
- # =============================================================================
50
- # Optional: For automated deployments
51
-
52
- # GitHub Actions
53
- # GITHUB_TOKEN=your_github_token
54
-
55
- # GitLab CI
56
- # GITLAB_TOKEN=your_gitlab_token
57
-
58
- # =============================================================================
59
- # Monitoring & Logging
60
- # =============================================================================
61
- # Optional: For observability
62
-
63
- # Sentry
64
- # SENTRY_DSN=your_sentry_dsn
65
-
66
- # Datadog
67
- # DD_API_KEY=your_datadog_api_key
68
-
69
- # =============================================================================
70
- # Notes
71
- # =============================================================================
72
- # 1. Copy this file to .env and fill in your actual values
73
- # 2. Never commit .env file to version control
74
- # 3. Use different credentials for dev/staging/production
75
- # 4. Rotate credentials regularly
76
- # 5. Use least-privilege principle for API tokens
@@ -1,102 +0,0 @@
1
- ---
2
- name: hapo:devops
3
- description: Deploy to Cloudflare (Workers, R2, D1), Docker, GCP (Cloud Run, GKE), Kubernetes (kubectl, Helm). Use for serverless, containers, CI/CD, GitOps, security audit.
4
- license: MIT
5
- user-invocable: true
6
- when_to_use: "Invoke to deploy, containerize, or set up CI/CD and infra."
7
- category: devops
8
- keywords: [deploy, docker, ci-cd, kubernetes]
9
- argument-hint: "[platform] [task]"
10
- metadata:
11
- author: haposoft
12
- version: "2.0.0"
13
- ---
14
- # DevOps Skill
15
-
16
- Deploy and manage cloud infrastructure across Cloudflare, Docker, Google Cloud, and Kubernetes.
17
-
18
- ## When to Use
19
-
20
- - Deploy serverless apps to Cloudflare Workers/Pages
21
- - Containerize apps with Docker, Docker Compose
22
- - Manage GCP with gcloud CLI (Cloud Run, GKE, Cloud SQL)
23
- - Kubernetes cluster management (kubectl, Helm)
24
- - GitOps workflows (Argo CD, Flux)
25
- - CI/CD pipelines, multi-region deployments
26
- - Security audits, RBAC, network policies
27
-
28
- ## Platform Selection
29
-
30
- | Need | Choose |
31
- |------|--------|
32
- | Sub-50ms latency globally | Cloudflare Workers |
33
- | Large file storage (zero egress) | Cloudflare R2 |
34
- | SQL database (global reads) | Cloudflare D1 |
35
- | Containerized workloads | Docker + Cloud Run/GKE |
36
- | Enterprise Kubernetes | GKE |
37
- | Managed relational DB | Cloud SQL |
38
- | Static site + API | Cloudflare Pages |
39
- | Container orchestration | Kubernetes |
40
- | Package management for K8s | Helm |
41
-
42
- ## Quick Start
43
-
44
- ```bash
45
- # Cloudflare Worker
46
- wrangler init my-worker && cd my-worker && wrangler deploy
47
-
48
- # Docker
49
- docker build -t myapp . && docker run -p 3000:3000 myapp
50
-
51
- # GCP Cloud Run
52
- gcloud run deploy my-service --image gcr.io/project/image --region us-central1
53
-
54
- # Kubernetes
55
- kubectl apply -f manifests/ && kubectl get pods
56
- ```
57
-
58
- ## Reference Navigation
59
-
60
- ### Cloudflare Platform
61
- - `cloudflare-platform.md` - Edge computing overview
62
- - `cloudflare-workers-basics.md` - Handler types, patterns
63
- - `cloudflare-workers-advanced.md` - Performance, optimization
64
- - `cloudflare-workers-apis.md` - Runtime APIs, bindings
65
- - `cloudflare-r2-storage.md` - Object storage, S3 compatibility
66
- - `cloudflare-d1-kv.md` - D1 SQLite, KV store
67
- - `browser-rendering.md` - Puppeteer automation
68
-
69
- ### Docker
70
- - `docker-basics.md` - Dockerfile, images, containers
71
- - `docker-compose.md` - Multi-container apps
72
-
73
- ### Google Cloud
74
- - `gcloud-platform.md` - gcloud CLI, authentication
75
- - `gcloud-services.md` - Compute Engine, GKE, Cloud Run
76
-
77
- ### Kubernetes
78
- - `kubernetes-basics.md` - Core concepts, architecture, workloads
79
- - `kubernetes-kubectl.md` - Essential commands, debugging workflow
80
- - `kubernetes-helm.md` / `kubernetes-helm-advanced.md` - Helm charts, templates
81
- - `kubernetes-security.md` / `kubernetes-security-advanced.md` - RBAC, secrets
82
- - `kubernetes-workflows.md` / `kubernetes-workflows-advanced.md` - GitOps, CI/CD
83
- - `kubernetes-troubleshooting.md` / `kubernetes-troubleshooting-advanced.md` - Debug
84
-
85
- ### Scripts
86
- - `scripts/cloudflare-deploy.py` - Automate Worker deployments
87
- - `scripts/docker-optimize.py` - Analyze Dockerfiles
88
-
89
- ## Best Practices
90
-
91
- **Security:** Non-root containers, RBAC, secrets in env vars, image scanning
92
- **Performance:** Multi-stage builds, edge caching, resource limits
93
- **Cost:** R2 for large egress, caching, right-size resources
94
- **Development:** Docker Compose local dev, wrangler dev, version control IaC
95
-
96
- ## Resources
97
-
98
- - Cloudflare: https://developers.cloudflare.com
99
- - Docker: https://docs.docker.com
100
- - GCP: https://cloud.google.com/docs
101
- - Kubernetes: https://kubernetes.io/docs
102
- - Helm: https://helm.sh/docs