Speech Brief

Changelog

# Changelog

All notable changes to Speech Brief are listed here. Dates are commit-based.

## 0.1.19
- Switched Countries filtering back to SQL-only matching for correct counts/results consistency.
- Added admin queue coverage metrics for `filter_countries` (`coverage_pct`, indexed vs summarized, estimated missing).
- Kept `Backfill filters` as the one-shot historical repair path for country filter blobs.
- Fixed country filter mismatch edge cases caused by mixed SQL/Python fallback behavior.

## 0.1.20
- Performance diagnostics bundle: request timing, job stats, DB stats, and index-perf breakdown in admin.
- Homepage performance: skip Find-index generation unless active, skip unused summary JSON on previews, covering index for sort, and SQLite mmap tuning.
- Added short-lived anonymous homepage HTML cache and configurable page size.
- Configurable long-lived post-page caching headers (`POST_CACHE_TTL_SECONDS`, `POST_CACHE_SWR_SECONDS`).

## 0.1.18
- Added `Countries` as a first-class filter group with multi-select and `Any`/`All` match modes.
- Country filters are now wired end-to-end in query params, SQL filtering, pagination, and AJAX updates.
- Added persistent `filter_countries` blob storage/index support for faster country filtering at scale.
- Added Countries tab support in Find index and active-filter chip handling.
- Fixed Find results rendering regression where typing showed no entries.
- Fixed first-click mobile edge case where opening Filters could keep Search open.

## 0.1.17
- Low-signal detection upgraded with stronger source-aware rules (Truth Social repost/link-only noise, PMO schedule/advisory patterns, NATO byline/routine noise, UN routine briefing patterns).
- Added persistent `low_signal_reason` tagging in DB and ingestion pipelines for observability/tuning.
- Admin low-signal backfill now reports `flagged_by_reason` and rewrites both flag + reason for existing posts.
- Low-signal badge now exposes reason via tooltip on feed and detail pages.

## 0.1.16
- Performance pass: preview-list SQL path, SQLite tuning/indexes, and cache headers on list/detail routes.
- Post detail now lazy-loads original text via `/post/{id}/raw` with ETag support.
- Filter drawer lazy-load behavior refined to avoid heavy initial render cost.
- Share improvements: post `Link` now copies canonical URL to clipboard with fallback behavior.
- Social preview metadata improved with explicit OpenGraph/Twitter image tags for richer WhatsApp/link previews.

## 0.1.15
- Canonical tag normalization added for filters and summaries (alias mapping, display normalization, noise rejection).
- Backfill filters now also rewrites stored summary taxonomy for existing posts.
- Filter extraction/counting now uses canonical labels across key tags, topics, keywords, and entities.
- Mobile/light-theme polish: force light color scheme, prevent horizontal overflow, improve compact control layout.
- Sources pages separator rendering fixed.

## 0.1.10
- Low-signal Truth Social filtering (hidden by default, toggle + backfill).
- NATO extraction hardened (meta fallback, login page guard, larger text blocks).
- Abbreviation tooltips improved for mobile tap and sizing.
- Added DB indexes and gzip compression for faster responses.
- SQL-level filtering for speaker/source/category + low-signal.
- Post detail speaker/source links and admin backfill fixes.

## 0.1.11
- Admin summary queue panel with live counts.
- Backfill slugs/filters fixes and admin backfill regrouping.
- Sources page link moved into tagline (“Source linked.”).
- Sources list/detail pages added with explanations per source.

## 0.1.12
- AJAX filtering and pagination (no full page reloads).
- Filters drawer opens instantly; list updates in place.
- Filter UI extracted into a reusable partial.

## 0.1.13
- NATO extraction tightened with boilerplate stripping and body targeting.
- Filter cache keyed to latest insert for faster AJAX responses.
- Footer link alignment cleanup.

## 0.1.14
- Truth Social token-first auth support (`TRUTHSOCIAL_TOKEN`) for hosted deployments.
- Added token diagnostics visibility (auth mode + token presence) in admin diagnostics.
- Added `scripts/get_truth_token.py` helper to generate bearer token locally.
- Official-source ingestion hardening: retries/backoff for transient HTTP failures.
- URL canonicalization in ingestion (tracking param stripping + dedupe).
- Raw text guardrails for oversized payloads and low-value NATO captures.
- Truth Social status normalization now sorts/dedupes before poll limits.

## 0.1.9
- SEO-friendly post permalinks with speaker/source/date/slug + stable ID.
- Canonical redirects from legacy /post/{id} to new URLs.
- Sitemap and RSS now emit canonical URLs.
- Stored slug field for posts and auto-generated slugs from titles.

## 0.1.8
- Abbreviation tooltips with local dictionary and hover/tap expansion.
- Dictionary-first abbreviation extraction (LLM only if no local matches).
- Find filters improved with caching and lazy loading for faster page load.

## 0.1.7
- Fixed Find tab behavior (auto-switch, focus, repeated searches).
- Expanded Find to search across tags, entities, and geography.
- Improved filter matching and preview tag highlighting.
- De-duplicated Find results and show combined group badges.

## 0.1.6
- EU, NATO, Elysee ingestion improvements and header consistency.
- Pagination UX fixes and local push button.
- Push diagnostics, Truth Social throttling, and source parsing hardening.
- Added EU press feed and WEF source updates.
- RSS feeds and expanded official sources.
- Latest DB time on admin and diagnostics improvements.
- GoatCounter analytics and poller hardening.
- Germany/NATO/UN/Elysee sources and async admin tasks.

## 0.1.5
- Buy Me a Coffee footer link.
- Resummarize status badge and speaker lookup fixes.
- Region/country extraction improvements.
- Title speaker attribution improvements.

## 0.1.4
- GOV.UK pagination fix.
- PM Canada RSS and official source cursor.
- Local push status and health alias.

## 0.1.3
- Admin edits, favicon assets, tagging tweaks.