# Coordinator container — runs the Pipeline A review loop. # # Design: # - Minimal Python 3.11 base. # - ``git`` installed for artifact clone. # - Code mounted from /mnt/user/appdata/multica/coordinator at runtime # (bind mount), so edits on the host are live without rebuilding. # - Writable state at /var/lib/coordinator (bind-mounted to # /mnt/user/appdata/multica/coordinator-state on host). # - Shared rounds tree at /mnt/user/appdata/multica/rounds — mounted at the # SAME absolute path inside every judge daemon so filesystem paths in # chat-task prompts resolve identically in both sides. # - Network: ``multica`` (so COORDINATOR_SERVER_URL can resolve # ``http://multica-backend:8080`` directly). # # Runtime env vars (set on ``docker run``): # COORDINATOR_SERVER_URL http://multica-backend:8080 # COORDINATOR_WORKSPACE_ID # COORDINATOR_TOKEN mul_... (user PAT; required for chat endpoints) # COORDINATOR_GITEA_BASE_URL https://git.wylab.me (optional) # COORDINATOR_GIT_USERNAME m-coordinator (optional) # COORDINATOR_GIT_TOKEN (optional; ephemeral) # COORDINATOR_ROUNDS_ROOT /mnt/user/appdata/multica/rounds # COORDINATOR_STATE_DIR /var/lib/coordinator FROM python:3.11-slim RUN apt-get update \ && apt-get install -y --no-install-recommends git ca-certificates \ && rm -rf /var/lib/apt/lists/* # Runtime dirs — volume mount points. RUN mkdir -p /var/lib/coordinator /mnt/user/appdata/multica/rounds # Install the package (will be overlaid by a bind mount at runtime, but having # it installed lets the image boot without a bind mount for smoke tests). WORKDIR /opt/coordinator COPY pyproject.toml README.md ./ COPY src ./src RUN pip install --no-cache-dir -e . ENV PYTHONUNBUFFERED=1 \ COORDINATOR_STATE_DIR=/var/lib/coordinator \ COORDINATOR_ROUNDS_ROOT=/mnt/user/appdata/multica/rounds ENTRYPOINT ["coordinator"]