All notable changes to World Monitor are documented here.
- Windows sidecar crash: Strip
\\?\UNC extended-length prefix from paths before passing to Node.js — Tauriresource_dir()on Windows returns UNC-prefixed paths that causeEISDIR: lstat 'C:'in Node.js module resolution - Windows sidecar CWD: Set explicit
current_diron the Node.js Command to prevent bare drive-letter working directory issues from NSIS shortcut launcher - Sidecar package scope: Add
package.jsonwith"type": "module"to sidecar directory, preventing Node.js from walking up the entire directory tree during ESM scope resolution
- Keychain persistence: Enable
apple-native(macOS) andwindows-native(Windows) features for thekeyringcrate — v3 ships with no default platform backends, so API keys were stored in-memory only and lost on restart - Settings key verification: Soft-pass network errors during API key verification so transient sidecar failures don't block saving
- Resilient keychain reads: Use
Promise.allSettledinloadDesktopSecretsso a single key failure doesn't discard all loaded secrets - Settings window capabilities: Add
"settings"to Tauri capabilities window list for core plugin permissions - Input preservation: Capture unsaved input values before DOM re-render in settings panel
- CORS hardening: Tighten Vercel preview deployment regex to block origin spoofing (
worldmonitorEVIL.vercel.app) - Sidecar auth bypass: Move
/api/local-env-updatebehindLOCAL_API_TOKENauth check - Env key allowlist: Restrict sidecar env mutations to 18 known secret keys (matching
SUPPORTED_SECRET_KEYS) - postMessage validation: Add
originandsourcechecks on incoming messages in LiveNewsPanel - postMessage targetOrigin: Replace wildcard
'*'with specific embed origin - CORS enforcement: Add
isDisallowedOrigin()check to 25+ API endpoints that were missing it - Custom CORS migration: Migrate
gdelt-geoandeiafrom custom CORS to shared_cors.jsmodule - New CORS coverage: Add CORS headers + origin check to
firms-fires,stock-index,youtube/live - YouTube embed origins: Tighten
ALLOWED_ORIGINSregex inyoutube/embed.js - CSP hardening: Remove
'unsafe-inline'fromscript-srcin bothindex.htmlandtauri.conf.json - iframe sandbox: Add
sandbox="allow-scripts allow-same-origin allow-presentation"to YouTube embed iframe - Meta tag validation: Validate URL query params with regex allowlist in
parseStoryParams()
- Service worker stale assets: Add
skipWaiting,clientsClaim, andcleanupOutdatedCachesto workbox config — fixesNS_ERROR_CORRUPTED_CONTENT/ MIME type errors when users have a cached SW serving old HTML after redeployment
- Filter trending noise and fix sidecar auth
- Restore tech variant panels
- Remove Market Radar and Economic Data panels from tech variant
- Add developer X/Twitter link to Support section
- Add cyber threat API keys to
.env.example
- Migrate all Vercel edge functions to CORS allowlist
- Restrict Railway relay CORS to allowed origins only
- Hide desktop config panel on web
- Route World Bank & Polymarket via Railway relay
- Cyber threat intelligence map layer (Feodo Tracker, URLhaus, C2IntelFeeds, OTX, AbuseIPDB)
- Trending keyword spike detection with end-to-end flow
- Download desktop app slide-in banner for web visitors
- Country briefs in Cmd+K search
- Redesign 4 panels with table layouts and scoped styles
- Redesign population exposure panel and reorder UCDP columns
- Dramatically increase cyber threat map density
- Resolve z-index conflict between pinned map and panels grid
- Cap geo enrichment at 12s timeout, prevent duplicate download banners
- Replace ipwho.is/ipapi.co with ipinfo.io/freeipapi.com for geo enrichment
- Harden trending spike processing and optimize hot paths
- Improve cyber threat tooltip/popup UX and dot visibility
- Full-page Country Brief Page replacing modal overlay
- Download redirect API for platform-specific installers
- Normalize country name from GeoJSON to canonical TIER1 name
- Tighten headline relevance, add Top News section, compact markets
- Hide desktop config panel on web, fix irrelevant prediction markets
- Tone down climate anomalies heatmap to stop obscuring other layers
- macOS: hide window on close instead of quitting
- Reduce idle CPU from pulse animation loop
- Harden regression guardrails in CI, cache, and map clustering
- Consolidate variant naming and fix PWA tile caching
- Windows settings window: async command, no menu bar, no white flash
- Constrain layers menu height in DeckGLMap
- Allow Cloudflare Insights script in CSP
- macOS build failures when Apple signing secrets are missing
Initial v2.2 release with multi-variant support (World + Tech), desktop app (Tauri), and comprehensive geopolitical intelligence features.