zed-industries/zed · error · RuntimeError

Failed to install or start judge proxy

Error message

Failed to install or start judge proxy (exit {result.return_code}){detail}

What it means

verifier.py installs and starts the judge proxy inside the target container by exec'ing a root shell script (which even tails /tmp/zed-judge-proxy.log on failure). If that exec returns a non-zero exit code, this RuntimeError is raised with the combined stdout/stderr plus the proxy log tail as detail — the install or the startup failed inside the container.

Solutions

  1. Read the detail suffix — it includes the script output and the last lines of /tmp/zed-judge-proxy.log
  2. Exec into the container and re-run the install script manually to reproduce
  3. Verify egress rules allow the install step, or pre-bake the proxy into the image
  4. Confirm the volume carrying the proxy is mounted at the path the script expects

Example fix

# before
# RuntimeError: Failed to install or start judge proxy (exit 1): ...

# after — reproduce inside the container
pier exec <job> --user-root -- /bin/sh -c 'sh -x /path/to/install-proxy.sh; tail -20 /tmp/zed-judge-proxy.log'
Defensive patterns

Strategy: try-catch

Validate before calling

result = container.exec(["python3", "--version"], user="root")
if result.return_code != 0:
    raise SystemExit("container lacks python3; pre-bake it into the image or fix the base image")

Try / catch

try:
    start_judge_proxy(container, env)
except RuntimeError as err:
    if "judge proxy" in str(err):
        log_tail = container.exec(["tail", "-20", "/tmp/zed-judge-proxy.log"], user="root").stdout
        raise RuntimeError(f"{err}\nproxy log:\n{log_tail}") from err
    raise

Prevention

When it happens

Trigger: The container has no egress so the install step's downloads fail; the proxy script or binary is missing from the mounted volume; python3 absent or wrong architecture in the container; the proxy starts then immediately exits, leaving a log tail in the message.

Common situations: Sandboxed eval containers with blocked networking; volume mounts misconfigured so the proxy payload path is empty; base image changes dropping python3; disk-full in /tmp.

Related errors


AI-assisted analysis of zed-industries/zed@f4178619ac (2026-08-20). Data as JSON: /api/errors/da531263a024b21b. Report an issue: GitHub.

Appendix: source

Thrown at crates/eval_cli/zed_eval/verifier.py:57

                "ensure-judge-proxy\n"
                "python3 - <<'ZED_PROXY_CHECK_EOF'\n"
                "import os, socket\n"
                "port = int(os.environ.get('ZED_JUDGE_PROXY_PORT', '8089'))\n"
                "with socket.create_connection(('127.0.0.1', port), timeout=5):\n"
                "    pass\n"
                "ZED_PROXY_CHECK_EOF\n"
                "if [ -f /tmp/zed-judge-proxy.log ]; then "
                "tail -2 /tmp/zed-judge-proxy.log; fi\n"
            ),
            user="root",
            env=env,
        )
        if result.return_code != 0:
            output = "\n".join(
                part for part in (result.stdout, result.stderr) if part
            ).strip()
            detail = f": {output}" if output else ""
            raise RuntimeError(
                f"Failed to install or start judge proxy (exit {result.return_code}){detail}"
            )

View on GitHub (pinned to f4178619ac)