2.3 KiB
Root Cause Analysis: Containerized Infrastructure (Docker)
- Executive Summary
- 1. Architectural Intent: The "Clean Room" Model
- 2. Volume Mapping & Persistence
- 3. Alignment with opencortex Mandates
- 4. Permanent Learnings
Executive Summary
Standardized the `opencortex` execution environment by creating a production-grade Docker infrastructure. This ensures that all system dependencies, including the Lisp runtime and external binaries like `signal-cli`, are locked down and portable.
1. Architectural Intent: The "Clean Room" Model
Problem
The `opencortex` was relying on host-local binaries (`sbcl`, `signal-cli`) and manually configured Quicklisp dists. This made deployment to other environments (e.g., a VPS or a Autonomous Home Server) fragile and prone to version drift.
Solution
- Dockerfile: Created a multi-step build process that installs Debian Bookworm, SBCL, Java, and `signal-cli 0.14.0`.
- Pre-Caching: The build process triggers a `ql:quickload` of the `:opencortex` system, ensuring all Lisp dependencies are pre-downloaded and stored in the image layer, drastically reducing startup time.
- Compose Orchestration: Standardized the runtime via `docker-compose.yml`, which handles volume mounting of the user's `memex` directory and injection of `.env` secrets.
2. Volume Mapping & Persistence
Strategy
To maintain the "Autonomous" mandate, the agent's code is isolated, but its memory (the `memex`) remains on the host.
- Mapping: `../..` (host) -> `/memex` (container).
- State: Created a named Docker volume `signal-state` to ensure that `signal-cli` identities and cryptographic keys survive container restarts and image updates.
3. Alignment with opencortex Mandates
Evolutionary Completion
By moving to Docker, we have achieved "Evolutionary Completion" for the deployment track. The system is no longer a collection of scripts; it is a deployable appliance.
Documentation
A new `Deployment Guide` was added to `docs/deployment.org` to ensure standard operating procedures are preserved.
4. Permanent Learnings
- Lisp Build Layers: Always push the system to the ASDF registry and quickload during Docker build to bake dependencies into the image.
- Compose Locality: Placing the `docker-compose.yml` inside the `projects/opencortex/` folder keeps infrastructure code close to the implementation logic.