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

  1. Open <run_dir>/pet_request.json and populate pet_id, display_name, and description with non-empty strings.
  2. Re-create the run with the skill's request step so all three fields are written.
  3. 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

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


AI-assisted analysis of nexu-io/open-design@5be4028344 (2026-08-12). Data as JSON: /api/errors/476f3758ad2d51fd. Report an issue: GitHub.