@hivehub/rulebook 5.7.0 → 5.8.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 (599) hide show
  1. package/.claude/commands/analysis.md +35 -35
  2. package/.claude/commands/continue.md +33 -33
  3. package/.claude/commands/rulebook-decision-create.md +55 -55
  4. package/.claude/commands/rulebook-decision-list.md +15 -15
  5. package/.claude/commands/rulebook-knowledge-add.md +41 -41
  6. package/.claude/commands/rulebook-knowledge-list.md +15 -15
  7. package/.claude/commands/rulebook-memory-save.md +48 -48
  8. package/.claude/commands/rulebook-memory-search.md +47 -47
  9. package/.claude/commands/rulebook-task-apply.md +67 -67
  10. package/.claude/commands/rulebook-task-archive.md +94 -94
  11. package/.claude/commands/rulebook-task-create.md +93 -93
  12. package/.claude/commands/rulebook-task-list.md +42 -42
  13. package/.claude/commands/rulebook-task-show.md +52 -52
  14. package/.claude/commands/rulebook-task-validate.md +53 -53
  15. package/.claude-plugin/marketplace.json +28 -28
  16. package/.claude-plugin/plugin.json +8 -8
  17. package/README.md +86 -0
  18. package/dist/cli/commands/claude.d.ts +17 -0
  19. package/dist/cli/commands/claude.d.ts.map +1 -0
  20. package/dist/cli/commands/claude.js +56 -0
  21. package/dist/cli/commands/claude.js.map +1 -0
  22. package/dist/cli/commands/init.d.ts.map +1 -1
  23. package/dist/cli/commands/init.js +18 -2
  24. package/dist/cli/commands/init.js.map +1 -1
  25. package/dist/cli/commands/update.d.ts.map +1 -1
  26. package/dist/cli/commands/update.js +6 -1
  27. package/dist/cli/commands/update.js.map +1 -1
  28. package/dist/cli/prompts.d.ts +13 -0
  29. package/dist/cli/prompts.d.ts.map +1 -1
  30. package/dist/cli/prompts.js +106 -0
  31. package/dist/cli/prompts.js.map +1 -1
  32. package/dist/core/claude/claude-mcp.d.ts +9 -0
  33. package/dist/core/claude/claude-mcp.d.ts.map +1 -1
  34. package/dist/core/claude/claude-mcp.js +30 -0
  35. package/dist/core/claude/claude-mcp.js.map +1 -1
  36. package/dist/core/claude/claude-settings-manager.d.ts +12 -0
  37. package/dist/core/claude/claude-settings-manager.d.ts.map +1 -1
  38. package/dist/core/claude/claude-settings-manager.js +59 -3
  39. package/dist/core/claude/claude-settings-manager.js.map +1 -1
  40. package/dist/core/detect/detector.d.ts +8 -1
  41. package/dist/core/detect/detector.d.ts.map +1 -1
  42. package/dist/core/detect/detector.js +225 -0
  43. package/dist/core/detect/detector.js.map +1 -1
  44. package/dist/core/detect/library-registry.d.ts +40 -0
  45. package/dist/core/detect/library-registry.d.ts.map +1 -0
  46. package/dist/core/detect/library-registry.js +239 -0
  47. package/dist/core/detect/library-registry.js.map +1 -0
  48. package/dist/core/generators/generator.d.ts +1 -0
  49. package/dist/core/generators/generator.d.ts.map +1 -1
  50. package/dist/core/generators/generator.js +37 -0
  51. package/dist/core/generators/generator.js.map +1 -1
  52. package/dist/core/generators/rules-generator.d.ts +1 -5
  53. package/dist/core/generators/rules-generator.d.ts.map +1 -1
  54. package/dist/core/generators/rules-generator.js +40 -1
  55. package/dist/core/generators/rules-generator.js.map +1 -1
  56. package/dist/index.js +12 -0
  57. package/dist/index.js.map +1 -1
  58. package/dist/mcp/rulebook-server.js +0 -0
  59. package/dist/types.d.ts +13 -0
  60. package/dist/types.d.ts.map +1 -1
  61. package/package.json +23 -22
  62. package/templates/agents/accessibility-reviewer.md +43 -43
  63. package/templates/agents/api-designer.md +42 -42
  64. package/templates/agents/architect.md +51 -51
  65. package/templates/agents/build-engineer.md +36 -36
  66. package/templates/agents/code-reviewer.md +47 -47
  67. package/templates/agents/compiler/codegen-debugger.md +34 -34
  68. package/templates/agents/compiler/stdlib-engineer.md +28 -28
  69. package/templates/agents/compiler/test-coverage-guardian.md +31 -31
  70. package/templates/agents/database-architect.md +41 -41
  71. package/templates/agents/devops-engineer.md +42 -42
  72. package/templates/agents/docs-writer.md +38 -38
  73. package/templates/agents/game-engine/cpp-core-expert.md +35 -35
  74. package/templates/agents/game-engine/render-engineer.md +22 -22
  75. package/templates/agents/game-engine/shader-engineer.md +38 -38
  76. package/templates/agents/game-engine/systems-integration.md +43 -43
  77. package/templates/agents/generic/code-reviewer.md +41 -41
  78. package/templates/agents/generic/docs-writer.md +25 -25
  79. package/templates/agents/generic/project-manager.md +36 -36
  80. package/templates/agents/generic/researcher.md +34 -34
  81. package/templates/agents/generic/test-engineer.md +41 -41
  82. package/templates/agents/i18n-engineer.md +42 -42
  83. package/templates/agents/implementer.md +42 -42
  84. package/templates/agents/migration-engineer.md +42 -42
  85. package/templates/agents/mobile/platform-specialist.md +22 -22
  86. package/templates/agents/mobile/ui-engineer.md +22 -22
  87. package/templates/agents/performance-engineer.md +49 -49
  88. package/templates/agents/project-manager.md +215 -0
  89. package/templates/agents/quality-gatekeeper.md +205 -0
  90. package/templates/agents/refactoring-agent.md +41 -41
  91. package/templates/agents/researcher.md +38 -38
  92. package/templates/agents/security-reviewer.md +40 -40
  93. package/templates/agents/team-lead.md +37 -37
  94. package/templates/agents/tester.md +48 -48
  95. package/templates/agents/ux-reviewer.md +43 -43
  96. package/templates/agents/web-app/api-designer.md +22 -22
  97. package/templates/agents/web-app/backend-engineer.md +30 -30
  98. package/templates/agents/web-app/database-engineer.md +22 -22
  99. package/templates/agents/web-app/frontend-engineer.md +29 -29
  100. package/templates/agents/web-app/security-reviewer.md +32 -32
  101. package/templates/ci/rulebook-review.yml +26 -26
  102. package/templates/claude-workflows/bugfix.js +94 -0
  103. package/templates/claude-workflows/feature-pipeline.js +88 -0
  104. package/templates/claude-workflows/release-gate.js +64 -0
  105. package/templates/claude-workflows/review-fanout.js +118 -0
  106. package/templates/claude-workflows/rulebook-driver.js +343 -0
  107. package/templates/claude-workflows/spec-author.js +133 -0
  108. package/templates/cli/AIDER.md +49 -49
  109. package/templates/cli/AMAZON_Q.md +25 -25
  110. package/templates/cli/AUGGIE.md +32 -32
  111. package/templates/cli/CLAUDE.md +117 -117
  112. package/templates/cli/CLINE.md +99 -99
  113. package/templates/cli/CODEBUDDY.md +20 -20
  114. package/templates/cli/CODEIUM.md +20 -20
  115. package/templates/cli/CODEX.md +21 -21
  116. package/templates/cli/CONTINUE.md +34 -34
  117. package/templates/cli/CURSOR_CLI.md +62 -62
  118. package/templates/cli/FACTORY.md +18 -18
  119. package/templates/cli/GEMINI.md +35 -35
  120. package/templates/cli/KILOCODE.md +18 -18
  121. package/templates/cli/_GENERIC_TEMPLATE.md +29 -29
  122. package/templates/commands/rulebook-decision-create.md +55 -55
  123. package/templates/commands/rulebook-decision-list.md +15 -15
  124. package/templates/commands/rulebook-knowledge-add.md +41 -41
  125. package/templates/commands/rulebook-knowledge-list.md +15 -15
  126. package/templates/commands/rulebook-memory-save.md +48 -48
  127. package/templates/commands/rulebook-memory-search.md +47 -47
  128. package/templates/commands/rulebook-task-apply.md +67 -67
  129. package/templates/commands/rulebook-task-archive.md +94 -94
  130. package/templates/commands/rulebook-task-create.md +93 -93
  131. package/templates/commands/rulebook-task-list.md +42 -42
  132. package/templates/commands/rulebook-task-show.md +52 -52
  133. package/templates/commands/rulebook-task-validate.md +53 -53
  134. package/templates/compact-context/_default.md +23 -23
  135. package/templates/compact-context/cpp.md +26 -26
  136. package/templates/compact-context/go.md +26 -26
  137. package/templates/compact-context/python.md +26 -26
  138. package/templates/compact-context/rust.md +28 -28
  139. package/templates/compact-context/typescript.md +29 -29
  140. package/templates/core/AGENTS_OVERRIDE.md +16 -16
  141. package/templates/core/AGENT_AUTOMATION.md +296 -296
  142. package/templates/core/CLAUDE_MD_v2.md +90 -90
  143. package/templates/core/DAG.md +304 -304
  144. package/templates/core/DECISIONS.md +38 -38
  145. package/templates/core/DOCUMENTATION_RULES.md +36 -36
  146. package/templates/core/KNOWLEDGE.md +49 -49
  147. package/templates/core/MULTI_AGENT.md +74 -74
  148. package/templates/core/PLANS.md +28 -28
  149. package/templates/core/QUALITY_ENFORCEMENT.md +68 -68
  150. package/templates/core/RULEBOOK.md +1947 -1947
  151. package/templates/core/TIER1_PROHIBITIONS.md +154 -154
  152. package/templates/core/TOKEN_OPTIMIZATION.md +49 -49
  153. package/templates/git/CI_CD_PATTERNS.md +661 -661
  154. package/templates/git/GITHUB_ACTIONS.md +728 -728
  155. package/templates/git/GITLAB_CI.md +730 -730
  156. package/templates/git/GIT_WORKFLOW.md +1192 -1192
  157. package/templates/git/SECRETS_MANAGEMENT.md +585 -585
  158. package/templates/hooks/COMMIT_MSG.md +530 -530
  159. package/templates/hooks/POST_CHECKOUT.md +546 -546
  160. package/templates/hooks/PREPARE_COMMIT_MSG.md +619 -619
  161. package/templates/hooks/PRE_COMMIT.md +414 -414
  162. package/templates/hooks/PRE_PUSH.md +601 -601
  163. package/templates/hooks/check-context-and-handoff.sh +16 -6
  164. package/templates/hooks/update-check.ps1 +84 -0
  165. package/templates/hooks/update-check.sh +103 -0
  166. package/templates/ides/CONTINUE_RULES.md +16 -16
  167. package/templates/ides/COPILOT_INSTRUCTIONS.md +23 -23
  168. package/templates/ides/GEMINI_RULES.md +17 -17
  169. package/templates/ides/WINDSURF_RULES.md +14 -14
  170. package/templates/languages/C.md +333 -333
  171. package/templates/languages/CPP.md +743 -743
  172. package/templates/languages/CSHARP.md +417 -417
  173. package/templates/languages/ELIXIR.md +454 -454
  174. package/templates/languages/ERLANG.md +361 -361
  175. package/templates/languages/GO.md +645 -645
  176. package/templates/languages/HASKELL.md +177 -177
  177. package/templates/languages/JAVA.md +607 -607
  178. package/templates/languages/JAVASCRIPT.md +631 -631
  179. package/templates/languages/JULIA.md +97 -97
  180. package/templates/languages/KOTLIN.md +511 -511
  181. package/templates/languages/LISP.md +100 -100
  182. package/templates/languages/LUA.md +74 -74
  183. package/templates/languages/OBJECTIVEC.md +90 -90
  184. package/templates/languages/PHP.md +416 -416
  185. package/templates/languages/PYTHON.md +682 -682
  186. package/templates/languages/RUBY.md +421 -421
  187. package/templates/languages/RUST.md +477 -477
  188. package/templates/languages/SAS.md +73 -73
  189. package/templates/languages/SCALA.md +348 -348
  190. package/templates/languages/SOLIDITY.md +580 -580
  191. package/templates/languages/SQL.md +137 -137
  192. package/templates/languages/SWIFT.md +466 -466
  193. package/templates/languages/TYPESCRIPT.md +591 -591
  194. package/templates/languages/ZIG.md +265 -265
  195. package/templates/libraries/go/ECHO.md +18 -0
  196. package/templates/libraries/go/GIN.md +18 -0
  197. package/templates/libraries/go/GORM.md +18 -0
  198. package/templates/libraries/python/DJANGO.md +18 -0
  199. package/templates/libraries/python/FASTAPI.md +18 -0
  200. package/templates/libraries/python/FLASK.md +17 -0
  201. package/templates/libraries/python/PYDANTIC.md +17 -0
  202. package/templates/libraries/python/PYTEST.md +17 -0
  203. package/templates/libraries/python/SQLALCHEMY.md +17 -0
  204. package/templates/libraries/rust/ACTIX.md +17 -0
  205. package/templates/libraries/rust/AXUM.md +18 -0
  206. package/templates/libraries/rust/SERDE.md +16 -0
  207. package/templates/libraries/rust/SQLX.md +17 -0
  208. package/templates/libraries/rust/TOKIO.md +16 -0
  209. package/templates/libraries/typescript/ANGULAR.md +17 -0
  210. package/templates/libraries/typescript/DRIZZLE.md +16 -0
  211. package/templates/libraries/typescript/EXPRESS.md +17 -0
  212. package/templates/libraries/typescript/HEROUI.md +16 -0
  213. package/templates/libraries/typescript/JEST.md +17 -0
  214. package/templates/libraries/typescript/NESTJS.md +17 -0
  215. package/templates/libraries/typescript/NEXT.md +18 -0
  216. package/templates/libraries/typescript/PRISMA.md +16 -0
  217. package/templates/libraries/typescript/RADIX.md +16 -0
  218. package/templates/libraries/typescript/REACT.md +18 -0
  219. package/templates/libraries/typescript/SHADCN.md +16 -0
  220. package/templates/libraries/typescript/SVELTE.md +16 -0
  221. package/templates/libraries/typescript/TAILWIND.md +16 -0
  222. package/templates/libraries/typescript/TRPC.md +16 -0
  223. package/templates/libraries/typescript/VITEST.md +17 -0
  224. package/templates/libraries/typescript/VUE.md +17 -0
  225. package/templates/libraries/typescript/ZOD.md +17 -0
  226. package/templates/modules/ATLASSIAN.md +255 -255
  227. package/templates/modules/CONTEXT7.md +54 -54
  228. package/templates/modules/FIGMA.md +267 -267
  229. package/templates/modules/GITHUB_MCP.md +64 -64
  230. package/templates/modules/GRAFANA.md +328 -328
  231. package/templates/modules/MEMORY.md +126 -126
  232. package/templates/modules/NOTION.md +247 -247
  233. package/templates/modules/PLAYWRIGHT.md +90 -90
  234. package/templates/modules/RULEBOOK_MCP.md +208 -208
  235. package/templates/modules/SERENA.md +337 -337
  236. package/templates/modules/SUPABASE.md +223 -223
  237. package/templates/modules/SYNAP.md +69 -69
  238. package/templates/modules/VECTORIZER.md +63 -63
  239. package/templates/modules/sequential-thinking.md +42 -42
  240. package/templates/rules/consult-analysis-before-implementing.md +23 -23
  241. package/templates/rules/cpp.md +46 -46
  242. package/templates/rules/csharp.md +44 -44
  243. package/templates/rules/diagnostic-first.md +39 -39
  244. package/templates/rules/fail-twice-escalate.md +46 -46
  245. package/templates/rules/follow-task-sequence.md +36 -36
  246. package/templates/rules/git-safety.md +29 -29
  247. package/templates/rules/go.md +40 -40
  248. package/templates/rules/incremental-implementation.md +56 -56
  249. package/templates/rules/incremental-tests.md +29 -29
  250. package/templates/rules/java.md +43 -43
  251. package/templates/rules/javascript.md +39 -39
  252. package/templates/rules/knowledge-base-usage.md +41 -41
  253. package/templates/rules/multi-agent-teams.md +75 -75
  254. package/templates/rules/no-deferred.md +31 -31
  255. package/templates/rules/no-shortcuts.md +30 -30
  256. package/templates/rules/python.md +43 -43
  257. package/templates/rules/research-first.md +30 -30
  258. package/templates/rules/respect-handoff-trigger.md +41 -41
  259. package/templates/rules/rust.md +40 -40
  260. package/templates/rules/sequential-editing.md +21 -21
  261. package/templates/rules/session-workflow.md +24 -24
  262. package/templates/rules/task-decomposition.md +32 -32
  263. package/templates/rules/typescript.md +40 -40
  264. package/templates/skills/cli/aider/SKILL.md +59 -59
  265. package/templates/skills/cli/amazon-q/SKILL.md +35 -35
  266. package/templates/skills/cli/auggie/SKILL.md +42 -42
  267. package/templates/skills/cli/claude/SKILL.md +42 -42
  268. package/templates/skills/cli/cline/SKILL.md +42 -42
  269. package/templates/skills/cli/codebuddy/SKILL.md +30 -30
  270. package/templates/skills/cli/codeium/SKILL.md +30 -30
  271. package/templates/skills/cli/codex/SKILL.md +31 -31
  272. package/templates/skills/cli/continue/SKILL.md +44 -44
  273. package/templates/skills/cli/cursor-cli/SKILL.md +38 -38
  274. package/templates/skills/cli/factory/SKILL.md +28 -28
  275. package/templates/skills/cli/gemini/SKILL.md +45 -45
  276. package/templates/skills/cli/kilocode/SKILL.md +28 -28
  277. package/templates/skills/core/agent-automation/SKILL.md +194 -194
  278. package/templates/skills/core/dag/SKILL.md +314 -314
  279. package/templates/skills/core/documentation-rules/SKILL.md +46 -46
  280. package/templates/skills/core/quality-enforcement/SKILL.md +78 -78
  281. package/templates/skills/core/rulebook/SKILL.md +176 -176
  282. package/templates/skills/core/rulebook-terse/SKILL.md +116 -116
  283. package/templates/skills/core/rulebook-terse-commit/SKILL.md +96 -96
  284. package/templates/skills/core/rulebook-terse-review/SKILL.md +112 -112
  285. package/templates/skills/dev/accessibility/SKILL.md +17 -17
  286. package/templates/skills/dev/analysis/SKILL.md +19 -19
  287. package/templates/skills/dev/api-design/SKILL.md +15 -15
  288. package/templates/skills/dev/architect/SKILL.md +17 -17
  289. package/templates/skills/dev/build-fix/SKILL.md +17 -17
  290. package/templates/skills/dev/db-design/SKILL.md +15 -15
  291. package/templates/skills/dev/debug/SKILL.md +16 -16
  292. package/templates/skills/dev/deploy/SKILL.md +17 -17
  293. package/templates/skills/dev/docs/SKILL.md +17 -17
  294. package/templates/skills/dev/handoff/SKILL.md +27 -27
  295. package/templates/skills/dev/migrate/SKILL.md +15 -15
  296. package/templates/skills/dev/perf/SKILL.md +17 -17
  297. package/templates/skills/dev/refactor/SKILL.md +17 -17
  298. package/templates/skills/dev/research/SKILL.md +14 -14
  299. package/templates/skills/dev/review/SKILL.md +18 -18
  300. package/templates/skills/dev/security-audit/SKILL.md +17 -17
  301. package/templates/skills/dev/spec/SKILL.md +65 -0
  302. package/templates/skills/ides/copilot/SKILL.md +47 -47
  303. package/templates/skills/ides/cursor/SKILL.md +53 -53
  304. package/templates/skills/ides/jetbrains-ai/SKILL.md +45 -45
  305. package/templates/skills/ides/replit/SKILL.md +46 -46
  306. package/templates/skills/ides/tabnine/SKILL.md +39 -39
  307. package/templates/skills/ides/vscode/SKILL.md +50 -50
  308. package/templates/skills/ides/windsurf/SKILL.md +46 -46
  309. package/templates/skills/ides/zed/SKILL.md +42 -42
  310. package/templates/skills/languages/c/SKILL.md +343 -343
  311. package/templates/skills/languages/cpp/SKILL.md +753 -753
  312. package/templates/skills/languages/csharp/SKILL.md +427 -427
  313. package/templates/skills/languages/elixir/SKILL.md +464 -464
  314. package/templates/skills/languages/erlang/SKILL.md +371 -371
  315. package/templates/skills/languages/go/SKILL.md +655 -655
  316. package/templates/skills/languages/haskell/SKILL.md +187 -187
  317. package/templates/skills/languages/java/SKILL.md +617 -617
  318. package/templates/skills/languages/javascript/SKILL.md +641 -641
  319. package/templates/skills/languages/julia/SKILL.md +107 -107
  320. package/templates/skills/languages/kotlin/SKILL.md +521 -521
  321. package/templates/skills/languages/lisp/SKILL.md +110 -110
  322. package/templates/skills/languages/lua/SKILL.md +84 -84
  323. package/templates/skills/languages/objectivec/SKILL.md +100 -100
  324. package/templates/skills/languages/php/SKILL.md +426 -426
  325. package/templates/skills/languages/python/SKILL.md +692 -692
  326. package/templates/skills/languages/ruby/SKILL.md +431 -431
  327. package/templates/skills/languages/rust/SKILL.md +487 -487
  328. package/templates/skills/languages/sas/SKILL.md +83 -83
  329. package/templates/skills/languages/scala/SKILL.md +358 -358
  330. package/templates/skills/languages/solidity/SKILL.md +590 -590
  331. package/templates/skills/languages/sql/SKILL.md +147 -147
  332. package/templates/skills/languages/swift/SKILL.md +476 -476
  333. package/templates/skills/languages/typescript/SKILL.md +302 -302
  334. package/templates/skills/languages/zig/SKILL.md +275 -275
  335. package/templates/skills/modules/atlassian/SKILL.md +265 -265
  336. package/templates/skills/modules/context7/SKILL.md +64 -64
  337. package/templates/skills/modules/figma/SKILL.md +277 -277
  338. package/templates/skills/modules/github-mcp/SKILL.md +74 -74
  339. package/templates/skills/modules/grafana/SKILL.md +338 -338
  340. package/templates/skills/modules/memory/SKILL.md +73 -73
  341. package/templates/skills/modules/notion/SKILL.md +257 -257
  342. package/templates/skills/modules/playwright/SKILL.md +100 -100
  343. package/templates/skills/modules/rulebook-mcp/SKILL.md +166 -166
  344. package/templates/skills/modules/serena/SKILL.md +347 -347
  345. package/templates/skills/modules/supabase/SKILL.md +233 -233
  346. package/templates/skills/modules/synap/SKILL.md +79 -79
  347. package/templates/skills/modules/vectorizer/SKILL.md +73 -73
  348. package/dist/agents/ralph-parser.d.ts +0 -91
  349. package/dist/agents/ralph-parser.d.ts.map +0 -1
  350. package/dist/agents/ralph-parser.js +0 -415
  351. package/dist/agents/ralph-parser.js.map +0 -1
  352. package/dist/cli/commands/analysis.d.ts +0 -8
  353. package/dist/cli/commands/analysis.d.ts.map +0 -1
  354. package/dist/cli/commands/analysis.js +0 -78
  355. package/dist/cli/commands/analysis.js.map +0 -1
  356. package/dist/cli/commands/compress.d.ts +0 -18
  357. package/dist/cli/commands/compress.d.ts.map +0 -1
  358. package/dist/cli/commands/compress.js +0 -100
  359. package/dist/cli/commands/compress.js.map +0 -1
  360. package/dist/cli/commands/ralph.d.ts +0 -45
  361. package/dist/cli/commands/ralph.d.ts.map +0 -1
  362. package/dist/cli/commands/ralph.js +0 -694
  363. package/dist/cli/commands/ralph.js.map +0 -1
  364. package/dist/cli/docs-prompts.d.ts +0 -3
  365. package/dist/cli/docs-prompts.d.ts.map +0 -1
  366. package/dist/cli/docs-prompts.js +0 -45
  367. package/dist/cli/docs-prompts.js.map +0 -1
  368. package/dist/core/agent-manager.d.ts +0 -69
  369. package/dist/core/agent-manager.d.ts.map +0 -1
  370. package/dist/core/agent-manager.js +0 -476
  371. package/dist/core/agent-manager.js.map +0 -1
  372. package/dist/core/agent-template-engine.d.ts +0 -51
  373. package/dist/core/agent-template-engine.d.ts.map +0 -1
  374. package/dist/core/agent-template-engine.js +0 -291
  375. package/dist/core/agent-template-engine.js.map +0 -1
  376. package/dist/core/analysis-manager.d.ts +0 -56
  377. package/dist/core/analysis-manager.d.ts.map +0 -1
  378. package/dist/core/analysis-manager.js +0 -218
  379. package/dist/core/analysis-manager.js.map +0 -1
  380. package/dist/core/auto-fixer.d.ts +0 -14
  381. package/dist/core/auto-fixer.d.ts.map +0 -1
  382. package/dist/core/auto-fixer.js +0 -207
  383. package/dist/core/auto-fixer.js.map +0 -1
  384. package/dist/core/changelog-generator.d.ts +0 -44
  385. package/dist/core/changelog-generator.d.ts.map +0 -1
  386. package/dist/core/changelog-generator.js +0 -222
  387. package/dist/core/changelog-generator.js.map +0 -1
  388. package/dist/core/claude-mcp.d.ts +0 -59
  389. package/dist/core/claude-mcp.d.ts.map +0 -1
  390. package/dist/core/claude-mcp.js +0 -220
  391. package/dist/core/claude-mcp.js.map +0 -1
  392. package/dist/core/claude-md-generator.d.ts +0 -52
  393. package/dist/core/claude-md-generator.d.ts.map +0 -1
  394. package/dist/core/claude-md-generator.js +0 -104
  395. package/dist/core/claude-md-generator.js.map +0 -1
  396. package/dist/core/claude-settings-manager.d.ts +0 -44
  397. package/dist/core/claude-settings-manager.d.ts.map +0 -1
  398. package/dist/core/claude-settings-manager.js +0 -191
  399. package/dist/core/claude-settings-manager.js.map +0 -1
  400. package/dist/core/cli-bridge.d.ts +0 -113
  401. package/dist/core/cli-bridge.d.ts.map +0 -1
  402. package/dist/core/cli-bridge.js +0 -1094
  403. package/dist/core/cli-bridge.js.map +0 -1
  404. package/dist/core/compact-context-manager.d.ts +0 -34
  405. package/dist/core/compact-context-manager.d.ts.map +0 -1
  406. package/dist/core/compact-context-manager.js +0 -60
  407. package/dist/core/compact-context-manager.js.map +0 -1
  408. package/dist/core/complexity-detector.d.ts +0 -36
  409. package/dist/core/complexity-detector.d.ts.map +0 -1
  410. package/dist/core/complexity-detector.js +0 -334
  411. package/dist/core/complexity-detector.js.map +0 -1
  412. package/dist/core/compress/compressor.d.ts +0 -60
  413. package/dist/core/compress/compressor.d.ts.map +0 -1
  414. package/dist/core/compress/compressor.js +0 -232
  415. package/dist/core/compress/compressor.js.map +0 -1
  416. package/dist/core/compress/discover.d.ts +0 -19
  417. package/dist/core/compress/discover.d.ts.map +0 -1
  418. package/dist/core/compress/discover.js +0 -100
  419. package/dist/core/compress/discover.js.map +0 -1
  420. package/dist/core/compress/validator.d.ts +0 -47
  421. package/dist/core/compress/validator.d.ts.map +0 -1
  422. package/dist/core/compress/validator.js +0 -131
  423. package/dist/core/compress/validator.js.map +0 -1
  424. package/dist/core/config-manager.d.ts +0 -86
  425. package/dist/core/config-manager.d.ts.map +0 -1
  426. package/dist/core/config-manager.js +0 -621
  427. package/dist/core/config-manager.js.map +0 -1
  428. package/dist/core/coverage-checker.d.ts +0 -14
  429. package/dist/core/coverage-checker.d.ts.map +0 -1
  430. package/dist/core/coverage-checker.js +0 -176
  431. package/dist/core/coverage-checker.js.map +0 -1
  432. package/dist/core/cursor-mdc-generator.d.ts +0 -30
  433. package/dist/core/cursor-mdc-generator.d.ts.map +0 -1
  434. package/dist/core/cursor-mdc-generator.js +0 -98
  435. package/dist/core/cursor-mdc-generator.js.map +0 -1
  436. package/dist/core/decision-manager.d.ts +0 -25
  437. package/dist/core/decision-manager.d.ts.map +0 -1
  438. package/dist/core/decision-manager.js +0 -183
  439. package/dist/core/decision-manager.js.map +0 -1
  440. package/dist/core/dependency-checker.d.ts +0 -21
  441. package/dist/core/dependency-checker.d.ts.map +0 -1
  442. package/dist/core/dependency-checker.js +0 -247
  443. package/dist/core/dependency-checker.js.map +0 -1
  444. package/dist/core/detector.d.ts +0 -27
  445. package/dist/core/detector.d.ts.map +0 -1
  446. package/dist/core/detector.js +0 -1763
  447. package/dist/core/detector.js.map +0 -1
  448. package/dist/core/docs-generator.d.ts +0 -9
  449. package/dist/core/docs-generator.d.ts.map +0 -1
  450. package/dist/core/docs-generator.js +0 -531
  451. package/dist/core/docs-generator.js.map +0 -1
  452. package/dist/core/doctor.d.ts +0 -19
  453. package/dist/core/doctor.d.ts.map +0 -1
  454. package/dist/core/doctor.js +0 -229
  455. package/dist/core/doctor.js.map +0 -1
  456. package/dist/core/generator.d.ts +0 -56
  457. package/dist/core/generator.d.ts.map +0 -1
  458. package/dist/core/generator.js +0 -1193
  459. package/dist/core/generator.js.map +0 -1
  460. package/dist/core/github-issues-importer.d.ts +0 -82
  461. package/dist/core/github-issues-importer.d.ts.map +0 -1
  462. package/dist/core/github-issues-importer.js +0 -161
  463. package/dist/core/github-issues-importer.js.map +0 -1
  464. package/dist/core/gitignore-generator.d.ts +0 -13
  465. package/dist/core/gitignore-generator.d.ts.map +0 -1
  466. package/dist/core/gitignore-generator.js +0 -307
  467. package/dist/core/gitignore-generator.js.map +0 -1
  468. package/dist/core/health-scorer.d.ts +0 -61
  469. package/dist/core/health-scorer.d.ts.map +0 -1
  470. package/dist/core/health-scorer.js +0 -638
  471. package/dist/core/health-scorer.js.map +0 -1
  472. package/dist/core/iteration-tracker.d.ts +0 -85
  473. package/dist/core/iteration-tracker.d.ts.map +0 -1
  474. package/dist/core/iteration-tracker.js +0 -295
  475. package/dist/core/iteration-tracker.js.map +0 -1
  476. package/dist/core/knowledge-manager.d.ts +0 -24
  477. package/dist/core/knowledge-manager.d.ts.map +0 -1
  478. package/dist/core/knowledge-manager.js +0 -173
  479. package/dist/core/knowledge-manager.js.map +0 -1
  480. package/dist/core/learn-manager.d.ts +0 -29
  481. package/dist/core/learn-manager.d.ts.map +0 -1
  482. package/dist/core/learn-manager.js +0 -159
  483. package/dist/core/learn-manager.js.map +0 -1
  484. package/dist/core/mcp-reference-generator.d.ts +0 -13
  485. package/dist/core/mcp-reference-generator.d.ts.map +0 -1
  486. package/dist/core/mcp-reference-generator.js +0 -66
  487. package/dist/core/mcp-reference-generator.js.map +0 -1
  488. package/dist/core/minimal-scaffolder.d.ts +0 -8
  489. package/dist/core/minimal-scaffolder.d.ts.map +0 -1
  490. package/dist/core/minimal-scaffolder.js +0 -51
  491. package/dist/core/minimal-scaffolder.js.map +0 -1
  492. package/dist/core/modern-console.d.ts +0 -98
  493. package/dist/core/modern-console.d.ts.map +0 -1
  494. package/dist/core/modern-console.js +0 -556
  495. package/dist/core/modern-console.js.map +0 -1
  496. package/dist/core/multi-tool-generator.d.ts +0 -59
  497. package/dist/core/multi-tool-generator.d.ts.map +0 -1
  498. package/dist/core/multi-tool-generator.js +0 -157
  499. package/dist/core/multi-tool-generator.js.map +0 -1
  500. package/dist/core/override-manager.d.ts +0 -23
  501. package/dist/core/override-manager.d.ts.map +0 -1
  502. package/dist/core/override-manager.js +0 -82
  503. package/dist/core/override-manager.js.map +0 -1
  504. package/dist/core/plans-manager.d.ts +0 -46
  505. package/dist/core/plans-manager.d.ts.map +0 -1
  506. package/dist/core/plans-manager.js +0 -158
  507. package/dist/core/plans-manager.js.map +0 -1
  508. package/dist/core/prd-generator.d.ts +0 -48
  509. package/dist/core/prd-generator.d.ts.map +0 -1
  510. package/dist/core/prd-generator.js +0 -233
  511. package/dist/core/prd-generator.js.map +0 -1
  512. package/dist/core/ralph-manager.d.ts +0 -163
  513. package/dist/core/ralph-manager.d.ts.map +0 -1
  514. package/dist/core/ralph-manager.js +0 -555
  515. package/dist/core/ralph-manager.js.map +0 -1
  516. package/dist/core/ralph-parallel.d.ts +0 -55
  517. package/dist/core/ralph-parallel.d.ts.map +0 -1
  518. package/dist/core/ralph-parallel.js +0 -201
  519. package/dist/core/ralph-parallel.js.map +0 -1
  520. package/dist/core/ralph-plan-checkpoint.d.ts +0 -58
  521. package/dist/core/ralph-plan-checkpoint.d.ts.map +0 -1
  522. package/dist/core/ralph-plan-checkpoint.js +0 -154
  523. package/dist/core/ralph-plan-checkpoint.js.map +0 -1
  524. package/dist/core/ralph-scripts.d.ts +0 -12
  525. package/dist/core/ralph-scripts.d.ts.map +0 -1
  526. package/dist/core/ralph-scripts.js +0 -50
  527. package/dist/core/ralph-scripts.js.map +0 -1
  528. package/dist/core/review-manager.d.ts +0 -74
  529. package/dist/core/review-manager.d.ts.map +0 -1
  530. package/dist/core/review-manager.js +0 -371
  531. package/dist/core/review-manager.js.map +0 -1
  532. package/dist/core/rules-generator.d.ts +0 -73
  533. package/dist/core/rules-generator.d.ts.map +0 -1
  534. package/dist/core/rules-generator.js +0 -202
  535. package/dist/core/rules-generator.js.map +0 -1
  536. package/dist/core/skills-manager.d.ts +0 -126
  537. package/dist/core/skills-manager.d.ts.map +0 -1
  538. package/dist/core/skills-manager.js +0 -654
  539. package/dist/core/skills-manager.js.map +0 -1
  540. package/dist/core/state-writer.d.ts +0 -35
  541. package/dist/core/state-writer.d.ts.map +0 -1
  542. package/dist/core/state-writer.js +0 -81
  543. package/dist/core/state-writer.js.map +0 -1
  544. package/dist/core/task-manager.d.ts +0 -127
  545. package/dist/core/task-manager.d.ts.map +0 -1
  546. package/dist/core/task-manager.js +0 -607
  547. package/dist/core/task-manager.js.map +0 -1
  548. package/dist/core/telemetry.d.ts +0 -29
  549. package/dist/core/telemetry.d.ts.map +0 -1
  550. package/dist/core/telemetry.js +0 -57
  551. package/dist/core/telemetry.js.map +0 -1
  552. package/dist/core/validator.d.ts +0 -21
  553. package/dist/core/validator.d.ts.map +0 -1
  554. package/dist/core/validator.js +0 -177
  555. package/dist/core/validator.js.map +0 -1
  556. package/dist/core/version-bumper.d.ts +0 -19
  557. package/dist/core/version-bumper.d.ts.map +0 -1
  558. package/dist/core/version-bumper.js +0 -180
  559. package/dist/core/version-bumper.js.map +0 -1
  560. package/dist/core/watcher.d.ts +0 -9
  561. package/dist/core/watcher.d.ts.map +0 -1
  562. package/dist/core/watcher.js +0 -22
  563. package/dist/core/watcher.js.map +0 -1
  564. package/dist/core/workflow-generator.d.ts +0 -15
  565. package/dist/core/workflow-generator.d.ts.map +0 -1
  566. package/dist/core/workflow-generator.js +0 -391
  567. package/dist/core/workflow-generator.js.map +0 -1
  568. package/dist/hooks/terse-activate.d.ts +0 -59
  569. package/dist/hooks/terse-activate.d.ts.map +0 -1
  570. package/dist/hooks/terse-activate.js +0 -149
  571. package/dist/hooks/terse-activate.js.map +0 -1
  572. package/dist/hooks/terse-config.d.ts +0 -51
  573. package/dist/hooks/terse-config.d.ts.map +0 -1
  574. package/dist/hooks/terse-config.js +0 -130
  575. package/dist/hooks/terse-config.js.map +0 -1
  576. package/dist/hooks/terse-mode-tracker.d.ts +0 -78
  577. package/dist/hooks/terse-mode-tracker.d.ts.map +0 -1
  578. package/dist/hooks/terse-mode-tracker.js +0 -213
  579. package/dist/hooks/terse-mode-tracker.js.map +0 -1
  580. package/dist/memory/hnsw-index.d.ts +0 -68
  581. package/dist/memory/hnsw-index.d.ts.map +0 -1
  582. package/dist/memory/hnsw-index.js +0 -544
  583. package/dist/memory/hnsw-index.js.map +0 -1
  584. package/dist/memory/memory-cache.d.ts +0 -33
  585. package/dist/memory/memory-cache.d.ts.map +0 -1
  586. package/dist/memory/memory-cache.js +0 -85
  587. package/dist/memory/memory-cache.js.map +0 -1
  588. package/dist/memory/memory-search.d.ts +0 -42
  589. package/dist/memory/memory-search.d.ts.map +0 -1
  590. package/dist/memory/memory-search.js +0 -180
  591. package/dist/memory/memory-search.js.map +0 -1
  592. package/dist/memory/memory-store.d.ts +0 -84
  593. package/dist/memory/memory-store.d.ts.map +0 -1
  594. package/dist/memory/memory-store.js +0 -566
  595. package/dist/memory/memory-store.js.map +0 -1
  596. package/dist/memory/memory-vectorizer.d.ts +0 -29
  597. package/dist/memory/memory-vectorizer.d.ts.map +0 -1
  598. package/dist/memory/memory-vectorizer.js +0 -199
  599. package/dist/memory/memory-vectorizer.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