nexu-io/open-design · error · SystemExit
imagegen jobs are not complete; run pet_job_status.py and…
Error message
imagegen jobs are not complete; run pet_job_status.py and finish: {', '.join(incomplete)} What it means
Raised by require_complete_jobs when one or more jobs have a status other than 'complete' (status defaults to 'pending' when absent). Finalize refuses to run until every job in the manifest reports complete, and the message lists the offending job ids.
Solutions
- Run pet_job_status.py to see current statuses, then drive each incomplete job to completion via $imagegen or generate_pet_images.py.
- If a job was reopened by queue_pet_repairs.py, regenerate that row with $imagegen and re-record the result.
- Re-run finalize_pet_run.py only after pet_job_status.py shows all jobs complete.
Defensive patterns
Strategy: validation
Validate before calling
incomplete = [str(j.get('id')) for j in jobs if isinstance(j, dict) and j.get('status','pending') != 'complete']
if incomplete:
raise RuntimeError(f'finish jobs first: {incomplete}') Prevention
- Run pet_job_status.py and confirm all-complete before invoking finalize.
- Drive reopened repair jobs back to complete via $imagegen.
- Treat any non-complete status as a blocker, not a skip.
When it happens
Trigger: Any job dict where job.get('status','pending') != 'complete' is collected into the incomplete list; if that list is non-empty, finalize aborts and names the ids.
Common situations: Invoking finalize before all $imagegen jobs have finished; a job stuck in 'pending' or 'running' after a failed imagegen attempt; a job reopened by queue_pet_repairs.py that was never re-run.
Related errors
- invalid imagegen-jobs.json: jobs must be a list
- invalid imagegen-jobs.json: jobs must be a list
- job has invalid secondary fallback provenance
- job was marked as a local/synthetic row ( ); regenerate it…
- job was not recorded as a built-in $imagegen output; use…
AI-assisted analysis of nexu-io/open-design@5be4028344 (2026-08-12).
Data as JSON: /api/errors/7c8022eccf1e9abc.
Report an issue: GitHub.
Appendix: source
Thrown at skills/hatch-pet/scripts/finalize_pet_run.py:193
f"job {job_id} source image is not a built-in $imagegen output under "
f"{generated_root}/.../ig_*.png"
)
validate_hash(job, source=source, output=output, job_id=job_id)
def require_complete_jobs(run_dir: Path, *, allow_synthetic_test_sources: bool) -> None:
manifest_path = run_dir / "imagegen-jobs.json"
manifest = load_json(manifest_path)
jobs = manifest.get("jobs")
if not isinstance(jobs, list):
raise SystemExit("invalid imagegen-jobs.json: jobs must be a list")
incomplete = [
str(job.get("id"))
for job in jobs
if isinstance(job, dict) and job.get("status", "pending") != "complete"
]
if incomplete:
raise SystemExit(
"imagegen jobs are not complete; run pet_job_status.py and finish: "
+ ", ".join(incomplete)
)
for job in jobs:
if isinstance(job, dict):
validate_completed_job_source(
job,
run_dir=run_dir,
allow_synthetic_test_sources=allow_synthetic_test_sources,
)
def review_failures(review: dict[str, object]) -> list[str]:
rows = review.get("rows")
if not isinstance(rows, list):
return ["review did not contain row-level results"]
failures = []
for row in rows:View on GitHub (pinned to 5be4028344)