Skip to content

fix: prevent entity conflation in pane summarization#341

Merged
koala73 merged 2 commits into
mainfrom
claude/debug-pane-summarization-mYbvo
Feb 24, 2026
Merged

fix: prevent entity conflation in pane summarization#341
koala73 merged 2 commits into
mainfrom
claude/debug-pane-summarization-mYbvo

Conversation

@koala73

@koala73 koala73 commented Feb 24, 2026

Copy link
Copy Markdown
Owner

Summary

Fixes summarization quality issues where small models (Ollama llama3.1:8b) were merging entities from unrelated headlines into incoherent summaries (e.g. "Iran's president, Marco Rubio").

Changes

  • Rewrite summarization prompts to explicitly state headlines are SEPARATE stories — model must pick ONE, never merge facts across headlines
  • Reduce headline count from 8-10 to 5 across the pipeline (InsightsPanel, NewsPanel, server dedup, browser T5, cache key)
  • Remove biasing examples from system prompts ("Iran's regime...") that caused the model to force-inject geo context
  • Remove "CRITICAL FOCAL POINTS" directive that encouraged merging geo entities into unrelated stories
  • Disable circuit breaker cache for summarization (cacheTtlMs: 0) — the shared summaryBreaker had a 10-minute single-slot cache that returned the same summary for all panels regardless of different headlines
  • Add Mexico to COUNTRY_BOUNDS and COUNTRY_ALIASES for brief news/geo matching (missed in PR fix: add Mexico to CII scoring — TIER1, keywords, ports #337)
  • Bump CACHE_VERSION to v5 to invalidate stale entries

Test plan

  • Verify InsightsPanel and NewsPanel produce distinct summaries (not identical)
  • Verify summaries reference only one story, not a conflation of multiple headlines
  • Verify Mexico headlines appear in country brief
  • npx tsc --noEmit passes
  • Existing summarization tests pass

Small models (llama3.1:8b via Ollama) were merging entities from
unrelated headlines into incoherent summaries (e.g. "Iran's president,
Marco Rubio"). Root cause: 8-10 unrelated story headlines were sent to
the model with a "summarize the top story" prompt, causing the model to
conflate actors across separate stories.

Changes:
- Rewrite all summarization prompts (brief, analysis, fallback) to
  explicitly state headlines are SEPARATE stories and the model must
  pick ONE and never merge facts from different headlines
- Reduce headline count from 8-10 to 5 across the pipeline
  (InsightsPanel, NewsPanel, server dedup, browser T5, cache key)
- Remove biasing examples from system prompts ("Iran's regime...")
- Remove "CRITICAL FOCAL POINTS" directive that encouraged the model
  to force-inject geo context entities into unrelated stories
- Bump CACHE_VERSION to v5 to invalidate stale entries

https://claude.ai/code/session_014t5oXq7c3b7oh5bZCtQFrp
…ical summaries across panels

The shared summaryBreaker circuit breaker had a 10-minute single-slot cache
(default cacheTtlMs). When one panel generated a summary, the circuit breaker
cached that response and returned it verbatim for all subsequent summarization
requests from other panels, regardless of the different headlines being sent.
Setting cacheTtlMs: 0 ensures each panel's unique headlines are always sent to
the server. Server-side Redis caching still handles dedup for identical inputs.

https://claude.ai/code/session_014t5oXq7c3b7oh5bZCtQFrp
@vercel

vercel Bot commented Feb 24, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
worldmonitor Ready Ready Preview, Comment Feb 24, 2026 10:24pm
worldmonitor-finance Ready Ready Preview, Comment Feb 24, 2026 10:24pm
worldmonitor-happy Ready Ready Preview, Comment Feb 24, 2026 10:24pm
worldmonitor-startup Ready Ready Preview, Comment Feb 24, 2026 10:24pm

Request Review

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@koala73
koala73 merged commit ae97d2f into main Feb 24, 2026
5 checks passed
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)
@koala73
koala73 deleted the claude/debug-pane-summarization-mYbvo branch February 25, 2026 07:59
andreteow pushed a commit to andreteow/worldmonitor-a47 that referenced this pull request Feb 25, 2026
* fix: prevent entity conflation in pane summarization

Small models (llama3.1:8b via Ollama) were merging entities from
unrelated headlines into incoherent summaries (e.g. "Iran's president,
Marco Rubio"). Root cause: 8-10 unrelated story headlines were sent to
the model with a "summarize the top story" prompt, causing the model to
conflate actors across separate stories.

Changes:
- Rewrite all summarization prompts (brief, analysis, fallback) to
  explicitly state headlines are SEPARATE stories and the model must
  pick ONE and never merge facts from different headlines
- Reduce headline count from 8-10 to 5 across the pipeline
  (InsightsPanel, NewsPanel, server dedup, browser T5, cache key)
- Remove biasing examples from system prompts ("Iran's regime...")
- Remove "CRITICAL FOCAL POINTS" directive that encouraged the model
  to force-inject geo context entities into unrelated stories
- Bump CACHE_VERSION to v5 to invalidate stale entries

https://claude.ai/code/session_014t5oXq7c3b7oh5bZCtQFrp

* fix: disable circuit breaker cache for summarization to prevent identical summaries across panels

The shared summaryBreaker circuit breaker had a 10-minute single-slot cache
(default cacheTtlMs). When one panel generated a summary, the circuit breaker
cached that response and returned it verbatim for all subsequent summarization
requests from other panels, regardless of the different headlines being sent.
Setting cacheTtlMs: 0 ensures each panel's unique headlines are always sent to
the server. Server-side Redis caching still handles dedup for identical inputs.

https://claude.ai/code/session_014t5oXq7c3b7oh5bZCtQFrp

---------

Co-authored-by: Claude <[email protected]>
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
* fix: prevent entity conflation in pane summarization

Small models (llama3.1:8b via Ollama) were merging entities from
unrelated headlines into incoherent summaries (e.g. "Iran's president,
Marco Rubio"). Root cause: 8-10 unrelated story headlines were sent to
the model with a "summarize the top story" prompt, causing the model to
conflate actors across separate stories.

Changes:
- Rewrite all summarization prompts (brief, analysis, fallback) to
  explicitly state headlines are SEPARATE stories and the model must
  pick ONE and never merge facts from different headlines
- Reduce headline count from 8-10 to 5 across the pipeline
  (InsightsPanel, NewsPanel, server dedup, browser T5, cache key)
- Remove biasing examples from system prompts ("Iran's regime...")
- Remove "CRITICAL FOCAL POINTS" directive that encouraged the model
  to force-inject geo context entities into unrelated stories
- Bump CACHE_VERSION to v5 to invalidate stale entries

https://claude.ai/code/session_014t5oXq7c3b7oh5bZCtQFrp

* fix: disable circuit breaker cache for summarization to prevent identical summaries across panels

The shared summaryBreaker circuit breaker had a 10-minute single-slot cache
(default cacheTtlMs). When one panel generated a summary, the circuit breaker
cached that response and returned it verbatim for all subsequent summarization
requests from other panels, regardless of the different headlines being sent.
Setting cacheTtlMs: 0 ensures each panel's unique headlines are always sent to
the server. Server-side Redis caching still handles dedup for identical inputs.

https://claude.ai/code/session_014t5oXq7c3b7oh5bZCtQFrp

---------

Co-authored-by: Claude <[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