nexu-io/open-design · error · SystemExit
unknown job id: {job_id}
Error message
unknown job id: {job_id} What it means
Raised by find_job() in record_imagegen_result.py when no job in the manifest has id == --job-id. The recorder must update a specific job record (status, hashes, grounding), so an unmatched job id aborts before touching the manifest.
Source
Thrown at skills/hatch-pet/scripts/record_imagegen_result.py:36
def load_jobs(path: Path) -> dict[str, object]:
if not path.exists():
raise SystemExit(f"job manifest not found: {path}")
return json.loads(path.read_text(encoding="utf-8"))
def job_list(manifest: dict[str, object]) -> list[dict[str, object]]:
jobs = manifest.get("jobs")
if not isinstance(jobs, list):
raise SystemExit("invalid imagegen-jobs.json: jobs must be a list")
return [job for job in jobs if isinstance(job, dict)]
def find_job(manifest: dict[str, object], job_id: str) -> dict[str, object]:
for job in job_list(manifest):
if job.get("id") == job_id:
return job
raise SystemExit(f"unknown job id: {job_id}")
def image_metadata(path: Path) -> dict[str, object]:
with Image.open(path) as image:
image.verify()
with Image.open(path) as image:
return {
"width": image.width,
"height": image.height,
"mode": image.mode,
"format": image.format,
}
def file_sha256(path: Path) -> str:
digest = hashlib.sha256()
with path.open("rb") as file:
for chunk in iter(lambda: file.read(1024 * 1024), b""):View on GitHub (pinned to 5be4028344)
Solutions
- List valid ids: jq '.jobs[].id' run_dir/imagegen-jobs.json.
- Pass the exact matching --job-id (watch case and hyphenation).
- If the id should exist, re-run prepare_pet_run.py --force with the intended rows.
- Confirm --run-dir matches the run that owns the job id.
Example fix
# before record_imagegen_result.py --job-id Idle --source ig_001.png # after record_imagegen_result.py --job-id idle --source ig_001.png
Defensive patterns
Strategy: validation
Validate before calling
ids = {j.get("id") for j in job_list(manifest)}
if args.job_id not in ids:
raise SystemExit(f"--job-id {args.job_id} not in {sorted(ids)}") Prevention
- Pull --job-id directly from jq '.jobs[].id' to avoid typos.
- Keep job ids lowercase-kebab and stable across regenerations.
- Record jobs in a deterministic order so id drift is obvious.
When it happens
Trigger: Passing a --job-id that does not exist in imagegen-jobs.json; typo in the id; manifest was regenerated with a different row set; --job-id from a different pet's run.
Common situations: Recording output for a row that was renamed since prepare; copy-pasting a job id from another run; case mismatch (Idle vs idle).
Related errors
- review does not contain row-level results
- invalid imagegen-jobs.json: jobs must be a list
- unknown row job id: {state}
- invalid imagegen-jobs.json: jobs must be a list
- job {job.get('id')} does not list input_images; grounded row
AI-assisted analysis of nexu-io/open-design@5be4028344 (2026-08-12).
Data as JSON: /api/errors/85d7e0635b812263.
Report an issue: GitHub.