{"record":{"id":"1545f2bdb28e858d","repo":"NousResearch/hermes-agent","slug":"atlas-validation-failed","errorCode":null,"errorMessage":"atlas validation failed","messagePattern":"atlas validation failed","errorType":"exception","errorClass":"GenerationError","httpStatus":null,"severity":"error","filePath":"agent/pet/generate/orchestrate.py","lineNumber":332,"sourceCode":"        progress(\"row\", f\"running-left:{done}:{total_rows}\")\n        frames_by_state[\"running-left\"] = atlas.mirror_frames(right)\n        logger.info(\"pet hatch %r: row 'running-left' mirrored from running-right\", slug)\n    else:\n        logger.warning(\"pet hatch %r: no running-right to mirror; left walk left empty\", slug)\n\n    # Idle is the resting state the renderer falls back to — guarantee it.\n    if not frames_by_state.get(\"idle\"):\n        progress(\"row\", \"idle-fallback\")\n        frames_by_state[\"idle\"] = [atlas.single_frame(base, fit=False)]\n\n    progress(\"compose\", \"\")\n    logger.info(\"pet hatch %r: composing atlas from %d states\", slug, len(frames_by_state))\n    # One shared scale + baseline across every state so the pet never slides or\n    # pulses size between frames; compose just packs the normalized cells.\n    sheet = atlas.compose_atlas(atlas.normalize_cells(frames_by_state))\n    validation = atlas.validate_atlas(sheet)\n    if not validation[\"ok\"]:\n        raise GenerationError(\"; \".join(validation[\"errors\"]) or \"atlas validation failed\")\n    filled_states = set(validation[\"filled_states\"])\n    missing_required = sorted(_REQUIRED_STATES - filled_states)\n    if missing_required:\n        raise GenerationError(f\"missing required animation row(s): {', '.join(missing_required)}\")\n    if len(filled_states) < _MIN_FILLED_STATES:\n        raise GenerationError(\n            f\"only {len(filled_states)}/{len(atlas.ROW_SPECS)} animation rows were usable; regenerate\"\n        )\n\n    from agent.pet import store\n\n    progress(\"save\", slug)\n    logger.info(\"pet hatch %r: saving pet\", slug)\n    pet = store.register_local_pet(\n        sheet,\n        slug=slug,\n        display_name=display_name or slug,\n        description=description,","sourceCodeStart":314,"sourceCodeEnd":350,"githubUrl":"https://github.com/NousResearch/hermes-agent/blob/c896c09c42910c584c4c7d2325b58c14713ea42c/agent/pet/generate/orchestrate.py#L314-L350","documentation":"Error \"atlas validation failed\" thrown in NousResearch/hermes-agent.","triggerScenarios":"Thrown at agent/pet/generate/orchestrate.py:332 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Review the atlas validation errors and regenerate the failing rows.","Regenerate drafts with a clearer reference image so the atlas passes."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"c896c09c42910c584c4c7d2325b58c14713ea42c","analyzedAt":"2026-08-14T17:18:01.089Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}