Found by upgrade-simulation review of #1078 (reproduced 2/2, deterministic): if a refresh lock is stale/held during the ONE-TIME migration window after a parse-version bump, the read-only fallback serves the session cache as-is — but the bump invalidates every cached session for that provider, so the run reports the provider as ZERO (in the #1078 window: all 51,753 codex calls / $4,713 absent from export; menubar shows stale pre-fix numbers). The next healthy run heals completely (daily cache honestly stamps complete:false / watermarkTrusted:false, nothing permanently lost). The class is PRE-EXISTING, not introduced by #1078 — any parse-version bump has this window (base loses antigravity the same way). Hardening: the read-only fallback should refuse to report a provider whose parse version it cannot satisfy (serve stale-but-versioned data, or omit the provider with a diagnostic) rather than reporting it as zero. Window: ~90s staleMs; triggers: force quit/OOM/reboot during the first post-upgrade run, or migration re-parse exceeding the 30s lock wait.
Found by upgrade-simulation review of #1078 (reproduced 2/2, deterministic): if a refresh lock is stale/held during the ONE-TIME migration window after a parse-version bump, the read-only fallback serves the session cache as-is — but the bump invalidates every cached session for that provider, so the run reports the provider as ZERO (in the #1078 window: all 51,753 codex calls / $4,713 absent from export; menubar shows stale pre-fix numbers). The next healthy run heals completely (daily cache honestly stamps complete:false / watermarkTrusted:false, nothing permanently lost). The class is PRE-EXISTING, not introduced by #1078 — any parse-version bump has this window (base loses antigravity the same way). Hardening: the read-only fallback should refuse to report a provider whose parse version it cannot satisfy (serve stale-but-versioned data, or omit the provider with a diagnostic) rather than reporting it as zero. Window: ~90s staleMs; triggers: force quit/OOM/reboot during the first post-upgrade run, or migration re-parse exceeding the 30s lock wait.