The e2e job was calling plain `docker compose up` without the CI override file, so it used the base compose bind-mount for MinIO (./data/minio) which doesn't exist on the runner. The CI override replaces bind mounts with ephemeral named volumes. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>