{"record":{"id":"476f3758ad2d51fd","repo":"nexu-io/open-design","slug":"pet-request-json-is-missing-pet-id-display-name","errorCode":null,"errorMessage":"pet_request.json is missing pet_id, display_name, or description","messagePattern":"pet_request\\.json is missing pet_id, display_name, or description","errorType":"exception","errorClass":"SystemExit","httpStatus":null,"severity":"error","filePath":"skills/hatch-pet/scripts/finalize_pet_run.py","lineNumber":242,"sourceCode":"    parser.add_argument(\"--skip-videos\", action=\"store_true\")\n    parser.add_argument(\"--skip-package\", action=\"store_true\")\n    parser.add_argument(\n        \"--package-dir\",\n        default=\"\",\n        help=\"Exact pet package directory. Defaults to ${CODEX_HOME:-$HOME/.codex}/pets/<pet-name>.\",\n    )\n    parser.add_argument(\"--ffmpeg\", default=\"\")\n    parser.add_argument(\"--allow-synthetic-test-sources\", action=\"store_true\", help=argparse.SUPPRESS)\n    args = parser.parse_args()\n\n    scripts_dir = Path(__file__).resolve().parent\n    run_dir = Path(args.run_dir).expanduser().resolve()\n    request = load_json(run_dir / \"pet_request.json\")\n    pet_id = str(request.get(\"pet_id\") or \"\")\n    display_name = str(request.get(\"display_name\") or \"\")\n    description = str(request.get(\"description\") or \"\")\n    if not pet_id or not display_name or not description:\n        raise SystemExit(\"pet_request.json is missing pet_id, display_name, or description\")\n\n    require_complete_jobs(\n        run_dir,\n        allow_synthetic_test_sources=args.allow_synthetic_test_sources,\n    )\n\n    final_dir = run_dir / \"final\"\n    qa_dir = run_dir / \"qa\"\n    final_dir.mkdir(parents=True, exist_ok=True)\n    qa_dir.mkdir(parents=True, exist_ok=True)\n\n    run(\n        [\n            sys.executable,\n            str(scripts_dir / \"extract_strip_frames.py\"),\n            \"--decoded-dir\",\n            str(run_dir / \"decoded\"),\n            \"--output-dir\",","sourceCodeStart":224,"sourceCodeEnd":260,"githubUrl":"https://github.com/nexu-io/open-design/blob/5be4028344c2eb4c667c5a97bda8f750c5597ef7/skills/hatch-pet/scripts/finalize_pet_run.py#L224-L260","documentation":"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).","triggerScenarios":"request.get('pet_id'), request.get('display_name'), or request.get('description') yields an empty/falsy value after str() coercion.","commonSituations":"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.","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."],"exampleFix":"// before (pet_request.json)\n{\"pet_id\":\"blob\",\"display_name\":\"Blob\",\"description\":\"\"}\n// after\n{\"pet_id\":\"blob\",\"display_name\":\"Blob\",\"description\":\"A friendly blob pet.\"}","handlingStrategy":"validation","validationCode":"request = json.loads(Path('pet_request.json').read_text())\nmissing = [k for k in ('pet_id','display_name','description') if not str(request.get(k) or '')]\nif missing:\n    raise ValueError(f'pet_request.json missing: {missing}')","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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."],"tags":["request","required-fields","packaging","pet-pipeline"],"backgroundTag":null,"analyzedSha":"5be4028344c2eb4c667c5a97bda8f750c5597ef7","analyzedAt":"2026-08-12T12:03:58.812Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}