@hivehub/rulebook 5.4.1 → 5.5.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.
- package/.claude/commands/analysis.md +35 -35
- package/.claude/commands/continue.md +33 -33
- package/.claude/commands/ralph-config.md +112 -112
- package/.claude/commands/ralph-history.md +110 -110
- package/.claude/commands/ralph-init.md +72 -72
- package/.claude/commands/ralph-pause-resume.md +105 -105
- package/.claude/commands/ralph-run.md +101 -101
- package/.claude/commands/ralph-status.md +76 -76
- package/.claude/commands/rulebook-decision-create.md +55 -55
- package/.claude/commands/rulebook-decision-list.md +15 -15
- package/.claude/commands/rulebook-knowledge-add.md +41 -41
- package/.claude/commands/rulebook-knowledge-list.md +15 -15
- package/.claude/commands/rulebook-learn-capture.md +48 -48
- package/.claude/commands/rulebook-learn-list.md +13 -13
- package/.claude/commands/rulebook-memory-save.md +48 -48
- package/.claude/commands/rulebook-memory-search.md +47 -47
- package/.claude/commands/rulebook-task-apply.md +67 -67
- package/.claude/commands/rulebook-task-archive.md +94 -94
- package/.claude/commands/rulebook-task-create.md +93 -93
- package/.claude/commands/rulebook-task-list.md +42 -42
- package/.claude/commands/rulebook-task-show.md +52 -52
- package/.claude/commands/rulebook-task-validate.md +53 -53
- package/.claude-plugin/marketplace.json +28 -28
- package/.claude-plugin/plugin.json +8 -8
- package/README.md +394 -393
- package/dist/core/generator.d.ts +1 -1
- package/dist/core/generator.d.ts.map +1 -1
- package/dist/core/generator.js +1 -0
- package/dist/core/generator.js.map +1 -1
- package/dist/hooks/terse-activate.d.ts +59 -0
- package/dist/hooks/terse-activate.d.ts.map +1 -0
- package/dist/hooks/terse-activate.js +149 -0
- package/dist/hooks/terse-activate.js.map +1 -0
- package/dist/hooks/terse-config.d.ts +51 -0
- package/dist/hooks/terse-config.d.ts.map +1 -0
- package/dist/hooks/terse-config.js +130 -0
- package/dist/hooks/terse-config.js.map +1 -0
- package/dist/hooks/terse-mode-tracker.d.ts +78 -0
- package/dist/hooks/terse-mode-tracker.d.ts.map +1 -0
- package/dist/hooks/terse-mode-tracker.js +213 -0
- package/dist/hooks/terse-mode-tracker.js.map +1 -0
- package/dist/index.js +0 -0
- package/dist/mcp/rulebook-server.js +0 -0
- package/package.json +21 -22
- package/templates/agents/accessibility-reviewer.md +43 -43
- package/templates/agents/api-designer.md +42 -42
- package/templates/agents/architect.md +51 -51
- package/templates/agents/build-engineer.md +36 -36
- package/templates/agents/code-reviewer.md +47 -47
- package/templates/agents/compiler/codegen-debugger.md +34 -34
- package/templates/agents/compiler/stdlib-engineer.md +28 -28
- package/templates/agents/compiler/test-coverage-guardian.md +31 -31
- package/templates/agents/context-intelligence.md +52 -52
- package/templates/agents/database-architect.md +41 -41
- package/templates/agents/devops-engineer.md +42 -42
- package/templates/agents/docs-writer.md +38 -38
- package/templates/agents/game-engine/cpp-core-expert.md +35 -35
- package/templates/agents/game-engine/render-engineer.md +22 -22
- package/templates/agents/game-engine/shader-engineer.md +38 -38
- package/templates/agents/game-engine/systems-integration.md +43 -43
- package/templates/agents/generic/code-reviewer.md +41 -41
- package/templates/agents/generic/docs-writer.md +25 -25
- package/templates/agents/generic/project-manager.md +36 -36
- package/templates/agents/generic/researcher.md +34 -34
- package/templates/agents/generic/test-engineer.md +41 -41
- package/templates/agents/i18n-engineer.md +42 -42
- package/templates/agents/implementer.md +42 -42
- package/templates/agents/migration-engineer.md +42 -42
- package/templates/agents/mobile/platform-specialist.md +22 -22
- package/templates/agents/mobile/ui-engineer.md +22 -22
- package/templates/agents/performance-engineer.md +49 -49
- package/templates/agents/refactoring-agent.md +41 -41
- package/templates/agents/researcher.md +38 -38
- package/templates/agents/security-reviewer.md +40 -40
- package/templates/agents/team-lead.md +37 -37
- package/templates/agents/tester.md +48 -48
- package/templates/agents/ux-reviewer.md +43 -43
- package/templates/agents/web-app/api-designer.md +22 -22
- package/templates/agents/web-app/backend-engineer.md +30 -30
- package/templates/agents/web-app/database-engineer.md +22 -22
- package/templates/agents/web-app/frontend-engineer.md +29 -29
- package/templates/agents/web-app/security-reviewer.md +32 -32
- package/templates/ci/rulebook-review.yml +26 -26
- package/templates/cli/AIDER.md +49 -49
- package/templates/cli/AMAZON_Q.md +25 -25
- package/templates/cli/AUGGIE.md +32 -32
- package/templates/cli/CLAUDE.md +117 -117
- package/templates/cli/CLINE.md +99 -99
- package/templates/cli/CODEBUDDY.md +20 -20
- package/templates/cli/CODEIUM.md +20 -20
- package/templates/cli/CODEX.md +21 -21
- package/templates/cli/CONTINUE.md +34 -34
- package/templates/cli/CURSOR_CLI.md +62 -62
- package/templates/cli/FACTORY.md +18 -18
- package/templates/cli/GEMINI.md +35 -35
- package/templates/cli/KILOCODE.md +18 -18
- package/templates/cli/OPENCODE.md +18 -18
- package/templates/cli/_GENERIC_TEMPLATE.md +29 -29
- package/templates/commands/rulebook-decision-create.md +55 -55
- package/templates/commands/rulebook-decision-list.md +15 -15
- package/templates/commands/rulebook-knowledge-add.md +41 -41
- package/templates/commands/rulebook-knowledge-list.md +15 -15
- package/templates/commands/rulebook-learn-capture.md +48 -48
- package/templates/commands/rulebook-learn-list.md +13 -13
- package/templates/commands/rulebook-memory-save.md +48 -48
- package/templates/commands/rulebook-memory-search.md +47 -47
- package/templates/commands/rulebook-task-apply.md +67 -67
- package/templates/commands/rulebook-task-archive.md +94 -94
- package/templates/commands/rulebook-task-create.md +93 -93
- package/templates/commands/rulebook-task-list.md +42 -42
- package/templates/commands/rulebook-task-show.md +52 -52
- package/templates/commands/rulebook-task-validate.md +53 -53
- package/templates/compact-context/_default.md +23 -23
- package/templates/compact-context/cpp.md +26 -26
- package/templates/compact-context/go.md +26 -26
- package/templates/compact-context/python.md +26 -26
- package/templates/compact-context/rust.md +28 -28
- package/templates/compact-context/typescript.md +29 -29
- package/templates/core/AGENTS_LEAN.md +26 -1
- package/templates/core/AGENTS_OVERRIDE.md +16 -16
- package/templates/core/AGENT_AUTOMATION.md +296 -296
- package/templates/core/CLAUDE_MD_v2.md +90 -71
- package/templates/core/DAG.md +304 -304
- package/templates/core/DECISIONS.md +38 -38
- package/templates/core/DOCUMENTATION_RULES.md +36 -36
- package/templates/core/KNOWLEDGE.md +49 -49
- package/templates/core/MULTI_AGENT.md +74 -74
- package/templates/core/PLANS.md +28 -28
- package/templates/core/QUALITY_ENFORCEMENT.md +68 -68
- package/templates/core/RALPH.md +471 -471
- package/templates/core/RULEBOOK.md +1947 -1947
- package/templates/core/TIER1_PROHIBITIONS.md +154 -154
- package/templates/core/TOKEN_OPTIMIZATION.md +49 -49
- package/templates/frameworks/ANGULAR.md +36 -36
- package/templates/frameworks/DJANGO.md +83 -83
- package/templates/frameworks/ELECTRON.md +147 -147
- package/templates/frameworks/FLASK.md +38 -38
- package/templates/frameworks/FLUTTER.md +55 -55
- package/templates/frameworks/JQUERY.md +32 -32
- package/templates/frameworks/LARAVEL.md +38 -38
- package/templates/frameworks/NESTJS.md +43 -43
- package/templates/frameworks/NEXTJS.md +127 -127
- package/templates/frameworks/NUXT.md +40 -40
- package/templates/frameworks/RAILS.md +66 -66
- package/templates/frameworks/REACT.md +38 -38
- package/templates/frameworks/REACT_NATIVE.md +47 -47
- package/templates/frameworks/SPRING.md +39 -39
- package/templates/frameworks/SYMFONY.md +36 -36
- package/templates/frameworks/VUE.md +36 -36
- package/templates/frameworks/ZEND.md +35 -35
- package/templates/git/CI_CD_PATTERNS.md +661 -661
- package/templates/git/GITHUB_ACTIONS.md +728 -728
- package/templates/git/GITLAB_CI.md +730 -730
- package/templates/git/GIT_WORKFLOW.md +1192 -1192
- package/templates/git/SECRETS_MANAGEMENT.md +585 -585
- package/templates/hooks/COMMIT_MSG.md +530 -530
- package/templates/hooks/POST_CHECKOUT.md +546 -546
- package/templates/hooks/PREPARE_COMMIT_MSG.md +619 -619
- package/templates/hooks/PRE_COMMIT.md +414 -414
- package/templates/hooks/PRE_PUSH.md +601 -601
- package/templates/hooks/check-context-and-handoff.ps1 +58 -58
- package/templates/hooks/check-context-and-handoff.sh +76 -76
- package/templates/hooks/enforce-team-for-background-agents.ps1 +63 -63
- package/templates/hooks/enforce-team-for-background-agents.sh +55 -55
- package/templates/hooks/on-compact-reinject.sh +34 -34
- package/templates/hooks/resume-from-handoff.ps1 +40 -40
- package/templates/hooks/resume-from-handoff.sh +61 -61
- package/templates/hooks/terse-activate.ps1 +143 -143
- package/templates/hooks/terse-activate.sh +197 -197
- package/templates/hooks/terse-mode-tracker.ps1 +153 -153
- package/templates/hooks/terse-mode-tracker.sh +187 -187
- package/templates/ides/CONTINUE_RULES.md +16 -16
- package/templates/ides/COPILOT.md +37 -37
- package/templates/ides/COPILOT_INSTRUCTIONS.md +23 -23
- package/templates/ides/CURSOR.md +43 -43
- package/templates/ides/GEMINI_RULES.md +17 -17
- package/templates/ides/JETBRAINS_AI.md +35 -35
- package/templates/ides/REPLIT.md +36 -36
- package/templates/ides/TABNINE.md +29 -29
- package/templates/ides/VSCODE.md +40 -40
- package/templates/ides/WINDSURF.md +36 -36
- package/templates/ides/WINDSURF_RULES.md +14 -14
- package/templates/ides/ZED.md +32 -32
- package/templates/ides/cursor-mdc/go.mdc +24 -24
- package/templates/ides/cursor-mdc/python.mdc +24 -24
- package/templates/ides/cursor-mdc/quality.mdc +25 -25
- package/templates/ides/cursor-mdc/ralph.mdc +39 -39
- package/templates/ides/cursor-mdc/rulebook.mdc +38 -38
- package/templates/ides/cursor-mdc/rust.mdc +24 -24
- package/templates/ides/cursor-mdc/typescript.mdc +25 -25
- package/templates/languages/C.md +333 -333
- package/templates/languages/CPP.md +743 -743
- package/templates/languages/CSHARP.md +417 -417
- package/templates/languages/ELIXIR.md +454 -454
- package/templates/languages/ERLANG.md +361 -361
- package/templates/languages/GO.md +645 -645
- package/templates/languages/HASKELL.md +177 -177
- package/templates/languages/JAVA.md +607 -607
- package/templates/languages/JAVASCRIPT.md +631 -631
- package/templates/languages/JULIA.md +97 -97
- package/templates/languages/KOTLIN.md +511 -511
- package/templates/languages/LISP.md +100 -100
- package/templates/languages/LUA.md +74 -74
- package/templates/languages/OBJECTIVEC.md +90 -90
- package/templates/languages/PHP.md +416 -416
- package/templates/languages/PYTHON.md +682 -682
- package/templates/languages/RUBY.md +421 -421
- package/templates/languages/RUST.md +477 -477
- package/templates/languages/SAS.md +73 -73
- package/templates/languages/SCALA.md +348 -348
- package/templates/languages/SOLIDITY.md +580 -580
- package/templates/languages/SQL.md +137 -137
- package/templates/languages/SWIFT.md +466 -466
- package/templates/languages/TYPESCRIPT.md +591 -591
- package/templates/languages/ZIG.md +265 -265
- package/templates/modules/ATLASSIAN.md +255 -255
- package/templates/modules/CONTEXT7.md +54 -54
- package/templates/modules/FIGMA.md +267 -267
- package/templates/modules/GITHUB_MCP.md +64 -64
- package/templates/modules/GRAFANA.md +328 -328
- package/templates/modules/MEMORY.md +126 -126
- package/templates/modules/NOTION.md +247 -247
- package/templates/modules/PLAYWRIGHT.md +90 -90
- package/templates/modules/RULEBOOK_MCP.md +208 -208
- package/templates/modules/SERENA.md +337 -337
- package/templates/modules/SUPABASE.md +223 -223
- package/templates/modules/SYNAP.md +69 -69
- package/templates/modules/VECTORIZER.md +63 -63
- package/templates/modules/sequential-thinking.md +42 -42
- package/templates/ralph/ralph-history.bat +4 -4
- package/templates/ralph/ralph-history.sh +5 -5
- package/templates/ralph/ralph-init.bat +5 -5
- package/templates/ralph/ralph-init.sh +5 -5
- package/templates/ralph/ralph-pause.bat +5 -5
- package/templates/ralph/ralph-pause.sh +5 -5
- package/templates/ralph/ralph-run.bat +5 -5
- package/templates/ralph/ralph-run.sh +5 -5
- package/templates/ralph/ralph-status.bat +4 -4
- package/templates/ralph/ralph-status.sh +5 -5
- package/templates/rules/consult-analysis-before-implementing.md +23 -23
- package/templates/rules/cpp.md +46 -46
- package/templates/rules/csharp.md +44 -44
- package/templates/rules/diagnostic-first.md +39 -39
- package/templates/rules/fail-twice-escalate.md +46 -46
- package/templates/rules/follow-task-sequence.md +36 -36
- package/templates/rules/git-safety.md +29 -29
- package/templates/rules/go.md +40 -40
- package/templates/rules/incremental-implementation.md +56 -56
- package/templates/rules/incremental-tests.md +29 -29
- package/templates/rules/java.md +43 -43
- package/templates/rules/javascript.md +39 -39
- package/templates/rules/knowledge-base-usage.md +41 -41
- package/templates/rules/multi-agent-teams.md +75 -75
- package/templates/rules/no-deferred.md +31 -31
- package/templates/rules/no-shortcuts.md +30 -30
- package/templates/rules/python.md +43 -43
- package/templates/rules/research-first.md +30 -30
- package/templates/rules/respect-handoff-trigger.md +41 -41
- package/templates/rules/rust.md +40 -40
- package/templates/rules/sequential-editing.md +21 -21
- package/templates/rules/session-workflow.md +24 -24
- package/templates/rules/task-decomposition.md +32 -32
- package/templates/rules/typescript.md +40 -40
- package/templates/services/AZURE_BLOB.md +184 -184
- package/templates/services/CASSANDRA.md +239 -239
- package/templates/services/DATADOG.md +26 -26
- package/templates/services/DOCKER.md +124 -124
- package/templates/services/DOCKER_COMPOSE.md +168 -168
- package/templates/services/DYNAMODB.md +308 -308
- package/templates/services/ELASTICSEARCH.md +347 -347
- package/templates/services/GCS.md +178 -178
- package/templates/services/HELM.md +194 -194
- package/templates/services/INFLUXDB.md +265 -265
- package/templates/services/KAFKA.md +341 -341
- package/templates/services/KUBERNETES.md +208 -208
- package/templates/services/MARIADB.md +183 -183
- package/templates/services/MEMCACHED.md +242 -242
- package/templates/services/MINIO.md +201 -201
- package/templates/services/MONGODB.md +268 -268
- package/templates/services/MYSQL.md +358 -358
- package/templates/services/NEO4J.md +247 -247
- package/templates/services/OPENTELEMETRY.md +25 -25
- package/templates/services/ORACLE.md +290 -290
- package/templates/services/PINO.md +24 -24
- package/templates/services/POSTGRESQL.md +326 -326
- package/templates/services/PROMETHEUS.md +33 -33
- package/templates/services/RABBITMQ.md +286 -286
- package/templates/services/REDIS.md +292 -292
- package/templates/services/S3.md +298 -298
- package/templates/services/SENTRY.md +23 -23
- package/templates/services/SQLITE.md +294 -294
- package/templates/services/SQLSERVER.md +294 -294
- package/templates/services/WINSTON.md +30 -30
- package/templates/skills/cli/aider/SKILL.md +59 -59
- package/templates/skills/cli/amazon-q/SKILL.md +35 -35
- package/templates/skills/cli/auggie/SKILL.md +42 -42
- package/templates/skills/cli/claude/SKILL.md +42 -42
- package/templates/skills/cli/cline/SKILL.md +42 -42
- package/templates/skills/cli/codebuddy/SKILL.md +30 -30
- package/templates/skills/cli/codeium/SKILL.md +30 -30
- package/templates/skills/cli/codex/SKILL.md +31 -31
- package/templates/skills/cli/continue/SKILL.md +44 -44
- package/templates/skills/cli/cursor-cli/SKILL.md +38 -38
- package/templates/skills/cli/factory/SKILL.md +28 -28
- package/templates/skills/cli/gemini/SKILL.md +45 -45
- package/templates/skills/cli/kilocode/SKILL.md +28 -28
- package/templates/skills/cli/opencode/SKILL.md +28 -28
- package/templates/skills/core/agent-automation/SKILL.md +194 -194
- package/templates/skills/core/dag/SKILL.md +314 -314
- package/templates/skills/core/documentation-rules/SKILL.md +46 -46
- package/templates/skills/core/karpathy-guidelines/SKILL.md +93 -0
- package/templates/skills/core/quality-enforcement/SKILL.md +78 -78
- package/templates/skills/core/rulebook/SKILL.md +176 -176
- package/templates/skills/core/rulebook-terse/SKILL.md +116 -116
- package/templates/skills/core/rulebook-terse-commit/SKILL.md +96 -96
- package/templates/skills/core/rulebook-terse-review/SKILL.md +112 -112
- package/templates/skills/dev/accessibility/SKILL.md +17 -17
- package/templates/skills/dev/analysis/SKILL.md +19 -19
- package/templates/skills/dev/api-design/SKILL.md +15 -15
- package/templates/skills/dev/architect/SKILL.md +17 -17
- package/templates/skills/dev/build-fix/SKILL.md +17 -17
- package/templates/skills/dev/db-design/SKILL.md +15 -15
- package/templates/skills/dev/debug/SKILL.md +16 -16
- package/templates/skills/dev/deploy/SKILL.md +17 -17
- package/templates/skills/dev/docs/SKILL.md +17 -17
- package/templates/skills/dev/handoff/SKILL.md +27 -27
- package/templates/skills/dev/migrate/SKILL.md +15 -15
- package/templates/skills/dev/perf/SKILL.md +17 -17
- package/templates/skills/dev/refactor/SKILL.md +17 -17
- package/templates/skills/dev/research/SKILL.md +14 -14
- package/templates/skills/dev/review/SKILL.md +18 -18
- package/templates/skills/dev/security-audit/SKILL.md +17 -17
- package/templates/skills/frameworks/angular/SKILL.md +46 -46
- package/templates/skills/frameworks/django/SKILL.md +93 -93
- package/templates/skills/frameworks/electron/SKILL.md +157 -157
- package/templates/skills/frameworks/flask/SKILL.md +48 -48
- package/templates/skills/frameworks/flutter/SKILL.md +65 -65
- package/templates/skills/frameworks/jquery/SKILL.md +42 -42
- package/templates/skills/frameworks/laravel/SKILL.md +48 -48
- package/templates/skills/frameworks/nestjs/SKILL.md +53 -53
- package/templates/skills/frameworks/nextjs/SKILL.md +137 -137
- package/templates/skills/frameworks/nuxt/SKILL.md +50 -50
- package/templates/skills/frameworks/rails/SKILL.md +76 -76
- package/templates/skills/frameworks/react/SKILL.md +48 -48
- package/templates/skills/frameworks/react-native/SKILL.md +57 -57
- package/templates/skills/frameworks/spring/SKILL.md +49 -49
- package/templates/skills/frameworks/symfony/SKILL.md +46 -46
- package/templates/skills/frameworks/vue/SKILL.md +46 -46
- package/templates/skills/frameworks/zend/SKILL.md +45 -45
- package/templates/skills/ides/copilot/SKILL.md +47 -47
- package/templates/skills/ides/cursor/SKILL.md +53 -53
- package/templates/skills/ides/jetbrains-ai/SKILL.md +45 -45
- package/templates/skills/ides/replit/SKILL.md +46 -46
- package/templates/skills/ides/tabnine/SKILL.md +39 -39
- package/templates/skills/ides/vscode/SKILL.md +50 -50
- package/templates/skills/ides/windsurf/SKILL.md +46 -46
- package/templates/skills/ides/zed/SKILL.md +42 -42
- package/templates/skills/languages/c/SKILL.md +343 -343
- package/templates/skills/languages/cpp/SKILL.md +753 -753
- package/templates/skills/languages/csharp/SKILL.md +427 -427
- package/templates/skills/languages/elixir/SKILL.md +464 -464
- package/templates/skills/languages/erlang/SKILL.md +371 -371
- package/templates/skills/languages/go/SKILL.md +655 -655
- package/templates/skills/languages/haskell/SKILL.md +187 -187
- package/templates/skills/languages/java/SKILL.md +617 -617
- package/templates/skills/languages/javascript/SKILL.md +641 -641
- package/templates/skills/languages/julia/SKILL.md +107 -107
- package/templates/skills/languages/kotlin/SKILL.md +521 -521
- package/templates/skills/languages/lisp/SKILL.md +110 -110
- package/templates/skills/languages/lua/SKILL.md +84 -84
- package/templates/skills/languages/objectivec/SKILL.md +100 -100
- package/templates/skills/languages/php/SKILL.md +426 -426
- package/templates/skills/languages/python/SKILL.md +692 -692
- package/templates/skills/languages/ruby/SKILL.md +431 -431
- package/templates/skills/languages/rust/SKILL.md +487 -487
- package/templates/skills/languages/sas/SKILL.md +83 -83
- package/templates/skills/languages/scala/SKILL.md +358 -358
- package/templates/skills/languages/solidity/SKILL.md +590 -590
- package/templates/skills/languages/sql/SKILL.md +147 -147
- package/templates/skills/languages/swift/SKILL.md +476 -476
- package/templates/skills/languages/typescript/SKILL.md +302 -302
- package/templates/skills/languages/zig/SKILL.md +275 -275
- package/templates/skills/modules/atlassian/SKILL.md +265 -265
- package/templates/skills/modules/context7/SKILL.md +64 -64
- package/templates/skills/modules/figma/SKILL.md +277 -277
- package/templates/skills/modules/github-mcp/SKILL.md +74 -74
- package/templates/skills/modules/grafana/SKILL.md +338 -338
- package/templates/skills/modules/memory/SKILL.md +73 -73
- package/templates/skills/modules/notion/SKILL.md +257 -257
- package/templates/skills/modules/playwright/SKILL.md +100 -100
- package/templates/skills/modules/rulebook-mcp/SKILL.md +166 -166
- package/templates/skills/modules/serena/SKILL.md +347 -347
- package/templates/skills/modules/supabase/SKILL.md +233 -233
- package/templates/skills/modules/synap/SKILL.md +79 -79
- package/templates/skills/modules/vectorizer/SKILL.md +73 -73
- package/templates/skills/services/azure-blob/SKILL.md +194 -194
- package/templates/skills/services/cassandra/SKILL.md +249 -249
- package/templates/skills/services/dynamodb/SKILL.md +318 -318
- package/templates/skills/services/elasticsearch/SKILL.md +357 -357
- package/templates/skills/services/gcs/SKILL.md +188 -188
- package/templates/skills/services/influxdb/SKILL.md +275 -275
- package/templates/skills/services/kafka/SKILL.md +351 -351
- package/templates/skills/services/mariadb/SKILL.md +193 -193
- package/templates/skills/services/memcached/SKILL.md +252 -252
- package/templates/skills/services/minio/SKILL.md +211 -211
- package/templates/skills/services/mongodb/SKILL.md +278 -278
- package/templates/skills/services/mysql/SKILL.md +368 -368
- package/templates/skills/services/neo4j/SKILL.md +257 -257
- package/templates/skills/services/oracle/SKILL.md +300 -300
- package/templates/skills/services/postgresql/SKILL.md +336 -336
- package/templates/skills/services/rabbitmq/SKILL.md +296 -296
- package/templates/skills/services/redis/SKILL.md +302 -302
- package/templates/skills/services/s3/SKILL.md +308 -308
- package/templates/skills/services/sqlite/SKILL.md +304 -304
- package/templates/skills/services/sqlserver/SKILL.md +304 -304
- package/templates/skills/workflows/ralph/SKILL.md +309 -309
- package/templates/skills/workflows/ralph/install.sh +87 -87
- package/templates/skills/workflows/ralph/manifest.json +158 -158
|
@@ -1,124 +1,124 @@
|
|
|
1
|
-
<!-- DOCKER:START -->
|
|
2
|
-
# Docker Instructions
|
|
3
|
-
|
|
4
|
-
**CRITICAL**: Follow these Docker best practices for all container builds.
|
|
5
|
-
|
|
6
|
-
## Build Patterns
|
|
7
|
-
|
|
8
|
-
### Multi-Stage Builds
|
|
9
|
-
Use multi-stage builds to minimize final image size and separate build-time dependencies from runtime:
|
|
10
|
-
|
|
11
|
-
```dockerfile
|
|
12
|
-
FROM node:20-alpine AS builder
|
|
13
|
-
WORKDIR /app
|
|
14
|
-
COPY package*.json ./
|
|
15
|
-
RUN npm ci
|
|
16
|
-
COPY . .
|
|
17
|
-
RUN npm run build
|
|
18
|
-
|
|
19
|
-
FROM node:20-alpine AS runtime
|
|
20
|
-
RUN adduser -D appuser
|
|
21
|
-
USER appuser
|
|
22
|
-
WORKDIR /app
|
|
23
|
-
COPY --from=builder /app/dist ./dist
|
|
24
|
-
COPY --from=builder /app/node_modules ./node_modules
|
|
25
|
-
COPY --from=builder /app/package.json ./
|
|
26
|
-
HEALTHCHECK --interval=30s --timeout=3s CMD node -e "require('http').get('http://localhost:3000/health', (r) => { process.exit(r.statusCode === 200 ? 0 : 1) })"
|
|
27
|
-
CMD ["node", "dist/index.js"]
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
### Base Image Selection
|
|
31
|
-
- Pin base image versions: `node:20-alpine` not `node:latest`
|
|
32
|
-
- Prefer `-alpine` or `-slim` variants for smaller images
|
|
33
|
-
- Use official images from Docker Hub verified publishers
|
|
34
|
-
|
|
35
|
-
## Security Requirements
|
|
36
|
-
|
|
37
|
-
### Non-Root User
|
|
38
|
-
ALL containers MUST run as a non-root user:
|
|
39
|
-
```dockerfile
|
|
40
|
-
RUN adduser -D appuser
|
|
41
|
-
USER appuser
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
### Secrets
|
|
45
|
-
- NEVER copy secrets (`.env`, credentials, keys) into image layers
|
|
46
|
-
- Use Docker secrets or runtime environment variables instead
|
|
47
|
-
- Scan images with `docker scout cves` or `trivy image` before pushing
|
|
48
|
-
- Add `--no-cache` to package install commands to reduce attack surface
|
|
49
|
-
|
|
50
|
-
### Image Scanning
|
|
51
|
-
```bash
|
|
52
|
-
# Docker Scout (built-in)
|
|
53
|
-
docker scout cves <image>
|
|
54
|
-
|
|
55
|
-
# Trivy
|
|
56
|
-
trivy image <image>
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
## Required Instructions
|
|
60
|
-
|
|
61
|
-
### HEALTHCHECK
|
|
62
|
-
ALL production images MUST include a HEALTHCHECK:
|
|
63
|
-
```dockerfile
|
|
64
|
-
HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \
|
|
65
|
-
CMD curl -f http://localhost:3000/health || exit 1
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
### .dockerignore Requirements
|
|
69
|
-
Every Docker project MUST have a `.dockerignore` file containing at minimum:
|
|
70
|
-
```
|
|
71
|
-
.git
|
|
72
|
-
node_modules
|
|
73
|
-
dist
|
|
74
|
-
coverage
|
|
75
|
-
*.log
|
|
76
|
-
.env*
|
|
77
|
-
.DS_Store
|
|
78
|
-
*.md
|
|
79
|
-
.vscode
|
|
80
|
-
.idea
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
## Common Patterns
|
|
84
|
-
|
|
85
|
-
### Layer Caching
|
|
86
|
-
Order Dockerfile instructions from least-changing to most-changing:
|
|
87
|
-
```dockerfile
|
|
88
|
-
# 1. Base image (rarely changes)
|
|
89
|
-
FROM node:20-alpine
|
|
90
|
-
|
|
91
|
-
# 2. System dependencies (changes rarely)
|
|
92
|
-
RUN apk add --no-cache curl
|
|
93
|
-
|
|
94
|
-
# 3. Package files (changes when deps change)
|
|
95
|
-
COPY package*.json ./
|
|
96
|
-
RUN npm ci --only=production
|
|
97
|
-
|
|
98
|
-
# 4. Application code (changes frequently)
|
|
99
|
-
COPY . .
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
### Production Optimization
|
|
103
|
-
```dockerfile
|
|
104
|
-
# Use npm ci for deterministic installs
|
|
105
|
-
RUN npm ci --only=production
|
|
106
|
-
|
|
107
|
-
# Remove unnecessary files
|
|
108
|
-
RUN rm -rf /tmp/* /var/cache/apk/*
|
|
109
|
-
|
|
110
|
-
# Set NODE_ENV
|
|
111
|
-
ENV NODE_ENV=production
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
## Best Practices
|
|
115
|
-
|
|
116
|
-
- Use `.dockerignore` to exclude unnecessary files from build context
|
|
117
|
-
- One process per container (do not run multiple services in one container)
|
|
118
|
-
- Use `COPY` over `ADD` unless extracting archives
|
|
119
|
-
- Combine RUN commands to reduce layers: `RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*`
|
|
120
|
-
- Set explicit `WORKDIR` instead of `RUN cd`
|
|
121
|
-
- Use `EXPOSE` to document listening ports
|
|
122
|
-
- Tag images with semantic versions, not just `latest`
|
|
123
|
-
|
|
124
|
-
<!-- DOCKER:END -->
|
|
1
|
+
<!-- DOCKER:START -->
|
|
2
|
+
# Docker Instructions
|
|
3
|
+
|
|
4
|
+
**CRITICAL**: Follow these Docker best practices for all container builds.
|
|
5
|
+
|
|
6
|
+
## Build Patterns
|
|
7
|
+
|
|
8
|
+
### Multi-Stage Builds
|
|
9
|
+
Use multi-stage builds to minimize final image size and separate build-time dependencies from runtime:
|
|
10
|
+
|
|
11
|
+
```dockerfile
|
|
12
|
+
FROM node:20-alpine AS builder
|
|
13
|
+
WORKDIR /app
|
|
14
|
+
COPY package*.json ./
|
|
15
|
+
RUN npm ci
|
|
16
|
+
COPY . .
|
|
17
|
+
RUN npm run build
|
|
18
|
+
|
|
19
|
+
FROM node:20-alpine AS runtime
|
|
20
|
+
RUN adduser -D appuser
|
|
21
|
+
USER appuser
|
|
22
|
+
WORKDIR /app
|
|
23
|
+
COPY --from=builder /app/dist ./dist
|
|
24
|
+
COPY --from=builder /app/node_modules ./node_modules
|
|
25
|
+
COPY --from=builder /app/package.json ./
|
|
26
|
+
HEALTHCHECK --interval=30s --timeout=3s CMD node -e "require('http').get('http://localhost:3000/health', (r) => { process.exit(r.statusCode === 200 ? 0 : 1) })"
|
|
27
|
+
CMD ["node", "dist/index.js"]
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Base Image Selection
|
|
31
|
+
- Pin base image versions: `node:20-alpine` not `node:latest`
|
|
32
|
+
- Prefer `-alpine` or `-slim` variants for smaller images
|
|
33
|
+
- Use official images from Docker Hub verified publishers
|
|
34
|
+
|
|
35
|
+
## Security Requirements
|
|
36
|
+
|
|
37
|
+
### Non-Root User
|
|
38
|
+
ALL containers MUST run as a non-root user:
|
|
39
|
+
```dockerfile
|
|
40
|
+
RUN adduser -D appuser
|
|
41
|
+
USER appuser
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Secrets
|
|
45
|
+
- NEVER copy secrets (`.env`, credentials, keys) into image layers
|
|
46
|
+
- Use Docker secrets or runtime environment variables instead
|
|
47
|
+
- Scan images with `docker scout cves` or `trivy image` before pushing
|
|
48
|
+
- Add `--no-cache` to package install commands to reduce attack surface
|
|
49
|
+
|
|
50
|
+
### Image Scanning
|
|
51
|
+
```bash
|
|
52
|
+
# Docker Scout (built-in)
|
|
53
|
+
docker scout cves <image>
|
|
54
|
+
|
|
55
|
+
# Trivy
|
|
56
|
+
trivy image <image>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Required Instructions
|
|
60
|
+
|
|
61
|
+
### HEALTHCHECK
|
|
62
|
+
ALL production images MUST include a HEALTHCHECK:
|
|
63
|
+
```dockerfile
|
|
64
|
+
HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \
|
|
65
|
+
CMD curl -f http://localhost:3000/health || exit 1
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### .dockerignore Requirements
|
|
69
|
+
Every Docker project MUST have a `.dockerignore` file containing at minimum:
|
|
70
|
+
```
|
|
71
|
+
.git
|
|
72
|
+
node_modules
|
|
73
|
+
dist
|
|
74
|
+
coverage
|
|
75
|
+
*.log
|
|
76
|
+
.env*
|
|
77
|
+
.DS_Store
|
|
78
|
+
*.md
|
|
79
|
+
.vscode
|
|
80
|
+
.idea
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Common Patterns
|
|
84
|
+
|
|
85
|
+
### Layer Caching
|
|
86
|
+
Order Dockerfile instructions from least-changing to most-changing:
|
|
87
|
+
```dockerfile
|
|
88
|
+
# 1. Base image (rarely changes)
|
|
89
|
+
FROM node:20-alpine
|
|
90
|
+
|
|
91
|
+
# 2. System dependencies (changes rarely)
|
|
92
|
+
RUN apk add --no-cache curl
|
|
93
|
+
|
|
94
|
+
# 3. Package files (changes when deps change)
|
|
95
|
+
COPY package*.json ./
|
|
96
|
+
RUN npm ci --only=production
|
|
97
|
+
|
|
98
|
+
# 4. Application code (changes frequently)
|
|
99
|
+
COPY . .
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Production Optimization
|
|
103
|
+
```dockerfile
|
|
104
|
+
# Use npm ci for deterministic installs
|
|
105
|
+
RUN npm ci --only=production
|
|
106
|
+
|
|
107
|
+
# Remove unnecessary files
|
|
108
|
+
RUN rm -rf /tmp/* /var/cache/apk/*
|
|
109
|
+
|
|
110
|
+
# Set NODE_ENV
|
|
111
|
+
ENV NODE_ENV=production
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Best Practices
|
|
115
|
+
|
|
116
|
+
- Use `.dockerignore` to exclude unnecessary files from build context
|
|
117
|
+
- One process per container (do not run multiple services in one container)
|
|
118
|
+
- Use `COPY` over `ADD` unless extracting archives
|
|
119
|
+
- Combine RUN commands to reduce layers: `RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*`
|
|
120
|
+
- Set explicit `WORKDIR` instead of `RUN cd`
|
|
121
|
+
- Use `EXPOSE` to document listening ports
|
|
122
|
+
- Tag images with semantic versions, not just `latest`
|
|
123
|
+
|
|
124
|
+
<!-- DOCKER:END -->
|
|
@@ -1,168 +1,168 @@
|
|
|
1
|
-
<!-- DOCKER_COMPOSE:START -->
|
|
2
|
-
# Docker Compose Instructions
|
|
3
|
-
|
|
4
|
-
**CRITICAL**: Follow these Docker Compose best practices for local development and multi-container orchestration.
|
|
5
|
-
|
|
6
|
-
## Version and Structure
|
|
7
|
-
|
|
8
|
-
### File Organization
|
|
9
|
-
- Use `docker-compose.yml` for base configuration
|
|
10
|
-
- Use `docker-compose.override.yml` for local development overrides
|
|
11
|
-
- Use `docker-compose.prod.yml` for production-specific settings
|
|
12
|
-
- Do NOT commit secrets in `docker-compose.yml` — use `.env` files
|
|
13
|
-
|
|
14
|
-
### Compose File
|
|
15
|
-
```yaml
|
|
16
|
-
services:
|
|
17
|
-
app:
|
|
18
|
-
build:
|
|
19
|
-
context: .
|
|
20
|
-
dockerfile: Dockerfile
|
|
21
|
-
target: runtime
|
|
22
|
-
env_file: [.env]
|
|
23
|
-
ports:
|
|
24
|
-
- "3000:3000"
|
|
25
|
-
depends_on:
|
|
26
|
-
db:
|
|
27
|
-
condition: service_healthy
|
|
28
|
-
healthcheck:
|
|
29
|
-
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
|
|
30
|
-
interval: 30s
|
|
31
|
-
timeout: 3s
|
|
32
|
-
retries: 3
|
|
33
|
-
start_period: 10s
|
|
34
|
-
deploy:
|
|
35
|
-
resources:
|
|
36
|
-
limits:
|
|
37
|
-
memory: 512M
|
|
38
|
-
cpus: "0.5"
|
|
39
|
-
restart: unless-stopped
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
## Required Fields Per Service
|
|
43
|
-
|
|
44
|
-
### Health Checks
|
|
45
|
-
ALL services MUST define a healthcheck:
|
|
46
|
-
```yaml
|
|
47
|
-
healthcheck:
|
|
48
|
-
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
|
|
49
|
-
interval: 30s
|
|
50
|
-
timeout: 3s
|
|
51
|
-
retries: 3
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
### Resource Limits
|
|
55
|
-
ALL services SHOULD define resource limits for production-like environments:
|
|
56
|
-
```yaml
|
|
57
|
-
deploy:
|
|
58
|
-
resources:
|
|
59
|
-
limits:
|
|
60
|
-
memory: 512M
|
|
61
|
-
cpus: "0.5"
|
|
62
|
-
reservations:
|
|
63
|
-
memory: 128M
|
|
64
|
-
cpus: "0.25"
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
### Restart Policy
|
|
68
|
-
```yaml
|
|
69
|
-
restart: unless-stopped
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
### Named Volumes
|
|
73
|
-
Use named volumes (not bind mounts) for persistent data:
|
|
74
|
-
```yaml
|
|
75
|
-
volumes:
|
|
76
|
-
postgres_data:
|
|
77
|
-
redis_data:
|
|
78
|
-
|
|
79
|
-
services:
|
|
80
|
-
db:
|
|
81
|
-
volumes:
|
|
82
|
-
- postgres_data:/var/lib/postgresql/data
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
## Environment Variables
|
|
86
|
-
|
|
87
|
-
### Configuration
|
|
88
|
-
- Use `.env` file: `env_file: [.env]`
|
|
89
|
-
- Never hardcode credentials in docker-compose.yml
|
|
90
|
-
- Document all required environment variables in README or `.env.example`
|
|
91
|
-
|
|
92
|
-
### .env.example Pattern
|
|
93
|
-
```bash
|
|
94
|
-
# Database
|
|
95
|
-
DB_HOST=localhost
|
|
96
|
-
DB_PORT=5432
|
|
97
|
-
DB_NAME=myapp
|
|
98
|
-
DB_USER=myuser
|
|
99
|
-
DB_PASSWORD=changeme
|
|
100
|
-
|
|
101
|
-
# Redis
|
|
102
|
-
REDIS_URL=redis://localhost:6379
|
|
103
|
-
|
|
104
|
-
# Application
|
|
105
|
-
NODE_ENV=development
|
|
106
|
-
PORT=3000
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
## Networking
|
|
110
|
-
|
|
111
|
-
### Service Communication
|
|
112
|
-
- Services on the same network communicate by service name
|
|
113
|
-
- Use explicit networks for isolation:
|
|
114
|
-
```yaml
|
|
115
|
-
networks:
|
|
116
|
-
frontend:
|
|
117
|
-
backend:
|
|
118
|
-
|
|
119
|
-
services:
|
|
120
|
-
app:
|
|
121
|
-
networks: [frontend, backend]
|
|
122
|
-
db:
|
|
123
|
-
networks: [backend]
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
## Common Patterns
|
|
127
|
-
|
|
128
|
-
### Development Setup
|
|
129
|
-
```yaml
|
|
130
|
-
services:
|
|
131
|
-
app:
|
|
132
|
-
build: .
|
|
133
|
-
volumes:
|
|
134
|
-
- .:/app
|
|
135
|
-
- /app/node_modules
|
|
136
|
-
environment:
|
|
137
|
-
- NODE_ENV=development
|
|
138
|
-
command: npm run dev
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
### Database with Init Scripts
|
|
142
|
-
```yaml
|
|
143
|
-
services:
|
|
144
|
-
db:
|
|
145
|
-
image: postgres:16-alpine
|
|
146
|
-
environment:
|
|
147
|
-
POSTGRES_DB: myapp
|
|
148
|
-
POSTGRES_USER: myuser
|
|
149
|
-
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
|
150
|
-
volumes:
|
|
151
|
-
- postgres_data:/var/lib/postgresql/data
|
|
152
|
-
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
|
|
153
|
-
healthcheck:
|
|
154
|
-
test: ["CMD-SHELL", "pg_isready -U myuser"]
|
|
155
|
-
interval: 10s
|
|
156
|
-
retries: 5
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
## Best Practices
|
|
160
|
-
|
|
161
|
-
- Use `depends_on` with `condition: service_healthy` for startup ordering
|
|
162
|
-
- Pin image versions (e.g., `postgres:16-alpine`, not `postgres:latest`)
|
|
163
|
-
- Keep compose files DRY with YAML anchors or extension fields (`x-common`)
|
|
164
|
-
- Use `docker compose up --build` to rebuild images after code changes
|
|
165
|
-
- Run `docker compose down -v` to clean up volumes during development
|
|
166
|
-
- Separate concerns: one service per container
|
|
167
|
-
|
|
168
|
-
<!-- DOCKER_COMPOSE:END -->
|
|
1
|
+
<!-- DOCKER_COMPOSE:START -->
|
|
2
|
+
# Docker Compose Instructions
|
|
3
|
+
|
|
4
|
+
**CRITICAL**: Follow these Docker Compose best practices for local development and multi-container orchestration.
|
|
5
|
+
|
|
6
|
+
## Version and Structure
|
|
7
|
+
|
|
8
|
+
### File Organization
|
|
9
|
+
- Use `docker-compose.yml` for base configuration
|
|
10
|
+
- Use `docker-compose.override.yml` for local development overrides
|
|
11
|
+
- Use `docker-compose.prod.yml` for production-specific settings
|
|
12
|
+
- Do NOT commit secrets in `docker-compose.yml` — use `.env` files
|
|
13
|
+
|
|
14
|
+
### Compose File
|
|
15
|
+
```yaml
|
|
16
|
+
services:
|
|
17
|
+
app:
|
|
18
|
+
build:
|
|
19
|
+
context: .
|
|
20
|
+
dockerfile: Dockerfile
|
|
21
|
+
target: runtime
|
|
22
|
+
env_file: [.env]
|
|
23
|
+
ports:
|
|
24
|
+
- "3000:3000"
|
|
25
|
+
depends_on:
|
|
26
|
+
db:
|
|
27
|
+
condition: service_healthy
|
|
28
|
+
healthcheck:
|
|
29
|
+
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
|
|
30
|
+
interval: 30s
|
|
31
|
+
timeout: 3s
|
|
32
|
+
retries: 3
|
|
33
|
+
start_period: 10s
|
|
34
|
+
deploy:
|
|
35
|
+
resources:
|
|
36
|
+
limits:
|
|
37
|
+
memory: 512M
|
|
38
|
+
cpus: "0.5"
|
|
39
|
+
restart: unless-stopped
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Required Fields Per Service
|
|
43
|
+
|
|
44
|
+
### Health Checks
|
|
45
|
+
ALL services MUST define a healthcheck:
|
|
46
|
+
```yaml
|
|
47
|
+
healthcheck:
|
|
48
|
+
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
|
|
49
|
+
interval: 30s
|
|
50
|
+
timeout: 3s
|
|
51
|
+
retries: 3
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Resource Limits
|
|
55
|
+
ALL services SHOULD define resource limits for production-like environments:
|
|
56
|
+
```yaml
|
|
57
|
+
deploy:
|
|
58
|
+
resources:
|
|
59
|
+
limits:
|
|
60
|
+
memory: 512M
|
|
61
|
+
cpus: "0.5"
|
|
62
|
+
reservations:
|
|
63
|
+
memory: 128M
|
|
64
|
+
cpus: "0.25"
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Restart Policy
|
|
68
|
+
```yaml
|
|
69
|
+
restart: unless-stopped
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Named Volumes
|
|
73
|
+
Use named volumes (not bind mounts) for persistent data:
|
|
74
|
+
```yaml
|
|
75
|
+
volumes:
|
|
76
|
+
postgres_data:
|
|
77
|
+
redis_data:
|
|
78
|
+
|
|
79
|
+
services:
|
|
80
|
+
db:
|
|
81
|
+
volumes:
|
|
82
|
+
- postgres_data:/var/lib/postgresql/data
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Environment Variables
|
|
86
|
+
|
|
87
|
+
### Configuration
|
|
88
|
+
- Use `.env` file: `env_file: [.env]`
|
|
89
|
+
- Never hardcode credentials in docker-compose.yml
|
|
90
|
+
- Document all required environment variables in README or `.env.example`
|
|
91
|
+
|
|
92
|
+
### .env.example Pattern
|
|
93
|
+
```bash
|
|
94
|
+
# Database
|
|
95
|
+
DB_HOST=localhost
|
|
96
|
+
DB_PORT=5432
|
|
97
|
+
DB_NAME=myapp
|
|
98
|
+
DB_USER=myuser
|
|
99
|
+
DB_PASSWORD=changeme
|
|
100
|
+
|
|
101
|
+
# Redis
|
|
102
|
+
REDIS_URL=redis://localhost:6379
|
|
103
|
+
|
|
104
|
+
# Application
|
|
105
|
+
NODE_ENV=development
|
|
106
|
+
PORT=3000
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Networking
|
|
110
|
+
|
|
111
|
+
### Service Communication
|
|
112
|
+
- Services on the same network communicate by service name
|
|
113
|
+
- Use explicit networks for isolation:
|
|
114
|
+
```yaml
|
|
115
|
+
networks:
|
|
116
|
+
frontend:
|
|
117
|
+
backend:
|
|
118
|
+
|
|
119
|
+
services:
|
|
120
|
+
app:
|
|
121
|
+
networks: [frontend, backend]
|
|
122
|
+
db:
|
|
123
|
+
networks: [backend]
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Common Patterns
|
|
127
|
+
|
|
128
|
+
### Development Setup
|
|
129
|
+
```yaml
|
|
130
|
+
services:
|
|
131
|
+
app:
|
|
132
|
+
build: .
|
|
133
|
+
volumes:
|
|
134
|
+
- .:/app
|
|
135
|
+
- /app/node_modules
|
|
136
|
+
environment:
|
|
137
|
+
- NODE_ENV=development
|
|
138
|
+
command: npm run dev
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Database with Init Scripts
|
|
142
|
+
```yaml
|
|
143
|
+
services:
|
|
144
|
+
db:
|
|
145
|
+
image: postgres:16-alpine
|
|
146
|
+
environment:
|
|
147
|
+
POSTGRES_DB: myapp
|
|
148
|
+
POSTGRES_USER: myuser
|
|
149
|
+
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
|
150
|
+
volumes:
|
|
151
|
+
- postgres_data:/var/lib/postgresql/data
|
|
152
|
+
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
|
|
153
|
+
healthcheck:
|
|
154
|
+
test: ["CMD-SHELL", "pg_isready -U myuser"]
|
|
155
|
+
interval: 10s
|
|
156
|
+
retries: 5
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Best Practices
|
|
160
|
+
|
|
161
|
+
- Use `depends_on` with `condition: service_healthy` for startup ordering
|
|
162
|
+
- Pin image versions (e.g., `postgres:16-alpine`, not `postgres:latest`)
|
|
163
|
+
- Keep compose files DRY with YAML anchors or extension fields (`x-common`)
|
|
164
|
+
- Use `docker compose up --build` to rebuild images after code changes
|
|
165
|
+
- Run `docker compose down -v` to clean up volumes during development
|
|
166
|
+
- Separate concerns: one service per container
|
|
167
|
+
|
|
168
|
+
<!-- DOCKER_COMPOSE:END -->
|