67312a3753
After "Reindex now" the "Indexed X of Y" counter froze at 0 until a manual reload. Root cause is purely client-side: right after the mutation the client still holds the PRE-reindex settings snapshot, which for an already fully-indexed workspace reads reindexing=false, indexed>=total. The deadline-clearing effect evaluated isReindexComplete() against that stale snapshot, read it as "done", and cleared the poll deadline before the first post-reindex poll ever landed — so polling never ran and the counter stayed at 0 (a reload just fetched one fresh snapshot). Gate completion on having actually observed the active run: a reindexSeenActiveRef, reset on each new reindex (mutation onSuccess, before setting the deadline) and latched true once a poll reports reindexing=true. isReindexComplete(status, seenActive) and nextReindexPollInterval now require seenActive, so the stale fully-indexed snapshot no longer reads as finished. The server pre-seeds reindexing=true from enqueue time, so seenActive latches early and a genuine completion still stops polling promptly; the REINDEX_POLL_CAP_MS cap is checked first and always wins, so polling can never run away. closes #262 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>