nexu-io/open-design · error · SystemExit
job {job.get('id')} does not list input_images; grounded row
Error message
job {job.get('id')} does not list input_images; grounded row jobs must attach references What it means
Raised by validate_required_grounding() in record_imagegen_result.py for a grounded job (one with allow_prompt_only_generation is False) whose input_images is missing or empty. Grounded row jobs must reference the canonical base/references so the model cannot drift; recording a result without those references attached is rejected.
Source
Thrown at skills/hatch-pet/scripts/record_imagegen_result.py:112
"source image is inside the pet run directory; record the original "
"$imagegen output from $CODEX_HOME/generated_images/.../ig_*.png instead"
)
generated_root = default_generated_images_root()
if not is_relative_to(source, generated_root) or not source.name.startswith("ig_"):
raise SystemExit(
"source image does not look like a built-in $imagegen output; expected "
f"{generated_root}/.../ig_*.png. Do not ingest locally drawn or "
"post-processed row strips as visual job outputs."
)
return "built-in-imagegen"
def validate_required_grounding(job: dict[str, object], run_dir: Path) -> None:
if job.get("allow_prompt_only_generation") is not False:
return
inputs = job.get("input_images")
if not isinstance(inputs, list) or not inputs:
raise SystemExit(
f"job {job.get('id')} does not list input_images; grounded row jobs must attach references"
)
missing = []
for item in inputs:
if not isinstance(item, dict) or not isinstance(item.get("path"), str):
raise SystemExit(f"job {job.get('id')} has an invalid input image entry")
path = run_dir / item["path"]
if not path.is_file():
missing.append(str(path))
if missing:
raise SystemExit(
f"job {job.get('id')} is missing required grounding image(s): "
+ ", ".join(missing)
)
def update_base_canonical_reference(
*,View on GitHub (pinned to 5be4028344)
Solutions
- Add input_images (a non-empty list of {path: ...} entries) to the job in imagegen-jobs.json.
- Set allow_prompt_only_generation to true if the job is genuinely prompt-only.
- Re-run prepare_pet_run.py --force so grounding references are attached correctly.
- Verify the reference files pointed to by input_images exist under run_dir.
Example fix
// before
{"id":"idle","allow_prompt_only_generation":false}
// after
{"id":"idle","allow_prompt_only_generation":false,"input_images":[{"path":"references/canonical-base.png"}]} Defensive patterns
Strategy: validation
Validate before calling
if job.get("allow_prompt_only_generation") is False:
inputs = job.get("input_images")
if not isinstance(inputs, list) or not inputs:
raise SystemExit(f"grounded job {job.get('id')} needs non-empty input_images") Type guard
def is_grounded(job: dict) -> bool:
return job.get("allow_prompt_only_generation") is False Prevention
- Let prepare_pet_run.py populate input_images; do not toggle grounded flags by hand.
- If a job is truly prompt-only, leave allow_prompt_only_generation unset/true.
- Add a CI check that every grounded job has input_images.
When it happens
Trigger: A row job was defined with 'allow_prompt_only_generation': false but no input_images list; input_images was set to [] or omitted; the manifest was edited to remove grounding references.
Common situations: Manually toggling a job to grounded without attaching references; prepare step that should have populated input_images ran against a broken reference set.
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
- unknown job id: {job_id}
AI-assisted analysis of nexu-io/open-design@5be4028344 (2026-08-12).
Data as JSON: /api/errors/bd32149920882889.
Report an issue: GitHub.