6d4e851d80
A hermes serve killed mid-update lost every un-flushed in-memory session (#94724 item 2, reported by @ruangraung): the next RPC failed with 'session-scoped RPC rejected: not in memory (detached/reaped runtime)' and no store held the transcript. #95576 made serves survive future updates; this closes the kill path itself: - install chaining SIGTERM/SIGINT handlers (hermes serve / dashboard startup, before uvicorn's capture_signals) that first persist in-memory session transcripts to state.db — bounded by HERMES_TUI_EXIT_FLUSH_BUDGET_S (default 5s, daemon worker + join) so a hung SQLite write can never block exit - _shutdown_sessions (atexit) runs the same bounded flush FIRST, before the slow per-session teardown a supervisor may SIGKILL mid-way - the idle-reaper scan piggybacks a periodic incremental flush (marker-deduped agent._persist_session, running sessions skipped) so even a SIGKILL loses at most one flush interval — no new timer subsystem Refs #94724