@haposoft/cafekit 0.16.0-rc.7 → 0.16.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 (299) hide show
  1. package/README.md +116 -27
  2. package/bin/__tests__/codex-hooks-ownership.test.js +239 -0
  3. package/bin/__tests__/codex-hooks.test.js +295 -0
  4. package/bin/__tests__/codex-native.test.js +2289 -34
  5. package/bin/__tests__/develop-contract.test.js +400 -23
  6. package/bin/__tests__/installer-safety.test.js +3 -3
  7. package/bin/__tests__/optional-skill-inventory.test.js +249 -0
  8. package/bin/__tests__/output-styles.test.js +214 -0
  9. package/bin/__tests__/package-inventory.test.js +2131 -16
  10. package/bin/__tests__/runtime-schema.test.js +111 -0
  11. package/bin/__tests__/secret-output-guardrail.test.js +122 -0
  12. package/bin/__tests__/skill-routing-source.test.js +172 -0
  13. package/bin/__tests__/specs-v2-execution-closeout.test.js +1 -1
  14. package/bin/install.js +10 -0
  15. package/bin/lib/codex-install.js +170 -5
  16. package/bin/lib/context.js +14 -0
  17. package/bin/lib/i18n.js +12 -6
  18. package/bin/lib/skill-deps.js +5 -5
  19. package/bin/phases/claude-runtime.js +23 -0
  20. package/bin/phases/claude-settings.js +8 -0
  21. package/bin/phases/codex-hooks.js +156 -0
  22. package/bin/phases/codex-runtime.js +29 -38
  23. package/bin/phases/copy-payload.js +8 -2
  24. package/bin/phases/select-skill-bundles.js +96 -0
  25. package/bin/phases/skill-inventory.js +71 -0
  26. package/bin/phases/skills-setup.js +9 -2
  27. package/bin/phases/write-metadata.js +8 -5
  28. package/package.json +8 -2
  29. package/src/claude/CLAUDE.md +3 -3
  30. package/src/claude/agents/brainstormer.md +52 -69
  31. package/src/claude/agents/code-auditor.md +32 -14
  32. package/src/claude/agents/debugger.md +35 -20
  33. package/src/claude/agents/deployer.md +12 -5
  34. package/src/claude/agents/docs-keeper.md +11 -1
  35. package/src/claude/agents/implementer.md +25 -13
  36. package/src/claude/agents/inspector.md +6 -3
  37. package/src/claude/agents/project-manager.md +1 -1
  38. package/src/claude/agents/researcher.md +26 -55
  39. package/src/claude/agents/spec-maker.md +24 -13
  40. package/src/claude/agents/strategist.md +52 -0
  41. package/src/claude/agents/test-runner.md +117 -132
  42. package/src/claude/agents/ui-ux-designer.md +1 -1
  43. package/src/claude/hooks/__tests__/fixtures/statusline-default.golden +1 -0
  44. package/src/claude/hooks/__tests__/precompact.test.js +158 -0
  45. package/src/claude/hooks/__tests__/spec-gate.test.js +87 -4
  46. package/src/claude/hooks/__tests__/state.test.js +254 -3
  47. package/src/claude/hooks/__tests__/statusline.test.js +196 -0
  48. package/src/claude/hooks/agent.cjs +1 -1
  49. package/src/claude/hooks/docs-sync.cjs +12 -10
  50. package/src/claude/hooks/inspect-block.cjs +1 -1
  51. package/src/claude/hooks/lib/config.cjs +3 -0
  52. package/src/claude/hooks/lib/hook-state-dir.cjs +39 -0
  53. package/src/claude/hooks/lib/secret-keywords.cjs +42 -0
  54. package/src/claude/hooks/precompact.cjs +105 -0
  55. package/src/claude/hooks/rules.cjs +1 -1
  56. package/src/claude/hooks/secret-output-guardrail.cjs +43 -0
  57. package/src/claude/hooks/session.cjs +27 -1
  58. package/src/claude/hooks/spec-gate.cjs +3 -3
  59. package/src/claude/hooks/spec-state.cjs +32 -5
  60. package/src/claude/hooks/state.cjs +1 -1
  61. package/src/claude/hooks/task-scaffold-guard.cjs +1 -1
  62. package/src/claude/hooks/usage.cjs +1 -1
  63. package/src/claude/migration-manifest.json +29 -15
  64. package/src/claude/output-styles/coding-level-0-eli5.md +103 -0
  65. package/src/claude/output-styles/coding-level-1-junior.md +124 -0
  66. package/src/claude/output-styles/coding-level-2-mid.md +146 -0
  67. package/src/claude/output-styles/coding-level-3-senior.md +148 -0
  68. package/src/claude/output-styles/coding-level-4-lead.md +159 -0
  69. package/src/claude/output-styles/coding-level-5-god.md +91 -0
  70. package/src/claude/references/debugger/core-philosophy.md +5 -3
  71. package/src/claude/references/debugger/frontend-verification.md +2 -2
  72. package/src/claude/references/debugger/log-ci-analysis.md +13 -1
  73. package/src/claude/references/debugger/parallel-agent-hydration.md +19 -34
  74. package/src/claude/references/debugger/performance-diagnostics.md +2 -2
  75. package/src/claude/references/debugger/root-cause-tracing.md +37 -6
  76. package/src/claude/references/debugger/side-effect-gate.md +3 -1
  77. package/src/claude/references/debugger/verification-protocol.md +13 -12
  78. package/src/claude/rules/orchestrator.md +7 -1
  79. package/src/claude/rules/process-management.md +39 -0
  80. package/src/claude/rules/review-audit-self-decision.md +48 -0
  81. package/src/claude/rules/skill-domain-routing.md +26 -24
  82. package/src/claude/rules/skill-workflow-routing.md +22 -14
  83. package/src/claude/rules/workflow.md +3 -3
  84. package/src/claude/runtime.json +1 -0
  85. package/src/claude/runtime.schema.json +205 -0
  86. package/src/claude/scripts/generate-skill-catalog.cjs +156 -122
  87. package/src/claude/scripts/provenance.cjs +18 -5
  88. package/src/claude/scripts/spec-receipt.cjs +76 -21
  89. package/src/claude/scripts/spec-resolver.cjs +144 -4
  90. package/src/claude/scripts/workflow-policy.cjs +1 -1
  91. package/src/claude/settings/settings.json +16 -0
  92. package/src/claude/skills/agent-browser/SKILL.md +1 -1
  93. package/src/claude/skills/ai-multimodal/SKILL.md +1 -1
  94. package/src/claude/skills/brainstorm/SKILL.md +193 -172
  95. package/src/claude/skills/brainstorm/references/question-framework.md +105 -167
  96. package/src/claude/skills/chrome-devtools/SKILL.md +1 -1
  97. package/src/claude/skills/code-review/SKILL.md +43 -25
  98. package/src/claude/skills/code-review/references/spec-compliance-review.md +3 -4
  99. package/src/claude/skills/code-review/references/verification-gate.md +1 -1
  100. package/src/claude/skills/debug/SKILL.md +48 -19
  101. package/src/claude/skills/delegate/SKILL.md +1 -1
  102. package/src/claude/skills/develop/SKILL.md +92 -65
  103. package/src/claude/skills/develop/references/parallel-waves.md +36 -63
  104. package/src/claude/skills/develop/references/quality-gate.md +31 -4
  105. package/src/claude/skills/develop/references/subagent-patterns.md +21 -7
  106. package/src/claude/skills/docs/SKILL.md +42 -23
  107. package/src/claude/skills/docs/references/init-workflow.md +4 -4
  108. package/src/claude/skills/docs/references/reconstruct-workflow.md +6 -6
  109. package/src/claude/skills/docs/references/standard-docs-workflow.md +6 -2
  110. package/src/claude/skills/docs/references/summarize-workflow.md +2 -2
  111. package/src/claude/skills/docs/references/update-workflow.md +9 -7
  112. package/src/claude/skills/docs/templates/requirements-as-is.md +1 -1
  113. package/src/claude/skills/docx/SKILL.md +1 -1
  114. package/src/claude/skills/git/SKILL.md +1 -1
  115. package/src/claude/skills/git/references/commit-protocols.md +1 -1
  116. package/src/claude/skills/git/references/finish-branch.md +1 -1
  117. package/src/claude/skills/hotfix/SKILL.md +159 -170
  118. package/src/claude/skills/hotfix/references/diagnosis-protocol.md +14 -9
  119. package/src/claude/skills/hotfix/references/parallel-patterns.md +27 -13
  120. package/src/claude/skills/hotfix/references/prevention-gate.md +5 -0
  121. package/src/claude/skills/hotfix/references/review-cycle.md +21 -15
  122. package/src/claude/skills/hotfix/references/workflow-specialized.md +53 -21
  123. package/src/claude/skills/inspect/SKILL.md +55 -46
  124. package/src/claude/skills/inspect/references/internal-inspection.md +21 -5
  125. package/src/claude/skills/loop/SKILL.md +114 -0
  126. package/src/claude/skills/loop/references/bounded-loop-protocol.md +104 -0
  127. package/src/claude/skills/loop/references/metric-and-guard-contract.md +76 -0
  128. package/src/claude/skills/pdf/SKILL.md +1 -1
  129. package/src/claude/skills/pptx/SKILL.md +1 -1
  130. package/src/claude/skills/question/SKILL.md +16 -13
  131. package/src/claude/skills/research/SKILL.md +70 -43
  132. package/src/claude/skills/route/SKILL.md +94 -0
  133. package/src/claude/skills/route/references/agent-timing.md +46 -0
  134. package/src/claude/skills/route/references/chaining-patterns.md +53 -0
  135. package/src/claude/skills/route/references/task-taxonomy.md +48 -0
  136. package/src/claude/skills/specs/SKILL.md +48 -57
  137. package/src/claude/skills/specs/references/review.md +26 -8
  138. package/src/claude/skills/specs/references/templates.md +76 -31
  139. package/src/claude/skills/specs/templates/requirements-init.md +1 -1
  140. package/src/claude/skills/specs/templates/research.md +2 -2
  141. package/src/claude/skills/sync/SKILL.md +6 -6
  142. package/src/claude/skills/sync/references/sync-protocols.md +1 -1
  143. package/src/claude/skills/test/SKILL.md +120 -120
  144. package/src/claude/skills/test/references/execution-strategy.md +208 -361
  145. package/src/claude/skills/test/references/failure-triage.md +55 -121
  146. package/src/claude/skills/test/references/test-memory.md +20 -34
  147. package/src/claude/skills/ui-ux-pro-max/SKILL.md +1 -1
  148. package/src/claude/skills/web-testing/SKILL.md +1 -1
  149. package/src/claude/skills/xlsx/SKILL.md +1 -1
  150. package/src/claude/status.cjs +135 -33
  151. package/src/codex/AGENTS.md +14 -4
  152. package/src/codex/hooks/docs-sync.cjs +8 -3
  153. package/src/codex/hooks/lib/hook-context.cjs +18 -4
  154. package/src/codex/hooks/rules.cjs +29 -1
  155. package/src/codex/hooks/secret-output-guardrail.cjs +30 -0
  156. package/src/codex/hooks/spec-gate.cjs +3 -8
  157. package/src/codex/hooks/spec-state.cjs +34 -5
  158. package/src/codex/hooks.json +5 -0
  159. package/src/codex/runtime.json +2 -0
  160. package/src/common/.env.example +1 -1
  161. package/src/claude/skills/backend-development/SKILL.md +0 -101
  162. package/src/claude/skills/backend-development/references/backend-api-design.md +0 -495
  163. package/src/claude/skills/backend-development/references/backend-architecture.md +0 -454
  164. package/src/claude/skills/backend-development/references/backend-authentication.md +0 -338
  165. package/src/claude/skills/backend-development/references/backend-code-quality.md +0 -659
  166. package/src/claude/skills/backend-development/references/backend-debugging.md +0 -904
  167. package/src/claude/skills/backend-development/references/backend-devops.md +0 -491
  168. package/src/claude/skills/backend-development/references/backend-mindset.md +0 -387
  169. package/src/claude/skills/backend-development/references/backend-performance.md +0 -397
  170. package/src/claude/skills/backend-development/references/backend-security.md +0 -342
  171. package/src/claude/skills/backend-development/references/backend-technologies.md +0 -256
  172. package/src/claude/skills/backend-development/references/backend-testing.md +0 -429
  173. package/src/claude/skills/devops/.env.example +0 -76
  174. package/src/claude/skills/devops/SKILL.md +0 -102
  175. package/src/claude/skills/devops/references/browser-rendering.md +0 -305
  176. package/src/claude/skills/devops/references/cloudflare-d1-kv.md +0 -123
  177. package/src/claude/skills/devops/references/cloudflare-platform.md +0 -271
  178. package/src/claude/skills/devops/references/cloudflare-r2-storage.md +0 -280
  179. package/src/claude/skills/devops/references/cloudflare-workers-advanced.md +0 -312
  180. package/src/claude/skills/devops/references/cloudflare-workers-apis.md +0 -309
  181. package/src/claude/skills/devops/references/cloudflare-workers-basics.md +0 -418
  182. package/src/claude/skills/devops/references/docker-basics.md +0 -297
  183. package/src/claude/skills/devops/references/docker-compose.md +0 -292
  184. package/src/claude/skills/devops/references/gcloud-platform.md +0 -297
  185. package/src/claude/skills/devops/references/gcloud-services.md +0 -304
  186. package/src/claude/skills/devops/references/kubernetes-basics.md +0 -95
  187. package/src/claude/skills/devops/references/kubernetes-helm-advanced.md +0 -70
  188. package/src/claude/skills/devops/references/kubernetes-helm.md +0 -81
  189. package/src/claude/skills/devops/references/kubernetes-kubectl.md +0 -74
  190. package/src/claude/skills/devops/references/kubernetes-security-advanced.md +0 -94
  191. package/src/claude/skills/devops/references/kubernetes-security.md +0 -89
  192. package/src/claude/skills/devops/references/kubernetes-troubleshooting-advanced.md +0 -74
  193. package/src/claude/skills/devops/references/kubernetes-troubleshooting.md +0 -49
  194. package/src/claude/skills/devops/references/kubernetes-workflows-advanced.md +0 -75
  195. package/src/claude/skills/devops/references/kubernetes-workflows.md +0 -76
  196. package/src/claude/skills/devops/scripts/cloudflare_deploy.py +0 -269
  197. package/src/claude/skills/devops/scripts/docker_optimize.py +0 -332
  198. package/src/claude/skills/devops/scripts/requirements.txt +0 -20
  199. package/src/claude/skills/devops/scripts/tests/requirements.txt +0 -3
  200. package/src/claude/skills/devops/scripts/tests/test_cloudflare_deploy.py +0 -285
  201. package/src/claude/skills/devops/scripts/tests/test_docker_optimize.py +0 -436
  202. package/src/claude/skills/frontend-design/SKILL.md +0 -135
  203. package/src/claude/skills/frontend-design/references/ai-multimodal-overview.md +0 -165
  204. package/src/claude/skills/frontend-design/references/analysis-best-practices.md +0 -80
  205. package/src/claude/skills/frontend-design/references/analysis-prompts.md +0 -141
  206. package/src/claude/skills/frontend-design/references/analysis-techniques.md +0 -118
  207. package/src/claude/skills/frontend-design/references/animejs.md +0 -396
  208. package/src/claude/skills/frontend-design/references/anti-slop-rules.md +0 -103
  209. package/src/claude/skills/frontend-design/references/asset-generation.md +0 -337
  210. package/src/claude/skills/frontend-design/references/bento-motion-engine.md +0 -142
  211. package/src/claude/skills/frontend-design/references/design-extraction-overview.md +0 -71
  212. package/src/claude/skills/frontend-design/references/extraction-best-practices.md +0 -141
  213. package/src/claude/skills/frontend-design/references/extraction-output-templates.md +0 -162
  214. package/src/claude/skills/frontend-design/references/extraction-prompts.md +0 -127
  215. package/src/claude/skills/frontend-design/references/magicui-components.md +0 -129
  216. package/src/claude/skills/frontend-design/references/performance-guardrails.md +0 -169
  217. package/src/claude/skills/frontend-design/references/premium-design-patterns.md +0 -93
  218. package/src/claude/skills/frontend-design/references/redesign-audit-checklist.md +0 -114
  219. package/src/claude/skills/frontend-design/references/technical-accessibility.md +0 -119
  220. package/src/claude/skills/frontend-design/references/technical-best-practices.md +0 -97
  221. package/src/claude/skills/frontend-design/references/technical-optimization.md +0 -44
  222. package/src/claude/skills/frontend-design/references/technical-overview.md +0 -90
  223. package/src/claude/skills/frontend-design/references/technical-workflows.md +0 -150
  224. package/src/claude/skills/frontend-design/references/visual-analysis-overview.md +0 -95
  225. package/src/claude/skills/frontend-design/references/workflow-3d.md +0 -102
  226. package/src/claude/skills/frontend-design/references/workflow-describe.md +0 -87
  227. package/src/claude/skills/frontend-design/references/workflow-immersive.md +0 -87
  228. package/src/claude/skills/frontend-design/references/workflow-quick.md +0 -57
  229. package/src/claude/skills/frontend-design/references/workflow-screenshot.md +0 -63
  230. package/src/claude/skills/frontend-design/references/workflow-video.md +0 -74
  231. package/src/claude/skills/frontend-development/SKILL.md +0 -406
  232. package/src/claude/skills/frontend-development/resources/common-patterns.md +0 -331
  233. package/src/claude/skills/frontend-development/resources/complete-examples.md +0 -872
  234. package/src/claude/skills/frontend-development/resources/component-patterns.md +0 -502
  235. package/src/claude/skills/frontend-development/resources/data-fetching.md +0 -767
  236. package/src/claude/skills/frontend-development/resources/file-organization.md +0 -502
  237. package/src/claude/skills/frontend-development/resources/loading-and-error-states.md +0 -501
  238. package/src/claude/skills/frontend-development/resources/performance.md +0 -406
  239. package/src/claude/skills/frontend-development/resources/routing-guide.md +0 -364
  240. package/src/claude/skills/frontend-development/resources/styling-guide.md +0 -428
  241. package/src/claude/skills/frontend-development/resources/typescript-standards.md +0 -418
  242. package/src/claude/skills/mobile-development/SKILL.md +0 -218
  243. package/src/claude/skills/mobile-development/references/mobile-android.md +0 -604
  244. package/src/claude/skills/mobile-development/references/mobile-best-practices.md +0 -544
  245. package/src/claude/skills/mobile-development/references/mobile-debugging.md +0 -1089
  246. package/src/claude/skills/mobile-development/references/mobile-frameworks.md +0 -465
  247. package/src/claude/skills/mobile-development/references/mobile-ios.md +0 -496
  248. package/src/claude/skills/mobile-development/references/mobile-mindset.md +0 -542
  249. package/src/claude/skills/react-best-practices/AGENTS.md +0 -2249
  250. package/src/claude/skills/react-best-practices/README.md +0 -123
  251. package/src/claude/skills/react-best-practices/SKILL.md +0 -128
  252. package/src/claude/skills/react-best-practices/metadata.json +0 -15
  253. package/src/claude/skills/react-best-practices/rules/_sections.md +0 -46
  254. package/src/claude/skills/react-best-practices/rules/_template.md +0 -28
  255. package/src/claude/skills/react-best-practices/rules/advanced-event-handler-refs.md +0 -55
  256. package/src/claude/skills/react-best-practices/rules/advanced-use-latest.md +0 -49
  257. package/src/claude/skills/react-best-practices/rules/async-api-routes.md +0 -38
  258. package/src/claude/skills/react-best-practices/rules/async-defer-await.md +0 -80
  259. package/src/claude/skills/react-best-practices/rules/async-dependencies.md +0 -36
  260. package/src/claude/skills/react-best-practices/rules/async-parallel.md +0 -28
  261. package/src/claude/skills/react-best-practices/rules/async-suspense-boundaries.md +0 -99
  262. package/src/claude/skills/react-best-practices/rules/bundle-barrel-imports.md +0 -59
  263. package/src/claude/skills/react-best-practices/rules/bundle-conditional.md +0 -31
  264. package/src/claude/skills/react-best-practices/rules/bundle-defer-third-party.md +0 -49
  265. package/src/claude/skills/react-best-practices/rules/bundle-dynamic-imports.md +0 -35
  266. package/src/claude/skills/react-best-practices/rules/bundle-preload.md +0 -50
  267. package/src/claude/skills/react-best-practices/rules/client-event-listeners.md +0 -74
  268. package/src/claude/skills/react-best-practices/rules/client-swr-dedup.md +0 -56
  269. package/src/claude/skills/react-best-practices/rules/js-batch-dom-css.md +0 -82
  270. package/src/claude/skills/react-best-practices/rules/js-cache-function-results.md +0 -80
  271. package/src/claude/skills/react-best-practices/rules/js-cache-property-access.md +0 -28
  272. package/src/claude/skills/react-best-practices/rules/js-cache-storage.md +0 -70
  273. package/src/claude/skills/react-best-practices/rules/js-combine-iterations.md +0 -32
  274. package/src/claude/skills/react-best-practices/rules/js-early-exit.md +0 -50
  275. package/src/claude/skills/react-best-practices/rules/js-hoist-regexp.md +0 -45
  276. package/src/claude/skills/react-best-practices/rules/js-index-maps.md +0 -37
  277. package/src/claude/skills/react-best-practices/rules/js-length-check-first.md +0 -49
  278. package/src/claude/skills/react-best-practices/rules/js-min-max-loop.md +0 -82
  279. package/src/claude/skills/react-best-practices/rules/js-set-map-lookups.md +0 -24
  280. package/src/claude/skills/react-best-practices/rules/js-tosorted-immutable.md +0 -57
  281. package/src/claude/skills/react-best-practices/rules/rendering-activity.md +0 -26
  282. package/src/claude/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
  283. package/src/claude/skills/react-best-practices/rules/rendering-conditional-render.md +0 -40
  284. package/src/claude/skills/react-best-practices/rules/rendering-content-visibility.md +0 -38
  285. package/src/claude/skills/react-best-practices/rules/rendering-hoist-jsx.md +0 -46
  286. package/src/claude/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
  287. package/src/claude/skills/react-best-practices/rules/rendering-svg-precision.md +0 -28
  288. package/src/claude/skills/react-best-practices/rules/rerender-defer-reads.md +0 -39
  289. package/src/claude/skills/react-best-practices/rules/rerender-dependencies.md +0 -45
  290. package/src/claude/skills/react-best-practices/rules/rerender-derived-state.md +0 -29
  291. package/src/claude/skills/react-best-practices/rules/rerender-functional-setstate.md +0 -74
  292. package/src/claude/skills/react-best-practices/rules/rerender-lazy-state-init.md +0 -58
  293. package/src/claude/skills/react-best-practices/rules/rerender-memo.md +0 -44
  294. package/src/claude/skills/react-best-practices/rules/rerender-transitions.md +0 -40
  295. package/src/claude/skills/react-best-practices/rules/server-after-nonblocking.md +0 -73
  296. package/src/claude/skills/react-best-practices/rules/server-cache-lru.md +0 -41
  297. package/src/claude/skills/react-best-practices/rules/server-cache-react.md +0 -26
  298. package/src/claude/skills/react-best-practices/rules/server-parallel-fetching.md +0 -79
  299. package/src/claude/skills/react-best-practices/rules/server-serialization.md +0 -38
@@ -1,491 +0,0 @@
1
- # Backend DevOps Practices
2
-
3
- CI/CD pipelines, containerization, deployment strategies, and monitoring (2025).
4
-
5
- ## Deployment Strategies
6
-
7
- ### Blue-Green Deployment
8
-
9
- **Concept:** Two identical environments (Blue = current, Green = new)
10
-
11
- ```
12
- Production Traffic → Blue (v1.0)
13
- Green (v2.0) ← Deploy & Test
14
-
15
- Switch:
16
- Production Traffic → Green (v2.0)
17
- Blue (v1.0) ← Instant rollback available
18
- ```
19
-
20
- **Pros:**
21
- - Zero downtime
22
- - Instant rollback
23
- - Full environment testing before switch
24
-
25
- **Cons:**
26
- - Requires double infrastructure
27
- - Database migrations complex
28
-
29
- ### Canary Deployment
30
-
31
- **Concept:** Gradual rollout (1% → 5% → 25% → 100%)
32
-
33
- ```bash
34
- # Kubernetes canary deployment
35
- kubectl set image deployment/api api=myapp:v2
36
- kubectl rollout pause deployment/api # Pause at initial replicas
37
-
38
- # Monitor metrics, then continue
39
- kubectl rollout resume deployment/api
40
- ```
41
-
42
- **Pros:**
43
- - Risk mitigation
44
- - Early issue detection
45
- - Real user feedback
46
-
47
- **Cons:**
48
- - Requires monitoring
49
- - Longer deployment time
50
-
51
- ### Feature Flags (Progressive Delivery)
52
-
53
- **Impact:** Fewer deployment failures when combined with canary
54
-
55
- ```typescript
56
- import { LaunchDarkly } from 'launchdarkly-node-server-sdk';
57
-
58
- const client = LaunchDarkly.init(process.env.LD_SDK_KEY);
59
-
60
- // Check feature flag
61
- const showNewCheckout = await client.variation('new-checkout', user, false);
62
-
63
- if (showNewCheckout) {
64
- return newCheckoutFlow(req, res);
65
- } else {
66
- return oldCheckoutFlow(req, res);
67
- }
68
- ```
69
-
70
- **Use Cases:**
71
- - Gradual feature rollout
72
- - A/B testing
73
- - Kill switch for problematic features
74
- - Decouple deployment from release
75
-
76
- ## Containerization with Docker
77
-
78
- ### Multi-Stage Builds (Optimize Image Size)
79
-
80
- ```dockerfile
81
- # Build stage
82
- FROM node:20-alpine AS builder
83
- WORKDIR /app
84
- COPY package*.json ./
85
- RUN npm ci --only=production
86
- COPY . .
87
- RUN npm run build
88
-
89
- # Production stage
90
- FROM node:20-alpine
91
- WORKDIR /app
92
-
93
- # Copy only necessary files
94
- COPY --from=builder /app/dist ./dist
95
- COPY --from=builder /app/node_modules ./node_modules
96
- COPY package.json ./
97
-
98
- # Security: Run as non-root
99
- RUN addgroup -g 1001 -S nodejs && \
100
- adduser -S nodejs -u 1001
101
- USER nodejs
102
-
103
- EXPOSE 3000
104
- CMD ["node", "dist/main.js"]
105
- ```
106
-
107
- **Benefits:**
108
- - Smaller image size
109
- - Faster deployments
110
- - Reduced attack surface
111
-
112
- ### Docker Compose (Local Development)
113
-
114
- ```yaml
115
- version: '3.8'
116
-
117
- services:
118
- api:
119
- build: .
120
- ports:
121
- - "3000:3000"
122
- environment:
123
- - DATABASE_URL=postgresql://postgres:password@db:5432/myapp
124
- - REDIS_URL=redis://redis:6379
125
- depends_on:
126
- - db
127
- - redis
128
-
129
- db:
130
- image: postgres:15-alpine
131
- environment:
132
- - POSTGRES_PASSWORD=password
133
- - POSTGRES_DB=myapp
134
- volumes:
135
- - postgres-data:/var/lib/postgresql/data
136
-
137
- redis:
138
- image: redis:7-alpine
139
- ports:
140
- - "6379:6379"
141
-
142
- volumes:
143
- postgres-data:
144
- ```
145
-
146
- ## Kubernetes Orchestration
147
-
148
- ### Deployment Manifest
149
-
150
- ```yaml
151
- apiVersion: apps/v1
152
- kind: Deployment
153
- version: "1.0.0"
154
- spec:
155
- replicas: 3
156
- selector:
157
- matchLabels:
158
- app: api
159
- template:
160
- metadata:
161
- labels:
162
- app: api
163
- spec:
164
- containers:
165
- - name: api
166
- image: myregistry/api:v1.0.0
167
- ports:
168
- - containerPort: 3000
169
- env:
170
- - name: DATABASE_URL
171
- valueFrom:
172
- secretKeyRef:
173
- name: db-secret
174
- key: url
175
- resources:
176
- requests:
177
- memory: "256Mi"
178
- cpu: "250m"
179
- limits:
180
- memory: "512Mi"
181
- cpu: "500m"
182
- livenessProbe:
183
- httpGet:
184
- path: /health
185
- port: 3000
186
- initialDelaySeconds: 30
187
- periodSeconds: 10
188
- readinessProbe:
189
- httpGet:
190
- path: /ready
191
- port: 3000
192
- initialDelaySeconds: 5
193
- periodSeconds: 5
194
- ```
195
-
196
- ### Horizontal Pod Autoscaling
197
-
198
- ```yaml
199
- apiVersion: autoscaling/v2
200
- kind: HorizontalPodAutoscaler
201
- version: "1.0.0"
202
- spec:
203
- scaleTargetRef:
204
- apiVersion: apps/v1
205
- kind: Deployment
206
- name: api-deployment
207
- minReplicas: 3
208
- maxReplicas: 10
209
- metrics:
210
- - type: Resource
211
- resource:
212
- name: cpu
213
- target:
214
- type: Utilization
215
- averageUtilization: 70
216
- ```
217
-
218
- ## CI/CD Pipelines
219
-
220
- ### GitHub Actions (Modern, Integrated)
221
-
222
- ```yaml
223
- name: CI/CD Pipeline
224
-
225
- on:
226
- push:
227
- branches: [main]
228
- pull_request:
229
- branches: [main]
230
-
231
- jobs:
232
- test:
233
- runs-on: ubuntu-latest
234
- steps:
235
- - uses: actions/checkout@v3
236
-
237
- - name: Setup Node.js
238
- uses: actions/setup-node@v3
239
- with:
240
- node-version: '20'
241
- cache: 'npm'
242
-
243
- - name: Install dependencies
244
- run: npm ci
245
-
246
- - name: Run linter
247
- run: npm run lint
248
-
249
- - name: Run tests
250
- run: npm run test:ci
251
-
252
- - name: Upload coverage
253
- uses: codecov/codecov-action@v3
254
-
255
- security:
256
- runs-on: ubuntu-latest
257
- steps:
258
- - uses: actions/checkout@v3
259
-
260
- - name: Run Snyk scan
261
- uses: snyk/actions/node@master
262
- env:
263
- SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
264
-
265
- - name: Container scan
266
- run: |
267
- docker build -t myapp:${{ github.sha }} .
268
- docker scan myapp:${{ github.sha }}
269
-
270
- deploy:
271
- needs: [test, security]
272
- runs-on: ubuntu-latest
273
- if: github.ref == 'refs/heads/main'
274
- steps:
275
- - uses: actions/checkout@v3
276
-
277
- - name: Build and push Docker image
278
- run: |
279
- echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin
280
- docker build -t ghcr.io/${{ github.repository }}:${{ github.sha }} .
281
- docker push ghcr.io/${{ github.repository }}:${{ github.sha }}
282
-
283
- - name: Deploy to Kubernetes
284
- run: |
285
- kubectl set image deployment/api api=ghcr.io/${{ github.repository }}:${{ github.sha }}
286
- kubectl rollout status deployment/api
287
- ```
288
-
289
- ## Monitoring & Observability
290
-
291
- ### Three Pillars of Observability
292
-
293
- **1. Metrics (Prometheus + Grafana)**
294
-
295
- ```typescript
296
- import { Counter, Histogram, register } from 'prom-client';
297
-
298
- // Request counter
299
- const httpRequestTotal = new Counter({
300
- name: 'http_requests_total',
301
- help: 'Total HTTP requests',
302
- labelNames: ['method', 'route', 'status'],
303
- });
304
-
305
- // Response time histogram
306
- const httpRequestDuration = new Histogram({
307
- name: 'http_request_duration_seconds',
308
- help: 'HTTP request duration',
309
- labelNames: ['method', 'route'],
310
- buckets: [0.1, 0.5, 1, 2, 5],
311
- });
312
-
313
- // Middleware to track metrics
314
- app.use((req, res, next) => {
315
- const start = Date.now();
316
-
317
- res.on('finish', () => {
318
- const duration = (Date.now() - start) / 1000;
319
- httpRequestTotal.inc({ method: req.method, route: req.route?.path, status: res.statusCode });
320
- httpRequestDuration.observe({ method: req.method, route: req.route?.path }, duration);
321
- });
322
-
323
- next();
324
- });
325
-
326
- // Metrics endpoint
327
- app.get('/metrics', async (req, res) => {
328
- res.set('Content-Type', register.contentType);
329
- res.end(await register.metrics());
330
- });
331
- ```
332
-
333
- **2. Logs (ELK Stack - Elasticsearch, Logstash, Kibana)**
334
-
335
- ```typescript
336
- import winston from 'winston';
337
- import { ElasticsearchTransport } from 'winston-elasticsearch';
338
-
339
- const logger = winston.createLogger({
340
- level: 'info',
341
- format: winston.format.json(),
342
- transports: [
343
- new winston.transports.Console(),
344
- new ElasticsearchTransport({
345
- level: 'info',
346
- clientOpts: { node: 'http://localhost:9200' },
347
- index: 'logs',
348
- }),
349
- ],
350
- });
351
-
352
- // Structured logging
353
- logger.info('User created', {
354
- userId: user.id,
355
- email: user.email,
356
- ipAddress: req.ip,
357
- userAgent: req.headers['user-agent'],
358
- });
359
- ```
360
-
361
- **3. Traces (Jaeger/OpenTelemetry)**
362
-
363
- ```typescript
364
- import { NodeSDK } from '@opentelemetry/sdk-node';
365
- import { JaegerExporter } from '@opentelemetry/exporter-jaeger';
366
-
367
- const sdk = new NodeSDK({
368
- traceExporter: new JaegerExporter({
369
- endpoint: 'http://localhost:14268/api/traces',
370
- }),
371
- serviceName: 'api-service',
372
- });
373
-
374
- sdk.start();
375
-
376
- // Traces automatically captured for HTTP requests, database queries, etc.
377
- ```
378
-
379
- ### Health Checks
380
-
381
- ```typescript
382
- // Liveness probe - Is the app running?
383
- app.get('/health/liveness', (req, res) => {
384
- res.status(200).json({ status: 'ok', timestamp: Date.now() });
385
- });
386
-
387
- // Readiness probe - Is the app ready to serve traffic?
388
- app.get('/health/readiness', async (req, res) => {
389
- const checks = {
390
- database: await checkDatabase(),
391
- redis: await checkRedis(),
392
- externalAPI: await checkExternalAPI(),
393
- };
394
-
395
- const isReady = Object.values(checks).every(Boolean);
396
- res.status(isReady ? 200 : 503).json({
397
- status: isReady ? 'ready' : 'not ready',
398
- checks,
399
- });
400
- });
401
-
402
- async function checkDatabase() {
403
- try {
404
- await db.query('SELECT 1');
405
- return true;
406
- } catch {
407
- return false;
408
- }
409
- }
410
- ```
411
-
412
- ## Secrets Management
413
-
414
- ### HashiCorp Vault
415
-
416
- ```bash
417
- # Store secret
418
- vault kv put secret/myapp/db password=super-secret
419
-
420
- # Retrieve secret
421
- vault kv get -field=password secret/myapp/db
422
- ```
423
-
424
- ### Kubernetes Secrets
425
-
426
- ```yaml
427
- apiVersion: v1
428
- kind: Secret
429
- version: "1.0.0"
430
- type: Opaque
431
- stringData:
432
- url: postgresql://user:pass@host:5432/db
433
- ---
434
- # Reference in deployment
435
- env:
436
- - name: DATABASE_URL
437
- valueFrom:
438
- secretKeyRef:
439
- name: db-secret
440
- key: url
441
- ```
442
-
443
- ## Infrastructure as Code (Terraform)
444
-
445
- ```hcl
446
- # main.tf
447
- resource "aws_db_instance" "main" {
448
- identifier = "myapp-db"
449
- engine = "postgres"
450
- engine_version = "15.3"
451
- instance_class = "db.t3.micro"
452
- allocated_storage = 20
453
- username = "admin"
454
- password = var.db_password
455
-
456
- backup_retention_period = 7
457
- skip_final_snapshot = false
458
- }
459
-
460
- resource "aws_elasticache_cluster" "redis" {
461
- cluster_id = "myapp-redis"
462
- engine = "redis"
463
- node_type = "cache.t3.micro"
464
- num_cache_nodes = 1
465
- parameter_group_name = "default.redis7"
466
- }
467
- ```
468
-
469
- ## DevOps Checklist
470
-
471
- - [ ] CI/CD pipeline configured (GitHub Actions/GitLab CI/Jenkins)
472
- - [ ] Docker multi-stage builds implemented
473
- - [ ] Kubernetes deployment manifests created
474
- - [ ] Blue-green or canary deployment strategy
475
- - [ ] Feature flags configured (LaunchDarkly/Unleash)
476
- - [ ] Health checks (liveness + readiness probes)
477
- - [ ] Monitoring: Prometheus + Grafana
478
- - [ ] Logging: ELK Stack or similar
479
- - [ ] Distributed tracing: Jaeger/OpenTelemetry
480
- - [ ] Secrets management (Vault/AWS Secrets Manager)
481
- - [ ] Infrastructure as Code (Terraform/CloudFormation)
482
- - [ ] Autoscaling configured
483
- - [ ] Backup and disaster recovery plan
484
-
485
- ## Resources
486
-
487
- - **Kubernetes:** https://kubernetes.io/docs/
488
- - **Docker:** https://docs.docker.com/
489
- - **Prometheus:** https://prometheus.io/docs/
490
- - **OpenTelemetry:** https://opentelemetry.io/docs/
491
- - **Terraform:** https://www.terraform.io/docs/