nexu-io/open-design · error · SystemExit

job {args.job_id} is not ready; missing dependency result(s)

Error message

job {args.job_id} is not ready; missing dependency result(s): {', '.join(missing_deps)}

What it means

Raised in record_imagegen_result.py main() when a job's depends_on list references job ids that are not yet in completed_job_ids(manifest) (status == 'complete'). The recorder enforces DAG order so a row is never recorded before the jobs it derives from (e.g. base).

Source

Thrown at skills/hatch-pet/scripts/record_imagegen_result.py:191

    if not source.is_file():
        raise SystemExit(f"source image not found: {source}")
    source_provenance = validate_source_path(
        source=source,
        run_dir=run_dir,
        allow_synthetic_test_source=args.allow_synthetic_test_source,
    )

    manifest_path = run_dir / "imagegen-jobs.json"
    manifest = load_jobs(manifest_path)
    job = find_job(manifest, args.job_id)

    missing_deps = [
        dep
        for dep in job.get("depends_on", [])
        if isinstance(dep, str) and dep not in completed_job_ids(manifest)
    ]
    if missing_deps:
        raise SystemExit(
            f"job {args.job_id} is not ready; missing dependency result(s): {', '.join(missing_deps)}"
        )
    validate_required_grounding(job, run_dir)

    output_raw = job.get("output_path")
    if not isinstance(output_raw, str):
        raise SystemExit(f"job {args.job_id} has no output_path")
    output = run_dir / output_raw
    if output.exists() and not args.force:
        raise SystemExit(f"{output} already exists; pass --force to replace it")

    output.parent.mkdir(parents=True, exist_ok=True)
    shutil.copy2(source, output)
    metadata = image_metadata(output)

    job["status"] = "complete"
    job["source_path"] = str(source)
    job["source_provenance"] = source_provenance

View on GitHub (pinned to 5be4028344)

Solutions

  1. Record each dependency first (check order with jq '.jobs[] | {id, depends_on, status}').
  2. Re-record any dependency whose status was reset to pending by a repair.
  3. If a depends_on id is wrong/typo'd, fix it in imagegen-jobs.json.
  4. If the dependency is genuinely optional, remove it from depends_on.

Example fix

# before: recording 'idle' (depends_on base) before base is complete
# after
record_imagegen_result.py --job-id base  --source ig_base.png
record_imagegen_result.py --job-id idle  --source ig_001.png
Defensive patterns

Strategy: validation

Validate before calling

done = completed_job_ids(manifest)
missing = [d for d in job.get("depends_on", []) if isinstance(d, str) and d not in done]
if missing:
    raise SystemExit(f"record these first: {missing}")

Prevention

When it happens

Trigger: Recording a row job that depends_on 'base' before the base job is recorded; a dependency failed QA and was reopened; depends_on lists a job id that was never defined.

Common situations: Skipping the base job and jumping to rows; re-recording after a repair reset a dependency to 'pending'.

Related errors


AI-assisted analysis of nexu-io/open-design@5be4028344 (2026-08-12). Data as JSON: /api/errors/56f43c5f7173e3c0. Report an issue: GitHub.