{"record":{"id":"9e9685f215d048c4","repo":"NousResearch/hermes-agent","slug":"hatch-cancelled","errorCode":null,"errorMessage":"hatch cancelled","messagePattern":"hatch cancelled","errorType":"exception","errorClass":"GenerationError","httpStatus":null,"severity":"error","filePath":"agent/pet/generate/orchestrate.py","lineNumber":306,"sourceCode":"    done = 0\n    with ThreadPoolExecutor(max_workers=workers) as pool:\n        futures = [pool.submit(_gen_row, spec) for spec in generated_specs]\n        # as_completed runs on the caller (request) thread, so progress events\n        # emitted here inherit the request transport — unlike the worker threads.\n        for fut in as_completed(futures):\n            if cancelled():\n                logger.info(\"pet hatch %r: cancelled — dropping remaining rows\", slug)\n                for pending in futures:\n                    pending.cancel()\n                break\n            state, frames = fut.result()\n            done += 1\n            progress(\"row\", f\"{state}:{done}:{total_rows}\")\n            if frames:\n                frames_by_state[state] = frames\n\n    if cancelled():\n        raise GenerationError(\"hatch cancelled\")\n\n    # Derive running-left from the approved running-right row (per-frame mirror,\n    # preserving order/timing). Missing running-right is rejected below; a pet\n    # without its canonical walk cycle is a failed hatch, not a shippable mascot.\n    right = frames_by_state.get(\"running-right\")\n    if right:\n        done += 1\n        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","sourceCodeStart":288,"sourceCodeEnd":324,"githubUrl":"https://github.com/NousResearch/hermes-agent/blob/c896c09c42910c584c4c7d2325b58c14713ea42c/agent/pet/generate/orchestrate.py#L288-L324","documentation":"Error \"hatch cancelled\" thrown in NousResearch/hermes-agent.","triggerScenarios":"Thrown at agent/pet/generate/orchestrate.py:306 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Re-run hatch without cancelling.","If cancellation was unintended, check for interrupts/timeouts in the run."],"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-15T17:31:12.345Z"}