{"repo":"NousResearch/hermes-agent","public_id":"102352","display_label":"Corrupt data in sessions no longer aborts exports","summary":"Multiple fixes make session listing, export, and related operations tolerant of corrupt rows, bad timestamps, and malformed data instead of aborting entirely. Covers database-level salvage and exporter-level timestamp handling.","subsystem":null,"counts":{"members":4,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":2},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":108086,"merged_at":"2026-09-11T13:24:55+00:00"},"resolution":{"state":"resolved","by":"pr-108086"},"freshness":{"state":"verified","last_verified_at":"2026-09-11T13:24:55+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.6666666666666666},"fix_edges":[{"issue_number":91536,"pr_number":108086,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-09-11T13:24:55+00:00"},{"issue_number":94691,"pr_number":108086,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-11T13:24:55+00:00"},{"issue_number":99959,"pr_number":108086,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-11T13:24:55+00:00"},{"issue_number":102352,"pr_number":108086,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-11T13:24:55+00:00"},{"issue_number":102399,"pr_number":108086,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-11T13:24:55+00:00"},{"issue_number":106060,"pr_number":108086,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-11T13:24:55+00:00"}],"members":[{"kind":"issue","number":102352,"title":"[Bug]: corrupt message timestamp aborts whole session export (unguarded fromtimestamp in all three exporters)","url":null,"state":"closed"},{"kind":"pr","number":102353,"title":"fix(cli): degrade corrupt export timestamps instead of aborting","url":null,"state":"closed","close_reason":{"category":"stale_abandoned","implication":"active"},"merged":false},{"kind":"pr","number":102391,"title":"fix(cli): tolerate corrupt timestamps in session exports","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#102353","number":102353},{"kind":"pr","value":"#102352","number":102352}],"category":"duplicate_of","implication":"duplicate"},"merged":false},{"kind":"pr","number":108086,"title":"state.db: one corrupt row (bad timestamp / malformed marker JSON / oversized IN-list) no longer kills sessions list, export, insights or prune (#102399 #102352 #99959 #94691 #106060; salvage #106071 #101726 #94701 #102679 #100658)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/insights.py","hermes_cli/cli_session_mixin.py","hermes_cli/session_export.py","hermes_cli/session_export_html.py","hermes_cli/session_export_md.py","hermes_cli/session_filters.py","hermes_cli/sessions_cmd.py","hermes_cli/sessions_cmd_browse.py","hermes_cli/timefmt.py","hermes_state_common.py","hermes_state_compression.py","hermes_state_gateway.py","hermes_state_maintenance.py","hermes_state_messages.py","hermes_state_portability.py","hermes_state_schema.py","hermes_state_sessions.py","tests/hermes_state/test_corrupt_row_robustness.py","tests/test_hermes_state.py","tests/test_session_export_batch.py","tests/tools/test_async_delegation_fd_leak.py","tools/async_delegation.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}