e9fa7bc05e
Follow-ups on the salvaged #101081 guard: - A clean close() lets SQLite unlink the WAL sidecars legitimately; the guard treated that as a lost generation and permanently halted the handle, so the #94736 late-write self-heal reopen dropped transcript tails (4 existing tests failed). close() now clears the recorded sidecar generation, and _wal_generation_was_lost() re-adopts the current sidecars after a clean /proc/self probe instead of relying on a stale snapshot. - Healthy writes no longer walk /proc/self/fd: once a sidecar generation is recorded, the stat-based inode check alone detects an unlink/replace. The fd probe only runs in the empty-identity state (fresh DB, post-close reopen). - DeletedWalGenerationError now subclasses StateDbReplacedError, so the gateway retry queue and run_agent flush divert transcripts to the JSONL fallback exactly as they do for a replaced store, instead of retrying forever against a halted handle. - __init__ refuses once (under the startup lock) instead of twice per open, halving the system-wide /proc scan; dropped the dead include_self parameter and the dead _IS_WINDOWS clause. - Test fixes: rstrip(' (deleted)') char-set bug -> removesuffix; the non-linux test now patches sys.platform (the real gate) instead of _IS_WINDOWS.