{"repo":"NousResearch/hermes-agent","public_id":"103840","display_label":"FTS5 shadow table orphan bug and repair handling","summary":"A bug where database recovery resurrects orphaned FTS5 shadow tables causes startup failures; related fixes and improvements address detection, self-healing, and repair of these orphan tables on session database open.","subsystem":"agent","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":108130,"merged_at":"2026-09-11T13:37:28+00:00"},"resolution":{"state":"unresolved","by":null},"freshness":{"state":"verified","last_verified_at":"2026-09-11T13:37:28+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.5},"fix_edges":[{"issue_number":56815,"pr_number":108130,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-09-11T13:37:28+00:00"},{"issue_number":88587,"pr_number":108130,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-09-11T13:37:28+00:00"},{"issue_number":96591,"pr_number":108130,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-09-11T13:37:28+00:00"},{"issue_number":97794,"pr_number":108130,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-11T13:37:28+00:00"},{"issue_number":103647,"pr_number":108130,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-09-11T13:37:28+00:00"},{"issue_number":103840,"pr_number":108130,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-09-11T13:37:28+00:00"},{"issue_number":106393,"pr_number":108130,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-09-11T13:37:28+00:00"},{"issue_number":106667,"pr_number":108130,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-09-11T13:37:28+00:00"}],"members":[{"kind":"issue","number":103840,"title":"[Bug]: state.db recovery via `.recover` resurrects orphan FTS5 shadow tables — gateway fails startup with \"fts5: error creating shadow table messages_fts_data: table already exists\"","url":null,"state":"closed"},{"kind":"pr","number":56824,"title":"fix(state): repair orphan FTS5 shadow tables on SessionDB open","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"04dd80a977","number":0},{"kind":"pr","value":"#108130","number":108130},{"kind":"pr","value":"#103868","number":103868}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":103868,"title":"fix(state): self-heal orphan FTS5 shadow tables (views+triggers, ownership-safe)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"04dd80a977","number":0},{"kind":"pr","value":"#108130","number":108130},{"kind":"pr","value":"#56824","number":56824}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":108130,"title":"state.db FTS damage no longer kills turns; doctor/repair/recover handle real incident shapes (#97794, #88587, #100227, #103840, #106667, #102240, #98050, #103647, #96591, #105887; salvage #97843 #88604 #56824 #91413 #102808 #103657 #106890 #103321)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/turn_explainers.py","contributors/emails/91889514+jangomango76@users.noreply.github.com","contributors/emails/[redacted:email]","contributors/emails/[redacted:email]","contributors/emails/[redacted:email]","gateway/run_notifications.py","hermes_cli/console_engine.py","hermes_cli/doctor_state.py","hermes_cli/session_lost_and_found.py","hermes_cli/session_recovery.py","hermes_cli/sessions_cmd.py","hermes_cli/web_routers/_common.py","hermes_cli/web_routers/analytics.py","hermes_cli/web_server_sessions.py","hermes_constants.py","hermes_state_errors.py","hermes_state_fts.py","hermes_state_repair.py","hermes_state_schema.py","hermes_state_search.py","tests/hermes_cli/test_doctor_structural_corruption.py","tests/hermes_cli/test_session_recovery.py","tests/hermes_cli/test_session_recovery_lost_and_found.py","tests/hermes_cli/test_sessions_repair_check_only_exit.py","tests/hermes_cli/test_web_analytics_corrupt_store.py","tests/hermes_state/test_state_db_corrupt_quarantine.py","tests/run_agent/test_corruption_recovery_guidance.py","tests/run_agent/test_turn_completion_explainer.py","tests/state/test_fts_index_fail_open.py","tests/state/test_fts_orphan_shadow_repair.py","tests/test_fts_cjk_bigram.py","tests/test_state_db_fts_segment_collision_probe.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}