nexu-io/open-design · error · SystemExit
job {job_id} was marked as a local/synthetic row ({', '.join
Error message
job {job_id} was marked as a local/synthetic row ({', '.join(blocked_flags)}); regenerate it with $imagegen What it means
Raised by validate_completed_job_source when a job carries any of the blocked local/synthetic flags (deterministic_pet_row, cute_raster_row, local_raster_row). These markers indicate the row was produced by a local rasterizer rather than the real $imagegen model, which finalize refuses to ship.
Source
Thrown at skills/hatch-pet/scripts/finalize_pet_run.py:139
def validate_completed_job_source(
job: dict[str, object],
*,
run_dir: Path,
allow_synthetic_test_sources: bool,
) -> None:
job_id = str(job.get("id") or "")
source = manifest_path(job.get("source_path"), run_dir=run_dir, field="source_path", job_id=job_id)
output = manifest_path(job.get("output_path"), run_dir=run_dir, field="output_path", job_id=job_id)
blocked_flags = [
flag
for flag in ("deterministic_pet_row", "cute_raster_row", "local_raster_row")
if job.get(flag)
]
if blocked_flags:
raise SystemExit(
f"job {job_id} was marked as a local/synthetic row ({', '.join(blocked_flags)}); "
"regenerate it with $imagegen"
)
if job.get("synthetic_test_source"):
if not allow_synthetic_test_sources:
raise SystemExit(
f"job {job_id} uses a synthetic test source; rerun with real $imagegen output"
)
validate_hash(job, source=source, output=output, job_id=job_id)
return
if job.get("secondary_fallback"):
if job.get("source_provenance") != "secondary-fallback-image-api":
raise SystemExit(f"job {job_id} has invalid secondary fallback provenance")
validate_hash(job, source=source, output=output, job_id=job_id)
return
View on GitHub (pinned to 5be4028344)
Solutions
- Regenerate each flagged job with the real $imagegen tool so the blocked flag is removed and source_provenance becomes built-in-imagegen.
- Edit imagegen-jobs.json only to delete the flagged rows, then re-run the imagegen job creator to re-add them as real jobs.
- Re-run finalize_pet_run.py once no job carries a blocked flag.
Example fix
// before (imagegen-jobs.json job entry)
{"id":"running","cute_raster_row":true,...}
// after
{"id":"running","source_provenance":"built-in-imagegen",...} Defensive patterns
Strategy: validation
Validate before calling
blocked = [f for f in ('deterministic_pet_row','cute_raster_row','local_raster_row') if job.get(f)]
if blocked:
raise RuntimeError(f'job {job["id"]} carries blocked local/synthetic flags: {blocked}') Prevention
- Do not ship manifests produced by local rasterizers; regenerate rows with $imagegen.
- Keep dev/test raster manifests in a separate run_dir from production runs.
- Lint imagegen-jobs.json for blocked flags before finalize.
When it happens
Trigger: A job dict in imagegen-jobs.json has any of deterministic_pet_row/cute_raster_row/local_raster_row set truthy. Such rows are dev-only placeholders and cannot enter the final spritesheet.
Common situations: Re-using a dev/test manifest that was seeded with cute-raster placeholder rows; running a local rasterizer to fill gaps and forgetting to regenerate those jobs with $imagegen.
Related errors
- job {job_id} uses a synthetic test source; rerun with real $
- job {job_id} has invalid secondary fallback provenance
- job {job_id} was not recorded as a built-in $imagegen output
- job {job_id} has no {field}
- job {job_id} is missing source_sha256; ingest visual outputs
AI-assisted analysis of nexu-io/open-design@5be4028344 (2026-08-12).
Data as JSON: /api/errors/6e78961159eea17d.
Report an issue: GitHub.