{"record":{"id":"6f059a67b0312182","repo":"NousResearch/hermes-agent","slug":"only-len-filled-states-len-atlas-row-specs-a","errorCode":null,"errorMessage":"only {len(filled_states)}/{len(atlas.ROW_SPECS)} animation rows were usable; regenerate","messagePattern":"only (.+?)/(.+?) animation rows were usable; regenerate","errorType":"exception","errorClass":"GenerationError","httpStatus":null,"severity":"error","filePath":"agent/pet/generate/orchestrate.py","lineNumber":338,"sourceCode":"    # 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,\n    )\n    return HatchResult(\n        slug=pet.slug,\n        display_name=pet.display_name,\n        spritesheet=pet.spritesheet,\n        states=validation[\"filled_states\"],","sourceCodeStart":320,"sourceCodeEnd":356,"githubUrl":"https://github.com/NousResearch/hermes-agent/blob/c896c09c42910c584c4c7d2325b58c14713ea42c/agent/pet/generate/orchestrate.py#L320-L356","documentation":"Error \"only {len(filled_states)}/{len(atlas.ROW_SPECS)} animation rows were usable; regenerate\" thrown in NousResearch/hermes-agent.","triggerScenarios":"Thrown at agent/pet/generate/orchestrate.py:338 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Regenerate; too few animation rows were usable.","Improve the reference image/prompt so more rows pass validation.","Retry with a different image backend if rows keep failing."],"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"}