@hivehub/rulebook 5.5.1 → 5.7.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 (342) hide show
  1. package/.claude/commands/rulebook-learn-capture.md +41 -48
  2. package/.claude/commands/rulebook-learn-list.md +13 -13
  3. package/README.md +332 -394
  4. package/dist/cli/commands/context-intelligence.d.ts +0 -1
  5. package/dist/cli/commands/context-intelligence.d.ts.map +1 -1
  6. package/dist/cli/commands/context-intelligence.js +12 -33
  7. package/dist/cli/commands/context-intelligence.js.map +1 -1
  8. package/dist/cli/commands/index.d.ts +4 -7
  9. package/dist/cli/commands/index.d.ts.map +1 -1
  10. package/dist/cli/commands/index.js +4 -7
  11. package/dist/cli/commands/index.js.map +1 -1
  12. package/dist/cli/commands/init.d.ts.map +1 -1
  13. package/dist/cli/commands/init.js +40 -81
  14. package/dist/cli/commands/init.js.map +1 -1
  15. package/dist/cli/commands/mcp.d.ts +0 -1
  16. package/dist/cli/commands/mcp.d.ts.map +1 -1
  17. package/dist/cli/commands/mcp.js +1 -7
  18. package/dist/cli/commands/mcp.js.map +1 -1
  19. package/dist/cli/commands/memory.d.ts +7 -1
  20. package/dist/cli/commands/memory.d.ts.map +1 -1
  21. package/dist/cli/commands/memory.js +51 -57
  22. package/dist/cli/commands/memory.js.map +1 -1
  23. package/dist/cli/commands/misc.d.ts +1 -15
  24. package/dist/cli/commands/misc.d.ts.map +1 -1
  25. package/dist/cli/commands/misc.js +36 -215
  26. package/dist/cli/commands/misc.js.map +1 -1
  27. package/dist/cli/commands/plans.d.ts +0 -6
  28. package/dist/cli/commands/plans.d.ts.map +1 -1
  29. package/dist/cli/commands/plans.js +9 -77
  30. package/dist/cli/commands/plans.js.map +1 -1
  31. package/dist/cli/commands/skills.js +6 -6
  32. package/dist/cli/commands/skills.js.map +1 -1
  33. package/dist/cli/commands/task.js +4 -4
  34. package/dist/cli/commands/task.js.map +1 -1
  35. package/dist/cli/commands/update.d.ts.map +1 -1
  36. package/dist/cli/commands/update.js +122 -52
  37. package/dist/cli/commands/update.js.map +1 -1
  38. package/dist/cli/prompts.d.ts.map +1 -1
  39. package/dist/cli/prompts.js +1 -78
  40. package/dist/cli/prompts.js.map +1 -1
  41. package/dist/core/claude/claude-mcp.d.ts +59 -0
  42. package/dist/core/claude/claude-mcp.d.ts.map +1 -0
  43. package/dist/core/claude/claude-mcp.js +220 -0
  44. package/dist/core/claude/claude-mcp.js.map +1 -0
  45. package/dist/core/claude/claude-md-generator.d.ts +52 -0
  46. package/dist/core/claude/claude-md-generator.d.ts.map +1 -0
  47. package/dist/core/claude/claude-md-generator.js +104 -0
  48. package/dist/core/claude/claude-md-generator.js.map +1 -0
  49. package/dist/core/claude/claude-settings-manager.d.ts +44 -0
  50. package/dist/core/claude/claude-settings-manager.d.ts.map +1 -0
  51. package/dist/core/claude/claude-settings-manager.js +194 -0
  52. package/dist/core/claude/claude-settings-manager.js.map +1 -0
  53. package/dist/core/claude-settings-manager.d.ts.map +1 -1
  54. package/dist/core/claude-settings-manager.js +9 -3
  55. package/dist/core/claude-settings-manager.js.map +1 -1
  56. package/dist/core/console/cli-bridge.d.ts +113 -0
  57. package/dist/core/console/cli-bridge.d.ts.map +1 -0
  58. package/dist/core/console/cli-bridge.js +1094 -0
  59. package/dist/core/console/cli-bridge.js.map +1 -0
  60. package/dist/core/detect/detector.d.ts +35 -0
  61. package/dist/core/detect/detector.d.ts.map +1 -0
  62. package/dist/core/detect/detector.js +541 -0
  63. package/dist/core/detect/detector.js.map +1 -0
  64. package/dist/core/docs/docs-generator.d.ts +9 -0
  65. package/dist/core/docs/docs-generator.d.ts.map +1 -0
  66. package/dist/core/docs/docs-generator.js +531 -0
  67. package/dist/core/docs/docs-generator.js.map +1 -0
  68. package/dist/core/docs/mcp-reference-generator.d.ts +13 -0
  69. package/dist/core/docs/mcp-reference-generator.d.ts.map +1 -0
  70. package/dist/core/docs/mcp-reference-generator.js +66 -0
  71. package/dist/core/docs/mcp-reference-generator.js.map +1 -0
  72. package/dist/core/generators/generator.d.ts +54 -0
  73. package/dist/core/generators/generator.d.ts.map +1 -0
  74. package/dist/core/generators/generator.js +1041 -0
  75. package/dist/core/generators/generator.js.map +1 -0
  76. package/dist/core/generators/gitignore-generator.d.ts +13 -0
  77. package/dist/core/generators/gitignore-generator.d.ts.map +1 -0
  78. package/dist/core/generators/gitignore-generator.js +307 -0
  79. package/dist/core/generators/gitignore-generator.js.map +1 -0
  80. package/dist/core/generators/minimal-scaffolder.d.ts +8 -0
  81. package/dist/core/generators/minimal-scaffolder.d.ts.map +1 -0
  82. package/dist/core/generators/minimal-scaffolder.js +51 -0
  83. package/dist/core/generators/minimal-scaffolder.js.map +1 -0
  84. package/dist/core/generators/rules-generator.d.ts +73 -0
  85. package/dist/core/generators/rules-generator.d.ts.map +1 -0
  86. package/dist/core/generators/rules-generator.js +202 -0
  87. package/dist/core/generators/rules-generator.js.map +1 -0
  88. package/dist/core/generators/workflow-generator.d.ts +15 -0
  89. package/dist/core/generators/workflow-generator.d.ts.map +1 -0
  90. package/dist/core/generators/workflow-generator.js +390 -0
  91. package/dist/core/generators/workflow-generator.js.map +1 -0
  92. package/dist/core/ide/multi-tool-generator.d.ts +59 -0
  93. package/dist/core/ide/multi-tool-generator.d.ts.map +1 -0
  94. package/dist/core/ide/multi-tool-generator.js +157 -0
  95. package/dist/core/ide/multi-tool-generator.js.map +1 -0
  96. package/dist/core/ide/opencode-generator.d.ts +72 -0
  97. package/dist/core/ide/opencode-generator.d.ts.map +1 -0
  98. package/dist/core/ide/opencode-generator.js +450 -0
  99. package/dist/core/ide/opencode-generator.js.map +1 -0
  100. package/dist/core/merger.d.ts +1 -1
  101. package/dist/core/merger.d.ts.map +1 -1
  102. package/dist/core/merger.js +5 -5
  103. package/dist/core/merger.js.map +1 -1
  104. package/dist/core/migrator.d.ts +0 -1
  105. package/dist/core/migrator.d.ts.map +1 -1
  106. package/dist/core/migrator.js +4 -29
  107. package/dist/core/migrator.js.map +1 -1
  108. package/dist/core/quality/coverage-checker.d.ts +14 -0
  109. package/dist/core/quality/coverage-checker.d.ts.map +1 -0
  110. package/dist/core/quality/coverage-checker.js +176 -0
  111. package/dist/core/quality/coverage-checker.js.map +1 -0
  112. package/dist/core/quality/dependency-checker.d.ts +21 -0
  113. package/dist/core/quality/dependency-checker.d.ts.map +1 -0
  114. package/dist/core/quality/dependency-checker.js +247 -0
  115. package/dist/core/quality/dependency-checker.js.map +1 -0
  116. package/dist/core/quality/doctor.d.ts +19 -0
  117. package/dist/core/quality/doctor.d.ts.map +1 -0
  118. package/dist/core/quality/doctor.js +163 -0
  119. package/dist/core/quality/doctor.js.map +1 -0
  120. package/dist/core/quality/validator.d.ts +21 -0
  121. package/dist/core/quality/validator.d.ts.map +1 -0
  122. package/dist/core/quality/validator.js +177 -0
  123. package/dist/core/quality/validator.js.map +1 -0
  124. package/dist/core/ralph-scripts.d.ts.map +1 -1
  125. package/dist/core/ralph-scripts.js +7 -6
  126. package/dist/core/ralph-scripts.js.map +1 -1
  127. package/dist/core/skills/skills-manager.d.ts +126 -0
  128. package/dist/core/skills/skills-manager.d.ts.map +1 -0
  129. package/dist/core/skills/skills-manager.js +630 -0
  130. package/dist/core/skills/skills-manager.js.map +1 -0
  131. package/dist/core/state/config-manager.d.ts +86 -0
  132. package/dist/core/state/config-manager.d.ts.map +1 -0
  133. package/dist/core/state/config-manager.js +562 -0
  134. package/dist/core/state/config-manager.js.map +1 -0
  135. package/dist/core/state/override-manager.d.ts +23 -0
  136. package/dist/core/state/override-manager.d.ts.map +1 -0
  137. package/dist/core/state/override-manager.js +82 -0
  138. package/dist/core/state/override-manager.js.map +1 -0
  139. package/dist/core/state/state-writer.d.ts +34 -0
  140. package/dist/core/state/state-writer.d.ts.map +1 -0
  141. package/dist/core/state/state-writer.js +78 -0
  142. package/dist/core/state/state-writer.js.map +1 -0
  143. package/dist/core/state/version-bumper.d.ts +19 -0
  144. package/dist/core/state/version-bumper.d.ts.map +1 -0
  145. package/dist/core/state/version-bumper.js +180 -0
  146. package/dist/core/state/version-bumper.js.map +1 -0
  147. package/dist/core/tasks/decision-manager.d.ts +25 -0
  148. package/dist/core/tasks/decision-manager.d.ts.map +1 -0
  149. package/dist/core/tasks/decision-manager.js +183 -0
  150. package/dist/core/tasks/decision-manager.js.map +1 -0
  151. package/dist/core/tasks/knowledge-manager.d.ts +24 -0
  152. package/dist/core/tasks/knowledge-manager.d.ts.map +1 -0
  153. package/dist/core/tasks/knowledge-manager.js +173 -0
  154. package/dist/core/tasks/knowledge-manager.js.map +1 -0
  155. package/dist/core/tasks/learn-manager.d.ts +27 -0
  156. package/dist/core/tasks/learn-manager.d.ts.map +1 -0
  157. package/dist/core/tasks/learn-manager.js +121 -0
  158. package/dist/core/tasks/learn-manager.js.map +1 -0
  159. package/dist/core/tasks/plans-manager.d.ts +46 -0
  160. package/dist/core/tasks/plans-manager.d.ts.map +1 -0
  161. package/dist/core/tasks/plans-manager.js +158 -0
  162. package/dist/core/tasks/plans-manager.js.map +1 -0
  163. package/dist/core/tasks/task-manager.d.ts +127 -0
  164. package/dist/core/tasks/task-manager.d.ts.map +1 -0
  165. package/dist/core/tasks/task-manager.js +607 -0
  166. package/dist/core/tasks/task-manager.js.map +1 -0
  167. package/dist/core/workspace/project-worker.d.ts +6 -6
  168. package/dist/core/workspace/project-worker.d.ts.map +1 -1
  169. package/dist/core/workspace/project-worker.js +6 -6
  170. package/dist/core/workspace/project-worker.js.map +1 -1
  171. package/dist/index.d.ts +1 -1
  172. package/dist/index.d.ts.map +1 -1
  173. package/dist/index.js +19 -176
  174. package/dist/index.js.map +1 -1
  175. package/dist/mcp/rulebook-server.d.ts.map +1 -1
  176. package/dist/mcp/rulebook-server.js +16 -960
  177. package/dist/mcp/rulebook-server.js.map +1 -1
  178. package/dist/memory/file-search.d.ts +43 -0
  179. package/dist/memory/file-search.d.ts.map +1 -0
  180. package/dist/memory/file-search.js +228 -0
  181. package/dist/memory/file-search.js.map +1 -0
  182. package/dist/memory/file-store.d.ts +99 -0
  183. package/dist/memory/file-store.d.ts.map +1 -0
  184. package/dist/memory/file-store.js +615 -0
  185. package/dist/memory/file-store.js.map +1 -0
  186. package/dist/memory/legacy-migrator.d.ts +27 -0
  187. package/dist/memory/legacy-migrator.d.ts.map +1 -0
  188. package/dist/memory/legacy-migrator.js +185 -0
  189. package/dist/memory/legacy-migrator.js.map +1 -0
  190. package/dist/memory/memory-manager.d.ts +25 -24
  191. package/dist/memory/memory-manager.d.ts.map +1 -1
  192. package/dist/memory/memory-manager.js +97 -140
  193. package/dist/memory/memory-manager.js.map +1 -1
  194. package/dist/memory/memory-types.d.ts +1 -1
  195. package/dist/memory/memory-types.d.ts.map +1 -1
  196. package/dist/types.d.ts +8 -119
  197. package/dist/types.d.ts.map +1 -1
  198. package/dist/utils/file-system.d.ts +22 -0
  199. package/dist/utils/file-system.d.ts.map +1 -1
  200. package/dist/utils/file-system.js +31 -0
  201. package/dist/utils/file-system.js.map +1 -1
  202. package/dist/utils/git-hooks.d.ts.map +1 -1
  203. package/dist/utils/git-hooks.js +3 -2
  204. package/dist/utils/git-hooks.js.map +1 -1
  205. package/package.json +2 -6
  206. package/templates/agents/context-intelligence.md +50 -52
  207. package/templates/cli/OPENCODE.md +85 -18
  208. package/templates/commands/rulebook-learn-capture.md +41 -48
  209. package/templates/commands/rulebook-learn-list.md +13 -13
  210. package/templates/core/AGENTS_LEAN.md +0 -14
  211. package/templates/hooks/check-context-and-handoff.sh +74 -76
  212. package/templates/hooks/enforce-pre-tool.sh +70 -0
  213. package/templates/hooks/enforce-team-for-background-agents.sh +55 -55
  214. package/templates/hooks/on-compact-reinject.sh +34 -34
  215. package/templates/hooks/resume-from-handoff.sh +61 -61
  216. package/templates/hooks/terse-activate.sh +197 -197
  217. package/templates/hooks/terse-mode-tracker.sh +190 -187
  218. package/templates/ides/OPENCODE.md +63 -0
  219. package/templates/skills/cli/opencode/SKILL.md +82 -28
  220. package/.claude/commands/ralph-config.md +0 -112
  221. package/.claude/commands/ralph-history.md +0 -110
  222. package/.claude/commands/ralph-init.md +0 -72
  223. package/.claude/commands/ralph-pause-resume.md +0 -105
  224. package/.claude/commands/ralph-run.md +0 -101
  225. package/.claude/commands/ralph-status.md +0 -76
  226. package/templates/core/RALPH.md +0 -471
  227. package/templates/frameworks/ANGULAR.md +0 -36
  228. package/templates/frameworks/DJANGO.md +0 -83
  229. package/templates/frameworks/ELECTRON.md +0 -147
  230. package/templates/frameworks/FLASK.md +0 -38
  231. package/templates/frameworks/FLUTTER.md +0 -55
  232. package/templates/frameworks/JQUERY.md +0 -32
  233. package/templates/frameworks/LARAVEL.md +0 -38
  234. package/templates/frameworks/NESTJS.md +0 -43
  235. package/templates/frameworks/NEXTJS.md +0 -127
  236. package/templates/frameworks/NUXT.md +0 -40
  237. package/templates/frameworks/RAILS.md +0 -66
  238. package/templates/frameworks/REACT.md +0 -38
  239. package/templates/frameworks/REACT_NATIVE.md +0 -47
  240. package/templates/frameworks/SPRING.md +0 -39
  241. package/templates/frameworks/SYMFONY.md +0 -36
  242. package/templates/frameworks/VUE.md +0 -36
  243. package/templates/frameworks/ZEND.md +0 -35
  244. package/templates/hooks/enforce-mcp-for-tasks.sh +0 -31
  245. package/templates/hooks/enforce-no-deferred.sh +0 -21
  246. package/templates/hooks/enforce-no-shortcuts.sh +0 -31
  247. package/templates/ides/COPILOT.md +0 -37
  248. package/templates/ides/CURSOR.md +0 -43
  249. package/templates/ides/JETBRAINS_AI.md +0 -35
  250. package/templates/ides/REPLIT.md +0 -36
  251. package/templates/ides/TABNINE.md +0 -29
  252. package/templates/ides/VSCODE.md +0 -40
  253. package/templates/ides/WINDSURF.md +0 -36
  254. package/templates/ides/ZED.md +0 -32
  255. package/templates/ides/cursor-mdc/go.mdc +0 -24
  256. package/templates/ides/cursor-mdc/python.mdc +0 -24
  257. package/templates/ides/cursor-mdc/quality.mdc +0 -25
  258. package/templates/ides/cursor-mdc/ralph.mdc +0 -39
  259. package/templates/ides/cursor-mdc/rulebook.mdc +0 -38
  260. package/templates/ides/cursor-mdc/rust.mdc +0 -24
  261. package/templates/ides/cursor-mdc/typescript.mdc +0 -25
  262. package/templates/ralph/ralph-history.bat +0 -4
  263. package/templates/ralph/ralph-history.sh +0 -5
  264. package/templates/ralph/ralph-init.bat +0 -5
  265. package/templates/ralph/ralph-init.sh +0 -5
  266. package/templates/ralph/ralph-pause.bat +0 -5
  267. package/templates/ralph/ralph-pause.sh +0 -5
  268. package/templates/ralph/ralph-run.bat +0 -5
  269. package/templates/ralph/ralph-run.sh +0 -5
  270. package/templates/ralph/ralph-status.bat +0 -4
  271. package/templates/ralph/ralph-status.sh +0 -5
  272. package/templates/services/AZURE_BLOB.md +0 -184
  273. package/templates/services/CASSANDRA.md +0 -239
  274. package/templates/services/DATADOG.md +0 -26
  275. package/templates/services/DOCKER.md +0 -124
  276. package/templates/services/DOCKER_COMPOSE.md +0 -168
  277. package/templates/services/DYNAMODB.md +0 -308
  278. package/templates/services/ELASTICSEARCH.md +0 -347
  279. package/templates/services/GCS.md +0 -178
  280. package/templates/services/HELM.md +0 -194
  281. package/templates/services/INFLUXDB.md +0 -265
  282. package/templates/services/KAFKA.md +0 -341
  283. package/templates/services/KUBERNETES.md +0 -208
  284. package/templates/services/MARIADB.md +0 -183
  285. package/templates/services/MEMCACHED.md +0 -242
  286. package/templates/services/MINIO.md +0 -201
  287. package/templates/services/MONGODB.md +0 -268
  288. package/templates/services/MYSQL.md +0 -358
  289. package/templates/services/NEO4J.md +0 -247
  290. package/templates/services/OPENTELEMETRY.md +0 -25
  291. package/templates/services/ORACLE.md +0 -290
  292. package/templates/services/PINO.md +0 -24
  293. package/templates/services/POSTGRESQL.md +0 -326
  294. package/templates/services/PROMETHEUS.md +0 -33
  295. package/templates/services/RABBITMQ.md +0 -286
  296. package/templates/services/REDIS.md +0 -292
  297. package/templates/services/S3.md +0 -298
  298. package/templates/services/SENTRY.md +0 -23
  299. package/templates/services/SQLITE.md +0 -294
  300. package/templates/services/SQLSERVER.md +0 -294
  301. package/templates/services/WINSTON.md +0 -30
  302. package/templates/skills/frameworks/angular/SKILL.md +0 -46
  303. package/templates/skills/frameworks/django/SKILL.md +0 -93
  304. package/templates/skills/frameworks/electron/SKILL.md +0 -157
  305. package/templates/skills/frameworks/flask/SKILL.md +0 -48
  306. package/templates/skills/frameworks/flutter/SKILL.md +0 -65
  307. package/templates/skills/frameworks/jquery/SKILL.md +0 -42
  308. package/templates/skills/frameworks/laravel/SKILL.md +0 -48
  309. package/templates/skills/frameworks/nestjs/SKILL.md +0 -53
  310. package/templates/skills/frameworks/nextjs/SKILL.md +0 -137
  311. package/templates/skills/frameworks/nuxt/SKILL.md +0 -50
  312. package/templates/skills/frameworks/rails/SKILL.md +0 -76
  313. package/templates/skills/frameworks/react/SKILL.md +0 -48
  314. package/templates/skills/frameworks/react-native/SKILL.md +0 -57
  315. package/templates/skills/frameworks/spring/SKILL.md +0 -49
  316. package/templates/skills/frameworks/symfony/SKILL.md +0 -46
  317. package/templates/skills/frameworks/vue/SKILL.md +0 -46
  318. package/templates/skills/frameworks/zend/SKILL.md +0 -45
  319. package/templates/skills/services/azure-blob/SKILL.md +0 -194
  320. package/templates/skills/services/cassandra/SKILL.md +0 -249
  321. package/templates/skills/services/dynamodb/SKILL.md +0 -318
  322. package/templates/skills/services/elasticsearch/SKILL.md +0 -357
  323. package/templates/skills/services/gcs/SKILL.md +0 -188
  324. package/templates/skills/services/influxdb/SKILL.md +0 -275
  325. package/templates/skills/services/kafka/SKILL.md +0 -351
  326. package/templates/skills/services/mariadb/SKILL.md +0 -193
  327. package/templates/skills/services/memcached/SKILL.md +0 -252
  328. package/templates/skills/services/minio/SKILL.md +0 -211
  329. package/templates/skills/services/mongodb/SKILL.md +0 -278
  330. package/templates/skills/services/mysql/SKILL.md +0 -368
  331. package/templates/skills/services/neo4j/SKILL.md +0 -257
  332. package/templates/skills/services/oracle/SKILL.md +0 -300
  333. package/templates/skills/services/postgresql/SKILL.md +0 -336
  334. package/templates/skills/services/rabbitmq/SKILL.md +0 -296
  335. package/templates/skills/services/redis/SKILL.md +0 -302
  336. package/templates/skills/services/s3/SKILL.md +0 -308
  337. package/templates/skills/services/sqlite/SKILL.md +0 -304
  338. package/templates/skills/services/sqlserver/SKILL.md +0 -304
  339. package/templates/skills/workflows/ralph/SETUP.md +0 -228
  340. package/templates/skills/workflows/ralph/SKILL.md +0 -309
  341. package/templates/skills/workflows/ralph/install.sh +0 -87
  342. package/templates/skills/workflows/ralph/manifest.json +0 -158
@@ -1,46 +0,0 @@
1
- ---
2
- name: "Vue"
3
- description: "Vue 3 projects should follow these guardrails."
4
- version: "1.0.0"
5
- category: "frameworks"
6
- author: "Rulebook"
7
- tags: ["frameworks", "framework"]
8
- dependencies: []
9
- conflicts: []
10
- ---
11
- <!-- VUE:START -->
12
- # Vue Framework Rules
13
-
14
- **CRITICAL**: Vue 3 projects should follow these guardrails.
15
-
16
- ## Quality Commands
17
- - Lint: `npm run lint`
18
- - Unit tests: `npm run test:unit`
19
- - e2e tests (Cypress/Playwright): `npm run test:e2e`
20
- - Build: `npm run build`
21
-
22
- ## Project Structure
23
- - Place feature modules in `src/modules/<feature>/`
24
- - Keep reusable components in `src/components`
25
- - Shared composables go in `src/composables`
26
- - Centralize Pinia/Vuex stores under `src/stores`
27
-
28
- ## Implementation Guidelines
29
- - Adopt `<script setup>` with TypeScript and define props via `defineProps`
30
- - Leverage `defineEmits` for typed event emission
31
- - Lazy-load routes with dynamic imports in `router/index.ts`
32
- - Ensure global styles scoped via `:global` or dedicated CSS files
33
-
34
- ## Pre-Commit Commands
35
- ```bash
36
- npm run lint
37
- npm run test:unit
38
- npm run build
39
- ```
40
-
41
- ## Documentation
42
- - Update `/docs/vue-architecture.md` with module tree changes
43
- - Document composables in `/docs/composables.md`
44
- - Add component usage examples to `/docs/ui-components.md`
45
-
46
- <!-- VUE:END -->
@@ -1,45 +0,0 @@
1
- ---
2
- name: "Zend"
3
- description: "Language: PHP"
4
- version: "1.0.0"
5
- category: "frameworks"
6
- author: "Rulebook"
7
- tags: ["frameworks", "framework"]
8
- dependencies: []
9
- conflicts: []
10
- ---
11
- <!-- ZEND:START -->
12
- # Zend/Laminas Framework Rules
13
-
14
- **Language**: PHP
15
- **Version**: Laminas MVC 3.x+
16
-
17
- ## Setup
18
-
19
- ```php
20
- // config/modules.config.php
21
- return [
22
- 'Laminas\Router',
23
- 'Application',
24
- ];
25
- ```
26
-
27
- ## Quality Gates
28
-
29
- ```bash
30
- vendor/bin/phpcs --standard=PSR12 src/
31
- vendor/bin/phpstan analyze
32
- vendor/bin/phpunit
33
- ```
34
-
35
- ## Best Practices
36
-
37
- ✅ Use service manager
38
- ✅ Implement middleware
39
- ✅ Use form validation
40
-
41
- ❌ Don't skip CSRF tokens
42
- ❌ Don't expose errors in production
43
-
44
- <!-- ZEND:END -->
45
-
@@ -1,194 +0,0 @@
1
- ---
2
- name: "Azure Blob Storage"
3
- description: "Use Azure Blob Storage for object storage, file uploads, static assets, and backup storage in Azure cloud."
4
- version: "1.0.0"
5
- category: "services"
6
- author: "Rulebook"
7
- tags: ["services", "storage"]
8
- dependencies: []
9
- conflicts: []
10
- ---
11
- <!-- AZURE_BLOB:START -->
12
- # Azure Blob Storage Instructions
13
-
14
- **CRITICAL**: Use Azure Blob Storage for object storage, file uploads, static assets, and backup storage in Azure cloud.
15
-
16
- ## Core Features
17
-
18
- ### Connection
19
- ```typescript
20
- // Using @azure/storage-blob
21
- import { BlobServiceClient, StorageSharedKeyCredential } from '@azure/storage-blob'
22
-
23
- const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME || ''
24
- const accountKey = process.env.AZURE_STORAGE_ACCOUNT_KEY || ''
25
-
26
- const sharedKeyCredential = new StorageSharedKeyCredential(accountName, accountKey)
27
- const blobServiceClient = new BlobServiceClient(
28
- `https://${accountName}.blob.core.windows.net`,
29
- sharedKeyCredential
30
- )
31
-
32
- const containerClient = blobServiceClient.getContainerClient(
33
- process.env.AZURE_CONTAINER_NAME || 'mycontainer'
34
- )
35
- ```
36
-
37
- ### Basic Operations
38
- ```typescript
39
- // Create container
40
- await containerClient.createIfNotExists({
41
- access: 'blob', // 'blob', 'container', or 'private'
42
- })
43
-
44
- // Upload blob
45
- const blockBlobClient = containerClient.getBlockBlobClient('path/to/file.jpg')
46
- await blockBlobClient.upload(fileBuffer, fileBuffer.length, {
47
- blobHTTPHeaders: {
48
- blobContentType: 'image/jpeg',
49
- },
50
- metadata: {
51
- userId: '123',
52
- originalName: 'photo.jpg',
53
- },
54
- })
55
-
56
- // Download blob
57
- const downloadResponse = await blockBlobClient.download()
58
- const fileContent = await streamToBuffer(downloadResponse.readableStreamBody)
59
-
60
- // Delete blob
61
- await blockBlobClient.delete()
62
-
63
- // List blobs
64
- for await (const blob of containerClient.listBlobsFlat()) {
65
- console.log(blob.name, blob.properties.contentLength)
66
- }
67
- ```
68
-
69
- ### Advanced Features
70
- ```typescript
71
- // Generate SAS URL
72
- import { generateBlobSASQueryParameters, BlobSASPermissions, StorageSharedKeyCredential } from '@azure/storage-blob'
73
-
74
- const sasToken = generateBlobSASQueryParameters(
75
- {
76
- containerName: 'mycontainer',
77
- blobName: 'path/to/file.jpg',
78
- permissions: BlobSASPermissions.parse('r'), // read
79
- startsOn: new Date(),
80
- expiresOn: new Date(new Date().valueOf() + 3600 * 1000), // 1 hour
81
- },
82
- sharedKeyCredential
83
- ).toString()
84
-
85
- const sasUrl = `https://${accountName}.blob.core.windows.net/mycontainer/path/to/file.jpg?${sasToken}`
86
-
87
- // Copy blob
88
- const sourceBlobClient = containerClient.getBlockBlobClient('source/file.jpg')
89
- const destBlobClient = containerClient.getBlockBlobClient('dest/file.jpg')
90
- await destBlobClient.beginCopyFromURL(sourceBlobClient.url)
91
-
92
- // Set blob metadata
93
- await blockBlobClient.setMetadata({
94
- category: 'profile',
95
- uploadedBy: 'user-123',
96
- })
97
-
98
- // Get blob properties
99
- const properties = await blockBlobClient.getProperties()
100
- console.log(properties.contentType, properties.contentLength, properties.metadata)
101
- ```
102
-
103
- ## Common Patterns
104
-
105
- ### File Upload Handler
106
- ```typescript
107
- async function uploadFile(file: Buffer, filename: string, userId: string) {
108
- const blobName = `users/${userId}/${Date.now()}-${filename}`
109
- const blobClient = containerClient.getBlockBlobClient(blobName)
110
-
111
- await blobClient.upload(file, file.length, {
112
- blobHTTPHeaders: {
113
- blobContentType: getContentType(filename),
114
- },
115
- metadata: {
116
- userId,
117
- originalName: filename,
118
- uploadedAt: new Date().toISOString(),
119
- },
120
- })
121
-
122
- return {
123
- blobName,
124
- url: blobClient.url,
125
- }
126
- }
127
- ```
128
-
129
- ### Temporary Access URL
130
- ```typescript
131
- async function generateTemporaryUrl(blobName: string, expiresInMinutes: number = 60) {
132
- const blobClient = containerClient.getBlockBlobClient(blobName)
133
- const sasToken = generateBlobSASQueryParameters(
134
- {
135
- containerName: containerClient.containerName,
136
- blobName,
137
- permissions: BlobSASPermissions.parse('r'),
138
- expiresOn: new Date(Date.now() + expiresInMinutes * 60 * 1000),
139
- },
140
- sharedKeyCredential
141
- ).toString()
142
-
143
- return `${blobClient.url}?${sasToken}`
144
- }
145
- ```
146
-
147
- ## Best Practices
148
-
149
- ✅ **DO:**
150
- - Use appropriate access tiers (Hot, Cool, Archive)
151
- - Set blob metadata for organization
152
- - Use SAS tokens for temporary access
153
- - Implement proper error handling
154
- - Use appropriate content types
155
- - Enable soft delete for important data
156
- - Monitor storage usage and costs
157
- - Use lifecycle management policies
158
- - Implement retry logic
159
- - Use connection strings or managed identity
160
-
161
- ❌ **DON'T:**
162
- - Store sensitive data without encryption
163
- - Use public access unnecessarily
164
- - Hardcode credentials
165
- - Ignore error handling
166
- - Skip content-type validation
167
- - Ignore lifecycle policies
168
- - Skip access logging
169
- - Use default access levels
170
- - Ignore cost optimization
171
- - Store large files without chunking
172
-
173
- ## Configuration
174
-
175
- ### Environment Variables
176
- ```bash
177
- AZURE_STORAGE_ACCOUNT_NAME=myaccount
178
- AZURE_STORAGE_ACCOUNT_KEY=your-account-key
179
- AZURE_CONTAINER_NAME=mycontainer
180
- AZURE_STORAGE_CONNECTION_STRING=DefaultEndpointsProtocol=https;AccountName=...
181
- ```
182
-
183
- ### Managed Identity (Recommended)
184
- ```typescript
185
- import { DefaultAzureCredential } from '@azure/identity'
186
-
187
- const blobServiceClient = new BlobServiceClient(
188
- `https://${accountName}.blob.core.windows.net`,
189
- new DefaultAzureCredential()
190
- )
191
- ```
192
-
193
- <!-- AZURE_BLOB:END -->
194
-
@@ -1,249 +0,0 @@
1
- ---
2
- name: "Cassandra"
3
- description: "Use Cassandra for distributed NoSQL database with high availability, linear scalability, and eventual consistency."
4
- version: "1.0.0"
5
- category: "services"
6
- author: "Rulebook"
7
- tags: ["services", "database"]
8
- dependencies: []
9
- conflicts: []
10
- ---
11
- <!-- CASSANDRA:START -->
12
- # Apache Cassandra Database Instructions
13
-
14
- **CRITICAL**: Use Cassandra for distributed NoSQL database with high availability, linear scalability, and eventual consistency.
15
-
16
- ## Core Features
17
-
18
- ### Connection
19
- ```typescript
20
- // Using cassandra-driver
21
- import { Client } from 'cassandra-driver'
22
-
23
- const client = new Client({
24
- contactPoints: (process.env.CASSANDRA_HOSTS || 'localhost').split(','),
25
- localDataCenter: process.env.CASSANDRA_DATACENTER || 'datacenter1',
26
- keyspace: process.env.CASSANDRA_KEYSPACE || 'myapp',
27
- credentials: {
28
- username: process.env.CASSANDRA_USER || 'cassandra',
29
- password: process.env.CASSANDRA_PASSWORD || 'cassandra',
30
- },
31
- queryOptions: {
32
- consistency: 1, // ONE, QUORUM, ALL
33
- prepare: true,
34
- },
35
- })
36
- ```
37
-
38
- ### Basic Operations
39
- ```typescript
40
- // Create keyspace
41
- await client.execute(`
42
- CREATE KEYSPACE IF NOT EXISTS myapp
43
- WITH REPLICATION = {
44
- 'class': 'SimpleStrategy',
45
- 'replication_factor': 1
46
- }
47
- `)
48
-
49
- // Use keyspace
50
- await client.execute('USE myapp')
51
-
52
- // Create table
53
- await client.execute(`
54
- CREATE TABLE IF NOT EXISTS users (
55
- id UUID PRIMARY KEY,
56
- email TEXT,
57
- name TEXT,
58
- created_at TIMESTAMP
59
- )
60
- `)
61
-
62
- // Create index
63
- await client.execute('CREATE INDEX IF NOT EXISTS ON users (email)')
64
-
65
- // Insert
66
- await client.execute(
67
- 'INSERT INTO users (id, email, name, created_at) VALUES (?, ?, ?, ?)',
68
- [cassandra.types.Uuid.random(), 'john@example.com', 'John Doe', new Date()],
69
- { prepare: true }
70
- )
71
-
72
- // Select
73
- const result = await client.execute(
74
- 'SELECT * FROM users WHERE id = ?',
75
- [userId],
76
- { prepare: true }
77
- )
78
- const user = result.first()
79
-
80
- // Update
81
- await client.execute(
82
- 'UPDATE users SET name = ? WHERE id = ?',
83
- ['Jane Doe', userId],
84
- { prepare: true }
85
- )
86
-
87
- // Delete
88
- await client.execute(
89
- 'DELETE FROM users WHERE id = ?',
90
- [userId],
91
- { prepare: true }
92
- )
93
- ```
94
-
95
- ### Advanced Features
96
- ```typescript
97
- // Batch operations
98
- const queries = [
99
- {
100
- query: 'INSERT INTO users (id, email, name) VALUES (?, ?, ?)',
101
- params: [id1, 'user1@example.com', 'User 1'],
102
- },
103
- {
104
- query: 'INSERT INTO users (id, email, name) VALUES (?, ?, ?)',
105
- params: [id2, 'user2@example.com', 'User 2'],
106
- },
107
- ]
108
-
109
- await client.batch(queries, { prepare: true })
110
-
111
- // Collections
112
- await client.execute(`
113
- CREATE TABLE IF NOT EXISTS products (
114
- id UUID PRIMARY KEY,
115
- name TEXT,
116
- tags SET<TEXT>,
117
- metadata MAP<TEXT, TEXT>
118
- )
119
- `)
120
-
121
- await client.execute(
122
- 'UPDATE products SET tags = tags + ? WHERE id = ?',
123
- [['electronics', 'gadgets'], productId],
124
- { prepare: true }
125
- )
126
-
127
- // Time-to-Live (TTL)
128
- await client.execute(
129
- 'INSERT INTO sessions (id, data) VALUES (?, ?) USING TTL 3600',
130
- [sessionId, sessionData],
131
- { prepare: true }
132
- )
133
- ```
134
-
135
- ## Common Patterns
136
-
137
- ### Data Modeling
138
- ```typescript
139
- // Design tables for query patterns
140
- // Query: Get users by email
141
- await client.execute(`
142
- CREATE TABLE users_by_email (
143
- email TEXT PRIMARY KEY,
144
- id UUID,
145
- name TEXT,
146
- created_at TIMESTAMP
147
- )
148
- `)
149
-
150
- // Query: Get posts by user and date
151
- await client.execute(`
152
- CREATE TABLE posts_by_user (
153
- user_id UUID,
154
- created_at TIMESTAMP,
155
- post_id UUID,
156
- title TEXT,
157
- content TEXT,
158
- PRIMARY KEY (user_id, created_at, post_id)
159
- ) WITH CLUSTERING ORDER BY (created_at DESC)
160
- `)
161
- ```
162
-
163
- ### Consistency Levels
164
- ```typescript
165
- // Read with QUORUM consistency
166
- const result = await client.execute(
167
- 'SELECT * FROM users WHERE id = ?',
168
- [userId],
169
- {
170
- consistency: 2, // QUORUM
171
- prepare: true,
172
- }
173
- )
174
-
175
- // Write with ALL consistency (strongest)
176
- await client.execute(
177
- 'INSERT INTO users (id, email, name) VALUES (?, ?, ?)',
178
- [id, email, name],
179
- {
180
- consistency: 3, // ALL
181
- prepare: true,
182
- }
183
- )
184
- ```
185
-
186
- ## Best Practices
187
-
188
- ✅ **DO:**
189
- - Design tables for query patterns (denormalize)
190
- - Use appropriate partition keys
191
- - Use clustering keys for sorting
192
- - Create secondary indexes sparingly
193
- - Use prepared statements
194
- - Set appropriate consistency levels
195
- - Use TTL for time-based data
196
- - Monitor cluster health
197
- - Use batch operations carefully
198
- - Implement retry logic
199
-
200
- ❌ **DON'T:**
201
- - Use secondary indexes on high-cardinality columns
202
- - Create too many secondary indexes
203
- - Use ALL consistency for all operations
204
- - Store large values (> 1MB)
205
- - Skip error handling
206
- - Ignore cluster topology
207
- - Hardcode contact points
208
- - Use SELECT * in production
209
- - Ignore data modeling best practices
210
- - Skip monitoring
211
-
212
- ## Configuration
213
-
214
- ### Environment Variables
215
- ```bash
216
- CASSANDRA_HOSTS=localhost
217
- CASSANDRA_HOSTS=node1:9042,node2:9042,node3:9042
218
- CASSANDRA_DATACENTER=datacenter1
219
- CASSANDRA_KEYSPACE=myapp
220
- CASSANDRA_USER=cassandra
221
- CASSANDRA_PASSWORD=securepassword
222
- ```
223
-
224
- ### Docker Compose
225
- ```yaml
226
- services:
227
- cassandra:
228
- image: cassandra:4
229
- ports:
230
- - "9042:9042"
231
- environment:
232
- CASSANDRA_CLUSTER_NAME: my-cluster
233
- CASSANDRA_DC: datacenter1
234
- CASSANDRA_RACK: rack1
235
- CASSANDRA_ENDPOINT_SNITCH: GossipingPropertyFileSnitch
236
- volumes:
237
- - cassandra_data:/var/lib/cassandra
238
- healthcheck:
239
- test: ["CMD-SHELL", "nodetool status | grep -E '^UN' || exit 1"]
240
- interval: 30s
241
- timeout: 10s
242
- retries: 5
243
-
244
- volumes:
245
- cassandra_data:
246
- ```
247
-
248
- <!-- CASSANDRA:END -->
249
-