@hivehub/rulebook 5.4.0 → 5.4.1

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 (454) hide show
  1. package/.claude/commands/analysis.md +35 -35
  2. package/.claude/commands/continue.md +33 -33
  3. package/.claude/commands/ralph-config.md +112 -112
  4. package/.claude/commands/ralph-history.md +110 -110
  5. package/.claude/commands/ralph-init.md +72 -72
  6. package/.claude/commands/ralph-pause-resume.md +105 -105
  7. package/.claude/commands/ralph-run.md +101 -101
  8. package/.claude/commands/ralph-status.md +76 -76
  9. package/.claude/commands/rulebook-decision-create.md +55 -55
  10. package/.claude/commands/rulebook-decision-list.md +15 -15
  11. package/.claude/commands/rulebook-knowledge-add.md +41 -41
  12. package/.claude/commands/rulebook-knowledge-list.md +15 -15
  13. package/.claude/commands/rulebook-learn-capture.md +48 -48
  14. package/.claude/commands/rulebook-learn-list.md +13 -13
  15. package/.claude/commands/rulebook-memory-save.md +48 -48
  16. package/.claude/commands/rulebook-memory-search.md +47 -47
  17. package/.claude/commands/rulebook-task-apply.md +67 -67
  18. package/.claude/commands/rulebook-task-archive.md +94 -94
  19. package/.claude/commands/rulebook-task-create.md +93 -93
  20. package/.claude/commands/rulebook-task-list.md +42 -42
  21. package/.claude/commands/rulebook-task-show.md +52 -52
  22. package/.claude/commands/rulebook-task-validate.md +53 -53
  23. package/.claude-plugin/marketplace.json +28 -28
  24. package/.claude-plugin/plugin.json +8 -8
  25. package/LICENSE +191 -191
  26. package/README.md +393 -393
  27. package/dist/index.js +0 -0
  28. package/dist/mcp/rulebook-server.js +0 -0
  29. package/package.json +22 -21
  30. package/templates/agents/accessibility-reviewer.md +43 -43
  31. package/templates/agents/api-designer.md +42 -42
  32. package/templates/agents/architect.md +51 -51
  33. package/templates/agents/build-engineer.md +36 -36
  34. package/templates/agents/code-reviewer.md +47 -47
  35. package/templates/agents/compiler/codegen-debugger.md +34 -34
  36. package/templates/agents/compiler/stdlib-engineer.md +28 -28
  37. package/templates/agents/compiler/test-coverage-guardian.md +31 -31
  38. package/templates/agents/context-intelligence.md +52 -52
  39. package/templates/agents/database-architect.md +41 -41
  40. package/templates/agents/devops-engineer.md +42 -42
  41. package/templates/agents/docs-writer.md +38 -38
  42. package/templates/agents/game-engine/cpp-core-expert.md +35 -35
  43. package/templates/agents/game-engine/render-engineer.md +22 -22
  44. package/templates/agents/game-engine/shader-engineer.md +38 -38
  45. package/templates/agents/game-engine/systems-integration.md +43 -43
  46. package/templates/agents/generic/code-reviewer.md +41 -41
  47. package/templates/agents/generic/docs-writer.md +25 -25
  48. package/templates/agents/generic/project-manager.md +36 -36
  49. package/templates/agents/generic/researcher.md +34 -34
  50. package/templates/agents/generic/test-engineer.md +41 -41
  51. package/templates/agents/i18n-engineer.md +42 -42
  52. package/templates/agents/implementer.md +42 -42
  53. package/templates/agents/migration-engineer.md +42 -42
  54. package/templates/agents/mobile/platform-specialist.md +22 -22
  55. package/templates/agents/mobile/ui-engineer.md +22 -22
  56. package/templates/agents/performance-engineer.md +49 -49
  57. package/templates/agents/refactoring-agent.md +41 -41
  58. package/templates/agents/researcher.md +38 -38
  59. package/templates/agents/security-reviewer.md +40 -40
  60. package/templates/agents/team-lead.md +37 -37
  61. package/templates/agents/tester.md +48 -48
  62. package/templates/agents/ux-reviewer.md +43 -43
  63. package/templates/agents/web-app/api-designer.md +22 -22
  64. package/templates/agents/web-app/backend-engineer.md +30 -30
  65. package/templates/agents/web-app/database-engineer.md +22 -22
  66. package/templates/agents/web-app/frontend-engineer.md +29 -29
  67. package/templates/agents/web-app/security-reviewer.md +32 -32
  68. package/templates/ci/rulebook-review.yml +26 -26
  69. package/templates/cli/AIDER.md +49 -49
  70. package/templates/cli/AMAZON_Q.md +25 -25
  71. package/templates/cli/AUGGIE.md +32 -32
  72. package/templates/cli/CLAUDE.md +117 -117
  73. package/templates/cli/CLINE.md +99 -99
  74. package/templates/cli/CODEBUDDY.md +20 -20
  75. package/templates/cli/CODEIUM.md +20 -20
  76. package/templates/cli/CODEX.md +21 -21
  77. package/templates/cli/CONTINUE.md +34 -34
  78. package/templates/cli/CURSOR_CLI.md +62 -62
  79. package/templates/cli/FACTORY.md +18 -18
  80. package/templates/cli/GEMINI.md +35 -35
  81. package/templates/cli/KILOCODE.md +18 -18
  82. package/templates/cli/OPENCODE.md +18 -18
  83. package/templates/cli/_GENERIC_TEMPLATE.md +29 -29
  84. package/templates/cli/gemini-extension.json +77 -77
  85. package/templates/commands/rulebook-decision-create.md +55 -55
  86. package/templates/commands/rulebook-decision-list.md +15 -15
  87. package/templates/commands/rulebook-knowledge-add.md +41 -41
  88. package/templates/commands/rulebook-knowledge-list.md +15 -15
  89. package/templates/commands/rulebook-learn-capture.md +48 -48
  90. package/templates/commands/rulebook-learn-list.md +13 -13
  91. package/templates/commands/rulebook-memory-save.md +48 -48
  92. package/templates/commands/rulebook-memory-search.md +47 -47
  93. package/templates/commands/rulebook-task-apply.md +67 -67
  94. package/templates/commands/rulebook-task-archive.md +94 -94
  95. package/templates/commands/rulebook-task-create.md +93 -93
  96. package/templates/commands/rulebook-task-list.md +42 -42
  97. package/templates/commands/rulebook-task-show.md +52 -52
  98. package/templates/commands/rulebook-task-validate.md +53 -53
  99. package/templates/compact-context/_default.md +23 -23
  100. package/templates/compact-context/cpp.md +26 -26
  101. package/templates/compact-context/go.md +26 -26
  102. package/templates/compact-context/python.md +26 -26
  103. package/templates/compact-context/rust.md +28 -28
  104. package/templates/compact-context/typescript.md +29 -29
  105. package/templates/core/AGENTS_OVERRIDE.md +16 -16
  106. package/templates/core/AGENT_AUTOMATION.md +296 -296
  107. package/templates/core/CLAUDE_MD_v2.md +71 -71
  108. package/templates/core/DAG.md +304 -304
  109. package/templates/core/DECISIONS.md +38 -38
  110. package/templates/core/DOCUMENTATION_RULES.md +36 -36
  111. package/templates/core/KNOWLEDGE.md +49 -49
  112. package/templates/core/MULTI_AGENT.md +74 -74
  113. package/templates/core/PLANS.md +28 -28
  114. package/templates/core/QUALITY_ENFORCEMENT.md +68 -68
  115. package/templates/core/RALPH.md +471 -471
  116. package/templates/core/RULEBOOK.md +1947 -1947
  117. package/templates/core/TIER1_PROHIBITIONS.md +154 -154
  118. package/templates/core/TOKEN_OPTIMIZATION.md +49 -49
  119. package/templates/core/WORKSPACE.md +69 -69
  120. package/templates/frameworks/ANGULAR.md +36 -36
  121. package/templates/frameworks/DJANGO.md +83 -83
  122. package/templates/frameworks/ELECTRON.md +147 -147
  123. package/templates/frameworks/FLASK.md +38 -38
  124. package/templates/frameworks/FLUTTER.md +55 -55
  125. package/templates/frameworks/JQUERY.md +32 -32
  126. package/templates/frameworks/LARAVEL.md +38 -38
  127. package/templates/frameworks/NESTJS.md +43 -43
  128. package/templates/frameworks/NEXTJS.md +127 -127
  129. package/templates/frameworks/NUXT.md +40 -40
  130. package/templates/frameworks/RAILS.md +66 -66
  131. package/templates/frameworks/REACT.md +38 -38
  132. package/templates/frameworks/REACT_NATIVE.md +47 -47
  133. package/templates/frameworks/SPRING.md +39 -39
  134. package/templates/frameworks/SYMFONY.md +36 -36
  135. package/templates/frameworks/VUE.md +36 -36
  136. package/templates/frameworks/ZEND.md +35 -35
  137. package/templates/git/CI_CD_PATTERNS.md +661 -661
  138. package/templates/git/GITHUB_ACTIONS.md +728 -728
  139. package/templates/git/GITLAB_CI.md +730 -730
  140. package/templates/git/GIT_WORKFLOW.md +1192 -1192
  141. package/templates/git/SECRETS_MANAGEMENT.md +585 -585
  142. package/templates/hooks/COMMIT_MSG.md +530 -530
  143. package/templates/hooks/POST_CHECKOUT.md +546 -546
  144. package/templates/hooks/PREPARE_COMMIT_MSG.md +619 -619
  145. package/templates/hooks/PRE_COMMIT.md +414 -414
  146. package/templates/hooks/PRE_PUSH.md +601 -601
  147. package/templates/hooks/check-context-and-handoff.ps1 +58 -58
  148. package/templates/hooks/check-context-and-handoff.sh +76 -76
  149. package/templates/hooks/enforce-team-for-background-agents.ps1 +63 -63
  150. package/templates/hooks/enforce-team-for-background-agents.sh +55 -55
  151. package/templates/hooks/on-compact-reinject.sh +34 -34
  152. package/templates/hooks/resume-from-handoff.ps1 +40 -40
  153. package/templates/hooks/resume-from-handoff.sh +61 -61
  154. package/templates/hooks/terse-activate.ps1 +143 -143
  155. package/templates/hooks/terse-activate.sh +197 -197
  156. package/templates/hooks/terse-mode-tracker.ps1 +153 -153
  157. package/templates/hooks/terse-mode-tracker.sh +187 -187
  158. package/templates/ides/CONTINUE_RULES.md +16 -16
  159. package/templates/ides/COPILOT.md +37 -37
  160. package/templates/ides/COPILOT_INSTRUCTIONS.md +23 -23
  161. package/templates/ides/CURSOR.md +43 -43
  162. package/templates/ides/GEMINI_RULES.md +17 -17
  163. package/templates/ides/JETBRAINS_AI.md +35 -35
  164. package/templates/ides/REPLIT.md +36 -36
  165. package/templates/ides/TABNINE.md +29 -29
  166. package/templates/ides/VSCODE.md +40 -40
  167. package/templates/ides/WINDSURF.md +36 -36
  168. package/templates/ides/WINDSURF_RULES.md +14 -14
  169. package/templates/ides/ZED.md +32 -32
  170. package/templates/ides/cursor-mdc/go.mdc +24 -24
  171. package/templates/ides/cursor-mdc/python.mdc +24 -24
  172. package/templates/ides/cursor-mdc/quality.mdc +25 -25
  173. package/templates/ides/cursor-mdc/ralph.mdc +39 -39
  174. package/templates/ides/cursor-mdc/rulebook.mdc +38 -38
  175. package/templates/ides/cursor-mdc/rust.mdc +24 -24
  176. package/templates/ides/cursor-mdc/typescript.mdc +25 -25
  177. package/templates/languages/C.md +333 -333
  178. package/templates/languages/CPP.md +743 -743
  179. package/templates/languages/CSHARP.md +417 -417
  180. package/templates/languages/ELIXIR.md +454 -454
  181. package/templates/languages/ERLANG.md +361 -361
  182. package/templates/languages/GO.md +645 -645
  183. package/templates/languages/HASKELL.md +177 -177
  184. package/templates/languages/JAVA.md +607 -607
  185. package/templates/languages/JAVASCRIPT.md +631 -631
  186. package/templates/languages/JULIA.md +97 -97
  187. package/templates/languages/KOTLIN.md +511 -511
  188. package/templates/languages/LISP.md +100 -100
  189. package/templates/languages/LUA.md +74 -74
  190. package/templates/languages/OBJECTIVEC.md +90 -90
  191. package/templates/languages/PHP.md +416 -416
  192. package/templates/languages/PYTHON.md +682 -682
  193. package/templates/languages/RUBY.md +421 -421
  194. package/templates/languages/RUST.md +477 -477
  195. package/templates/languages/SAS.md +73 -73
  196. package/templates/languages/SCALA.md +348 -348
  197. package/templates/languages/SOLIDITY.md +580 -580
  198. package/templates/languages/SQL.md +137 -137
  199. package/templates/languages/SWIFT.md +466 -466
  200. package/templates/languages/TYPESCRIPT.md +591 -591
  201. package/templates/languages/ZIG.md +265 -265
  202. package/templates/modules/ATLASSIAN.md +255 -255
  203. package/templates/modules/CONTEXT7.md +54 -54
  204. package/templates/modules/FIGMA.md +267 -267
  205. package/templates/modules/GITHUB_MCP.md +64 -64
  206. package/templates/modules/GRAFANA.md +328 -328
  207. package/templates/modules/MEMORY.md +126 -126
  208. package/templates/modules/NOTION.md +247 -247
  209. package/templates/modules/PLAYWRIGHT.md +90 -90
  210. package/templates/modules/RULEBOOK_MCP.md +208 -208
  211. package/templates/modules/SERENA.md +337 -337
  212. package/templates/modules/SUPABASE.md +223 -223
  213. package/templates/modules/SYNAP.md +69 -69
  214. package/templates/modules/VECTORIZER.md +63 -63
  215. package/templates/modules/sequential-thinking.md +42 -42
  216. package/templates/ralph/ralph-history.bat +4 -4
  217. package/templates/ralph/ralph-history.sh +5 -5
  218. package/templates/ralph/ralph-init.bat +5 -5
  219. package/templates/ralph/ralph-init.sh +5 -5
  220. package/templates/ralph/ralph-pause.bat +5 -5
  221. package/templates/ralph/ralph-pause.sh +5 -5
  222. package/templates/ralph/ralph-run.bat +5 -5
  223. package/templates/ralph/ralph-run.sh +5 -5
  224. package/templates/ralph/ralph-status.bat +4 -4
  225. package/templates/ralph/ralph-status.sh +5 -5
  226. package/templates/rules/consult-analysis-before-implementing.md +23 -23
  227. package/templates/rules/cpp.md +46 -46
  228. package/templates/rules/csharp.md +44 -44
  229. package/templates/rules/diagnostic-first.md +39 -39
  230. package/templates/rules/fail-twice-escalate.md +46 -46
  231. package/templates/rules/follow-task-sequence.md +36 -36
  232. package/templates/rules/git-safety.md +29 -29
  233. package/templates/rules/go.md +40 -40
  234. package/templates/rules/incremental-implementation.md +56 -56
  235. package/templates/rules/incremental-tests.md +29 -29
  236. package/templates/rules/java.md +43 -43
  237. package/templates/rules/javascript.md +39 -39
  238. package/templates/rules/knowledge-base-usage.md +41 -41
  239. package/templates/rules/multi-agent-teams.md +75 -75
  240. package/templates/rules/no-deferred.md +31 -31
  241. package/templates/rules/no-shortcuts.md +30 -30
  242. package/templates/rules/python.md +43 -43
  243. package/templates/rules/research-first.md +30 -30
  244. package/templates/rules/respect-handoff-trigger.md +41 -41
  245. package/templates/rules/rust.md +40 -40
  246. package/templates/rules/sequential-editing.md +21 -21
  247. package/templates/rules/session-workflow.md +24 -24
  248. package/templates/rules/task-decomposition.md +32 -32
  249. package/templates/rules/typescript.md +40 -40
  250. package/templates/services/AZURE_BLOB.md +184 -184
  251. package/templates/services/CASSANDRA.md +239 -239
  252. package/templates/services/DATADOG.md +26 -26
  253. package/templates/services/DOCKER.md +124 -124
  254. package/templates/services/DOCKER_COMPOSE.md +168 -168
  255. package/templates/services/DYNAMODB.md +308 -308
  256. package/templates/services/ELASTICSEARCH.md +347 -347
  257. package/templates/services/GCS.md +178 -178
  258. package/templates/services/HELM.md +194 -194
  259. package/templates/services/INFLUXDB.md +265 -265
  260. package/templates/services/KAFKA.md +341 -341
  261. package/templates/services/KUBERNETES.md +208 -208
  262. package/templates/services/MARIADB.md +183 -183
  263. package/templates/services/MEMCACHED.md +242 -242
  264. package/templates/services/MINIO.md +201 -201
  265. package/templates/services/MONGODB.md +268 -268
  266. package/templates/services/MYSQL.md +358 -358
  267. package/templates/services/NEO4J.md +247 -247
  268. package/templates/services/OPENTELEMETRY.md +25 -25
  269. package/templates/services/ORACLE.md +290 -290
  270. package/templates/services/PINO.md +24 -24
  271. package/templates/services/POSTGRESQL.md +326 -326
  272. package/templates/services/PROMETHEUS.md +33 -33
  273. package/templates/services/RABBITMQ.md +286 -286
  274. package/templates/services/REDIS.md +292 -292
  275. package/templates/services/S3.md +298 -298
  276. package/templates/services/SENTRY.md +23 -23
  277. package/templates/services/SQLITE.md +294 -294
  278. package/templates/services/SQLSERVER.md +294 -294
  279. package/templates/services/WINSTON.md +30 -30
  280. package/templates/skills/cli/aider/SKILL.md +59 -59
  281. package/templates/skills/cli/amazon-q/SKILL.md +35 -35
  282. package/templates/skills/cli/auggie/SKILL.md +42 -42
  283. package/templates/skills/cli/claude/SKILL.md +42 -42
  284. package/templates/skills/cli/cline/SKILL.md +42 -42
  285. package/templates/skills/cli/codebuddy/SKILL.md +30 -30
  286. package/templates/skills/cli/codeium/SKILL.md +30 -30
  287. package/templates/skills/cli/codex/SKILL.md +31 -31
  288. package/templates/skills/cli/continue/SKILL.md +44 -44
  289. package/templates/skills/cli/cursor-cli/SKILL.md +38 -38
  290. package/templates/skills/cli/factory/SKILL.md +28 -28
  291. package/templates/skills/cli/gemini/SKILL.md +45 -45
  292. package/templates/skills/cli/kilocode/SKILL.md +28 -28
  293. package/templates/skills/cli/opencode/SKILL.md +28 -28
  294. package/templates/skills/core/agent-automation/SKILL.md +194 -194
  295. package/templates/skills/core/dag/SKILL.md +314 -314
  296. package/templates/skills/core/documentation-rules/SKILL.md +46 -46
  297. package/templates/skills/core/quality-enforcement/SKILL.md +78 -78
  298. package/templates/skills/core/rulebook/SKILL.md +176 -176
  299. package/templates/skills/core/rulebook-terse/SKILL.md +116 -116
  300. package/templates/skills/core/rulebook-terse-commit/SKILL.md +96 -96
  301. package/templates/skills/core/rulebook-terse-review/SKILL.md +112 -112
  302. package/templates/skills/dev/accessibility/SKILL.md +17 -17
  303. package/templates/skills/dev/analysis/SKILL.md +19 -19
  304. package/templates/skills/dev/api-design/SKILL.md +15 -15
  305. package/templates/skills/dev/architect/SKILL.md +17 -17
  306. package/templates/skills/dev/build-fix/SKILL.md +17 -17
  307. package/templates/skills/dev/db-design/SKILL.md +15 -15
  308. package/templates/skills/dev/debug/SKILL.md +16 -16
  309. package/templates/skills/dev/deploy/SKILL.md +17 -17
  310. package/templates/skills/dev/docs/SKILL.md +17 -17
  311. package/templates/skills/dev/handoff/SKILL.md +27 -27
  312. package/templates/skills/dev/migrate/SKILL.md +15 -15
  313. package/templates/skills/dev/perf/SKILL.md +17 -17
  314. package/templates/skills/dev/refactor/SKILL.md +17 -17
  315. package/templates/skills/dev/research/SKILL.md +14 -14
  316. package/templates/skills/dev/review/SKILL.md +18 -18
  317. package/templates/skills/dev/security-audit/SKILL.md +17 -17
  318. package/templates/skills/frameworks/angular/SKILL.md +46 -46
  319. package/templates/skills/frameworks/django/SKILL.md +93 -93
  320. package/templates/skills/frameworks/electron/SKILL.md +157 -157
  321. package/templates/skills/frameworks/flask/SKILL.md +48 -48
  322. package/templates/skills/frameworks/flutter/SKILL.md +65 -65
  323. package/templates/skills/frameworks/jquery/SKILL.md +42 -42
  324. package/templates/skills/frameworks/laravel/SKILL.md +48 -48
  325. package/templates/skills/frameworks/nestjs/SKILL.md +53 -53
  326. package/templates/skills/frameworks/nextjs/SKILL.md +137 -137
  327. package/templates/skills/frameworks/nuxt/SKILL.md +50 -50
  328. package/templates/skills/frameworks/rails/SKILL.md +76 -76
  329. package/templates/skills/frameworks/react/SKILL.md +48 -48
  330. package/templates/skills/frameworks/react-native/SKILL.md +57 -57
  331. package/templates/skills/frameworks/spring/SKILL.md +49 -49
  332. package/templates/skills/frameworks/symfony/SKILL.md +46 -46
  333. package/templates/skills/frameworks/vue/SKILL.md +46 -46
  334. package/templates/skills/frameworks/zend/SKILL.md +45 -45
  335. package/templates/skills/ides/copilot/SKILL.md +47 -47
  336. package/templates/skills/ides/cursor/SKILL.md +53 -53
  337. package/templates/skills/ides/jetbrains-ai/SKILL.md +45 -45
  338. package/templates/skills/ides/replit/SKILL.md +46 -46
  339. package/templates/skills/ides/tabnine/SKILL.md +39 -39
  340. package/templates/skills/ides/vscode/SKILL.md +50 -50
  341. package/templates/skills/ides/windsurf/SKILL.md +46 -46
  342. package/templates/skills/ides/zed/SKILL.md +42 -42
  343. package/templates/skills/languages/c/SKILL.md +343 -343
  344. package/templates/skills/languages/cpp/SKILL.md +753 -753
  345. package/templates/skills/languages/csharp/SKILL.md +427 -427
  346. package/templates/skills/languages/elixir/SKILL.md +464 -464
  347. package/templates/skills/languages/erlang/SKILL.md +371 -371
  348. package/templates/skills/languages/go/SKILL.md +655 -655
  349. package/templates/skills/languages/haskell/SKILL.md +187 -187
  350. package/templates/skills/languages/java/SKILL.md +617 -617
  351. package/templates/skills/languages/javascript/SKILL.md +641 -641
  352. package/templates/skills/languages/julia/SKILL.md +107 -107
  353. package/templates/skills/languages/kotlin/SKILL.md +521 -521
  354. package/templates/skills/languages/lisp/SKILL.md +110 -110
  355. package/templates/skills/languages/lua/SKILL.md +84 -84
  356. package/templates/skills/languages/objectivec/SKILL.md +100 -100
  357. package/templates/skills/languages/php/SKILL.md +426 -426
  358. package/templates/skills/languages/python/SKILL.md +692 -692
  359. package/templates/skills/languages/ruby/SKILL.md +431 -431
  360. package/templates/skills/languages/rust/SKILL.md +487 -487
  361. package/templates/skills/languages/sas/SKILL.md +83 -83
  362. package/templates/skills/languages/scala/SKILL.md +358 -358
  363. package/templates/skills/languages/solidity/SKILL.md +590 -590
  364. package/templates/skills/languages/sql/SKILL.md +147 -147
  365. package/templates/skills/languages/swift/SKILL.md +476 -476
  366. package/templates/skills/languages/typescript/SKILL.md +302 -302
  367. package/templates/skills/languages/zig/SKILL.md +275 -275
  368. package/templates/skills/modules/atlassian/SKILL.md +265 -265
  369. package/templates/skills/modules/context7/SKILL.md +64 -64
  370. package/templates/skills/modules/figma/SKILL.md +277 -277
  371. package/templates/skills/modules/github-mcp/SKILL.md +74 -74
  372. package/templates/skills/modules/grafana/SKILL.md +338 -338
  373. package/templates/skills/modules/memory/SKILL.md +73 -73
  374. package/templates/skills/modules/notion/SKILL.md +257 -257
  375. package/templates/skills/modules/playwright/SKILL.md +100 -100
  376. package/templates/skills/modules/rulebook-mcp/SKILL.md +166 -166
  377. package/templates/skills/modules/serena/SKILL.md +347 -347
  378. package/templates/skills/modules/supabase/SKILL.md +233 -233
  379. package/templates/skills/modules/synap/SKILL.md +79 -79
  380. package/templates/skills/modules/vectorizer/SKILL.md +73 -73
  381. package/templates/skills/services/azure-blob/SKILL.md +194 -194
  382. package/templates/skills/services/cassandra/SKILL.md +249 -249
  383. package/templates/skills/services/dynamodb/SKILL.md +318 -318
  384. package/templates/skills/services/elasticsearch/SKILL.md +357 -357
  385. package/templates/skills/services/gcs/SKILL.md +188 -188
  386. package/templates/skills/services/influxdb/SKILL.md +275 -275
  387. package/templates/skills/services/kafka/SKILL.md +351 -351
  388. package/templates/skills/services/mariadb/SKILL.md +193 -193
  389. package/templates/skills/services/memcached/SKILL.md +252 -252
  390. package/templates/skills/services/minio/SKILL.md +211 -211
  391. package/templates/skills/services/mongodb/SKILL.md +278 -278
  392. package/templates/skills/services/mysql/SKILL.md +368 -368
  393. package/templates/skills/services/neo4j/SKILL.md +257 -257
  394. package/templates/skills/services/oracle/SKILL.md +300 -300
  395. package/templates/skills/services/postgresql/SKILL.md +336 -336
  396. package/templates/skills/services/rabbitmq/SKILL.md +296 -296
  397. package/templates/skills/services/redis/SKILL.md +302 -302
  398. package/templates/skills/services/s3/SKILL.md +308 -308
  399. package/templates/skills/services/sqlite/SKILL.md +304 -304
  400. package/templates/skills/services/sqlserver/SKILL.md +304 -304
  401. package/templates/skills/workflows/ralph/SKILL.md +309 -309
  402. package/templates/skills/workflows/ralph/install.sh +87 -87
  403. package/templates/skills/workflows/ralph/manifest.json +158 -158
  404. package/templates/workflows/codespell.yml +31 -31
  405. package/templates/workflows/cpp-lint.yml +47 -47
  406. package/templates/workflows/cpp-publish.yml +119 -119
  407. package/templates/workflows/cpp-test.yml +77 -77
  408. package/templates/workflows/dotnet-lint.yml +29 -29
  409. package/templates/workflows/dotnet-publish.yml +40 -40
  410. package/templates/workflows/dotnet-test.yml +41 -41
  411. package/templates/workflows/elixir-lint.yml +45 -45
  412. package/templates/workflows/elixir-publish.yml +49 -49
  413. package/templates/workflows/elixir-test.yml +54 -54
  414. package/templates/workflows/erlang-lint.yml +47 -47
  415. package/templates/workflows/erlang-test.yml +62 -62
  416. package/templates/workflows/go-lint.yml +39 -39
  417. package/templates/workflows/go-publish.yml +95 -95
  418. package/templates/workflows/go-test.yml +59 -59
  419. package/templates/workflows/java-lint.yml +60 -60
  420. package/templates/workflows/java-publish.yml +120 -120
  421. package/templates/workflows/java-test.yml +85 -85
  422. package/templates/workflows/kotlin-lint.yml +34 -34
  423. package/templates/workflows/kotlin-publish.yml +56 -56
  424. package/templates/workflows/kotlin-test.yml +48 -48
  425. package/templates/workflows/php-lint.yml +39 -39
  426. package/templates/workflows/php-publish.yml +50 -50
  427. package/templates/workflows/php-test.yml +54 -54
  428. package/templates/workflows/python-lint.yml +47 -47
  429. package/templates/workflows/python-publish.yml +91 -91
  430. package/templates/workflows/python-test.yml +59 -59
  431. package/templates/workflows/rust-lint.yml +54 -54
  432. package/templates/workflows/rust-publish.yml +66 -66
  433. package/templates/workflows/rust-test.yml +75 -75
  434. package/templates/workflows/solidity-lint.yml +41 -41
  435. package/templates/workflows/solidity-test.yml +47 -47
  436. package/templates/workflows/swift-lint.yml +32 -32
  437. package/templates/workflows/swift-publish.yml +58 -58
  438. package/templates/workflows/swift-test.yml +44 -44
  439. package/templates/workflows/typescript-publish.yml +60 -60
  440. package/templates/workflows/typescript-test.yml +73 -73
  441. package/templates/workflows/zig-lint.yml +27 -27
  442. package/templates/workflows/zig-test.yml +40 -40
  443. package/dist/hooks/terse-activate.d.ts +0 -59
  444. package/dist/hooks/terse-activate.d.ts.map +0 -1
  445. package/dist/hooks/terse-activate.js +0 -149
  446. package/dist/hooks/terse-activate.js.map +0 -1
  447. package/dist/hooks/terse-config.d.ts +0 -51
  448. package/dist/hooks/terse-config.d.ts.map +0 -1
  449. package/dist/hooks/terse-config.js +0 -130
  450. package/dist/hooks/terse-config.js.map +0 -1
  451. package/dist/hooks/terse-mode-tracker.d.ts +0 -78
  452. package/dist/hooks/terse-mode-tracker.d.ts.map +0 -1
  453. package/dist/hooks/terse-mode-tracker.js +0 -213
  454. package/dist/hooks/terse-mode-tracker.js.map +0 -1
@@ -1,585 +1,585 @@
1
- # Secrets Management in CI/CD
2
-
3
- This template provides best practices for securely managing secrets, API keys, tokens, and sensitive configuration in CI/CD pipelines.
4
-
5
- ## Purpose
6
-
7
- Secure secrets management ensures:
8
- - No hardcoded credentials in code
9
- - Encrypted storage of sensitive data
10
- - Least-privilege access control
11
- - Audit trail of secret usage
12
- - Easy secret rotation
13
-
14
- ## Core Principles
15
-
16
- ### 1. **Never Commit Secrets to Version Control**
17
-
18
- **❌ Bad**:
19
- ```javascript
20
- // NEVER do this
21
- const API_KEY = 'sk_live_abc123xyz';
22
- const DATABASE_URL = 'postgres://user:password@host/db';
23
- ```
24
-
25
- **✅ Good**:
26
- ```javascript
27
- // Use environment variables
28
- const API_KEY = process.env.API_KEY;
29
- const DATABASE_URL = process.env.DATABASE_URL;
30
- ```
31
-
32
- ### 2. **Use Platform Secret Stores**
33
-
34
- **Platforms**:
35
- - GitHub Actions: Repository/Organization secrets
36
- - GitLab CI: CI/CD variables
37
- - CircleCI: Environment variables (Project/Context)
38
- - Azure DevOps: Variable groups
39
- - AWS: Secrets Manager / Parameter Store
40
-
41
- ### 3. **Apply Least Privilege**
42
-
43
- **Principle**: Grant minimum necessary access
44
-
45
- ```yaml
46
- # Good: Environment-specific secrets
47
- production:
48
- env:
49
- API_KEY: ${{ secrets.PROD_API_KEY }}
50
-
51
- development:
52
- env:
53
- API_KEY: ${{ secrets.DEV_API_KEY }}
54
- ```
55
-
56
- ### 4. **Rotate Secrets Regularly**
57
-
58
- **Schedule**:
59
- - API keys: Every 90 days
60
- - Access tokens: Every 90 days
61
- - SSH keys: Every 180 days
62
- - Database passwords: Every 90 days
63
-
64
- ## Platform-Specific Implementation
65
-
66
- ### GitHub Actions
67
-
68
- #### Repository Secrets
69
-
70
- **Add via UI**:
71
- 1. Repository → Settings → Secrets and variables → Actions
72
- 2. New repository secret
73
- 3. Name: `API_KEY`
74
- 4. Value: `sk_live_abc123xyz`
75
-
76
- **Add via CLI**:
77
- ```bash
78
- gh secret set API_KEY < api_key.txt
79
-
80
- # Or inline
81
- gh secret set API_KEY --body "sk_live_abc123xyz"
82
- ```
83
-
84
- **Usage in Workflow**:
85
- ```yaml
86
- jobs:
87
- deploy:
88
- steps:
89
- - name: Deploy
90
- run: ./deploy.sh
91
- env:
92
- API_KEY: ${{ secrets.API_KEY }}
93
- DATABASE_URL: ${{ secrets.DATABASE_URL }}
94
- ```
95
-
96
- #### Organization Secrets
97
-
98
- **When to use**: Shared across multiple repositories
99
-
100
- ```yaml
101
- # Available to all repos in org
102
- - name: Use org secret
103
- env:
104
- NPM_TOKEN: ${{ secrets.NPM_TOKEN }} # Org-level secret
105
- ```
106
-
107
- #### Environment Secrets
108
-
109
- **When to use**: Environment-specific secrets (production, staging)
110
-
111
- ```yaml
112
- jobs:
113
- deploy:production:
114
- environment: production # Uses production environment secrets
115
- steps:
116
- - run: deploy.sh
117
- env:
118
- API_KEY: ${{ secrets.API_KEY }} # production-specific value
119
- ```
120
-
121
- ### GitLab CI
122
-
123
- #### CI/CD Variables
124
-
125
- **Add via UI**:
126
- 1. Project → Settings → CI/CD → Variables
127
- 2. Add variable
128
- 3. Key: `API_KEY`
129
- 4. Value: `sk_live_abc123xyz`
130
- 5. Flags: ✓ Protect variable (main branch only), ✓ Mask variable
131
-
132
- **Usage in Pipeline**:
133
- ```yaml
134
- deploy:
135
- script:
136
- - deploy.sh
137
- variables:
138
- API_KEY: ${{ secrets.API_KEY }}
139
- only:
140
- - main
141
- ```
142
-
143
- #### File Variables
144
-
145
- **For multi-line secrets** (certificates, keys):
146
- ```yaml
147
- deploy:
148
- before_script:
149
- - echo "$SSL_CERTIFICATE" > cert.pem
150
- - chmod 600 cert.pem
151
- script:
152
- - use-certificate cert.pem
153
- ```
154
-
155
- ### CircleCI
156
-
157
- #### Project Environment Variables
158
-
159
- **Add via UI**:
160
- 1. Project Settings → Environment Variables
161
- 2. Add Variable
162
- 3. Name: `API_KEY`, Value: `sk_live_abc123xyz`
163
-
164
- **Usage in Config**:
165
- ```yaml
166
- jobs:
167
- deploy:
168
- steps:
169
- - run:
170
- command: deploy.sh
171
- environment:
172
- API_KEY: $API_KEY
173
- ```
174
-
175
- #### Contexts (Organization Secrets)
176
-
177
- ```yaml
178
- workflows:
179
- deploy:
180
- jobs:
181
- - deploy:
182
- context: production-secrets # Shared secrets
183
- ```
184
-
185
- ## Secret Types and Patterns
186
-
187
- ### 1. API Keys
188
-
189
- **Pattern**: Use environment-specific keys
190
-
191
- ```yaml
192
- # development
193
- env:
194
- STRIPE_KEY: ${{ secrets.STRIPE_TEST_KEY }}
195
-
196
- # production
197
- env:
198
- STRIPE_KEY: ${{ secrets.STRIPE_LIVE_KEY }}
199
- ```
200
-
201
- ### 2. Database Credentials
202
-
203
- **Pattern**: Use connection strings with secrets
204
-
205
- ```yaml
206
- env:
207
- # Store entire connection string
208
- DATABASE_URL: ${{ secrets.DATABASE_URL }}
209
-
210
- # Or compose from parts
211
- DB_HOST: ${{ secrets.DB_HOST }}
212
- DB_USER: ${{ secrets.DB_USER }}
213
- DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
214
- DB_NAME: ${{ secrets.DB_NAME }}
215
- ```
216
-
217
- **Script usage**:
218
- ```bash
219
- # Use DATABASE_URL directly
220
- psql "$DATABASE_URL" -c "SELECT 1"
221
-
222
- # Or construct connection string
223
- psql "postgres://$DB_USER:$DB_PASSWORD@$DB_HOST/$DB_NAME"
224
- ```
225
-
226
- ### 3. SSH Keys
227
-
228
- **Pattern**: Add SSH key for deployments
229
-
230
- ```yaml
231
- - name: Setup SSH key
232
- run: |
233
- mkdir -p ~/.ssh
234
- echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
235
- chmod 600 ~/.ssh/id_rsa
236
- ssh-keyscan ${{ secrets.SSH_HOST }} >> ~/.ssh/known_hosts
237
- ```
238
-
239
- ### 4. Service Account Keys (JSON)
240
-
241
- **Pattern**: Store JSON credentials as secret
242
-
243
- ```yaml
244
- - name: Authenticate with GCP
245
- run: |
246
- echo '${{ secrets.GCP_SERVICE_ACCOUNT_KEY }}' > key.json
247
- gcloud auth activate-service-account --key-file=key.json
248
- rm key.json # Clean up
249
- ```
250
-
251
- ### 5. Certificates (PEM/CRT)
252
-
253
- **Pattern**: Multi-line secret as file
254
-
255
- ```yaml
256
- - name: Setup certificate
257
- run: |
258
- echo "${{ secrets.SSL_CERTIFICATE }}" > cert.pem
259
- echo "${{ secrets.SSL_PRIVATE_KEY }}" > key.pem
260
- chmod 600 *.pem
261
- ```
262
-
263
- ### 6. Signing Keys
264
-
265
- **Pattern**: Sign artifacts with secret key
266
-
267
- ```yaml
268
- - name: Sign package
269
- run: |
270
- echo "${{ secrets.GPG_PRIVATE_KEY }}" | gpg --import
271
- gpg --sign package.tar.gz
272
- ```
273
-
274
- ## Advanced Patterns
275
-
276
- ### Pattern 1: Dynamic Secrets from Vault
277
-
278
- **Use Vault for dynamic, short-lived secrets**:
279
-
280
- ```yaml
281
- - name: Get secrets from Vault
282
- run: |
283
- # Login to Vault
284
- vault login -method=github token=${{ secrets.VAULT_TOKEN }}
285
-
286
- # Get dynamic database credentials (expires in 1 hour)
287
- export DB_USER=$(vault read -field=username database/creds/app)
288
- export DB_PASSWORD=$(vault read -field=password database/creds/app)
289
-
290
- # Use credentials
291
- psql "postgres://$DB_USER:$DB_PASSWORD@$DB_HOST/$DB_NAME"
292
- ```
293
-
294
- ### Pattern 2: AWS Secrets Manager
295
-
296
- **Retrieve secrets at runtime**:
297
-
298
- ```yaml
299
- - name: Configure AWS credentials
300
- uses: aws-actions/configure-aws-credentials@v4
301
- with:
302
- role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
303
-
304
- - name: Get secrets from AWS Secrets Manager
305
- run: |
306
- export API_KEY=$(aws secretsmanager get-secret-value \
307
- --secret-id production/api-key \
308
- --query SecretString \
309
- --output text)
310
-
311
- # Use API_KEY
312
- curl -H "Authorization: Bearer $API_KEY" https://api.example.com
313
- ```
314
-
315
- ### Pattern 3: Google Secret Manager
316
-
317
- ```yaml
318
- - name: Authenticate with GCP
319
- uses: google-github-actions/auth@v2
320
- with:
321
- credentials_json: ${{ secrets.GCP_CREDENTIALS }}
322
-
323
- - name: Get secrets
324
- run: |
325
- export DATABASE_URL=$(gcloud secrets versions access latest \
326
- --secret="database-url")
327
- ```
328
-
329
- ### Pattern 4: OIDC/Federated Authentication
330
-
331
- **Passwordless authentication using OIDC** (GitHub Actions → AWS):
332
-
333
- ```yaml
334
- - name: Configure AWS Credentials
335
- uses: aws-actions/configure-aws-credentials@v4
336
- with:
337
- role-to-assume: arn:aws:iam::123456789:role/GitHubActionsRole
338
- aws-region: us-east-1
339
- # No secrets needed! Uses OIDC token
340
- ```
341
-
342
- **Benefits**:
343
- - No long-lived credentials
344
- - Automatic rotation
345
- - Fine-grained permissions
346
-
347
- ## Security Best Practices
348
-
349
- ### ✅ DO
350
-
351
- 1. **Use Secret Scanning**
352
- ```yaml
353
- # Enable in GitHub: Settings → Code security and analysis
354
- # Automatically detects committed secrets
355
- ```
356
-
357
- 2. **Mask Secrets in Logs**
358
- ```yaml
359
- # Secrets automatically masked in GitHub Actions logs
360
- # Manually mask custom values:
361
- - run: echo "::add-mask::$CUSTOM_VALUE"
362
- ```
363
-
364
- 3. **Use Separate Secrets Per Environment**
365
- ```yaml
366
- production:
367
- env:
368
- API_KEY: ${{ secrets.PROD_API_KEY }}
369
-
370
- staging:
371
- env:
372
- API_KEY: ${{ secrets.STAGING_API_KEY }}
373
- ```
374
-
375
- 4. **Limit Secret Scope**
376
- ```yaml
377
- # GitHub: Only available to protected branches
378
- # Settings → Secrets → Environment secrets → production
379
- # ✓ Required reviewers
380
- # ✓ Wait timer
381
- ```
382
-
383
- 5. **Audit Secret Usage**
384
- ```yaml
385
- # GitHub audit log shows:
386
- # - Who accessed secrets
387
- # - When secrets were used
388
- # - Which workflows used secrets
389
- ```
390
-
391
- 6. **Rotate Secrets Regularly**
392
- ```bash
393
- # Automate rotation with cron job
394
- 0 0 1 * * rotate-secrets.sh # Monthly
395
- ```
396
-
397
- ### ❌ DON'T
398
-
399
- 1. **Don't Echo Secrets**
400
- ```yaml
401
- # Bad
402
- - run: echo "API key is ${{ secrets.API_KEY }}"
403
-
404
- # Good
405
- - run: echo "API key configured"
406
- ```
407
-
408
- 2. **Don't Store Secrets in Code**
409
- ```javascript
410
- // Bad
411
- const key = 'sk_live_abc123';
412
-
413
- // Good
414
- const key = process.env.API_KEY;
415
- ```
416
-
417
- 3. **Don't Use Secrets in PR Builds**
418
- ```yaml
419
- # Bad - secrets exposed to forks
420
- on: pull_request
421
-
422
- # Good - use pull_request_target with care
423
- on:
424
- pull_request_target:
425
- types: [labeled]
426
-
427
- jobs:
428
- test:
429
- if: github.event.label.name == 'safe-to-test'
430
- ```
431
-
432
- 4. **Don't Share Secrets Across Teams**
433
- ```yaml
434
- # Bad - everyone has prod access
435
- env:
436
- PROD_KEY: ${{ secrets.PROD_KEY }}
437
-
438
- # Good - separate secrets per team/environment
439
- ```
440
-
441
- 5. **Don't Commit `.env` Files**
442
- ```bash
443
- # .gitignore
444
- .env
445
- .env.local
446
- .env.*.local
447
- **/.env
448
- ```
449
-
450
- ## Secret Rotation Strategy
451
-
452
- ### Automated Rotation Process
453
-
454
- **1. Generate New Secret**:
455
- ```bash
456
- # Script: rotate-api-key.sh
457
- NEW_KEY=$(generate-api-key.sh)
458
-
459
- # Update in secret store
460
- gh secret set API_KEY --body "$NEW_KEY"
461
-
462
- # Update in application
463
- update-application-config.sh "$NEW_KEY"
464
- ```
465
-
466
- **2. Test New Secret**:
467
- ```yaml
468
- - name: Test new secret
469
- run: |
470
- curl -H "Authorization: Bearer ${{ secrets.API_KEY }}" \
471
- https://api.example.com/health
472
- ```
473
-
474
- **3. Deactivate Old Secret**:
475
- ```bash
476
- # After confirming new secret works
477
- deactivate-old-api-key.sh "$OLD_KEY"
478
- ```
479
-
480
- ### Rotation Checklist
481
-
482
- - [ ] Generate new secret
483
- - [ ] Update in CI/CD platform
484
- - [ ] Deploy with new secret
485
- - [ ] Verify functionality
486
- - [ ] Revoke old secret
487
- - [ ] Update documentation
488
-
489
- ## Troubleshooting
490
-
491
- ### Secret Not Available
492
-
493
- **Issue**: Workflow can't access secret
494
-
495
- **Solutions**:
496
- 1. Check secret name matches exactly (case-sensitive)
497
- 2. Verify workflow has permission to access secret
498
- 3. Check if secret is environment-specific
499
- 4. Ensure secret is not expired/deleted
500
-
501
- ### Secret Masked Incorrectly
502
-
503
- **Issue**: Secret visible in logs
504
-
505
- **Solutions**:
506
- ```yaml
507
- # Explicitly mask value
508
- - run: echo "::add-mask::$VALUE"
509
-
510
- # Check if secret contains special characters
511
- # - Secrets with spaces may not mask correctly
512
- # - Use quotes: echo "::add-mask::$SECRET"
513
- ```
514
-
515
- ### Secret Too Large
516
-
517
- **Issue**: Secret exceeds size limit
518
-
519
- **GitHub Limits**:
520
- - Secret value: 64 KB
521
- - Repository: 100 secrets
522
- - Organization: 1000 secrets
523
-
524
- **Solutions**:
525
- 1. Split large secrets into multiple parts
526
- 2. Store in external secret manager (Vault, AWS Secrets Manager)
527
- 3. Use base64 encoding for binary data
528
-
529
- ### Secret Rotation Breaks Deployment
530
-
531
- **Issue**: Old secret revoked before new one deployed
532
-
533
- **Solution**:
534
- ```bash
535
- # Grace period approach
536
- 1. Deploy new secret to CI/CD
537
- 2. Deploy application with new secret
538
- 3. Wait 24 hours (grace period)
539
- 4. Revoke old secret
540
- ```
541
-
542
- ## Common Pitfalls
543
-
544
- 1. **❌ Hardcoding secrets**: Always use environment variables
545
- 2. **❌ Committing `.env`**: Add to `.gitignore`
546
- 3. **❌ Using same secret everywhere**: Separate dev/staging/prod
547
- 4. **❌ Never rotating secrets**: Set up automated rotation
548
- 5. **❌ Logging secrets**: Mask sensitive values
549
- 6. **❌ Sharing secrets insecurely**: Use secret management platform
550
- 7. **❌ No audit trail**: Enable secret access logging
551
-
552
- ## Integration with Rulebook
553
-
554
- If using `@hivehub/rulebook`, secret management patterns are enforced:
555
-
556
- ```bash
557
- # Initialize with secret management best practices
558
- npx @hivehub/rulebook init
559
-
560
- # Creates:
561
- # - .env.example (template)
562
- # - .gitignore (excludes .env)
563
- # - Documentation on secret management
564
- ```
565
-
566
- **`.env.example`**:
567
- ```bash
568
- # API Keys
569
- API_KEY=your-api-key-here
570
- DATABASE_URL=postgres://user:password@localhost/db
571
-
572
- # AWS Credentials
573
- AWS_ACCESS_KEY_ID=your-access-key
574
- AWS_SECRET_ACCESS_KEY=your-secret-key
575
-
576
- # Note: Copy to .env and fill with actual values
577
- # .env is gitignored and should NEVER be committed
578
- ```
579
-
580
- ## Related Templates
581
-
582
- - See `/.rulebook/specs/GITHUB_ACTIONS.md` for GitHub Actions secrets
583
- - See `/.rulebook/specs/GITLAB_CI.md` for GitLab CI secrets
584
- - See `/.rulebook/specs/CI_CD_PATTERNS.md` for deployment patterns
585
- - See `/.rulebook/specs/GIT.md` for .gitignore patterns
1
+ # Secrets Management in CI/CD
2
+
3
+ This template provides best practices for securely managing secrets, API keys, tokens, and sensitive configuration in CI/CD pipelines.
4
+
5
+ ## Purpose
6
+
7
+ Secure secrets management ensures:
8
+ - No hardcoded credentials in code
9
+ - Encrypted storage of sensitive data
10
+ - Least-privilege access control
11
+ - Audit trail of secret usage
12
+ - Easy secret rotation
13
+
14
+ ## Core Principles
15
+
16
+ ### 1. **Never Commit Secrets to Version Control**
17
+
18
+ **❌ Bad**:
19
+ ```javascript
20
+ // NEVER do this
21
+ const API_KEY = 'sk_live_abc123xyz';
22
+ const DATABASE_URL = 'postgres://user:password@host/db';
23
+ ```
24
+
25
+ **✅ Good**:
26
+ ```javascript
27
+ // Use environment variables
28
+ const API_KEY = process.env.API_KEY;
29
+ const DATABASE_URL = process.env.DATABASE_URL;
30
+ ```
31
+
32
+ ### 2. **Use Platform Secret Stores**
33
+
34
+ **Platforms**:
35
+ - GitHub Actions: Repository/Organization secrets
36
+ - GitLab CI: CI/CD variables
37
+ - CircleCI: Environment variables (Project/Context)
38
+ - Azure DevOps: Variable groups
39
+ - AWS: Secrets Manager / Parameter Store
40
+
41
+ ### 3. **Apply Least Privilege**
42
+
43
+ **Principle**: Grant minimum necessary access
44
+
45
+ ```yaml
46
+ # Good: Environment-specific secrets
47
+ production:
48
+ env:
49
+ API_KEY: ${{ secrets.PROD_API_KEY }}
50
+
51
+ development:
52
+ env:
53
+ API_KEY: ${{ secrets.DEV_API_KEY }}
54
+ ```
55
+
56
+ ### 4. **Rotate Secrets Regularly**
57
+
58
+ **Schedule**:
59
+ - API keys: Every 90 days
60
+ - Access tokens: Every 90 days
61
+ - SSH keys: Every 180 days
62
+ - Database passwords: Every 90 days
63
+
64
+ ## Platform-Specific Implementation
65
+
66
+ ### GitHub Actions
67
+
68
+ #### Repository Secrets
69
+
70
+ **Add via UI**:
71
+ 1. Repository → Settings → Secrets and variables → Actions
72
+ 2. New repository secret
73
+ 3. Name: `API_KEY`
74
+ 4. Value: `sk_live_abc123xyz`
75
+
76
+ **Add via CLI**:
77
+ ```bash
78
+ gh secret set API_KEY < api_key.txt
79
+
80
+ # Or inline
81
+ gh secret set API_KEY --body "sk_live_abc123xyz"
82
+ ```
83
+
84
+ **Usage in Workflow**:
85
+ ```yaml
86
+ jobs:
87
+ deploy:
88
+ steps:
89
+ - name: Deploy
90
+ run: ./deploy.sh
91
+ env:
92
+ API_KEY: ${{ secrets.API_KEY }}
93
+ DATABASE_URL: ${{ secrets.DATABASE_URL }}
94
+ ```
95
+
96
+ #### Organization Secrets
97
+
98
+ **When to use**: Shared across multiple repositories
99
+
100
+ ```yaml
101
+ # Available to all repos in org
102
+ - name: Use org secret
103
+ env:
104
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }} # Org-level secret
105
+ ```
106
+
107
+ #### Environment Secrets
108
+
109
+ **When to use**: Environment-specific secrets (production, staging)
110
+
111
+ ```yaml
112
+ jobs:
113
+ deploy:production:
114
+ environment: production # Uses production environment secrets
115
+ steps:
116
+ - run: deploy.sh
117
+ env:
118
+ API_KEY: ${{ secrets.API_KEY }} # production-specific value
119
+ ```
120
+
121
+ ### GitLab CI
122
+
123
+ #### CI/CD Variables
124
+
125
+ **Add via UI**:
126
+ 1. Project → Settings → CI/CD → Variables
127
+ 2. Add variable
128
+ 3. Key: `API_KEY`
129
+ 4. Value: `sk_live_abc123xyz`
130
+ 5. Flags: ✓ Protect variable (main branch only), ✓ Mask variable
131
+
132
+ **Usage in Pipeline**:
133
+ ```yaml
134
+ deploy:
135
+ script:
136
+ - deploy.sh
137
+ variables:
138
+ API_KEY: ${{ secrets.API_KEY }}
139
+ only:
140
+ - main
141
+ ```
142
+
143
+ #### File Variables
144
+
145
+ **For multi-line secrets** (certificates, keys):
146
+ ```yaml
147
+ deploy:
148
+ before_script:
149
+ - echo "$SSL_CERTIFICATE" > cert.pem
150
+ - chmod 600 cert.pem
151
+ script:
152
+ - use-certificate cert.pem
153
+ ```
154
+
155
+ ### CircleCI
156
+
157
+ #### Project Environment Variables
158
+
159
+ **Add via UI**:
160
+ 1. Project Settings → Environment Variables
161
+ 2. Add Variable
162
+ 3. Name: `API_KEY`, Value: `sk_live_abc123xyz`
163
+
164
+ **Usage in Config**:
165
+ ```yaml
166
+ jobs:
167
+ deploy:
168
+ steps:
169
+ - run:
170
+ command: deploy.sh
171
+ environment:
172
+ API_KEY: $API_KEY
173
+ ```
174
+
175
+ #### Contexts (Organization Secrets)
176
+
177
+ ```yaml
178
+ workflows:
179
+ deploy:
180
+ jobs:
181
+ - deploy:
182
+ context: production-secrets # Shared secrets
183
+ ```
184
+
185
+ ## Secret Types and Patterns
186
+
187
+ ### 1. API Keys
188
+
189
+ **Pattern**: Use environment-specific keys
190
+
191
+ ```yaml
192
+ # development
193
+ env:
194
+ STRIPE_KEY: ${{ secrets.STRIPE_TEST_KEY }}
195
+
196
+ # production
197
+ env:
198
+ STRIPE_KEY: ${{ secrets.STRIPE_LIVE_KEY }}
199
+ ```
200
+
201
+ ### 2. Database Credentials
202
+
203
+ **Pattern**: Use connection strings with secrets
204
+
205
+ ```yaml
206
+ env:
207
+ # Store entire connection string
208
+ DATABASE_URL: ${{ secrets.DATABASE_URL }}
209
+
210
+ # Or compose from parts
211
+ DB_HOST: ${{ secrets.DB_HOST }}
212
+ DB_USER: ${{ secrets.DB_USER }}
213
+ DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
214
+ DB_NAME: ${{ secrets.DB_NAME }}
215
+ ```
216
+
217
+ **Script usage**:
218
+ ```bash
219
+ # Use DATABASE_URL directly
220
+ psql "$DATABASE_URL" -c "SELECT 1"
221
+
222
+ # Or construct connection string
223
+ psql "postgres://$DB_USER:$DB_PASSWORD@$DB_HOST/$DB_NAME"
224
+ ```
225
+
226
+ ### 3. SSH Keys
227
+
228
+ **Pattern**: Add SSH key for deployments
229
+
230
+ ```yaml
231
+ - name: Setup SSH key
232
+ run: |
233
+ mkdir -p ~/.ssh
234
+ echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
235
+ chmod 600 ~/.ssh/id_rsa
236
+ ssh-keyscan ${{ secrets.SSH_HOST }} >> ~/.ssh/known_hosts
237
+ ```
238
+
239
+ ### 4. Service Account Keys (JSON)
240
+
241
+ **Pattern**: Store JSON credentials as secret
242
+
243
+ ```yaml
244
+ - name: Authenticate with GCP
245
+ run: |
246
+ echo '${{ secrets.GCP_SERVICE_ACCOUNT_KEY }}' > key.json
247
+ gcloud auth activate-service-account --key-file=key.json
248
+ rm key.json # Clean up
249
+ ```
250
+
251
+ ### 5. Certificates (PEM/CRT)
252
+
253
+ **Pattern**: Multi-line secret as file
254
+
255
+ ```yaml
256
+ - name: Setup certificate
257
+ run: |
258
+ echo "${{ secrets.SSL_CERTIFICATE }}" > cert.pem
259
+ echo "${{ secrets.SSL_PRIVATE_KEY }}" > key.pem
260
+ chmod 600 *.pem
261
+ ```
262
+
263
+ ### 6. Signing Keys
264
+
265
+ **Pattern**: Sign artifacts with secret key
266
+
267
+ ```yaml
268
+ - name: Sign package
269
+ run: |
270
+ echo "${{ secrets.GPG_PRIVATE_KEY }}" | gpg --import
271
+ gpg --sign package.tar.gz
272
+ ```
273
+
274
+ ## Advanced Patterns
275
+
276
+ ### Pattern 1: Dynamic Secrets from Vault
277
+
278
+ **Use Vault for dynamic, short-lived secrets**:
279
+
280
+ ```yaml
281
+ - name: Get secrets from Vault
282
+ run: |
283
+ # Login to Vault
284
+ vault login -method=github token=${{ secrets.VAULT_TOKEN }}
285
+
286
+ # Get dynamic database credentials (expires in 1 hour)
287
+ export DB_USER=$(vault read -field=username database/creds/app)
288
+ export DB_PASSWORD=$(vault read -field=password database/creds/app)
289
+
290
+ # Use credentials
291
+ psql "postgres://$DB_USER:$DB_PASSWORD@$DB_HOST/$DB_NAME"
292
+ ```
293
+
294
+ ### Pattern 2: AWS Secrets Manager
295
+
296
+ **Retrieve secrets at runtime**:
297
+
298
+ ```yaml
299
+ - name: Configure AWS credentials
300
+ uses: aws-actions/configure-aws-credentials@v4
301
+ with:
302
+ role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
303
+
304
+ - name: Get secrets from AWS Secrets Manager
305
+ run: |
306
+ export API_KEY=$(aws secretsmanager get-secret-value \
307
+ --secret-id production/api-key \
308
+ --query SecretString \
309
+ --output text)
310
+
311
+ # Use API_KEY
312
+ curl -H "Authorization: Bearer $API_KEY" https://api.example.com
313
+ ```
314
+
315
+ ### Pattern 3: Google Secret Manager
316
+
317
+ ```yaml
318
+ - name: Authenticate with GCP
319
+ uses: google-github-actions/auth@v2
320
+ with:
321
+ credentials_json: ${{ secrets.GCP_CREDENTIALS }}
322
+
323
+ - name: Get secrets
324
+ run: |
325
+ export DATABASE_URL=$(gcloud secrets versions access latest \
326
+ --secret="database-url")
327
+ ```
328
+
329
+ ### Pattern 4: OIDC/Federated Authentication
330
+
331
+ **Passwordless authentication using OIDC** (GitHub Actions → AWS):
332
+
333
+ ```yaml
334
+ - name: Configure AWS Credentials
335
+ uses: aws-actions/configure-aws-credentials@v4
336
+ with:
337
+ role-to-assume: arn:aws:iam::123456789:role/GitHubActionsRole
338
+ aws-region: us-east-1
339
+ # No secrets needed! Uses OIDC token
340
+ ```
341
+
342
+ **Benefits**:
343
+ - No long-lived credentials
344
+ - Automatic rotation
345
+ - Fine-grained permissions
346
+
347
+ ## Security Best Practices
348
+
349
+ ### ✅ DO
350
+
351
+ 1. **Use Secret Scanning**
352
+ ```yaml
353
+ # Enable in GitHub: Settings → Code security and analysis
354
+ # Automatically detects committed secrets
355
+ ```
356
+
357
+ 2. **Mask Secrets in Logs**
358
+ ```yaml
359
+ # Secrets automatically masked in GitHub Actions logs
360
+ # Manually mask custom values:
361
+ - run: echo "::add-mask::$CUSTOM_VALUE"
362
+ ```
363
+
364
+ 3. **Use Separate Secrets Per Environment**
365
+ ```yaml
366
+ production:
367
+ env:
368
+ API_KEY: ${{ secrets.PROD_API_KEY }}
369
+
370
+ staging:
371
+ env:
372
+ API_KEY: ${{ secrets.STAGING_API_KEY }}
373
+ ```
374
+
375
+ 4. **Limit Secret Scope**
376
+ ```yaml
377
+ # GitHub: Only available to protected branches
378
+ # Settings → Secrets → Environment secrets → production
379
+ # ✓ Required reviewers
380
+ # ✓ Wait timer
381
+ ```
382
+
383
+ 5. **Audit Secret Usage**
384
+ ```yaml
385
+ # GitHub audit log shows:
386
+ # - Who accessed secrets
387
+ # - When secrets were used
388
+ # - Which workflows used secrets
389
+ ```
390
+
391
+ 6. **Rotate Secrets Regularly**
392
+ ```bash
393
+ # Automate rotation with cron job
394
+ 0 0 1 * * rotate-secrets.sh # Monthly
395
+ ```
396
+
397
+ ### ❌ DON'T
398
+
399
+ 1. **Don't Echo Secrets**
400
+ ```yaml
401
+ # Bad
402
+ - run: echo "API key is ${{ secrets.API_KEY }}"
403
+
404
+ # Good
405
+ - run: echo "API key configured"
406
+ ```
407
+
408
+ 2. **Don't Store Secrets in Code**
409
+ ```javascript
410
+ // Bad
411
+ const key = 'sk_live_abc123';
412
+
413
+ // Good
414
+ const key = process.env.API_KEY;
415
+ ```
416
+
417
+ 3. **Don't Use Secrets in PR Builds**
418
+ ```yaml
419
+ # Bad - secrets exposed to forks
420
+ on: pull_request
421
+
422
+ # Good - use pull_request_target with care
423
+ on:
424
+ pull_request_target:
425
+ types: [labeled]
426
+
427
+ jobs:
428
+ test:
429
+ if: github.event.label.name == 'safe-to-test'
430
+ ```
431
+
432
+ 4. **Don't Share Secrets Across Teams**
433
+ ```yaml
434
+ # Bad - everyone has prod access
435
+ env:
436
+ PROD_KEY: ${{ secrets.PROD_KEY }}
437
+
438
+ # Good - separate secrets per team/environment
439
+ ```
440
+
441
+ 5. **Don't Commit `.env` Files**
442
+ ```bash
443
+ # .gitignore
444
+ .env
445
+ .env.local
446
+ .env.*.local
447
+ **/.env
448
+ ```
449
+
450
+ ## Secret Rotation Strategy
451
+
452
+ ### Automated Rotation Process
453
+
454
+ **1. Generate New Secret**:
455
+ ```bash
456
+ # Script: rotate-api-key.sh
457
+ NEW_KEY=$(generate-api-key.sh)
458
+
459
+ # Update in secret store
460
+ gh secret set API_KEY --body "$NEW_KEY"
461
+
462
+ # Update in application
463
+ update-application-config.sh "$NEW_KEY"
464
+ ```
465
+
466
+ **2. Test New Secret**:
467
+ ```yaml
468
+ - name: Test new secret
469
+ run: |
470
+ curl -H "Authorization: Bearer ${{ secrets.API_KEY }}" \
471
+ https://api.example.com/health
472
+ ```
473
+
474
+ **3. Deactivate Old Secret**:
475
+ ```bash
476
+ # After confirming new secret works
477
+ deactivate-old-api-key.sh "$OLD_KEY"
478
+ ```
479
+
480
+ ### Rotation Checklist
481
+
482
+ - [ ] Generate new secret
483
+ - [ ] Update in CI/CD platform
484
+ - [ ] Deploy with new secret
485
+ - [ ] Verify functionality
486
+ - [ ] Revoke old secret
487
+ - [ ] Update documentation
488
+
489
+ ## Troubleshooting
490
+
491
+ ### Secret Not Available
492
+
493
+ **Issue**: Workflow can't access secret
494
+
495
+ **Solutions**:
496
+ 1. Check secret name matches exactly (case-sensitive)
497
+ 2. Verify workflow has permission to access secret
498
+ 3. Check if secret is environment-specific
499
+ 4. Ensure secret is not expired/deleted
500
+
501
+ ### Secret Masked Incorrectly
502
+
503
+ **Issue**: Secret visible in logs
504
+
505
+ **Solutions**:
506
+ ```yaml
507
+ # Explicitly mask value
508
+ - run: echo "::add-mask::$VALUE"
509
+
510
+ # Check if secret contains special characters
511
+ # - Secrets with spaces may not mask correctly
512
+ # - Use quotes: echo "::add-mask::$SECRET"
513
+ ```
514
+
515
+ ### Secret Too Large
516
+
517
+ **Issue**: Secret exceeds size limit
518
+
519
+ **GitHub Limits**:
520
+ - Secret value: 64 KB
521
+ - Repository: 100 secrets
522
+ - Organization: 1000 secrets
523
+
524
+ **Solutions**:
525
+ 1. Split large secrets into multiple parts
526
+ 2. Store in external secret manager (Vault, AWS Secrets Manager)
527
+ 3. Use base64 encoding for binary data
528
+
529
+ ### Secret Rotation Breaks Deployment
530
+
531
+ **Issue**: Old secret revoked before new one deployed
532
+
533
+ **Solution**:
534
+ ```bash
535
+ # Grace period approach
536
+ 1. Deploy new secret to CI/CD
537
+ 2. Deploy application with new secret
538
+ 3. Wait 24 hours (grace period)
539
+ 4. Revoke old secret
540
+ ```
541
+
542
+ ## Common Pitfalls
543
+
544
+ 1. **❌ Hardcoding secrets**: Always use environment variables
545
+ 2. **❌ Committing `.env`**: Add to `.gitignore`
546
+ 3. **❌ Using same secret everywhere**: Separate dev/staging/prod
547
+ 4. **❌ Never rotating secrets**: Set up automated rotation
548
+ 5. **❌ Logging secrets**: Mask sensitive values
549
+ 6. **❌ Sharing secrets insecurely**: Use secret management platform
550
+ 7. **❌ No audit trail**: Enable secret access logging
551
+
552
+ ## Integration with Rulebook
553
+
554
+ If using `@hivehub/rulebook`, secret management patterns are enforced:
555
+
556
+ ```bash
557
+ # Initialize with secret management best practices
558
+ npx @hivehub/rulebook init
559
+
560
+ # Creates:
561
+ # - .env.example (template)
562
+ # - .gitignore (excludes .env)
563
+ # - Documentation on secret management
564
+ ```
565
+
566
+ **`.env.example`**:
567
+ ```bash
568
+ # API Keys
569
+ API_KEY=your-api-key-here
570
+ DATABASE_URL=postgres://user:password@localhost/db
571
+
572
+ # AWS Credentials
573
+ AWS_ACCESS_KEY_ID=your-access-key
574
+ AWS_SECRET_ACCESS_KEY=your-secret-key
575
+
576
+ # Note: Copy to .env and fill with actual values
577
+ # .env is gitignored and should NEVER be committed
578
+ ```
579
+
580
+ ## Related Templates
581
+
582
+ - See `/.rulebook/specs/GITHUB_ACTIONS.md` for GitHub Actions secrets
583
+ - See `/.rulebook/specs/GITLAB_CI.md` for GitLab CI secrets
584
+ - See `/.rulebook/specs/CI_CD_PATTERNS.md` for deployment patterns
585
+ - See `/.rulebook/specs/GIT.md` for .gitignore patterns