zed-industries/zed · error · ValueError

no fetched job at . Run `zed-eval fetch --experiment-name `…

Error message

no fetched job at {candidate}. Run `zed-eval fetch {run_id} --experiment-name <benchmark>` first, or pass --job-dir.

What it means

After resolving <jobs_dir>/<run_id> and running the fetch command when the directory is missing, locate_job_dir re-checks that the candidate directory exists. If it still does not, this ValueError is raised: the fetch either failed quietly, extracted somewhere else, or the run id / experiment name is wrong for what you asked to download.

Solutions

  1. Run the suggested command with the exact benchmark name: zed-eval fetch <run_id> --experiment-name <benchmark>
  2. Check the fetch actually produced files: ls ~/.cache/harbor/jobs/<run_id>
  3. Verify --jobs-dir matches the directory fetch extracts into (default ~/.cache/harbor/jobs)
  4. If the remote artifact is gone, re-run the evaluation or pass --job-dir to an existing local copy

Example fix

# before
zed-eval report <run_id>   # ValueError: no fetched job at ~/.cache/harbor/jobs/<run_id>

# after
zed-eval fetch <run_id> --experiment-name my-benchmark
ls ~/.cache/harbor/jobs/<run_id>   # confirm extraction
zed-eval report <run_id>
Defensive patterns

Strategy: validation

Validate before calling

from pathlib import Path

jobs_dir = Path(getattr(args, "jobs_dir", None) or Path.home() / ".cache/harbor/jobs")
job_dir = jobs_dir / run_id
if not job_dir.is_dir():
    subprocess.run(["zed-eval", "fetch", run_id, "--experiment-name", experiment_name], check=True)
assert job_dir.is_dir(), f"fetch did not produce {job_dir}"

Try / catch

try:
    job_dir = locate_job_dir(args)
except ValueError as err:
    if "no fetched job" in str(err):
        subprocess.run(["zed-eval", "fetch", run_id, "--experiment-name", experiment], check=True)
        job_dir = locate_job_dir(args)
    else:
        raise

Prevention

When it happens

Trigger: Passing a --experiment-name that does not match the launch, so fetch downloads nothing or the wrong archive; a fetch that fails on auth or network without propagating; --jobs-dir pointing at a non-default cache location that fetch did not write to; a run id typo.

Common situations: Switching to a machine with a fresh ~/.cache/harbor/jobs; a stale run index referencing a pruned remote artifact; benchmark renamed between launch and report; custom jobs-dir configured in one place but not the other.

Related errors


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

Appendix: source

Thrown at crates/eval_cli/zed_eval/report.py:437

    """Resolve the fetched Harbor/Pier job directory for a `report` invocation,
    fetching it first when asked."""
    job_dir = getattr(args, "job_dir", None)
    if job_dir:
        return Path(job_dir)

    run_id = getattr(args, "run_id", None)
    if not run_id:
        raise ValueError("provide a run_id or --job-dir")
    jobs_dir = Path(getattr(args, "jobs_dir", Path.home() / ".cache/harbor/jobs"))
    candidate = jobs_dir / run_id

    if getattr(args, "fetch", False) or not candidate.exists():
        # Reuse the existing fetch command to download + extract the archive.
        from .volume import command_fetch

        command_fetch(args)
    if not candidate.exists():
        raise ValueError(
            f"no fetched job at {candidate}. Run `zed-eval fetch {run_id} "
            f"--experiment-name <benchmark>` first, or pass --job-dir."
        )
    return candidate


def _timeout_is_failure(args: Any) -> bool:
    """Agent timeouts count as failures on test-scored benchmarks. Derived from
    the benchmark's scoring (via --experiment-name), with an explicit override."""
    override = getattr(args, "timeouts_as_failures", None)
    if override is not None:
        return bool(override)
    from . import benchmarks

    experiment = getattr(args, "experiment_name", None)
    benchmark = benchmarks.BENCHMARKS.get(experiment) if experiment else None
    return bool(benchmark and benchmark.scoring == benchmarks.SCORING_TESTS)

View on GitHub (pinned to f4178619ac)