@rune-kit/rune 2.10.0 → 2.12.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 (240) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +65 -6
  3. package/commands/rune.md +168 -168
  4. package/compiler/__tests__/detect-invariants.test.js +136 -0
  5. package/compiler/__tests__/doctor-mesh.test.js +229 -0
  6. package/compiler/__tests__/hook-dispatch.test.js +91 -0
  7. package/compiler/__tests__/hooks-antigravity.test.js +118 -0
  8. package/compiler/__tests__/hooks-cursor.test.js +139 -0
  9. package/compiler/__tests__/hooks-install.test.js +305 -0
  10. package/compiler/__tests__/hooks-merge.test.js +204 -0
  11. package/compiler/__tests__/hooks-tiers.test.js +519 -0
  12. package/compiler/__tests__/hooks-windsurf.test.js +115 -0
  13. package/compiler/__tests__/inject-claude-md.test.js +152 -0
  14. package/compiler/__tests__/load-invariants.test.js +408 -0
  15. package/compiler/__tests__/onboard-invariants.test.js +240 -0
  16. package/compiler/adapters/hooks/antigravity.js +140 -0
  17. package/compiler/adapters/hooks/claude.js +166 -0
  18. package/compiler/adapters/hooks/cursor.js +191 -0
  19. package/compiler/adapters/hooks/index.js +82 -0
  20. package/compiler/adapters/hooks/tier-emitter.js +182 -0
  21. package/compiler/adapters/hooks/windsurf.js +202 -0
  22. package/compiler/bin/rune.js +196 -6
  23. package/compiler/commands/hook-dispatch.js +87 -0
  24. package/compiler/commands/hooks/install.js +120 -0
  25. package/compiler/commands/hooks/merge.js +211 -0
  26. package/compiler/commands/hooks/presets.js +116 -0
  27. package/compiler/commands/hooks/status.js +112 -0
  28. package/compiler/commands/hooks/tiers.js +221 -0
  29. package/compiler/commands/hooks/uninstall.js +94 -0
  30. package/compiler/doctor.js +236 -0
  31. package/contexts/dev.md +34 -34
  32. package/contexts/research.md +43 -43
  33. package/contexts/review.md +55 -55
  34. package/extensions/ai-ml/PACK.md +88 -88
  35. package/extensions/ai-ml/skills/ai-agents.md +172 -172
  36. package/extensions/ai-ml/skills/code-sandbox.md +187 -187
  37. package/extensions/ai-ml/skills/deep-research.md +146 -146
  38. package/extensions/ai-ml/skills/embedding-search.md +66 -66
  39. package/extensions/ai-ml/skills/fine-tuning-guide.md +74 -74
  40. package/extensions/ai-ml/skills/llm-architect.md +125 -125
  41. package/extensions/ai-ml/skills/llm-integration.md +64 -64
  42. package/extensions/ai-ml/skills/prompt-patterns.md +72 -72
  43. package/extensions/ai-ml/skills/rag-patterns.md +66 -66
  44. package/extensions/ai-ml/skills/web-extraction.md +114 -114
  45. package/extensions/analytics/PACK.md +92 -92
  46. package/extensions/analytics/skills/ab-testing.md +72 -72
  47. package/extensions/analytics/skills/dashboard-patterns.md +83 -83
  48. package/extensions/analytics/skills/data-validation.md +68 -68
  49. package/extensions/analytics/skills/funnel-analysis.md +81 -81
  50. package/extensions/analytics/skills/sql-patterns.md +57 -57
  51. package/extensions/analytics/skills/statistical-analysis.md +79 -79
  52. package/extensions/analytics/skills/tracking-setup.md +71 -71
  53. package/extensions/backend/PACK.md +104 -104
  54. package/extensions/backend/skills/api-patterns.md +84 -84
  55. package/extensions/backend/skills/async-pipeline.md +193 -193
  56. package/extensions/backend/skills/auth-patterns.md +97 -97
  57. package/extensions/backend/skills/background-jobs.md +133 -133
  58. package/extensions/backend/skills/caching-patterns.md +108 -108
  59. package/extensions/backend/skills/cli-generation.md +133 -133
  60. package/extensions/backend/skills/database-patterns.md +87 -87
  61. package/extensions/backend/skills/middleware-patterns.md +104 -104
  62. package/extensions/chrome-ext/PACK.md +93 -93
  63. package/extensions/chrome-ext/skills/cws-preflight.md +143 -143
  64. package/extensions/chrome-ext/skills/cws-publish.md +104 -104
  65. package/extensions/chrome-ext/skills/ext-ai-integration.md +251 -251
  66. package/extensions/chrome-ext/skills/ext-messaging.md +139 -139
  67. package/extensions/chrome-ext/skills/ext-storage.md +133 -133
  68. package/extensions/chrome-ext/skills/mv3-scaffold.md +164 -164
  69. package/extensions/content/PACK.md +96 -96
  70. package/extensions/content/skills/blog-patterns.md +88 -88
  71. package/extensions/content/skills/cms-integration.md +131 -131
  72. package/extensions/content/skills/content-scoring.md +107 -107
  73. package/extensions/content/skills/i18n.md +83 -83
  74. package/extensions/content/skills/mdx-authoring.md +137 -137
  75. package/extensions/content/skills/reference.md +1014 -1014
  76. package/extensions/content/skills/seo-patterns.md +67 -67
  77. package/extensions/content/skills/video-repurpose.md +153 -153
  78. package/extensions/devops/PACK.md +101 -101
  79. package/extensions/devops/skills/chaos-testing.md +67 -67
  80. package/extensions/devops/skills/ci-cd.md +75 -75
  81. package/extensions/devops/skills/docker.md +58 -58
  82. package/extensions/devops/skills/edge-serverless.md +163 -163
  83. package/extensions/devops/skills/infra-as-code.md +158 -158
  84. package/extensions/devops/skills/kubernetes.md +110 -110
  85. package/extensions/devops/skills/monitoring.md +57 -57
  86. package/extensions/devops/skills/server-setup.md +64 -64
  87. package/extensions/devops/skills/ssl-domain.md +42 -42
  88. package/extensions/ecommerce/PACK.md +116 -116
  89. package/extensions/ecommerce/skills/cart-system.md +79 -79
  90. package/extensions/ecommerce/skills/inventory-mgmt.md +102 -102
  91. package/extensions/ecommerce/skills/order-management.md +126 -126
  92. package/extensions/ecommerce/skills/payment-integration.md +472 -472
  93. package/extensions/ecommerce/skills/shopify-dev.md +69 -69
  94. package/extensions/ecommerce/skills/subscription-billing.md +93 -93
  95. package/extensions/ecommerce/skills/tax-compliance.md +117 -117
  96. package/extensions/gamedev/PACK.md +142 -142
  97. package/extensions/gamedev/skills/asset-pipeline.md +74 -74
  98. package/extensions/gamedev/skills/audio-system.md +129 -129
  99. package/extensions/gamedev/skills/camera-system.md +87 -87
  100. package/extensions/gamedev/skills/ecs.md +98 -98
  101. package/extensions/gamedev/skills/game-loops.md +72 -72
  102. package/extensions/gamedev/skills/input-system.md +199 -199
  103. package/extensions/gamedev/skills/multiplayer.md +180 -180
  104. package/extensions/gamedev/skills/particles.md +105 -105
  105. package/extensions/gamedev/skills/physics-engine.md +89 -89
  106. package/extensions/gamedev/skills/scene-management.md +146 -146
  107. package/extensions/gamedev/skills/threejs-patterns.md +90 -90
  108. package/extensions/gamedev/skills/webgl.md +71 -71
  109. package/extensions/mobile/PACK.md +106 -106
  110. package/extensions/mobile/skills/app-store-connect.md +152 -152
  111. package/extensions/mobile/skills/app-store-prep.md +66 -66
  112. package/extensions/mobile/skills/deep-linking.md +109 -109
  113. package/extensions/mobile/skills/flutter.md +60 -60
  114. package/extensions/mobile/skills/ios-build-pipeline.md +142 -142
  115. package/extensions/mobile/skills/native-bridge.md +66 -66
  116. package/extensions/mobile/skills/ota-updates.md +97 -97
  117. package/extensions/mobile/skills/push-notifications.md +111 -111
  118. package/extensions/mobile/skills/react-native.md +82 -82
  119. package/extensions/saas/PACK.md +116 -116
  120. package/extensions/saas/skills/billing-integration.md +200 -200
  121. package/extensions/saas/skills/feature-flags.md +130 -130
  122. package/extensions/saas/skills/multi-tenant.md +103 -103
  123. package/extensions/saas/skills/onboarding-flow.md +139 -139
  124. package/extensions/saas/skills/subscription-flow.md +95 -95
  125. package/extensions/saas/skills/team-management.md +144 -144
  126. package/extensions/security/PACK.md +99 -99
  127. package/extensions/security/skills/api-security.md +140 -140
  128. package/extensions/security/skills/compliance.md +68 -68
  129. package/extensions/security/skills/owasp-audit.md +64 -64
  130. package/extensions/security/skills/pentest-patterns.md +77 -77
  131. package/extensions/security/skills/secret-mgmt.md +65 -65
  132. package/extensions/security/skills/supply-chain.md +65 -65
  133. package/extensions/trading/PACK.md +80 -80
  134. package/extensions/trading/skills/chart-components.md +55 -55
  135. package/extensions/trading/skills/experiment-loop.md +125 -125
  136. package/extensions/trading/skills/fintech-patterns.md +47 -47
  137. package/extensions/trading/skills/indicator-library.md +58 -58
  138. package/extensions/trading/skills/quant-analysis.md +111 -111
  139. package/extensions/trading/skills/realtime-data.md +58 -58
  140. package/extensions/trading/skills/trade-logic.md +104 -104
  141. package/extensions/ui/PACK.md +130 -130
  142. package/extensions/ui/skills/a11y-audit.md +91 -91
  143. package/extensions/ui/skills/animation-patterns.md +127 -127
  144. package/extensions/ui/skills/component-patterns.md +100 -100
  145. package/extensions/ui/skills/design-decision.md +108 -108
  146. package/extensions/ui/skills/design-system.md +68 -68
  147. package/extensions/ui/skills/landing-patterns.md +155 -155
  148. package/extensions/ui/skills/palette-picker.md +173 -173
  149. package/extensions/ui/skills/react-health.md +90 -90
  150. package/extensions/ui/skills/type-system.md +125 -125
  151. package/extensions/ui/skills/web-vitals.md +153 -153
  152. package/extensions/zalo/PACK.md +145 -145
  153. package/extensions/zalo/skills/zalo-oa-mcp.md +317 -317
  154. package/extensions/zalo/skills/zalo-oa-messaging.md +429 -429
  155. package/extensions/zalo/skills/zalo-oa-setup.md +236 -236
  156. package/extensions/zalo/skills/zalo-oa-webhook.md +189 -189
  157. package/extensions/zalo/skills/zalo-personal-messaging.md +194 -194
  158. package/extensions/zalo/skills/zalo-personal-setup.md +153 -153
  159. package/extensions/zalo/skills/zalo-rate-guard.md +219 -219
  160. package/hooks/auto-format/index.cjs +48 -48
  161. package/hooks/hooks.json +111 -111
  162. package/hooks/post-session-reflect/index.cjs +189 -189
  163. package/hooks/pre-compact/index.cjs +95 -95
  164. package/hooks/run-hook.cmd +1 -1
  165. package/hooks/secrets-scan/index.cjs +100 -100
  166. package/hooks/session-start/index.cjs +71 -71
  167. package/hooks/typecheck/index.cjs +65 -65
  168. package/package.json +63 -63
  169. package/references/ui-pro-max-data/LICENSE-UI-PRO-MAX +21 -21
  170. package/references/ui-pro-max-data/charts.csv +26 -26
  171. package/references/ui-pro-max-data/colors.csv +161 -161
  172. package/references/ui-pro-max-data/styles.csv +68 -68
  173. package/references/ui-pro-max-data/typography.csv +74 -74
  174. package/references/ui-pro-max-data/ui-reasoning.csv +162 -162
  175. package/references/ui-pro-max-data/ux-guidelines.csv +99 -99
  176. package/skills/adversary/SKILL.md +283 -283
  177. package/skills/asset-creator/SKILL.md +157 -157
  178. package/skills/audit/SKILL.md +147 -2
  179. package/skills/autopsy/SKILL.md +335 -335
  180. package/skills/ba/SKILL.md +85 -1
  181. package/skills/brainstorm/SKILL.md +380 -342
  182. package/skills/browser-pilot/SKILL.md +169 -168
  183. package/skills/constraint-check/SKILL.md +165 -165
  184. package/skills/context-engine/SKILL.md +408 -404
  185. package/skills/cook/SKILL.md +917 -863
  186. package/skills/db/SKILL.md +273 -273
  187. package/skills/debug/SKILL.md +465 -465
  188. package/skills/dependency-doctor/SKILL.md +265 -235
  189. package/skills/deploy/SKILL.md +274 -231
  190. package/skills/design/DESIGN-REFERENCE.md +365 -365
  191. package/skills/design/SKILL.md +590 -589
  192. package/skills/doc-processor/SKILL.md +254 -254
  193. package/skills/docs/SKILL.md +374 -374
  194. package/skills/docs-seeker/SKILL.md +178 -177
  195. package/skills/fix/SKILL.md +332 -330
  196. package/skills/git/SKILL.md +339 -339
  197. package/skills/hallucination-guard/SKILL.md +220 -219
  198. package/skills/incident/SKILL.md +254 -253
  199. package/skills/integrity-check/SKILL.md +169 -169
  200. package/skills/journal/SKILL.md +241 -240
  201. package/skills/launch/SKILL.md +344 -344
  202. package/skills/logic-guardian/SKILL.md +269 -251
  203. package/skills/marketing/SKILL.md +351 -289
  204. package/skills/mcp-builder/SKILL.md +425 -425
  205. package/skills/neural-memory/SKILL.md +359 -362
  206. package/skills/onboard/SKILL.md +432 -403
  207. package/skills/onboard/references/invariants-template.md +76 -0
  208. package/skills/onboard/scripts/detect-invariants.js +439 -0
  209. package/skills/onboard/scripts/inject-claude-md.js +150 -0
  210. package/skills/onboard/scripts/onboard-invariants.js +194 -0
  211. package/skills/perf/SKILL.md +347 -346
  212. package/skills/plan/SKILL.md +435 -428
  213. package/skills/preflight/SKILL.md +415 -415
  214. package/skills/problem-solver/SKILL.md +380 -284
  215. package/skills/rescue/SKILL.md +474 -474
  216. package/skills/research/SKILL.md +4 -0
  217. package/skills/retro/SKILL.md +3 -1
  218. package/skills/review/SKILL.md +614 -588
  219. package/skills/review-intake/SKILL.md +249 -249
  220. package/skills/safeguard/SKILL.md +200 -200
  221. package/skills/sast/SKILL.md +190 -190
  222. package/skills/scaffold/SKILL.md +328 -287
  223. package/skills/scope-guard/SKILL.md +183 -180
  224. package/skills/scout/SKILL.md +269 -263
  225. package/skills/sentinel/SKILL.md +384 -381
  226. package/skills/sentinel-env/SKILL.md +254 -254
  227. package/skills/sequential-thinking/SKILL.md +234 -234
  228. package/skills/session-bridge/SKILL.md +595 -543
  229. package/skills/session-bridge/scripts/load-invariants.js +397 -0
  230. package/skills/skill-forge/SKILL.md +581 -581
  231. package/skills/skill-router/SKILL.md +3 -0
  232. package/skills/slides/SKILL.md +19 -0
  233. package/skills/surgeon/SKILL.md +215 -215
  234. package/skills/team/SKILL.md +557 -537
  235. package/skills/test/SKILL.md +620 -614
  236. package/skills/trend-scout/SKILL.md +145 -145
  237. package/skills/verification/SKILL.md +334 -326
  238. package/skills/video-creator/SKILL.md +201 -201
  239. package/skills/watchdog/SKILL.md +168 -168
  240. package/skills/worktree/SKILL.md +140 -140
@@ -1,67 +1,67 @@
1
- ---
2
- name: "chaos-testing"
3
- pack: "@rune/devops"
4
- description: "Resilience testing — inject controlled failures to verify system behavior under degraded conditions. Validates circuit breakers, retry logic, graceful degradation, and recovery procedures."
5
- model: sonnet
6
- tools: [Read, Edit, Write, Grep, Glob, Bash]
7
- ---
8
-
9
- # chaos-testing
10
-
11
- Resilience testing — inject controlled failures to verify system behavior under degraded conditions. Validates circuit breakers, retry logic, graceful degradation, and recovery procedures.
12
-
13
- #### Workflow
14
-
15
- **Step 1 — Map failure points**
16
- Scan the codebase for: external API calls (HTTP clients, SDK calls), database connections, message queues, cache layers, file system operations, and third-party services. For each dependency, identify: timeout configuration, retry logic, circuit breaker presence, fallback behavior. Build a dependency map with failure modes.
17
-
18
- **Step 2 — Design chaos experiments**
19
- For each critical dependency, define experiments:
20
- - **Latency injection**: Add 2-5s delay to responses — does the UI show loading state? Do timeouts fire correctly?
21
- - **Error injection**: Return 500/503 from dependency — does the circuit breaker open? Does fallback activate?
22
- - **Partition**: Dependency becomes unreachable — does the system degrade gracefully or crash?
23
- - **Data corruption**: Invalid response format — does validation catch it?
24
-
25
- Each experiment has: hypothesis ("If Redis is down, the app serves stale cache for 5 minutes"), blast radius (which users/features affected), rollback procedure (how to stop the experiment).
26
-
27
- **Step 3 — Generate test harnesses**
28
- Emit test files that simulate each failure mode:
29
- - Mock-based chaos for unit/integration tests (intercept HTTP, inject errors)
30
- - Environment-variable-driven chaos for staging (feature flags to enable failure injection)
31
- - Health check validation (verify `/health` endpoint reports degraded state, not crash)
32
-
33
- Save experiment plan to `.rune/chaos/<date>-experiment.md`.
34
-
35
- #### Example
36
-
37
- ```typescript
38
- // Chaos test: Redis connection failure
39
- describe('Chaos: Redis unavailable', () => {
40
- beforeEach(() => {
41
- // Simulate Redis connection refused
42
- jest.spyOn(redisClient, 'get').mockRejectedValue(
43
- new Error('ECONNREFUSED 127.0.0.1:6379')
44
- );
45
- });
46
-
47
- it('falls back to database when cache is down', async () => {
48
- const result = await getUserProfile('user-123');
49
- expect(result).toBeDefined(); // still works
50
- expect(dbClient.query).toHaveBeenCalled(); // used DB fallback
51
- });
52
-
53
- it('reports degraded health status', async () => {
54
- const health = await request(app).get('/health');
55
- expect(health.status).toBe(200);
56
- expect(health.body.cache).toBe('degraded');
57
- expect(health.body.overall).toBe('degraded'); // not 'down'
58
- });
59
-
60
- it('circuit breaker opens after 5 failures', async () => {
61
- for (let i = 0; i < 5; i++) await getUserProfile(`user-${i}`);
62
- // 6th call should not even attempt Redis
63
- await getUserProfile('user-6');
64
- expect(redisClient.get).toHaveBeenCalledTimes(5); // not 6
65
- });
66
- });
67
- ```
1
+ ---
2
+ name: "chaos-testing"
3
+ pack: "@rune/devops"
4
+ description: "Resilience testing — inject controlled failures to verify system behavior under degraded conditions. Validates circuit breakers, retry logic, graceful degradation, and recovery procedures."
5
+ model: sonnet
6
+ tools: [Read, Edit, Write, Grep, Glob, Bash]
7
+ ---
8
+
9
+ # chaos-testing
10
+
11
+ Resilience testing — inject controlled failures to verify system behavior under degraded conditions. Validates circuit breakers, retry logic, graceful degradation, and recovery procedures.
12
+
13
+ #### Workflow
14
+
15
+ **Step 1 — Map failure points**
16
+ Scan the codebase for: external API calls (HTTP clients, SDK calls), database connections, message queues, cache layers, file system operations, and third-party services. For each dependency, identify: timeout configuration, retry logic, circuit breaker presence, fallback behavior. Build a dependency map with failure modes.
17
+
18
+ **Step 2 — Design chaos experiments**
19
+ For each critical dependency, define experiments:
20
+ - **Latency injection**: Add 2-5s delay to responses — does the UI show loading state? Do timeouts fire correctly?
21
+ - **Error injection**: Return 500/503 from dependency — does the circuit breaker open? Does fallback activate?
22
+ - **Partition**: Dependency becomes unreachable — does the system degrade gracefully or crash?
23
+ - **Data corruption**: Invalid response format — does validation catch it?
24
+
25
+ Each experiment has: hypothesis ("If Redis is down, the app serves stale cache for 5 minutes"), blast radius (which users/features affected), rollback procedure (how to stop the experiment).
26
+
27
+ **Step 3 — Generate test harnesses**
28
+ Emit test files that simulate each failure mode:
29
+ - Mock-based chaos for unit/integration tests (intercept HTTP, inject errors)
30
+ - Environment-variable-driven chaos for staging (feature flags to enable failure injection)
31
+ - Health check validation (verify `/health` endpoint reports degraded state, not crash)
32
+
33
+ Save experiment plan to `.rune/chaos/<date>-experiment.md`.
34
+
35
+ #### Example
36
+
37
+ ```typescript
38
+ // Chaos test: Redis connection failure
39
+ describe('Chaos: Redis unavailable', () => {
40
+ beforeEach(() => {
41
+ // Simulate Redis connection refused
42
+ jest.spyOn(redisClient, 'get').mockRejectedValue(
43
+ new Error('ECONNREFUSED 127.0.0.1:6379')
44
+ );
45
+ });
46
+
47
+ it('falls back to database when cache is down', async () => {
48
+ const result = await getUserProfile('user-123');
49
+ expect(result).toBeDefined(); // still works
50
+ expect(dbClient.query).toHaveBeenCalled(); // used DB fallback
51
+ });
52
+
53
+ it('reports degraded health status', async () => {
54
+ const health = await request(app).get('/health');
55
+ expect(health.status).toBe(200);
56
+ expect(health.body.cache).toBe('degraded');
57
+ expect(health.body.overall).toBe('degraded'); // not 'down'
58
+ });
59
+
60
+ it('circuit breaker opens after 5 failures', async () => {
61
+ for (let i = 0; i < 5; i++) await getUserProfile(`user-${i}`);
62
+ // 6th call should not even attempt Redis
63
+ await getUserProfile('user-6');
64
+ expect(redisClient.get).toHaveBeenCalledTimes(5); // not 6
65
+ });
66
+ });
67
+ ```
@@ -1,75 +1,75 @@
1
- ---
2
- name: "ci-cd"
3
- pack: "@rune/devops"
4
- description: "CI/CD pipeline configuration — GitHub Actions, GitLab CI, build matrices, test parallelization, deployment gates, semantic release."
5
- model: sonnet
6
- tools: [Read, Edit, Write, Grep, Glob, Bash]
7
- ---
8
-
9
- # ci-cd
10
-
11
- CI/CD pipeline configuration — GitHub Actions, GitLab CI, build matrices, test parallelization, deployment gates, semantic release.
12
-
13
- #### Workflow
14
-
15
- **Step 1 — Detect existing pipeline**
16
- Use Glob to find `.github/workflows/*.yml`, `.gitlab-ci.yml`, `Jenkinsfile`, `bitbucket-pipelines.yml`. Read each config to understand: triggers, jobs, caching strategy, test execution, deployment steps, and secrets usage.
17
-
18
- **Step 2 — Audit pipeline efficiency**
19
- Check for: no dependency caching (slow installs every run), sequential jobs that could parallelize, missing test matrix for multiple Node/Python versions, no deployment gates (staging → production), secrets referenced without environment protection, missing artifact upload for build outputs. Flag with estimated time savings.
20
-
21
- **Step 3 — Emit optimized pipeline**
22
- Rewrite or patch the pipeline: dependency caching (npm/pnpm/pip cache), parallel job graph (lint + typecheck + test), build matrix for LTS versions, deployment gates with manual approval for production, status checks required before merge, artifact persistence for deploy stage.
23
-
24
- #### Example
25
-
26
- ```yaml
27
- # GitHub Actions — optimized Node.js pipeline
28
- name: CI/CD
29
- on:
30
- push: { branches: [main] }
31
- pull_request: { branches: [main] }
32
-
33
- jobs:
34
- quality:
35
- runs-on: ubuntu-latest
36
- strategy:
37
- matrix:
38
- check: [lint, typecheck, test]
39
- steps:
40
- - uses: actions/checkout@v4
41
- - uses: actions/setup-node@v4
42
- with: { node-version: 20, cache: 'npm' }
43
- - run: npm ci
44
- - run: npm run ${{ matrix.check }}
45
-
46
- build:
47
- needs: quality
48
- runs-on: ubuntu-latest
49
- steps:
50
- - uses: actions/checkout@v4
51
- - uses: actions/setup-node@v4
52
- with: { node-version: 20, cache: 'npm' }
53
- - run: npm ci && npm run build
54
- - uses: actions/upload-artifact@v4
55
- with: { name: dist, path: dist/ }
56
-
57
- deploy-staging:
58
- needs: build
59
- if: github.ref == 'refs/heads/main'
60
- runs-on: ubuntu-latest
61
- environment: staging
62
- steps:
63
- - uses: actions/download-artifact@v4
64
- with: { name: dist }
65
- - run: echo "Deploy to staging..."
66
-
67
- deploy-production:
68
- needs: deploy-staging
69
- runs-on: ubuntu-latest
70
- environment: production # requires manual approval
71
- steps:
72
- - uses: actions/download-artifact@v4
73
- with: { name: dist }
74
- - run: echo "Deploy to production..."
75
- ```
1
+ ---
2
+ name: "ci-cd"
3
+ pack: "@rune/devops"
4
+ description: "CI/CD pipeline configuration — GitHub Actions, GitLab CI, build matrices, test parallelization, deployment gates, semantic release."
5
+ model: sonnet
6
+ tools: [Read, Edit, Write, Grep, Glob, Bash]
7
+ ---
8
+
9
+ # ci-cd
10
+
11
+ CI/CD pipeline configuration — GitHub Actions, GitLab CI, build matrices, test parallelization, deployment gates, semantic release.
12
+
13
+ #### Workflow
14
+
15
+ **Step 1 — Detect existing pipeline**
16
+ Use Glob to find `.github/workflows/*.yml`, `.gitlab-ci.yml`, `Jenkinsfile`, `bitbucket-pipelines.yml`. Read each config to understand: triggers, jobs, caching strategy, test execution, deployment steps, and secrets usage.
17
+
18
+ **Step 2 — Audit pipeline efficiency**
19
+ Check for: no dependency caching (slow installs every run), sequential jobs that could parallelize, missing test matrix for multiple Node/Python versions, no deployment gates (staging → production), secrets referenced without environment protection, missing artifact upload for build outputs. Flag with estimated time savings.
20
+
21
+ **Step 3 — Emit optimized pipeline**
22
+ Rewrite or patch the pipeline: dependency caching (npm/pnpm/pip cache), parallel job graph (lint + typecheck + test), build matrix for LTS versions, deployment gates with manual approval for production, status checks required before merge, artifact persistence for deploy stage.
23
+
24
+ #### Example
25
+
26
+ ```yaml
27
+ # GitHub Actions — optimized Node.js pipeline
28
+ name: CI/CD
29
+ on:
30
+ push: { branches: [main] }
31
+ pull_request: { branches: [main] }
32
+
33
+ jobs:
34
+ quality:
35
+ runs-on: ubuntu-latest
36
+ strategy:
37
+ matrix:
38
+ check: [lint, typecheck, test]
39
+ steps:
40
+ - uses: actions/checkout@v4
41
+ - uses: actions/setup-node@v4
42
+ with: { node-version: 20, cache: 'npm' }
43
+ - run: npm ci
44
+ - run: npm run ${{ matrix.check }}
45
+
46
+ build:
47
+ needs: quality
48
+ runs-on: ubuntu-latest
49
+ steps:
50
+ - uses: actions/checkout@v4
51
+ - uses: actions/setup-node@v4
52
+ with: { node-version: 20, cache: 'npm' }
53
+ - run: npm ci && npm run build
54
+ - uses: actions/upload-artifact@v4
55
+ with: { name: dist, path: dist/ }
56
+
57
+ deploy-staging:
58
+ needs: build
59
+ if: github.ref == 'refs/heads/main'
60
+ runs-on: ubuntu-latest
61
+ environment: staging
62
+ steps:
63
+ - uses: actions/download-artifact@v4
64
+ with: { name: dist }
65
+ - run: echo "Deploy to staging..."
66
+
67
+ deploy-production:
68
+ needs: deploy-staging
69
+ runs-on: ubuntu-latest
70
+ environment: production # requires manual approval
71
+ steps:
72
+ - uses: actions/download-artifact@v4
73
+ with: { name: dist }
74
+ - run: echo "Deploy to production..."
75
+ ```
@@ -1,58 +1,58 @@
1
- ---
2
- name: "docker"
3
- pack: "@rune/devops"
4
- description: "Dockerfile and docker-compose patterns — multi-stage builds, layer optimization, security hardening, development vs production configs."
5
- model: sonnet
6
- tools: [Read, Edit, Write, Grep, Glob, Bash]
7
- ---
8
-
9
- # docker
10
-
11
- Dockerfile and docker-compose patterns — multi-stage builds, layer optimization, security hardening, development vs production configs.
12
-
13
- #### Workflow
14
-
15
- **Step 1 — Detect container configuration**
16
- Use Glob to find `Dockerfile*`, `docker-compose*.yml`, `.dockerignore`. Read each file to understand: base images used, build stages, exposed ports, volume mounts, environment variables, and health checks.
17
-
18
- **Step 2 — Audit against best practices**
19
- Check for: non-multi-stage builds (large images), `npm install` without `--omit=dev` in production stage, missing `.dockerignore` (bloated context), running as root (security risk), `latest` tag on base images (non-reproducible), missing `HEALTHCHECK`, `COPY . .` before dependency install (cache invalidation). Flag each with severity and fix.
20
-
21
- **Step 3 — Emit optimized Dockerfile**
22
- Rewrite or patch the Dockerfile: multi-stage build (deps → build → production), distroless or Alpine final image, non-root user, pinned base image versions, proper layer ordering, health check, and `.dockerignore` covering `node_modules`, `.git`, `*.md`.
23
-
24
- #### Example
25
-
26
- ```dockerfile
27
- # BEFORE: single stage, root user, no cache optimization
28
- FROM node:20
29
- WORKDIR /app
30
- COPY . .
31
- RUN npm install
32
- EXPOSE 3000
33
- CMD ["node", "server.js"]
34
-
35
- # AFTER: multi-stage, non-root, optimized layers
36
- FROM node:20-alpine AS deps
37
- WORKDIR /app
38
- COPY package.json package-lock.json ./
39
- RUN npm ci --omit=dev
40
-
41
- FROM node:20-alpine AS build
42
- WORKDIR /app
43
- COPY package.json package-lock.json ./
44
- RUN npm ci
45
- COPY . .
46
- RUN npm run build
47
-
48
- FROM node:20-alpine AS production
49
- RUN addgroup -S app && adduser -S app -G app
50
- WORKDIR /app
51
- COPY --from=deps /app/node_modules ./node_modules
52
- COPY --from=build /app/dist ./dist
53
- COPY package.json ./
54
- USER app
55
- EXPOSE 3000
56
- HEALTHCHECK --interval=30s --timeout=3s CMD wget -qO- http://localhost:3000/health || exit 1
57
- CMD ["node", "dist/server.js"]
58
- ```
1
+ ---
2
+ name: "docker"
3
+ pack: "@rune/devops"
4
+ description: "Dockerfile and docker-compose patterns — multi-stage builds, layer optimization, security hardening, development vs production configs."
5
+ model: sonnet
6
+ tools: [Read, Edit, Write, Grep, Glob, Bash]
7
+ ---
8
+
9
+ # docker
10
+
11
+ Dockerfile and docker-compose patterns — multi-stage builds, layer optimization, security hardening, development vs production configs.
12
+
13
+ #### Workflow
14
+
15
+ **Step 1 — Detect container configuration**
16
+ Use Glob to find `Dockerfile*`, `docker-compose*.yml`, `.dockerignore`. Read each file to understand: base images used, build stages, exposed ports, volume mounts, environment variables, and health checks.
17
+
18
+ **Step 2 — Audit against best practices**
19
+ Check for: non-multi-stage builds (large images), `npm install` without `--omit=dev` in production stage, missing `.dockerignore` (bloated context), running as root (security risk), `latest` tag on base images (non-reproducible), missing `HEALTHCHECK`, `COPY . .` before dependency install (cache invalidation). Flag each with severity and fix.
20
+
21
+ **Step 3 — Emit optimized Dockerfile**
22
+ Rewrite or patch the Dockerfile: multi-stage build (deps → build → production), distroless or Alpine final image, non-root user, pinned base image versions, proper layer ordering, health check, and `.dockerignore` covering `node_modules`, `.git`, `*.md`.
23
+
24
+ #### Example
25
+
26
+ ```dockerfile
27
+ # BEFORE: single stage, root user, no cache optimization
28
+ FROM node:20
29
+ WORKDIR /app
30
+ COPY . .
31
+ RUN npm install
32
+ EXPOSE 3000
33
+ CMD ["node", "server.js"]
34
+
35
+ # AFTER: multi-stage, non-root, optimized layers
36
+ FROM node:20-alpine AS deps
37
+ WORKDIR /app
38
+ COPY package.json package-lock.json ./
39
+ RUN npm ci --omit=dev
40
+
41
+ FROM node:20-alpine AS build
42
+ WORKDIR /app
43
+ COPY package.json package-lock.json ./
44
+ RUN npm ci
45
+ COPY . .
46
+ RUN npm run build
47
+
48
+ FROM node:20-alpine AS production
49
+ RUN addgroup -S app && adduser -S app -G app
50
+ WORKDIR /app
51
+ COPY --from=deps /app/node_modules ./node_modules
52
+ COPY --from=build /app/dist ./dist
53
+ COPY package.json ./
54
+ USER app
55
+ EXPOSE 3000
56
+ HEALTHCHECK --interval=30s --timeout=3s CMD wget -qO- http://localhost:3000/health || exit 1
57
+ CMD ["node", "dist/server.js"]
58
+ ```