Timeline

All 44 pull requests in date order. Generated from committed build data.

Chapter 1: Scaffolding, ingestion and clustering

PRTitleMergedChanges
#1Scaffold FastAPI app, profile config models, Docker, and CIOct 7, 2026+829 / −1
#2Add RSS/Atom ingestion with normalized articles and deduplicationOct 8, 2026+1656 / −13
#3Phase 1 follow-ups: drop poll_interval_minutes alias, add time_field and contact-email User-AgentOct 8, 2026+132 / −18
#4Phase 2: DB-backed profiles and keyword topics, Discover-style UI, make demoOct 8, 2026+2212 / −67
#5Run the demo on Windows without makeOct 8, 2026+218 / −7
#6Link cards to the feed's raw permalink (Article.url); canonical_url is dedup-onlyOct 8, 2026+251 / −66
#7Stories: extract article text, cluster related articles across sources, story feed and UIOct 8, 2026+3516 / −64

Chapter 2: Summaries, briefs, reports and the API

PRTitleMergedChanges
#8Cited story summaries via a configurable OpenAI-compatible LLM (fake LLM by default)Oct 8, 2026+3107 / −66
#9Read .env in local runs so profile ${VAR}s (LOCAL_LLM_*) resolve outside DockerOct 9, 2026+92 / −8
#10Briefs (lead + 3 cited bullets) and detailed cited reportsOct 9, 2026+2650 / −405
#11Fix unreachable reports and report timeouts stalling briefs; shrink report inputOct 9, 2026+152 / −31
#12Publish gate: background generation, published-only pages, SSE arrivalsOct 12, 2026+5534 / −948
#13Report quality guards + metrics; /api/v1 with resumable SSE, optional auth, OpenAPI contractOct 12, 2026+4543 / −140
#14Phase 6: story Q&A (streamed, cited answers) + attribution, publisher labels, glued-word fixOct 12, 2026+4221 / −154

Chapter 3: Alerts, sources and card images

PRTitleMergedChanges
#15Keyword alerts: exactly-once per story via webhook / ntfy / email, with log and UIOct 12, 2026+4812 / −147
#16Source management, Guardian/NewsData/X adapters with budgets, Docker ops fixesOct 13, 2026+5927 / −688
#17Card images: page images, validated + SSRF-safe WebP cache, story image selection, fallbacks, backfillOct 14, 2026+2468 / −50

Chapter 4: Web-search enrichment and hardening

PRTitleMergedChanges
#18Web-search enrichment: add other publishers' coverage to storiesOct 15, 2026+3181 / −27
#19Harden web-search enrichment: shared provider state, retries, per-provider queries, admission controlOct 15, 2026+1565 / −144
#20Phase 10.1: TinyFish primary enrichment provider, GDELT fallback, query hardeningOct 15, 2026+1306 / −151
#21Phase 10.2: lower enrichment thresholds, GDELT 10 s default, retry degraded passesOct 15, 2026+332 / −36
#22Phase 10.3: enrichment recall — query continuation, rule B, link-only, TinyFish-only defaultOct 16, 2026+572 / −117
#23Phase 10.4: enrichment source quality — domain lists, publisher aliases, block-domain, rules C/D, backtestOct 17, 2026+1058 / −84
#25Enrich: exclude social domains server-side, tune rule D, surface snippet scarcityOct 17, 2026+86 / −31
#26enrich: source-quality gate — flag content-farm domains, deny confirmed onesOct 17, 2026+328 / −15

Chapter 5: Context links, deep coverage and perspectives

PRTitleMergedChanges
#24Phase 11: background-and-context links for stories (origin=context)Oct 17, 2026+3046 / −39
#27context: fix coverage gap, per-domain cap, tighter same-event boundaryOct 17, 2026+377 / −32
#28context: fix skipped_context_budget starvation — cap 30→100/day, dry-run no longer consumes, panel shows remaining not merged—+106 / −14
#29Context quality: same-event date rule, content-farm gate, opinion labelsOct 19, 2026+856 / −69
#30context: deterministic same-event signals + accurate reason attribution (phase 11.4)Oct 19, 2026+598 / −96
#31Docs: split README into a MkDocs site on GitHub PagesOct 19, 2026+4157 / −1099
#32enrich: deep-coverage tier for multi-outlet storiesOct 20, 2026+2841 / −97
#33perspectives: per-source digests + 'how outlets differ' synthesisOct 20, 2026+2369 / −19
#34context: planner-mode "Additional detail" (query_mode: planner)Oct 20, 2026+2724 / −27

Chapter 6: Observability and the SQLite lock hunt

PRTitleMergedChanges
#35Phase 16: workflow observability — telemetry tables, Workflow page, story inspectorOct 21, 2026+3797 / −52
#36Phase 16.1: honest image-sweep status + per-reason telemetryOct 21, 2026+376 / −37
#37images: treat duplicate key insert as cache hit, not a failureOct 21, 2026+138 / −6
#38feed: fix 'N new stories' pill clipped height and scroll-to-bottom on clickOct 21, 2026+23 / −2
#39Phase 16.3: enrichment self-starts (pending-capacity gate, own scheduler job, watchdog, status)Oct 22, 2026+694 / −11
#40Fix SQLite write-lock contention: instrumentation, transaction splits, retry_lockedOct 24, 2026+1099 / −203
#41workflow: live pipeline visualizer strip + recent activity laneOct 24, 2026+245 / −6
#42telemetry: per-story step log in the story inspectorOct 24, 2026+1566 / −82
#43db: fix write-txn caller capture — resolve real file:line:func instead of "?"Oct 25, 2026+63 / −20
#44Mark web-enrichment provenance on the story pageOct 25, 2026+618 / −21