New source modules: disease outbreaks (WHO/ProMED/CIDRAP), OFAC sanctions
search, election calendar with risk scoring, shipping stress index,
Reddit social signals, nuclear test site seismic monitor. Cross-domain
alert digest and weekly trend analysis. Registers orphaned space_weather
and ai_watch modules.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Phase 5 of world-intel-mcp: intelligence synthesis layer that makes raw
data actionable.
New modules:
- config/countries.py: 22 tier-1 countries with event multipliers, 22
intel hotspots, 9 strategic waterways, 6 conflict zones
- analysis/focal_points.py: detect convergence of signals on entities
using signal count, type diversity, and recency weighting
- analysis/temporal.py: Welford's algorithm + SQLite for streaming
anomaly detection with seasonal baselines (weekday+month)
Upgraded modules:
- analysis/instability.py: CII v2 with 4 weighted domains (unrest 0.25,
conflict 0.30, security 0.20, information 0.25), UCDP floors, event
multipliers. Full v1 backward compat preserved.
- analysis/signals.py: v2 aggregator accepts 7 data sources (added
outages, military, protests) with convergence scoring
- sources/intelligence.py: 3 new fetch functions (focal_points,
signal_summary, temporal_anomalies), instability upgraded to CII v2
3 new MCP tools: intel_focal_points, intel_signal_summary,
intel_temporal_anomalies. Total: 39 tools.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Complete v3 rewrite: full-viewport Leaflet map as primary interface
with glassmorphic floating panels. All geolocated events (earthquakes,
military aircraft, ACLED conflict, wildfire clusters, signal convergence)
are clickable map markers with detailed slide-in modals.
Design: Chakra Petch + Share Tech Mono typography, vignette overlay,
CSS custom properties, animated markers with pulse/glow on critical
events. Data drawer with sticky section headers for non-geospatial
data (markets, crypto, cyber, predictions, displacement). Scrolling
news ticker, HUD stat pills, layer toggle switches.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Backend: wire stablecoin_status, etf_flows, acled_events, ucdp_events,
displacement, risk_scores, and signal_convergence into the SSE overview
endpoint (23 total feeds, up from 16).
Frontend: complete rewrite with 7-tab navigation (Overview, Markets,
Security, Conflict & Humanitarian, Natural & Climate, Geospatial Map,
Trend Charts), Leaflet dark-tile map with toggleable layers, Chart.js
rolling time-series, feed health counter, and DOMPurify sanitization.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Climate API may return zones as {zone_name: data} object instead of
array. Added Object.values() fallback to normalize both shapes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Jinja2's |default(0) only replaces undefined, not None values from API
data. When used with comparison operators (>=) or format(), None causes
TypeError crashes. Replaced with Python `or` operator which handles
None correctly across market_overview.html (7 patterns) and
country_dossier.html (1 pattern).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
hexdb.io provides ICAO hex aircraft details with no API key required,
eliminating the 30-day trial limitation of Wingbits.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Parse FIRMS CSV column indices from header row instead of hardcoded
offsets. FIRMS added 'instrument' column, shifting confidence/frp.
- Fix cache key collision: _fetch_region and fetch_wildfires both used
'wildfire:fires:{region}' — now CSV uses 'wildfire:csv:{region}'.
- Add type guard for non-string input to _parse_fires_csv.
- Remove unused _CSV_COLUMNS constant.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>