9bc249c7e5
Follow-up on top of the salvaged #94095 commit: - maybe_auto_prune_and_vacuum() now returns 'closed' (stale open state-owned sessions marked ended) alongside 'pruned', so entrypoints can report the reconciliation without parsing logs. - Docstring explains the two-window lifecycle (close now, delete after a further retention window). - Regression test: cron/kanban/subagent rows with ended_at NULL are closed on pass 1 and deleted on pass 2; a telegram row is never touched. - website/docs sessions.md documents the automatic stale-open sweep.