--- phase: 05-mvp-deployment plan: 04 type: execute wave: 2 depends_on: - 05-03 files_modified: - docker-compose.prod.yml - docker-compose.fullstack.yml - Dockerfile - .env.example - README.md - docs/deploy-architecture.md autonomous: true requirements: - PH05-05 must_haves: truths: - "Production handoff uses a bot-only compose artifact instead of the internal full-stack harness." - "Internal E2E compose brings up the bot, platform-agent, and shared volume with explicit health-gated startup." - "Deployment docs and env examples match the split compose artifacts and shared `/agents` contract." artifacts: - path: "docker-compose.prod.yml" provides: "Bot-only deployment handoff artifact" - path: "docker-compose.fullstack.yml" provides: "Internal E2E harness with shared volume and dependency gating" - path: ".env.example" provides: "Documented runtime contract for Phase 05 deployment" key_links: - from: "docker-compose.fullstack.yml" to: "docker-compose.prod.yml" via: "shared service definition or explicit duplication" pattern: "matrix-bot" - from: "docs/deploy-architecture.md" to: "docker-compose.prod.yml" via: "operator handoff instructions" pattern: "prod" --- Split deployment artifacts by operational intent so operator handoff and internal E2E testing stop sharing the same compose contract. Purpose: Phase 05 needs an explicit bot-only production artifact and a separate full-stack compose harness aligned with the shared-volume design. Output: `docker-compose.prod.yml`, `docker-compose.fullstack.yml`, and updated env/docs describing when to use each. @/Users/a/.codex/get-shit-done/workflows/execute-plan.md @/Users/a/.codex/get-shit-done/templates/summary.md @.planning/PROJECT.md @.planning/ROADMAP.md @.planning/STATE.md @.planning/phases/05-mvp-deployment/05-RESEARCH.md @.planning/phases/05-mvp-deployment/05-VALIDATION.md @.planning/phases/04-matrix-mvp-shared-agent-context-and-context-management-comma/04-03-SUMMARY.md @docs/deploy-architecture.md @docker-compose.yml @Dockerfile @.env.example Current root compose contract: ```yaml services: platform-agent: ... matrix-bot: build: . env_file: .env environment: AGENT_BASE_URL: http://platform-agent:8000 SURFACES_WORKSPACE_DIR: /workspace ``` Task 1: Create split prod and fullstack compose artifacts docker-compose.prod.yml, docker-compose.fullstack.yml, Dockerfile, .env.example docker-compose.yml, Dockerfile, .env.example, docs/deploy-architecture.md, .planning/phases/05-mvp-deployment/05-RESEARCH.md, .planning/phases/05-mvp-deployment/05-VALIDATION.md - `docker-compose.prod.yml` defines only the bot-side runtime required for operator handoff. - `docker-compose.fullstack.yml` includes the internal platform-agent service, shared volume mounts, and health-gated startup rather than sleep-based sequencing. - `.env.example` documents the Phase 05 env contract without requiring the reader to inspect the old root compose file. Create two explicit compose artifacts per PH05-05: a bot-only `docker-compose.prod.yml` for deployment handoff and a `docker-compose.fullstack.yml` for internal E2E runs. Align mounts and env values with the Phase 05 shared `/agents` volume direction from research. Reuse the existing Dockerfile unless a small compatibility edit is required. Do not keep the old single-file compose setup as the only documented runtime. docker compose -f docker-compose.prod.yml config > /tmp/phase05-prod-compose.yml && docker compose -f docker-compose.fullstack.yml config > /tmp/phase05-fullstack-compose.yml && rg -n "^services:$|^ matrix-bot:$|^volumes:$|/agents" /tmp/phase05-prod-compose.yml && test -z "$(rg -n "^ platform-agent:$" /tmp/phase05-prod-compose.yml)" && rg -n "^ matrix-bot:$|^ platform-agent:$|condition: service_healthy|healthcheck:|/agents" /tmp/phase05-fullstack-compose.yml Both compose files render successfully and express distinct operational roles: prod handoff vs internal full-stack testing. Task 2: Update deployment docs and operator guidance for the split artifacts README.md, docs/deploy-architecture.md README.md, docs/deploy-architecture.md, docker-compose.prod.yml, docker-compose.fullstack.yml, .env.example - README or deploy doc tells the operator exactly which compose file to use for production vs internal E2E. - The docs describe the shared `/agents` volume behavior and reference the relevant env vars. - The old root `docker-compose.yml` is no longer the primary documented deployment path. Update the repo docs so the Phase 05 deployment story is executable without inference: production handoff stays bot-only, full-stack compose is for internal E2E, and shared-volume file behavior is described in the same terms as the runtime artifacts. Keep documentation narrowly scoped to the shipped compose split; do not widen into platform-master or future storage design. rg -n "docker-compose\\.prod|docker-compose\\.fullstack|/agents|prod handoff|full-stack" README.md docs/deploy-architecture.md .env.example && rg -n "production|deploy" README.md docs/deploy-architecture.md | rg "docker-compose\\.prod" && test -z "$(rg -n "docker compose up|docker-compose\\.yml" README.md docs/deploy-architecture.md | rg "production|deploy")" The docs and env guidance match the new compose artifacts and no longer imply a single shared deployment file. Render both compose files, then grep the docs for the new artifact names and `/agents` references so the operator contract is explicit and consistent. An operator can deploy the Matrix bot with the bot-only compose file, while developers can run the internal end-to-end harness separately without reinterpreting the deployment docs. After completion, create `.planning/phases/05-mvp-deployment/05-04-SUMMARY.md`