{"repo":"NousResearch/hermes-agent","public_id":"9433","display_label":"Fixing KeyError and crashes on run_conversation error paths","summary":"Multiple issues and fix attempts address KeyError on 'final_response' and crashes when run_conversation returns a non-dict, affecting AIAgent.chat(), main(), and the cron scheduler.","subsystem":"agent","counts":{"members":10,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":2,"merged_prs":1,"attempt_prs":7},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":14490},"resolution":{"state":"unresolved","by":null},"freshness":{"state":"stale","last_verified_at":"2026-04-23T09:30:01+00:00","is_stale":true},"grouping":{"backbone":"STRUCTURAL_PARTIAL","link_density":0.18577777777777776},"fix_edges":[{"issue_number":9433,"pr_number":14490,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false}],"members":[{"kind":"issue","number":9433,"title":"Cron scheduler crash: 'int' object has no attribute 'get' when agent.run_conversation returns non-dict","url":null,"state":"closed"},{"kind":"issue","number":55822,"title":"AIAgent.chat() and main() raise KeyError('final_response') on run_conversation error/exhaustion paths","url":null,"state":"closed"},{"kind":"pr","number":9437,"title":"fix(cron): guard against non-dict result from run_conversation","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#14490","number":14490}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":9498,"title":"fix(cron): handle non-dict return from run_conversation in scheduler","url":null,"state":"closed","close_reason":{"category":"stale_abandoned","implication":"active"},"merged":false},{"kind":"pr","number":9503,"title":"fix(cron): guard against non-dict conversation results","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"22afa066f","number":0},{"kind":"pr","value":"#14490","number":14490},{"kind":"pr","value":"#9437","number":9437},{"kind":"pr","value":"#14490","number":14490},{"kind":"pr","value":"#9433","number":9433}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":14490,"title":"fix(cron): guard against non-dict result from run_conversation (salvage #9437)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["cron/scheduler.py","scripts/release.py"]},{"kind":"pr","number":55821,"title":"fix(agent): chat()/main() raise KeyError('final_response') on run_conversation error paths","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"053424c4865db0e8cc6ef9a8c2f49bf8882afd45","number":0}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false,"is_fix_pr":true,"fix_tier":"suggested","fix_detail_withheld":true},{"kind":"pr","number":55880,"title":"fix(agent): handle missing final_response on error paths","url":null,"state":"closed","close_reason":{"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":55891,"title":"fix: AIAgent.chat() and main() return empty string instead of raising KeyError on run_conversation error/exhaustion paths","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"053424c4865db0e8cc6ef9a8c2f49bf8882afd45","number":0}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":55989,"title":"fix(agent): use .get() for final_response to prevent KeyError (#55822)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"053424c4865db0e8cc6ef9a8c2f49bf8882afd45","number":0}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false,"is_fix_pr":true,"fix_tier":"suggested","fix_detail_withheld":true}],"trust":{"default_tier":"verified","includes_suggested":false}}