Skip to content

fix: flush stale data refreshes on tab focus#277

Merged
koala73 merged 1 commit into
koala73:mainfrom
elzalem:fix/flush-stale-refreshes-on-tab-focus
Feb 23, 2026
Merged

fix: flush stale data refreshes on tab focus#277
koala73 merged 1 commit into
koala73:mainfrom
elzalem:fix/flush-stale-refreshes-on-tab-focus

Conversation

@elzalem

@elzalem elzalem commented Feb 23, 2026

Copy link
Copy Markdown
Contributor

Summary

  • When the browser tab is hidden, the scheduler already skips upstream fetches (reschedules with 4x delay)
  • But when the user returns, they wait up to interval x 4 before seeing fresh data (e.g. 20 min for a 5-min service)
  • Add flushStaleRefreshes(): on visibilitychange, cancel pending timeouts for services whose hidden duration exceeded their refresh interval, and re-trigger with 150ms stagger

Only stale services are flushed -- if a 30-min service was hidden for 3 minutes, it keeps its existing schedule.

How it works

Hidden duration 5-min service 30-min service 60-min service
2 min keeps schedule keeps schedule keeps schedule
8 min flushed keeps schedule keeps schedule
35 min flushed flushed keeps schedule

Changes

Single file: src/App.ts (+25 lines)

  • refreshRunners map: stores each service's run() reference and intervalMs
  • hiddenSince timestamp: set on hide, cleared on flush
  • flushStaleRefreshes(): iterates runners, skips non-stale, cancels + re-triggers stale with 150ms stagger
  • Cleanup in destroy path

Test plan

  • Open app, wait for data to load
  • Switch to another tab, wait >5 minutes
  • Return to tab -- news, markets, intelligence should refresh within ~1 second (check Network tab)
  • Repeat with <1 min away -- no immediate refresh burst expected
  • Verify no duplicate in-flight requests (run() has inFlight guard)

🤖 Generated with Claude Code

The existing scheduler skips fetches while the tab is hidden and
reschedules with a 4x delay. When the user returns, they could wait
up to interval x 4 (e.g. 20 min for a 5-min service) before seeing
fresh data.

Add flushStaleRefreshes() -- on visibilitychange, cancel pending
timeouts for any service whose hidden duration exceeded its refresh
interval and re-trigger them with 150ms stagger to avoid thundering
herd. Services that are not stale yet keep their existing schedule.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
@koala73
koala73 merged commit caee7f7 into koala73:main Feb 23, 2026
koala73 added a commit that referenced this pull request Feb 24, 2026
## What's Changed

### Performance
- perf: defer YouTube/map init and stagger data loads to reduce blocking time (#287)

### Features
- feat: universal country detection — CII scoring for all countries (#344)
- feat: add Mexico as CII hotspot for cartel/security monitoring (#327)
- feat: add Mexico and LatAm security feeds for instability coverage (#325)
- feat: add category pills and search filter to Panels tab (#322)
- feat: consolidate settings into unified tabbed modal (#319)
- feat: add Island Times (Palau) RSS feed (#317)
- feat: add AI Flow settings popup for web-only AI provider control (#314)
- feat: optional channels with tab-based region browse UI (#295)
- feat: custom channel management (#282)
- feat: add Bild RSS feed scoped to German locale (#312)

### Bug Fixes
- fix: suppress notification sound when popup alerts are disabled
- fix: prevent entity conflation in pane summarization (#341)
- fix: add Mexico to COUNTRY_BOUNDS and COUNTRY_ALIASES (#338)
- fix: make OpenSky cache TTLs env-configurable (#333)
- fix: serialize OpenSky requests with global 429 cooldown (#332)
- fix: replace RSSHub feeds with native/Google News alternatives (#331)
- fix: OpenSky auth resilience — retry, IPv4, no negative cache on auth fail (#329)
- fix: add CARTO and OpenStreetMap attribution to map (#323)
- fix: add drag cleanup handlers and suppress click after drag-drop (#315)
- fix: replace HTML5 drag API with mouse events for WKWebView (#313)
- fix: open channel settings as inline modal instead of separate window (#311)
- fix: sync YouTube live panel mute state with native player controls (#285)
- fix: strip Ollama reasoning tokens from summaries (#299)
- fix: open external links in system browser on Tauri desktop (#297)
- fix: add User-Agent and Cloudflare 403 detection to secret validation (#296)
- fix: infra cost optimizations round 2 (#275)
- fix: enforce military bbox filtering (#284)
- fix: infrastructure cost optimizations across caching, polling, batching (#283)
- fix: circuit breaker persistent cache with safety fixes (#281)
- fix: immediately refresh stale services when tab regains focus (#277)

### Security
- Security hardening: SSRF protection, auth gating, and token generation (#343)
- Harden Railway relay auth, caching, and proxy routing (#320)
- Build/runtime hardening and dependency security updates (#286)
- fix: harden embed postMessage origin check (#302)
koala73 added a commit that referenced this pull request Feb 25, 2026
## What's Changed

### Performance
- perf: defer YouTube/map init and stagger data loads (#287)

### Features
- feat: universal country detection — CII scoring for all countries (#344)
- feat: add Mexico as CII hotspot (#327)
- feat: add Mexico and LatAm security feeds (#325)
- feat: add category pills and search filter to Panels tab (#322)
- feat: consolidate settings into unified tabbed modal (#319)
- feat: optional channels with tab-based region browse UI (#295)
- feat: custom channel management (#282)

### Bug Fixes
- fix: suppress notification sound when popup alerts are disabled
- fix: prevent entity conflation in pane summarization (#341)
- fix: add Mexico to COUNTRY_BOUNDS and COUNTRY_ALIASES (#338)
- fix: OpenSky cache TTLs, serialization, and auth resilience (#329-#333)
- fix: replace RSSHub feeds with native/Google News alternatives (#331)
- fix: replace HTML5 drag API with mouse events for WKWebView (#313)
- fix: sync YouTube mute state with native player controls (#285)
- fix: strip Ollama reasoning tokens from summaries (#299)
- fix: infra cost optimizations (#275, #283)
- fix: circuit breaker persistent cache (#281)
- fix: immediately refresh stale services on tab focus (#277)

### Security
- Security hardening: SSRF protection, auth gating, token generation (#343)
- Harden Railway relay auth, caching, and proxy routing (#320)
- Build/runtime hardening and dependency security updates (#286)
koala73 added a commit that referenced this pull request Feb 25, 2026
…346)

* fix: suppress notification sound when popup alerts are disabled

Badge playSound() was firing on new findings regardless of the
"Pop up new alerts" toggle. Gate sound on popupEnabled so both
the modal and audio respect the user preference.

* chore: bump version to 2.5.7 with changelog

## What's Changed

### Performance
- perf: defer YouTube/map init and stagger data loads (#287)

### Features
- feat: universal country detection — CII scoring for all countries (#344)
- feat: add Mexico as CII hotspot (#327)
- feat: add Mexico and LatAm security feeds (#325)
- feat: add category pills and search filter to Panels tab (#322)
- feat: consolidate settings into unified tabbed modal (#319)
- feat: optional channels with tab-based region browse UI (#295)
- feat: custom channel management (#282)

### Bug Fixes
- fix: suppress notification sound when popup alerts are disabled
- fix: prevent entity conflation in pane summarization (#341)
- fix: add Mexico to COUNTRY_BOUNDS and COUNTRY_ALIASES (#338)
- fix: OpenSky cache TTLs, serialization, and auth resilience (#329-#333)
- fix: replace RSSHub feeds with native/Google News alternatives (#331)
- fix: replace HTML5 drag API with mouse events for WKWebView (#313)
- fix: sync YouTube mute state with native player controls (#285)
- fix: strip Ollama reasoning tokens from summaries (#299)
- fix: infra cost optimizations (#275, #283)
- fix: circuit breaker persistent cache (#281)
- fix: immediately refresh stale services on tab focus (#277)

### Security
- Security hardening: SSRF protection, auth gating, token generation (#343)
- Harden Railway relay auth, caching, and proxy routing (#320)
- Build/runtime hardening and dependency security updates (#286)
andreteow pushed a commit to andreteow/worldmonitor-a47 that referenced this pull request Feb 25, 2026
…oala73#346)

* fix: suppress notification sound when popup alerts are disabled

Badge playSound() was firing on new findings regardless of the
"Pop up new alerts" toggle. Gate sound on popupEnabled so both
the modal and audio respect the user preference.

* chore: bump version to 2.5.7 with changelog

## What's Changed

### Performance
- perf: defer YouTube/map init and stagger data loads (koala73#287)

### Features
- feat: universal country detection — CII scoring for all countries (koala73#344)
- feat: add Mexico as CII hotspot (koala73#327)
- feat: add Mexico and LatAm security feeds (koala73#325)
- feat: add category pills and search filter to Panels tab (koala73#322)
- feat: consolidate settings into unified tabbed modal (koala73#319)
- feat: optional channels with tab-based region browse UI (koala73#295)
- feat: custom channel management (koala73#282)

### Bug Fixes
- fix: suppress notification sound when popup alerts are disabled
- fix: prevent entity conflation in pane summarization (koala73#341)
- fix: add Mexico to COUNTRY_BOUNDS and COUNTRY_ALIASES (koala73#338)
- fix: OpenSky cache TTLs, serialization, and auth resilience (koala73#329-koala73#333)
- fix: replace RSSHub feeds with native/Google News alternatives (koala73#331)
- fix: replace HTML5 drag API with mouse events for WKWebView (koala73#313)
- fix: sync YouTube mute state with native player controls (koala73#285)
- fix: strip Ollama reasoning tokens from summaries (koala73#299)
- fix: infra cost optimizations (koala73#275, koala73#283)
- fix: circuit breaker persistent cache (koala73#281)
- fix: immediately refresh stale services on tab focus (koala73#277)

### Security
- Security hardening: SSRF protection, auth gating, token generation (koala73#343)
- Harden Railway relay auth, caching, and proxy routing (koala73#320)
- Build/runtime hardening and dependency security updates (koala73#286)
facusturla pushed a commit to facusturla/worldmonitor that referenced this pull request Feb 27, 2026
…73#277)

The existing scheduler skips fetches while the tab is hidden and
reschedules with a 4x delay. When the user returns, they could wait
up to interval x 4 (e.g. 20 min for a 5-min service) before seeing
fresh data.

Add flushStaleRefreshes() -- on visibilitychange, cancel pending
timeouts for any service whose hidden duration exceeded its refresh
interval and re-trigger them with 150ms stagger to avoid thundering
herd. Services that are not stale yet keep their existing schedule.

Co-authored-by: Claude Opus 4.6 <[email protected]>
facusturla pushed a commit to facusturla/worldmonitor that referenced this pull request Feb 27, 2026
…oala73#346)

* fix: suppress notification sound when popup alerts are disabled

Badge playSound() was firing on new findings regardless of the
"Pop up new alerts" toggle. Gate sound on popupEnabled so both
the modal and audio respect the user preference.

* chore: bump version to 2.5.7 with changelog

## What's Changed

### Performance
- perf: defer YouTube/map init and stagger data loads (koala73#287)

### Features
- feat: universal country detection — CII scoring for all countries (koala73#344)
- feat: add Mexico as CII hotspot (koala73#327)
- feat: add Mexico and LatAm security feeds (koala73#325)
- feat: add category pills and search filter to Panels tab (koala73#322)
- feat: consolidate settings into unified tabbed modal (koala73#319)
- feat: optional channels with tab-based region browse UI (koala73#295)
- feat: custom channel management (koala73#282)

### Bug Fixes
- fix: suppress notification sound when popup alerts are disabled
- fix: prevent entity conflation in pane summarization (koala73#341)
- fix: add Mexico to COUNTRY_BOUNDS and COUNTRY_ALIASES (koala73#338)
- fix: OpenSky cache TTLs, serialization, and auth resilience (koala73#329-koala73#333)
- fix: replace RSSHub feeds with native/Google News alternatives (koala73#331)
- fix: replace HTML5 drag API with mouse events for WKWebView (koala73#313)
- fix: sync YouTube mute state with native player controls (koala73#285)
- fix: strip Ollama reasoning tokens from summaries (koala73#299)
- fix: infra cost optimizations (koala73#275, koala73#283)
- fix: circuit breaker persistent cache (koala73#281)
- fix: immediately refresh stale services on tab focus (koala73#277)

### Security
- Security hardening: SSRF protection, auth gating, token generation (koala73#343)
- Harden Railway relay auth, caching, and proxy routing (koala73#320)
- Build/runtime hardening and dependency security updates (koala73#286)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants