@haposoft/cafekit 0.16.0-rc.8 → 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 (297) 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 +50 -0
  4. package/bin/__tests__/codex-native.test.js +1882 -70
  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 +1735 -98
  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 +12 -7
  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 +10 -3
  46. package/src/claude/hooks/__tests__/state.test.js +5 -0
  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 +2 -2
  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/workflow-policy.cjs +1 -1
  89. package/src/claude/settings/settings.json +16 -0
  90. package/src/claude/skills/agent-browser/SKILL.md +1 -1
  91. package/src/claude/skills/ai-multimodal/SKILL.md +1 -1
  92. package/src/claude/skills/brainstorm/SKILL.md +193 -172
  93. package/src/claude/skills/brainstorm/references/question-framework.md +105 -167
  94. package/src/claude/skills/chrome-devtools/SKILL.md +1 -1
  95. package/src/claude/skills/code-review/SKILL.md +43 -25
  96. package/src/claude/skills/code-review/references/spec-compliance-review.md +3 -4
  97. package/src/claude/skills/code-review/references/verification-gate.md +1 -1
  98. package/src/claude/skills/debug/SKILL.md +48 -19
  99. package/src/claude/skills/delegate/SKILL.md +1 -1
  100. package/src/claude/skills/develop/SKILL.md +92 -65
  101. package/src/claude/skills/develop/references/parallel-waves.md +36 -63
  102. package/src/claude/skills/develop/references/quality-gate.md +31 -4
  103. package/src/claude/skills/develop/references/subagent-patterns.md +21 -7
  104. package/src/claude/skills/docs/SKILL.md +42 -23
  105. package/src/claude/skills/docs/references/init-workflow.md +4 -4
  106. package/src/claude/skills/docs/references/reconstruct-workflow.md +6 -6
  107. package/src/claude/skills/docs/references/standard-docs-workflow.md +6 -2
  108. package/src/claude/skills/docs/references/summarize-workflow.md +2 -2
  109. package/src/claude/skills/docs/references/update-workflow.md +9 -7
  110. package/src/claude/skills/docs/templates/requirements-as-is.md +1 -1
  111. package/src/claude/skills/docx/SKILL.md +1 -1
  112. package/src/claude/skills/git/SKILL.md +1 -1
  113. package/src/claude/skills/git/references/commit-protocols.md +1 -1
  114. package/src/claude/skills/git/references/finish-branch.md +1 -1
  115. package/src/claude/skills/hotfix/SKILL.md +159 -170
  116. package/src/claude/skills/hotfix/references/diagnosis-protocol.md +14 -9
  117. package/src/claude/skills/hotfix/references/parallel-patterns.md +27 -13
  118. package/src/claude/skills/hotfix/references/prevention-gate.md +5 -0
  119. package/src/claude/skills/hotfix/references/review-cycle.md +21 -15
  120. package/src/claude/skills/hotfix/references/workflow-specialized.md +53 -21
  121. package/src/claude/skills/inspect/SKILL.md +55 -46
  122. package/src/claude/skills/inspect/references/internal-inspection.md +21 -5
  123. package/src/claude/skills/loop/SKILL.md +114 -0
  124. package/src/claude/skills/loop/references/bounded-loop-protocol.md +104 -0
  125. package/src/claude/skills/loop/references/metric-and-guard-contract.md +76 -0
  126. package/src/claude/skills/pdf/SKILL.md +1 -1
  127. package/src/claude/skills/pptx/SKILL.md +1 -1
  128. package/src/claude/skills/question/SKILL.md +16 -13
  129. package/src/claude/skills/research/SKILL.md +70 -43
  130. package/src/claude/skills/route/SKILL.md +94 -0
  131. package/src/claude/skills/route/references/agent-timing.md +46 -0
  132. package/src/claude/skills/route/references/chaining-patterns.md +53 -0
  133. package/src/claude/skills/route/references/task-taxonomy.md +48 -0
  134. package/src/claude/skills/specs/SKILL.md +41 -60
  135. package/src/claude/skills/specs/references/review.md +11 -8
  136. package/src/claude/skills/specs/references/templates.md +34 -18
  137. package/src/claude/skills/specs/templates/requirements-init.md +1 -1
  138. package/src/claude/skills/specs/templates/research.md +2 -2
  139. package/src/claude/skills/sync/SKILL.md +6 -6
  140. package/src/claude/skills/sync/references/sync-protocols.md +1 -1
  141. package/src/claude/skills/test/SKILL.md +120 -120
  142. package/src/claude/skills/test/references/execution-strategy.md +208 -361
  143. package/src/claude/skills/test/references/failure-triage.md +55 -121
  144. package/src/claude/skills/test/references/test-memory.md +20 -34
  145. package/src/claude/skills/ui-ux-pro-max/SKILL.md +1 -1
  146. package/src/claude/skills/web-testing/SKILL.md +1 -1
  147. package/src/claude/skills/xlsx/SKILL.md +1 -1
  148. package/src/claude/status.cjs +135 -33
  149. package/src/codex/AGENTS.md +14 -4
  150. package/src/codex/hooks/docs-sync.cjs +8 -3
  151. package/src/codex/hooks/lib/hook-context.cjs +18 -4
  152. package/src/codex/hooks/rules.cjs +29 -1
  153. package/src/codex/hooks/secret-output-guardrail.cjs +30 -0
  154. package/src/codex/hooks/spec-gate.cjs +3 -8
  155. package/src/codex/hooks/spec-state.cjs +2 -1
  156. package/src/codex/hooks.json +5 -0
  157. package/src/codex/runtime.json +2 -0
  158. package/src/common/.env.example +1 -1
  159. package/src/claude/skills/backend-development/SKILL.md +0 -101
  160. package/src/claude/skills/backend-development/references/backend-api-design.md +0 -495
  161. package/src/claude/skills/backend-development/references/backend-architecture.md +0 -454
  162. package/src/claude/skills/backend-development/references/backend-authentication.md +0 -338
  163. package/src/claude/skills/backend-development/references/backend-code-quality.md +0 -659
  164. package/src/claude/skills/backend-development/references/backend-debugging.md +0 -904
  165. package/src/claude/skills/backend-development/references/backend-devops.md +0 -491
  166. package/src/claude/skills/backend-development/references/backend-mindset.md +0 -387
  167. package/src/claude/skills/backend-development/references/backend-performance.md +0 -397
  168. package/src/claude/skills/backend-development/references/backend-security.md +0 -342
  169. package/src/claude/skills/backend-development/references/backend-technologies.md +0 -256
  170. package/src/claude/skills/backend-development/references/backend-testing.md +0 -429
  171. package/src/claude/skills/devops/.env.example +0 -76
  172. package/src/claude/skills/devops/SKILL.md +0 -102
  173. package/src/claude/skills/devops/references/browser-rendering.md +0 -305
  174. package/src/claude/skills/devops/references/cloudflare-d1-kv.md +0 -123
  175. package/src/claude/skills/devops/references/cloudflare-platform.md +0 -271
  176. package/src/claude/skills/devops/references/cloudflare-r2-storage.md +0 -280
  177. package/src/claude/skills/devops/references/cloudflare-workers-advanced.md +0 -312
  178. package/src/claude/skills/devops/references/cloudflare-workers-apis.md +0 -309
  179. package/src/claude/skills/devops/references/cloudflare-workers-basics.md +0 -418
  180. package/src/claude/skills/devops/references/docker-basics.md +0 -297
  181. package/src/claude/skills/devops/references/docker-compose.md +0 -292
  182. package/src/claude/skills/devops/references/gcloud-platform.md +0 -297
  183. package/src/claude/skills/devops/references/gcloud-services.md +0 -304
  184. package/src/claude/skills/devops/references/kubernetes-basics.md +0 -95
  185. package/src/claude/skills/devops/references/kubernetes-helm-advanced.md +0 -70
  186. package/src/claude/skills/devops/references/kubernetes-helm.md +0 -81
  187. package/src/claude/skills/devops/references/kubernetes-kubectl.md +0 -74
  188. package/src/claude/skills/devops/references/kubernetes-security-advanced.md +0 -94
  189. package/src/claude/skills/devops/references/kubernetes-security.md +0 -89
  190. package/src/claude/skills/devops/references/kubernetes-troubleshooting-advanced.md +0 -74
  191. package/src/claude/skills/devops/references/kubernetes-troubleshooting.md +0 -49
  192. package/src/claude/skills/devops/references/kubernetes-workflows-advanced.md +0 -75
  193. package/src/claude/skills/devops/references/kubernetes-workflows.md +0 -76
  194. package/src/claude/skills/devops/scripts/cloudflare_deploy.py +0 -269
  195. package/src/claude/skills/devops/scripts/docker_optimize.py +0 -332
  196. package/src/claude/skills/devops/scripts/requirements.txt +0 -20
  197. package/src/claude/skills/devops/scripts/tests/requirements.txt +0 -3
  198. package/src/claude/skills/devops/scripts/tests/test_cloudflare_deploy.py +0 -285
  199. package/src/claude/skills/devops/scripts/tests/test_docker_optimize.py +0 -436
  200. package/src/claude/skills/frontend-design/SKILL.md +0 -135
  201. package/src/claude/skills/frontend-design/references/ai-multimodal-overview.md +0 -165
  202. package/src/claude/skills/frontend-design/references/analysis-best-practices.md +0 -80
  203. package/src/claude/skills/frontend-design/references/analysis-prompts.md +0 -141
  204. package/src/claude/skills/frontend-design/references/analysis-techniques.md +0 -118
  205. package/src/claude/skills/frontend-design/references/animejs.md +0 -396
  206. package/src/claude/skills/frontend-design/references/anti-slop-rules.md +0 -103
  207. package/src/claude/skills/frontend-design/references/asset-generation.md +0 -337
  208. package/src/claude/skills/frontend-design/references/bento-motion-engine.md +0 -142
  209. package/src/claude/skills/frontend-design/references/design-extraction-overview.md +0 -71
  210. package/src/claude/skills/frontend-design/references/extraction-best-practices.md +0 -141
  211. package/src/claude/skills/frontend-design/references/extraction-output-templates.md +0 -162
  212. package/src/claude/skills/frontend-design/references/extraction-prompts.md +0 -127
  213. package/src/claude/skills/frontend-design/references/magicui-components.md +0 -129
  214. package/src/claude/skills/frontend-design/references/performance-guardrails.md +0 -169
  215. package/src/claude/skills/frontend-design/references/premium-design-patterns.md +0 -93
  216. package/src/claude/skills/frontend-design/references/redesign-audit-checklist.md +0 -114
  217. package/src/claude/skills/frontend-design/references/technical-accessibility.md +0 -119
  218. package/src/claude/skills/frontend-design/references/technical-best-practices.md +0 -97
  219. package/src/claude/skills/frontend-design/references/technical-optimization.md +0 -44
  220. package/src/claude/skills/frontend-design/references/technical-overview.md +0 -90
  221. package/src/claude/skills/frontend-design/references/technical-workflows.md +0 -150
  222. package/src/claude/skills/frontend-design/references/visual-analysis-overview.md +0 -95
  223. package/src/claude/skills/frontend-design/references/workflow-3d.md +0 -102
  224. package/src/claude/skills/frontend-design/references/workflow-describe.md +0 -87
  225. package/src/claude/skills/frontend-design/references/workflow-immersive.md +0 -87
  226. package/src/claude/skills/frontend-design/references/workflow-quick.md +0 -57
  227. package/src/claude/skills/frontend-design/references/workflow-screenshot.md +0 -63
  228. package/src/claude/skills/frontend-design/references/workflow-video.md +0 -74
  229. package/src/claude/skills/frontend-development/SKILL.md +0 -406
  230. package/src/claude/skills/frontend-development/resources/common-patterns.md +0 -331
  231. package/src/claude/skills/frontend-development/resources/complete-examples.md +0 -872
  232. package/src/claude/skills/frontend-development/resources/component-patterns.md +0 -502
  233. package/src/claude/skills/frontend-development/resources/data-fetching.md +0 -767
  234. package/src/claude/skills/frontend-development/resources/file-organization.md +0 -502
  235. package/src/claude/skills/frontend-development/resources/loading-and-error-states.md +0 -501
  236. package/src/claude/skills/frontend-development/resources/performance.md +0 -406
  237. package/src/claude/skills/frontend-development/resources/routing-guide.md +0 -364
  238. package/src/claude/skills/frontend-development/resources/styling-guide.md +0 -428
  239. package/src/claude/skills/frontend-development/resources/typescript-standards.md +0 -418
  240. package/src/claude/skills/mobile-development/SKILL.md +0 -218
  241. package/src/claude/skills/mobile-development/references/mobile-android.md +0 -604
  242. package/src/claude/skills/mobile-development/references/mobile-best-practices.md +0 -544
  243. package/src/claude/skills/mobile-development/references/mobile-debugging.md +0 -1089
  244. package/src/claude/skills/mobile-development/references/mobile-frameworks.md +0 -465
  245. package/src/claude/skills/mobile-development/references/mobile-ios.md +0 -496
  246. package/src/claude/skills/mobile-development/references/mobile-mindset.md +0 -542
  247. package/src/claude/skills/react-best-practices/AGENTS.md +0 -2249
  248. package/src/claude/skills/react-best-practices/README.md +0 -123
  249. package/src/claude/skills/react-best-practices/SKILL.md +0 -128
  250. package/src/claude/skills/react-best-practices/metadata.json +0 -15
  251. package/src/claude/skills/react-best-practices/rules/_sections.md +0 -46
  252. package/src/claude/skills/react-best-practices/rules/_template.md +0 -28
  253. package/src/claude/skills/react-best-practices/rules/advanced-event-handler-refs.md +0 -55
  254. package/src/claude/skills/react-best-practices/rules/advanced-use-latest.md +0 -49
  255. package/src/claude/skills/react-best-practices/rules/async-api-routes.md +0 -38
  256. package/src/claude/skills/react-best-practices/rules/async-defer-await.md +0 -80
  257. package/src/claude/skills/react-best-practices/rules/async-dependencies.md +0 -36
  258. package/src/claude/skills/react-best-practices/rules/async-parallel.md +0 -28
  259. package/src/claude/skills/react-best-practices/rules/async-suspense-boundaries.md +0 -99
  260. package/src/claude/skills/react-best-practices/rules/bundle-barrel-imports.md +0 -59
  261. package/src/claude/skills/react-best-practices/rules/bundle-conditional.md +0 -31
  262. package/src/claude/skills/react-best-practices/rules/bundle-defer-third-party.md +0 -49
  263. package/src/claude/skills/react-best-practices/rules/bundle-dynamic-imports.md +0 -35
  264. package/src/claude/skills/react-best-practices/rules/bundle-preload.md +0 -50
  265. package/src/claude/skills/react-best-practices/rules/client-event-listeners.md +0 -74
  266. package/src/claude/skills/react-best-practices/rules/client-swr-dedup.md +0 -56
  267. package/src/claude/skills/react-best-practices/rules/js-batch-dom-css.md +0 -82
  268. package/src/claude/skills/react-best-practices/rules/js-cache-function-results.md +0 -80
  269. package/src/claude/skills/react-best-practices/rules/js-cache-property-access.md +0 -28
  270. package/src/claude/skills/react-best-practices/rules/js-cache-storage.md +0 -70
  271. package/src/claude/skills/react-best-practices/rules/js-combine-iterations.md +0 -32
  272. package/src/claude/skills/react-best-practices/rules/js-early-exit.md +0 -50
  273. package/src/claude/skills/react-best-practices/rules/js-hoist-regexp.md +0 -45
  274. package/src/claude/skills/react-best-practices/rules/js-index-maps.md +0 -37
  275. package/src/claude/skills/react-best-practices/rules/js-length-check-first.md +0 -49
  276. package/src/claude/skills/react-best-practices/rules/js-min-max-loop.md +0 -82
  277. package/src/claude/skills/react-best-practices/rules/js-set-map-lookups.md +0 -24
  278. package/src/claude/skills/react-best-practices/rules/js-tosorted-immutable.md +0 -57
  279. package/src/claude/skills/react-best-practices/rules/rendering-activity.md +0 -26
  280. package/src/claude/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
  281. package/src/claude/skills/react-best-practices/rules/rendering-conditional-render.md +0 -40
  282. package/src/claude/skills/react-best-practices/rules/rendering-content-visibility.md +0 -38
  283. package/src/claude/skills/react-best-practices/rules/rendering-hoist-jsx.md +0 -46
  284. package/src/claude/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
  285. package/src/claude/skills/react-best-practices/rules/rendering-svg-precision.md +0 -28
  286. package/src/claude/skills/react-best-practices/rules/rerender-defer-reads.md +0 -39
  287. package/src/claude/skills/react-best-practices/rules/rerender-dependencies.md +0 -45
  288. package/src/claude/skills/react-best-practices/rules/rerender-derived-state.md +0 -29
  289. package/src/claude/skills/react-best-practices/rules/rerender-functional-setstate.md +0 -74
  290. package/src/claude/skills/react-best-practices/rules/rerender-lazy-state-init.md +0 -58
  291. package/src/claude/skills/react-best-practices/rules/rerender-memo.md +0 -44
  292. package/src/claude/skills/react-best-practices/rules/rerender-transitions.md +0 -40
  293. package/src/claude/skills/react-best-practices/rules/server-after-nonblocking.md +0 -73
  294. package/src/claude/skills/react-best-practices/rules/server-cache-lru.md +0 -41
  295. package/src/claude/skills/react-best-practices/rules/server-cache-react.md +0 -26
  296. package/src/claude/skills/react-best-practices/rules/server-parallel-fetching.md +0 -79
  297. 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/