nexu-io/open-design · error · SystemExit
pet_request.json is missing pet_id, display_name, or descrip
Error message
pet_request.json is missing pet_id, display_name, or description
What it means
Raised in finalize_pet_run.py's main() after loading pet_request.json when any of pet_id, display_name, or description is empty/missing. These three fields are required to package the pet (pet_id names the output package directory; display_name and description go into the packaged manifest).
Source
Thrown at skills/hatch-pet/scripts/finalize_pet_run.py:242
parser.add_argument("--skip-videos", action="store_true")
parser.add_argument("--skip-package", action="store_true")
parser.add_argument(
"--package-dir",
default="",
help="Exact pet package directory. Defaults to ${CODEX_HOME:-$HOME/.codex}/pets/<pet-name>.",
)
parser.add_argument("--ffmpeg", default="")
parser.add_argument("--allow-synthetic-test-sources", action="store_true", help=argparse.SUPPRESS)
args = parser.parse_args()
scripts_dir = Path(__file__).resolve().parent
run_dir = Path(args.run_dir).expanduser().resolve()
request = load_json(run_dir / "pet_request.json")
pet_id = str(request.get("pet_id") or "")
display_name = str(request.get("display_name") or "")
description = str(request.get("description") or "")
if not pet_id or not display_name or not description:
raise SystemExit("pet_request.json is missing pet_id, display_name, or description")
require_complete_jobs(
run_dir,
allow_synthetic_test_sources=args.allow_synthetic_test_sources,
)
final_dir = run_dir / "final"
qa_dir = run_dir / "qa"
final_dir.mkdir(parents=True, exist_ok=True)
qa_dir.mkdir(parents=True, exist_ok=True)
run(
[
sys.executable,
str(scripts_dir / "extract_strip_frames.py"),
"--decoded-dir",
str(run_dir / "decoded"),
"--output-dir",View on GitHub (pinned to 5be4028344)
Solutions
- Open <run_dir>/pet_request.json and populate pet_id, display_name, and description with non-empty strings.
- Re-create the run with the skill's request step so all three fields are written.
- Re-run finalize_pet_run.py --run-dir <run_dir> after fixing the file.
Example fix
// before (pet_request.json)
{"pet_id":"blob","display_name":"Blob","description":""}
// after
{"pet_id":"blob","display_name":"Blob","description":"A friendly blob pet."} Defensive patterns
Strategy: validation
Validate before calling
request = json.loads(Path('pet_request.json').read_text())
missing = [k for k in ('pet_id','display_name','description') if not str(request.get(k) or '')]
if missing:
raise ValueError(f'pet_request.json missing: {missing}') Prevention
- Populate pet_id, display_name, and description when creating the pet request.
- Treat all three as required in the request-generation step.
- Lint pet_request.json before finalize.
When it happens
Trigger: request.get('pet_id'), request.get('display_name'), or request.get('description') yields an empty/falsy value after str() coercion.
Common situations: Starting a pet run from a template that omitted the description; hand-editing pet_request.json and deleting a field; a request generator that wrote null for an optional-seeming field.
Related errors
- running-left mirrored output is missing: {output}
- running-left mirror source must be decoded/running-right.png
- running-left mirror output must be decoded/running-left.png
- running-left mirror source hash does not match imagegen-jobs
- running-left mirrored output hash does not match imagegen-jo
AI-assisted analysis of nexu-io/open-design@5be4028344 (2026-08-12).
Data as JSON: /api/errors/476f3758ad2d51fd.
Report an issue: GitHub.