Home / Projects / Orchestrata Ultimate / Decisions / ADR index / ADR-0124

ADR-0124: Orchestrata runs in a test container and a prod container built from one OpenMandriva image, over always-on memgraph and Redis

field value
Status Proposed — Proposed (item 1 and the image ruled by Mohamed 2026-10-22; the rest proposed)
Date 2026-10-22
Register factory (docs/adr, 4-digit ids)
Source docs/adr/0124-orchestrata-runs-in-a-test-container-and-a-prod-container-over-always-on-infrastructure.md — recorded on branch fix/ship-sanctioned-gate-pytest at 8c7031c9a, not yet on master
Wiki register entry ADR-0124 (wiki status: Proposed)

← ADR-0123 · ADR-0125 →

The record

Status: Proposed (item 1 and the image ruled by Mohamed 2026-10-22; the rest proposed) · Date: 2026-10-22

Context

Decision

  1. Two containers (ruled, Mohamed 2026-10-22). A test container, where deployments, runs and services are tested, and a prod container, which is what runs. One is never both.

  2. One OpenMandriva image, built by us (ruled, Mohamed 2026-10-22), matching the host's userland. Both containers start from it. It is built when Mohamed says so, not before.

  3. Infrastructure stays on, the containers do not (proposed). Memgraph and Redis run 24/7 as infrastructure. Both containers have boot.autostart=false. The prod container joins orch-prod-br and uses the orchgraph cluster and redis-queue. The test container joins orch-test-br and uses the test fleet's memgraph, Redis and Prolog.

  4. The workspace is mounted read-write (proposed, from Mohamed: "they need write"), idmapped, so files the volks create are owned by Mohamed on the host. The services run as uid 1001 inside.

  5. Services run from a pinned install, never from the mount (proposed). Each container has its own /opt/orchestrata and venv, installed by deploy/install-orchestrata.sh from a pinned ref, with an identity check. A ref reaches prod only after it passes in the test container.

  6. Each container carries what the volks use (proposed): git, uv and Python 3.14t, swi-prolog, the claude binary and its credentials, and the provider API keys.

  7. Small and limited (proposed): CPU, memory, process and root-disk limits, set from measurement after the first build (starting point 2 CPUs, 2 GiB, about 8 GiB of disk).

  8. Claude starts and stops prod, and prod stops itself (proposed). One wrapper command (up, down, status) with an allow rule. up waits for real readiness: the kernel's health check and the gateway's ping, not an open port. The container stops after 15 minutes with no live Claude session lease, no pipeline in flight and an empty conversation queue. Turns wait in Redis while it is off.

  9. What moves in (proposed): kernel, gateway, conversation-consumer and ast-live-sync. The orchgraph backup, KG retention and history-mining timers stay on the host, beside the infrastructure they maintain. miniircd and orchestrata-bot follow ADR-0123.

  10. The cut-over comes first (ruled, Mohamed 2026-10-22: "cutover first"). The components cut-over (the integration package, INT-02 to INT-25) lands before either container is built. The containers only ever run the components build, never the old single package. Until then the workers build on the host in worktrees, as today.

Open, for later rulings: whether the volks get push credentials (proposed: commit inside, Mohamed pushes); whether QA volks in prod reach the test fleet; the Claude credential method (the refresh-token-stripped mirror or claude setup-token); whether the test container replaces the current app container or stands beside it.

Alternatives rejected

Consequences

Provenance

Relations of ADR-0124

Rulings cited

None.

Specs cited

None (or no spec page exists for the ones named).