@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,104 +1,104 @@
1
- ---
2
- name: "@rune/backend"
3
- description: Backend patterns — API design, authentication, database patterns, middleware architecture, caching strategies, background job processing, CLI generation, and async processing pipelines.
4
- metadata:
5
- author: runedev
6
- version: "0.3.0"
7
- layer: L4
8
- price: "free"
9
- target: Backend developers
10
- format: split
11
- ---
12
-
13
- # @rune/backend
14
-
15
- ## Purpose
16
-
17
- Backend codebases accumulate structural debt across six areas: inconsistent API contracts (mixed naming, missing pagination, vague errors), insecure auth flows (token mismanagement, missing refresh rotation, weak RBAC), database anti-patterns (N+1 queries, missing indexes, unsafe migrations), ad-hoc middleware (duplicated validation, no request tracing, inconsistent error format), missing or naive caching (no invalidation strategy, cache stampede risk, unbounded memory growth), and synchronous processing of inherently async work (blocking request threads on email, PDF, image tasks). This pack addresses each systematically — detect the anti-pattern, emit the fix, verify the result. Skills are independent but compound: clean APIs need solid auth, solid auth needs safe queries, safe queries need proper middleware, and high-traffic APIs need caching and background jobs to stay responsive.
18
-
19
- ## Triggers
20
-
21
- - Auto-trigger: when `routes/`, `controllers/`, `middleware/`, `*.resolver.ts`, `*.service.ts`, `queues/`, `workers/`, or server framework config detected
22
- - `/rune api-patterns` — audit and fix API design
23
- - `/rune auth-patterns` — audit and fix authentication flows
24
- - `/rune database-patterns` — audit and fix database queries and schema
25
- - `/rune middleware-patterns` — audit and fix middleware stack
26
- - `/rune caching-patterns` — audit and implement caching strategy
27
- - `/rune background-jobs` — identify async operations and implement job queues
28
- - `/rune cli-generation` — generate production CLI for existing backend services
29
- - `/rune async-pipeline` — build multi-stage async processing pipelines with waterfall fallback
30
- - Called by `cook` (L1) when backend task is detected
31
- - Called by `review` (L2) when API/backend code is under review
32
-
33
- ## Skills Included
34
-
35
- | Skill | Model | Description |
36
- |-------|-------|-------------|
37
- | [api-patterns](skills/api-patterns.md) | sonnet | RESTful and GraphQL API design patterns — resource naming, pagination, filtering, error responses, versioning, rate limiting, OpenAPI generation. |
38
- | [auth-patterns](skills/auth-patterns.md) | sonnet | Authentication and authorization patterns — JWT, OAuth 2.0 / OIDC, passkeys/WebAuthn, session management, RBAC, API key management, MFA flows. |
39
- | [database-patterns](skills/database-patterns.md) | sonnet | Database design and query patterns — schema design, migrations, indexing strategies, N+1 prevention, soft deletes, read replicas, connection pooling, seeding. |
40
- | [middleware-patterns](skills/middleware-patterns.md) | sonnet | Middleware architecture — request validation, error handling, logging, CORS, compression, graceful shutdown, health checks, request ID tracking. |
41
- | [caching-patterns](skills/caching-patterns.md) | sonnet | Caching strategies — in-memory LRU, Redis distributed cache, CDN/edge cache, browser cache headers, invalidation, and stampede prevention. |
42
- | [background-jobs](skills/background-jobs.md) | sonnet | Queue-based async processing — BullMQ (Node.js), job patterns, retry strategies, idempotency, dead letter queues, monitoring. |
43
- | [cli-generation](skills/cli-generation.md) | sonnet | Generate production-grade CLI wrappers — command groups, dual output mode (human + JSON), stateful REPL, session management with undo/redo, installable packaging. |
44
- | [async-pipeline](skills/async-pipeline.md) | sonnet | Multi-stage async processing pipelines with waterfall engine selection, progress streaming via SSE, concurrency control, and credit-based billing. |
45
-
46
- ## Tech Stack Support
47
-
48
- | Framework | ORM | Auth Library | Queue | Cache |
49
- |-----------|-----|-------------|-------|-------|
50
- | Express 5 | Prisma | Passport / custom JWT | BullMQ | ioredis |
51
- | Fastify 5 | Drizzle | @fastify/jwt | BullMQ | ioredis |
52
- | Next.js 16 (Route Handlers) | Prisma | NextAuth v5 / Lucia | BullMQ | ioredis / Upstash |
53
- | NestJS 11 | TypeORM / Prisma | @nestjs/passport | @nestjs/bull | @nestjs/cache-manager |
54
- | FastAPI | SQLAlchemy | python-jose / authlib | Celery | redis-py |
55
- | Django 5 | Django ORM | django-rest-framework | Celery | django-redis |
56
-
57
- ## Connections
58
-
59
- ```
60
- Calls → docs-seeker (L3): lookup API documentation and framework guides
61
- Calls → sentinel (L2): security audit on auth implementations
62
- Calls → watchdog (L3): monitor queue depth and cache hit ratios
63
- Calls → @rune/devops (L4): container and serverless deployment config for backend services
64
- Called By ← cook (L1): when backend task detected
65
- Called By ← review (L2): when API/backend code is being reviewed
66
- Called By ← audit (L2): backend health dimension
67
- Called By ← deploy (L2): pre-deploy readiness checks (health endpoints, graceful shutdown)
68
- Called By ← @rune/saas (L4): SaaS services use backend API, auth, and caching patterns
69
- Called By ← @rune/security (L4): security audits reference auth flows and middleware patterns
70
- Called By ← @rune/mobile (L4): mobile backend integration patterns (auth, push server)
71
- Inter-skill: cli-generation → api-patterns (CLI wraps existing API surface)
72
- Inter-skill: async-pipeline → background-jobs (pipeline stages use job queue for execution)
73
- Inter-skill: async-pipeline → caching-patterns (pipeline results cached by content hash)
74
- ```
75
-
76
- ## Sharp Edges
77
-
78
- - **Auth**: Never emit JWT without expiry; hard-cap access tokens at 15min, refresh at 7d.
79
- - **Cache stampede**: Always emit Redis `SET NX` mutex lock on cache miss for hot keys.
80
- - **Job idempotency**: Never use random UUID as job ID — use deterministic domain key (e.g., `email:welcome:${userId}`).
81
- - **N+1**: Check ORM `lazy: true` defaults (Sequelize, TypeORM) — not caught by loop scan alone.
82
- - **Migrations**: Every migration MUST include both `up()` and `down()` — flag any missing rollback.
83
- - **LRU**: Always set `max` entries AND `ttl` — unbounded LRU grows to OOM.
84
- - **CORS**: Flag `origin: '*'` in production configs; check `NODE_ENV` before emitting.
85
- - **SSE**: Send heartbeat comment every 30s (`:\n\n`) to prevent proxy/LB 60s timeout drops.
86
- - **Dead letters**: Emit alert on DLQ depth > 0 for critical queues; never silently drop failed jobs.
87
- - **Credit math**: Always `Math.ceil()` final cost; use integer cents internally to avoid float drift.
88
-
89
- ## Done When
90
-
91
- - API audit report emitted with naming violations, missing pagination, versioning strategy, and fix diffs
92
- - Auth flow hardened: short-lived access tokens, httpOnly refresh cookies, proper hashing, OAuth/OIDC integration ready
93
- - N+1 queries detected and replaced with eager loading; soft delete pattern applied; missing indexes migrated
94
- - Middleware stack has: request ID, structured logging, global error handler, input validation, compression, graceful shutdown, health endpoints
95
- - Caching strategy implemented: cacheable endpoints identified, cache layer selected, invalidation logic emitted alongside every write
96
- - Async operations moved to background jobs: idempotency keys assigned, retry strategy configured, dead letter queue wired
97
- - All emitted code uses project's existing framework and ORM (detected from package.json)
98
- - CLI generated with dual output (human + JSON), REPL mode, session undo/redo, and installable package
99
- - Async pipeline has waterfall engine selection, progress streaming via SSE, concurrency control, and credit billing
100
- - Structured report emitted for each skill invoked
101
-
102
- ## Cost Profile
103
-
104
- ~14,000–28,000 tokens per full pack run (all 8 skills). Individual skill: ~2,000–5,000 tokens. Sonnet default for code generation and security audit. Use haiku for detection scans (Step 1 of each skill). Escalate to opus for architecture decisions on caching topology, pipeline design, or queue system selection in high-traffic systems.
1
+ ---
2
+ name: "@rune/backend"
3
+ description: Backend patterns — API design, authentication, database patterns, middleware architecture, caching strategies, background job processing, CLI generation, and async processing pipelines.
4
+ metadata:
5
+ author: runedev
6
+ version: "0.3.0"
7
+ layer: L4
8
+ price: "free"
9
+ target: Backend developers
10
+ format: split
11
+ ---
12
+
13
+ # @rune/backend
14
+
15
+ ## Purpose
16
+
17
+ Backend codebases accumulate structural debt across six areas: inconsistent API contracts (mixed naming, missing pagination, vague errors), insecure auth flows (token mismanagement, missing refresh rotation, weak RBAC), database anti-patterns (N+1 queries, missing indexes, unsafe migrations), ad-hoc middleware (duplicated validation, no request tracing, inconsistent error format), missing or naive caching (no invalidation strategy, cache stampede risk, unbounded memory growth), and synchronous processing of inherently async work (blocking request threads on email, PDF, image tasks). This pack addresses each systematically — detect the anti-pattern, emit the fix, verify the result. Skills are independent but compound: clean APIs need solid auth, solid auth needs safe queries, safe queries need proper middleware, and high-traffic APIs need caching and background jobs to stay responsive.
18
+
19
+ ## Triggers
20
+
21
+ - Auto-trigger: when `routes/`, `controllers/`, `middleware/`, `*.resolver.ts`, `*.service.ts`, `queues/`, `workers/`, or server framework config detected
22
+ - `/rune api-patterns` — audit and fix API design
23
+ - `/rune auth-patterns` — audit and fix authentication flows
24
+ - `/rune database-patterns` — audit and fix database queries and schema
25
+ - `/rune middleware-patterns` — audit and fix middleware stack
26
+ - `/rune caching-patterns` — audit and implement caching strategy
27
+ - `/rune background-jobs` — identify async operations and implement job queues
28
+ - `/rune cli-generation` — generate production CLI for existing backend services
29
+ - `/rune async-pipeline` — build multi-stage async processing pipelines with waterfall fallback
30
+ - Called by `cook` (L1) when backend task is detected
31
+ - Called by `review` (L2) when API/backend code is under review
32
+
33
+ ## Skills Included
34
+
35
+ | Skill | Model | Description |
36
+ |-------|-------|-------------|
37
+ | [api-patterns](skills/api-patterns.md) | sonnet | RESTful and GraphQL API design patterns — resource naming, pagination, filtering, error responses, versioning, rate limiting, OpenAPI generation. |
38
+ | [auth-patterns](skills/auth-patterns.md) | sonnet | Authentication and authorization patterns — JWT, OAuth 2.0 / OIDC, passkeys/WebAuthn, session management, RBAC, API key management, MFA flows. |
39
+ | [database-patterns](skills/database-patterns.md) | sonnet | Database design and query patterns — schema design, migrations, indexing strategies, N+1 prevention, soft deletes, read replicas, connection pooling, seeding. |
40
+ | [middleware-patterns](skills/middleware-patterns.md) | sonnet | Middleware architecture — request validation, error handling, logging, CORS, compression, graceful shutdown, health checks, request ID tracking. |
41
+ | [caching-patterns](skills/caching-patterns.md) | sonnet | Caching strategies — in-memory LRU, Redis distributed cache, CDN/edge cache, browser cache headers, invalidation, and stampede prevention. |
42
+ | [background-jobs](skills/background-jobs.md) | sonnet | Queue-based async processing — BullMQ (Node.js), job patterns, retry strategies, idempotency, dead letter queues, monitoring. |
43
+ | [cli-generation](skills/cli-generation.md) | sonnet | Generate production-grade CLI wrappers — command groups, dual output mode (human + JSON), stateful REPL, session management with undo/redo, installable packaging. |
44
+ | [async-pipeline](skills/async-pipeline.md) | sonnet | Multi-stage async processing pipelines with waterfall engine selection, progress streaming via SSE, concurrency control, and credit-based billing. |
45
+
46
+ ## Tech Stack Support
47
+
48
+ | Framework | ORM | Auth Library | Queue | Cache |
49
+ |-----------|-----|-------------|-------|-------|
50
+ | Express 5 | Prisma | Passport / custom JWT | BullMQ | ioredis |
51
+ | Fastify 5 | Drizzle | @fastify/jwt | BullMQ | ioredis |
52
+ | Next.js 16 (Route Handlers) | Prisma | NextAuth v5 / Lucia | BullMQ | ioredis / Upstash |
53
+ | NestJS 11 | TypeORM / Prisma | @nestjs/passport | @nestjs/bull | @nestjs/cache-manager |
54
+ | FastAPI | SQLAlchemy | python-jose / authlib | Celery | redis-py |
55
+ | Django 5 | Django ORM | django-rest-framework | Celery | django-redis |
56
+
57
+ ## Connections
58
+
59
+ ```
60
+ Calls → docs-seeker (L3): lookup API documentation and framework guides
61
+ Calls → sentinel (L2): security audit on auth implementations
62
+ Calls → watchdog (L3): monitor queue depth and cache hit ratios
63
+ Calls → @rune/devops (L4): container and serverless deployment config for backend services
64
+ Called By ← cook (L1): when backend task detected
65
+ Called By ← review (L2): when API/backend code is being reviewed
66
+ Called By ← audit (L2): backend health dimension
67
+ Called By ← deploy (L2): pre-deploy readiness checks (health endpoints, graceful shutdown)
68
+ Called By ← @rune/saas (L4): SaaS services use backend API, auth, and caching patterns
69
+ Called By ← @rune/security (L4): security audits reference auth flows and middleware patterns
70
+ Called By ← @rune/mobile (L4): mobile backend integration patterns (auth, push server)
71
+ Inter-skill: cli-generation → api-patterns (CLI wraps existing API surface)
72
+ Inter-skill: async-pipeline → background-jobs (pipeline stages use job queue for execution)
73
+ Inter-skill: async-pipeline → caching-patterns (pipeline results cached by content hash)
74
+ ```
75
+
76
+ ## Sharp Edges
77
+
78
+ - **Auth**: Never emit JWT without expiry; hard-cap access tokens at 15min, refresh at 7d.
79
+ - **Cache stampede**: Always emit Redis `SET NX` mutex lock on cache miss for hot keys.
80
+ - **Job idempotency**: Never use random UUID as job ID — use deterministic domain key (e.g., `email:welcome:${userId}`).
81
+ - **N+1**: Check ORM `lazy: true` defaults (Sequelize, TypeORM) — not caught by loop scan alone.
82
+ - **Migrations**: Every migration MUST include both `up()` and `down()` — flag any missing rollback.
83
+ - **LRU**: Always set `max` entries AND `ttl` — unbounded LRU grows to OOM.
84
+ - **CORS**: Flag `origin: '*'` in production configs; check `NODE_ENV` before emitting.
85
+ - **SSE**: Send heartbeat comment every 30s (`:\n\n`) to prevent proxy/LB 60s timeout drops.
86
+ - **Dead letters**: Emit alert on DLQ depth > 0 for critical queues; never silently drop failed jobs.
87
+ - **Credit math**: Always `Math.ceil()` final cost; use integer cents internally to avoid float drift.
88
+
89
+ ## Done When
90
+
91
+ - API audit report emitted with naming violations, missing pagination, versioning strategy, and fix diffs
92
+ - Auth flow hardened: short-lived access tokens, httpOnly refresh cookies, proper hashing, OAuth/OIDC integration ready
93
+ - N+1 queries detected and replaced with eager loading; soft delete pattern applied; missing indexes migrated
94
+ - Middleware stack has: request ID, structured logging, global error handler, input validation, compression, graceful shutdown, health endpoints
95
+ - Caching strategy implemented: cacheable endpoints identified, cache layer selected, invalidation logic emitted alongside every write
96
+ - Async operations moved to background jobs: idempotency keys assigned, retry strategy configured, dead letter queue wired
97
+ - All emitted code uses project's existing framework and ORM (detected from package.json)
98
+ - CLI generated with dual output (human + JSON), REPL mode, session undo/redo, and installable package
99
+ - Async pipeline has waterfall engine selection, progress streaming via SSE, concurrency control, and credit billing
100
+ - Structured report emitted for each skill invoked
101
+
102
+ ## Cost Profile
103
+
104
+ ~14,000–28,000 tokens per full pack run (all 8 skills). Individual skill: ~2,000–5,000 tokens. Sonnet default for code generation and security audit. Use haiku for detection scans (Step 1 of each skill). Escalate to opus for architecture decisions on caching topology, pipeline design, or queue system selection in high-traffic systems.
@@ -1,84 +1,84 @@
1
- ---
2
- name: "api-patterns"
3
- pack: "@rune/backend"
4
- description: "RESTful and GraphQL API design patterns — resource naming, pagination, filtering, error responses, versioning, rate limiting, OpenAPI generation."
5
- model: sonnet
6
- tools: [Read, Edit, Write, Grep, Glob, Bash]
7
- ---
8
-
9
- # api-patterns
10
-
11
- RESTful and GraphQL API design patterns — resource naming, pagination, filtering, error responses, versioning, rate limiting, OpenAPI generation.
12
-
13
- #### Workflow
14
-
15
- **Step 1 — Detect API surface**
16
- Use Grep to find route definitions (`app.get`, `app.post`, `router.`, `@Get()`, `@Post()`, `@Query`, `@Mutation`). Read each route file to inventory: endpoint paths, HTTP methods, response shapes, error handling approach.
17
-
18
- **Step 2 — Audit naming and structure**
19
- Check each endpoint against REST conventions: plural nouns for collections (`/users` not `/getUsers`), nested resources for relationships (`/users/:id/posts`), query params for filtering (`?status=active`), consistent error envelope. Flag violations with specific fix for each.
20
-
21
- **Step 3 — Add missing pagination and filtering**
22
- For list endpoints returning unbounded arrays, emit cursor-based or offset pagination. For endpoints with no filtering, add query param parsing with Zod/Joi validation. Emit the middleware or decorator that enforces the pattern.
23
-
24
- **Step 4 — API versioning strategy**
25
- Choose versioning approach based on project context: URL path (`/v2/users`) for public APIs with long deprecation windows; `Accept-Version: 2` header for internal APIs needing cleaner URLs; query param (`?version=2`) for simple cases. Emit version routing middleware and a deprecation warning header (`Deprecation: true, Sunset: <date>`) on v1 routes. Document migration path in the route file as a comment.
26
-
27
- **Step 5 — OpenAPI/Swagger and GraphQL patterns**
28
- For REST: emit OpenAPI 3.1 schema from route definitions using tsoa decorators (TypeScript), Fastify's built-in JSON Schema (`schema: { body, querystring, response }`), or NestJS `@ApiProperty`. For GraphQL: if schema-first, validate resolvers match schema types; if code-first (NestJS), check `@ObjectType` / `@Field` decorators. Add DataLoader to any resolver with a per-request DB call to prevent N+1 at the GraphQL layer. Emit subscription pattern (WebSocket transport) for real-time fields.
29
-
30
- #### Example
31
-
32
- ```typescript
33
- // BEFORE: inconsistent naming, no pagination, bare error
34
- app.get('/getUsers', async (req, res) => {
35
- const users = await db.query('SELECT * FROM users');
36
- res.json(users);
37
- });
38
-
39
- // AFTER: REST naming, cursor pagination, error envelope, Zod validation
40
- const paginationSchema = z.object({
41
- query: z.object({
42
- cursor: z.string().optional(),
43
- limit: z.coerce.number().int().min(1).max(100).default(20),
44
- status: z.enum(['active', 'inactive']).optional(),
45
- }),
46
- });
47
-
48
- app.get('/users', validate(paginationSchema), async (req, res) => {
49
- const { cursor, limit, status } = req.query;
50
- const users = await userRepo.findMany({ cursor, limit: limit + 1, status });
51
- const hasNext = users.length > limit;
52
- res.json({
53
- data: users.slice(0, limit),
54
- pagination: { next_cursor: hasNext ? users[limit - 1].id : null, has_more: hasNext },
55
- });
56
- });
57
-
58
- // Rate limiting: sliding window with Redis (atomic, no race condition)
59
- const rateLimitMiddleware = async (req, res, next) => {
60
- const key = `rl:${req.ip}:${Math.floor(Date.now() / 60_000)}`; // 1-minute window
61
- const multi = redis.multi();
62
- multi.incr(key);
63
- multi.expire(key, 60);
64
- const [count] = await multi.exec();
65
- if (count > 100) return res.status(429).json({ error: { code: 'RATE_LIMITED', message: 'Too many requests' } });
66
- res.setHeader('X-RateLimit-Remaining', 100 - count);
67
- next();
68
- };
69
-
70
- // Fastify: built-in schema validation + OpenAPI generation
71
- fastify.get('/users/:id', {
72
- schema: {
73
- params: { type: 'object', properties: { id: { type: 'string', format: 'uuid' } }, required: ['id'] },
74
- response: { 200: UserSchema, 404: ErrorSchema },
75
- },
76
- }, async (req, reply) => { /* handler */ });
77
-
78
- // GraphQL: DataLoader prevents N+1 in resolvers
79
- const userLoader = new DataLoader(async (userIds: string[]) => {
80
- const users = await prisma.user.findMany({ where: { id: { in: userIds } } });
81
- return userIds.map(id => users.find(u => u.id === id) ?? new Error(`User ${id} not found`));
82
- });
83
- // In resolver: return userLoader.load(post.authorId) — batches all loads per request
84
- ```
1
+ ---
2
+ name: "api-patterns"
3
+ pack: "@rune/backend"
4
+ description: "RESTful and GraphQL API design patterns — resource naming, pagination, filtering, error responses, versioning, rate limiting, OpenAPI generation."
5
+ model: sonnet
6
+ tools: [Read, Edit, Write, Grep, Glob, Bash]
7
+ ---
8
+
9
+ # api-patterns
10
+
11
+ RESTful and GraphQL API design patterns — resource naming, pagination, filtering, error responses, versioning, rate limiting, OpenAPI generation.
12
+
13
+ #### Workflow
14
+
15
+ **Step 1 — Detect API surface**
16
+ Use Grep to find route definitions (`app.get`, `app.post`, `router.`, `@Get()`, `@Post()`, `@Query`, `@Mutation`). Read each route file to inventory: endpoint paths, HTTP methods, response shapes, error handling approach.
17
+
18
+ **Step 2 — Audit naming and structure**
19
+ Check each endpoint against REST conventions: plural nouns for collections (`/users` not `/getUsers`), nested resources for relationships (`/users/:id/posts`), query params for filtering (`?status=active`), consistent error envelope. Flag violations with specific fix for each.
20
+
21
+ **Step 3 — Add missing pagination and filtering**
22
+ For list endpoints returning unbounded arrays, emit cursor-based or offset pagination. For endpoints with no filtering, add query param parsing with Zod/Joi validation. Emit the middleware or decorator that enforces the pattern.
23
+
24
+ **Step 4 — API versioning strategy**
25
+ Choose versioning approach based on project context: URL path (`/v2/users`) for public APIs with long deprecation windows; `Accept-Version: 2` header for internal APIs needing cleaner URLs; query param (`?version=2`) for simple cases. Emit version routing middleware and a deprecation warning header (`Deprecation: true, Sunset: <date>`) on v1 routes. Document migration path in the route file as a comment.
26
+
27
+ **Step 5 — OpenAPI/Swagger and GraphQL patterns**
28
+ For REST: emit OpenAPI 3.1 schema from route definitions using tsoa decorators (TypeScript), Fastify's built-in JSON Schema (`schema: { body, querystring, response }`), or NestJS `@ApiProperty`. For GraphQL: if schema-first, validate resolvers match schema types; if code-first (NestJS), check `@ObjectType` / `@Field` decorators. Add DataLoader to any resolver with a per-request DB call to prevent N+1 at the GraphQL layer. Emit subscription pattern (WebSocket transport) for real-time fields.
29
+
30
+ #### Example
31
+
32
+ ```typescript
33
+ // BEFORE: inconsistent naming, no pagination, bare error
34
+ app.get('/getUsers', async (req, res) => {
35
+ const users = await db.query('SELECT * FROM users');
36
+ res.json(users);
37
+ });
38
+
39
+ // AFTER: REST naming, cursor pagination, error envelope, Zod validation
40
+ const paginationSchema = z.object({
41
+ query: z.object({
42
+ cursor: z.string().optional(),
43
+ limit: z.coerce.number().int().min(1).max(100).default(20),
44
+ status: z.enum(['active', 'inactive']).optional(),
45
+ }),
46
+ });
47
+
48
+ app.get('/users', validate(paginationSchema), async (req, res) => {
49
+ const { cursor, limit, status } = req.query;
50
+ const users = await userRepo.findMany({ cursor, limit: limit + 1, status });
51
+ const hasNext = users.length > limit;
52
+ res.json({
53
+ data: users.slice(0, limit),
54
+ pagination: { next_cursor: hasNext ? users[limit - 1].id : null, has_more: hasNext },
55
+ });
56
+ });
57
+
58
+ // Rate limiting: sliding window with Redis (atomic, no race condition)
59
+ const rateLimitMiddleware = async (req, res, next) => {
60
+ const key = `rl:${req.ip}:${Math.floor(Date.now() / 60_000)}`; // 1-minute window
61
+ const multi = redis.multi();
62
+ multi.incr(key);
63
+ multi.expire(key, 60);
64
+ const [count] = await multi.exec();
65
+ if (count > 100) return res.status(429).json({ error: { code: 'RATE_LIMITED', message: 'Too many requests' } });
66
+ res.setHeader('X-RateLimit-Remaining', 100 - count);
67
+ next();
68
+ };
69
+
70
+ // Fastify: built-in schema validation + OpenAPI generation
71
+ fastify.get('/users/:id', {
72
+ schema: {
73
+ params: { type: 'object', properties: { id: { type: 'string', format: 'uuid' } }, required: ['id'] },
74
+ response: { 200: UserSchema, 404: ErrorSchema },
75
+ },
76
+ }, async (req, reply) => { /* handler */ });
77
+
78
+ // GraphQL: DataLoader prevents N+1 in resolvers
79
+ const userLoader = new DataLoader(async (userIds: string[]) => {
80
+ const users = await prisma.user.findMany({ where: { id: { in: userIds } } });
81
+ return userIds.map(id => users.find(u => u.id === id) ?? new Error(`User ${id} not found`));
82
+ });
83
+ // In resolver: return userLoader.load(post.authorId) — batches all loads per request
84
+ ```