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

ADR-0110: The idle Prolog containers are retired from every fleet, and SWI-Prolog runs only embedded in the kernel

field value
Status Accepted — Accepted (ruling, Mohamed, 2026-10-19, verbatim: "agree to all", then "yes and document the environments thoroughly")
Date 2026-10-19
Register factory (docs/adr, 4-digit ids)
Source docs/adr/0110-the-idle-prolog-containers-are-retired-from-every-fleet-and-swi-prolog-runs-only-embedded-in-the-kernel.md — permalink at 80c7135f0 (unchanged on master since that commit)
Wiki register entry ADR-0110 (wiki status: Accepted)

← ADR-0109 · ADR-0111 →

The record

Status: Accepted (ruling, Mohamed, 2026-10-19, verbatim: "agree to all", then "yes and document the environments thoroughly") · Date: 2026-10-19

Context

Five Incus containers exist only to hold an installed SWI-Prolog: prolog-node-1/2/3 in prod (project default, 10.53.1.16/.17/.18), prolog in test (orchestrata-test, 10.53.2.12) and prolog in dev (orchestrata-dev, 10.53.3.22). They are declared in infra/terraform/prolog.tf, test_fleet.tf and dev_fleet.tf, created by deploy/provision_environments.sh / deploy/orchestrata-test/provision_test_fleet.sh, and "probed" by swipl --version inside each one.

Measured 2026-10-19 (session audit, read-only):

ADR-0077 makes terraform the owner of every Incus environment, so deleting the containers by hand would be undone by the next tofu apply.

Decision (Mohamed, 2026-10-19)

  1. Terraform stops declaring them. infra/terraform/prolog.tf is deleted; the prolog_nodes variable and output are removed; the "prolog" entries leave the test and dev fleet image and address maps. tofu apply destroys exactly these five instances, and the drift gate (scripts/check_infra_drift.py) is green at zero diff afterwards. The raw-machine and rehearsal templates (infra/rawmachine/, infra/rehearsal/) drop them too, so a rebuild reproduces the retired fleet, not the old one.
  2. Provisioners stop creating and probing them. deploy/provision_environments.sh (role_prolog, the launch loop, the three swipl --version probes), deploy/orchestrata-test/provision_test_fleet.sh (provision_node prolog) and claude-env/install-infra.sh no longer touch Prolog containers. infra/gen_env.py no longer emits PROLOG_NODES.
  3. The one place SWI-Prolog executes is in-process. The kernel (and test/tool processes) load SWI-Prolog through the janus fork. The runtime is the project-owned prefix of ADR-0095. Prolog's readiness and identity are the kernel's governance boot health line and the loaded libswipl path (ADR-0095's check), never a container probe.
  4. The environment docs say so. INFRASTRUCTURE.md, infra/README.md, claude/workflow/environments.md, deploy/orchestrata-test/README.md and the env-profile comments drop the Prolog containers and state where Prolog runs.
  5. An out-of-process Prolog service needs its own ADR. Nothing here forbids one. Reintroducing Prolog containers without a decision that wires and tests them is a drift finding.

Alternatives rejected

Consequences

Provenance

Audit run in the 2026-10-19 disk-and-fleet session (read-only measurements above). The question put to Mohamed: "Retire prolog-node-1/2/3 (prod) and prolog (test and dev) properly? That means an ADR plus changes to prolog.tf, variables.tf, the provisioning scripts and test_incus_isolation.py. Recommended, now that the kernel is confirmed as the only place Prolog runs." Mohamed, 2026-10-19, verbatim: "agree to all", then "yes and document the environments thoroughly". Related: ADR-0077 (terraform owns every environment), ADR-0095 (the SWI-Prolog runtime prefix).

Rulings cited

None.

Specs cited

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