Phase 2 of cleanup now sweeps _index.json for stale entries with no backing file and no in-memory session, removing them regardless of title (catches multi-language 'Untitled' variants). Phase 3 only deletes the index when Phase 1 removed files AND Phase 2 couldn't run, fixing the cache-busting on every cleanup call. Fix two phase-interaction bugs flagged by Greptile review: - Track phase1_removed_ids to prevent Phase 2 double-counting sessions already removed from disk by Phase 1. - Track phase2_rewrote_index so Phase 3 skips deletion when Phase 2 already cleaned the index in-place. Adds test_issue5331_index_only_ghost_cleanup.py with 12 test cases. |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| agent_health.py | ||
| agent_sessions.py | ||
| auth.py | ||
| auth_oidc.py | ||
| background.py | ||
| background_process.py | ||
| clarify.py | ||
| commands.py | ||
| compression_anchor.py | ||
| config.py | ||
| dashboard_probe.py | ||
| extensions.py | ||
| gateway_chat.py | ||
| gateway_restart.py | ||
| gateway_watcher.py | ||
| goals.py | ||
| helpers.py | ||
| kanban_bridge.py | ||
| metering.py | ||
| models.py | ||
| oauth.py | ||
| onboarding.py | ||
| passkeys.py | ||
| paths.py | ||
| plugin_providers.py | ||
| plugins.py | ||
| profiles.py | ||
| providers.py | ||
| request_diagnostics.py | ||
| rollback.py | ||
| route_approvals.py | ||
| route_session_list_cache.py | ||
| routes.py | ||
| run_journal.py | ||
| runner_client.py | ||
| runtime_adapter.py | ||
| session_discoverability.py | ||
| session_events.py | ||
| session_lifecycle.py | ||
| session_ops.py | ||
| session_recovery.py | ||
| skill_usage.py | ||
| sse_chunked.py | ||
| startup.py | ||
| state_sync.py | ||
| streaming.py | ||
| system_health.py | ||
| terminal.py | ||
| todo_state.py | ||
| turn_journal.py | ||
| updates.py | ||
| upload.py | ||
| usage.py | ||
| webui_session_db.py | ||
| workspace.py | ||
| workspace_git.py | ||
| worktrees.py | ||