koala73 / koala73/worldmonitor

epic(ux): durable continuity — persistent read-state, catch-up module, story following, high-severity push, since-cursor for agents (Bet 5)

Open
#4,923 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
86.6k
Forks
13.1k
Avg merge
8h 4m
Merged PRs (30d)
825

Description

From the 2026-07-05 strategic review: every visit is a stateless snapshot — the opposite of "staying in tune".

## Evidence (verified 2026-07-05)
- Read-state is an in-memory Set (`src/services/activity-tracker.ts:8`), never persisted; first render marks EVERYTHING seen (`NewsPanel.ts:537-542`) — a returning user sees zero NEW tags for what happened while away.
- No "while you were away": no cross-session diff, no unread counters surviving reload; breaking-banner dismissals also in-memory (BreakingNewsBanner.ts:31).
- Story phases (BREAKING→DEVELOPING→SUSTAINED→FADING) are tracked server-side (`derivePhase`, story:track:v1) but there is no follow-a-story subscription.
- Realtime push is coerced to critical-only (`scripts/notification-relay.cjs:766-770`); "high" severity can never push live, only appear in the next digest. `IMPORTANCE_SCORE_LIVE` off (:866).
- MCP/REST news tools have no `since`/cursor param — agents must full-poll and diff (api/mcp/registry/cache-tools.ts get_news_intelligence).

## Work items
a) **Persistent read-state**: last-visit timestamp + seen story-cluster ids in localStorage always, Convex for signed-in users; NewsPanel stops marking-all-seen on first render — items newer than last visit render NEW.
b) **Catch-up module**: on return after >2h away, a "While you were away" strip: top clusters (by importance) that emerged or escalated since last visit.
c) **Follow a story**: per-cluster follow button persisting cluster hash; followed clusters surface phase changes (DEVELOPING→BREAKING etc.) as in-app alerts.
d) **High-severity push**: allow rules to opt into high (not just critical) in notification-relay; respect quiet hours.
e) **since cursor**: `since` (ISO or epoch) param on get_news_intelligence + REST list-feed-digest; response includes `nextSince`; agents stop full-polling.

Contributor guide

Open the contributing guide

Research direction

Start with src/services/activity-tracker.ts, NewsPanel.ts, BreakingNewsBanner.ts, scripts/notification-relay.cjs, and api/mcp/registry/cache-tools.ts. Trace the existing read-state, notification, story-tracking, and news-tool flows before splitting the epic into separately testable work items. Done means the listed persistence, catch-up, following, high-severity push, and since-cursor behaviors work without the current full-polling or first-render limitations.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
api, backend, frontend, full-stack
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.