Context
Post-MVP residual workstream under Epic #11730. Epic #11720's MVP proves cloud deployment in-repo — a reference profile + compose + day-0 tutorial. Discussion #11718 noted that wiring the deployment into an external team's actual CI/CD or release pipeline is a later phase, contingent on the in-repo proof working first.
Gating Condition
Pursued after #11720's in-repo deployment proof works — the reference profile + deployed healthcheck + production-shaped journey proof (Sub C #11724, Sub D #11725) must land first. Until then: captured intent, not active work.
Scope
- Wiring the containerized Agent OS deployment into an external downstream pipeline: CI/CD trigger, automated redeploy, release-gated deploy.
- Redeploy-safe persistence handoff across pipeline-driven redeploys.
Contract Ledger
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback / Edge Case |
Docs |
Evidence |
deploy-pipeline.sh profile selection |
examples/cloud-deployment/deploy-pipeline.sh |
Compose profiles are selected from positional args, else the space-separated NEO_DEPLOY_PROFILES env, else the default cloud ingress. |
No args + unset env → default cloud ingress. |
PipelineWiring.md — "The reference pipeline shape" |
bash -n syntax check; the guide's usage block |
NEO_DEPLOY_COMPOSE_FILE / NEO_DEPLOY_PROJECT_NAME env |
examples/cloud-deployment/deploy-pipeline.sh |
The compose file resolves from the script's own location (override: NEO_DEPLOY_COMPOSE_FILE); the Compose project name is pinned (NEO_DEPLOY_PROJECT_NAME, default neo-agent-os) so named-volume identity is stable across redeploys. |
Both unset → script-relative compose path + neo-agent-os project name. |
PipelineWiring.md — "Redeploy-safe persistence" |
static script review |
| Redeploy-safe persistence contract |
ai/deploy/docker-compose.yml (Sub C #11724); PipelineWiring.md |
The pipeline redeploys with up -d --build (recreate-in-place) and never down -v; named volumes (shared-sqlite-data, chroma-data, caddy-*, local-model-data) + the ./.neo-ai-data/backups bind-mount survive the recreate. |
down -v, or a changed Compose project name → fresh empty volumes = Memory Core primary-store data loss. |
PipelineWiring.md — "Redeploy-safe persistence" table |
V-B-A'd against docker-compose.yml; Day-0 Tutorial Milestone 7 is the L4 runtime redeploy-survival proof |
| Deploy health gate |
examples/cloud-deployment/deploy-pipeline.sh; DeploymentCookbook.md §8 |
docker compose up -d --build --wait blocks until every healthchecked service reports healthy and exits non-zero if one does not — failing the deploy job. |
A service never goes healthy → the job fails loudly; surface docker compose logs. |
PipelineWiring.md — "The health gate" |
the compose healthchecks (Sub D #11725); bash -n |
Acceptance Criteria
Out of Scope
- The in-repo deployment proof — owned by #11720.
- The MVP backup/persistence implementation — owned by Sub C #11724.
Related
- Parent: #11730 (Post-MVP Residual Workstreams)
- Gating input: #11720 (the in-repo MVP proof must work first)
- Origin Discussion: #11718
Origin Session ID
8e1dc8ca-b5a5-4479-b3cf-31918eb4a5b2
Context
Post-MVP residual workstream under Epic #11730. Epic #11720's MVP proves cloud deployment in-repo — a reference profile + compose + day-0 tutorial. Discussion #11718 noted that wiring the deployment into an external team's actual CI/CD or release pipeline is a later phase, contingent on the in-repo proof working first.
Gating Condition
Pursued after #11720's in-repo deployment proof works — the reference profile + deployed healthcheck + production-shaped journey proof (Sub C #11724, Sub D #11725) must land first. Until then: captured intent, not active work.
Scope
Contract Ledger
deploy-pipeline.shprofile selectionexamples/cloud-deployment/deploy-pipeline.shNEO_DEPLOY_PROFILESenv, else the defaultcloud ingress.cloud ingress.PipelineWiring.md— "The reference pipeline shape"bash -nsyntax check; the guide's usage blockNEO_DEPLOY_COMPOSE_FILE/NEO_DEPLOY_PROJECT_NAMEenvexamples/cloud-deployment/deploy-pipeline.shNEO_DEPLOY_COMPOSE_FILE); the Compose project name is pinned (NEO_DEPLOY_PROJECT_NAME, defaultneo-agent-os) so named-volume identity is stable across redeploys.neo-agent-osproject name.PipelineWiring.md— "Redeploy-safe persistence"ai/deploy/docker-compose.yml(Sub C #11724);PipelineWiring.mdup -d --build(recreate-in-place) and neverdown -v; named volumes (shared-sqlite-data,chroma-data,caddy-*,local-model-data) + the./.neo-ai-data/backupsbind-mount survive the recreate.down -v, or a changed Compose project name → fresh empty volumes = Memory Core primary-store data loss.PipelineWiring.md— "Redeploy-safe persistence" tabledocker-compose.yml; Day-0 Tutorial Milestone 7 is the L4 runtime redeploy-survival proofexamples/cloud-deployment/deploy-pipeline.sh;DeploymentCookbook.md§8docker compose up -d --build --waitblocks until every healthchecked service reports healthy and exits non-zero if one does not — failing the deploy job.docker compose logs.PipelineWiring.md— "The health gate"bash -nAcceptance Criteria
Out of Scope
Related
Origin Session ID
8e1dc8ca-b5a5-4479-b3cf-31918eb4a5b2