Subtle leak in runLiveStatusBatchPoll: the eviction pass (which removes liveStatusByLogin entries for streamers no longer in config.streamers) ran INSIDE the fetch branch — but the fetch branch is skipped early when logins.length === 0. Concretely: if a user had 3 streamers all marked live, then removed all 3, the poll would early-return at length-check, leaving stale liveStatusByLogin entries forever (until app restart) — main-process memory + an inaccurate get-live-status-snapshot IPC response. Renderer wasn't visibly affected because renderStreamers only looks up entries for streamers in the rendered list, but the underlying state was wrong. Restructured so the eviction pass always runs first based on the current watch list, then the fetch + diff only runs when the list is non-empty. Empty-list case still emits "removed -> offline" changes to the renderer so its parallel map stays in sync. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| build | ||
| docs | ||
| scripts | ||
| src | ||
| .gitignore | ||
| eslint.config.mjs | ||
| package-lock.json | ||
| package.json | ||
| README_AI_RELEASE.md | ||
| tsconfig.json | ||