Changelog

TestFlight beta build history. Shipping fast, fixing rough edges, sharpening the intelligence layer.

build/26
2026-05-20
  • iCloud sync — your subscribed feeds and full vote history sync across your devices via CloudKit. Because votes drive affinity scoring, your taste profile and article rankings are consistent everywhere. Add a feed on your iPhone and it appears on your iPad in the background. A fresh install auto-fetches all synced feeds as soon as the first CloudKit records arrive.
  • iPad support (early) — adaptive split-view layout for all screen sizes. Landscape shows a two-column view with a popover feed picker; portrait overlays the article detail so you don't lose your place in the feed.
  • Background fetch stability — fixed some race conditions that could lead to crashes during background fetches.
build/21
2026-05-07
  • Lock Screen widget — shows your highest-scoring unread article at a glance; tap to open it directly in the reader.
  • Home Screen hero widget — shows your top-affinity article with its headline and image; tap to deep-link straight into the article.
  • Discovery widget — surfaces a deliberately low-scoring article you'd likely skip in the feed, to help you find things outside your normal interests.
  • Score updates sync to the feed — voting or reading in the article detail view now immediately updates the score on the card behind it.
  • Background refresh crash fix — feedctl was occasionally exceeding its OS background time budget, causing a crash. The refresh pipeline now interrupts cleanly when the deadline hits.
build/18
2026-05-04
  • Reddit native video and galleries — opening a Reddit post with a video or gallery now plays the media inline above the article body. Videos autoplay muted and loop; tap to unmute.
  • Per-feed unread counts in the drawer — each feed row now shows its unread count, and the "All Feeds" row shows the total. Counts reflect whichever floor mode is active.
build/16
2026-05-03
  • Richer article rendering for full-feed publishers — feeds like Semafor that ship the full body in <content:encoded> now render with heading hierarchy and inline links instead of a wall of plain text. No page fetch needed; the feed content is used directly.
  • Reddit subscribe from any URL — pasting a reddit.com URL into Add Feed (subreddit, user, sort variant) now resolves directly to an RSS feed instead of failing autodiscovery silently.
  • Text selection in article reader — long-press anywhere in the article body, title, or TLDR to copy or share text.
  • Sharper "Why This Article" explanations — explanation generation is now skipped below your score floor so low-scoring articles can't generate misleading justifications, and the on-device model receives full article titles for better match reasoning.
build/14
2026-04-30
  • Heading rendering in full-text extractions — extracted articles now show h1h6 at distinct sizes with proper spacing, so section structure is visible instead of every heading collapsing to body text.
  • Drawer swipe no longer triggers taps — opening the feed drawer from the leading edge no longer accidentally registers as an article or feed tap; the gestures no longer compete.
  • First article no longer hides behind the chip bar — the cluster chip bar now properly reserves space so the first card is fully visible at scroll position zero instead of tucked behind the floating header.
build/13
2026-04-29
  • Dynamic Type support — all text in the app now scales with your iOS text size setting.
  • Full color QA pass — every screen, every theme, audited and corrected. Colors throughout the app are now consistent and easier on the eyes in any lighting.
  • Score breakdown decluttered — raw attraction/repulsion numbers are collapsed behind a "Show Details" toggle. The explanation prose is front and center; the numbers are there when you want them.
  • Higher-res feed images — feeds that include multiple image sizes now pick the best one instead of defaulting to the smallest.
  • Full-text extraction for stub feeds — publishers like Ars Technica that truncate with "Read full article" now reliably get extracted even when the stub looks long enough to pass the length check.
  • Duplicate-read prevention — articles you've already seen are now pruned at fetch time using a per-feed date cutoff, so they can't re-surface as new after a refresh.
  • 1,000+ new subreddits in Discover — vetted using ML for active, high-signal, low-noise communities.
build/12
2026-04-25
  • Scores stay current as you vote — the entire queue rescores after each vote instead of only the visible page, so the ranking reflects your latest taste immediately.
  • Subreddit context in feed header — when filtered to a single Reddit feed, the header shows the subreddit path so you always know where you are.
  • Affinity bar says NEW, not CAL — uncalibrated bars now show NEW to signal that you haven't voted enough for percentile calibration to kick in yet; the threshold has also been lowered to make calibration kick in sooner.
  • Settings cleanup — subscribed feeds list is collapsed behind a disclosure group; swipe-to-remove now works reliably.
  • Stale scores and duplicate images fixed — feed list scores no longer lag after a filter/page change; duplicate hero images in Reddit image posts are dropped.
build/11
2026-04-24
  • Faster scoring everywhere — page rescores and Discover feed scoring now use batched BLAS matrix operations instead of per-item dot products; Discover results are memoized so navigating back is instant.
  • Pipe tables render as native grid — markdown pipe tables (Reddit, other feeds) now display as a styled grid instead of monospace text.
  • Horizontal scroll fixed on full-text articles — extracted article bodies no longer break out of the reading pane.
build/10
2026-04-21
  • Faster, lighter background refresh — the fetch pipeline now skips feeds that haven't changed since the last refresh, downloads content in larger chunks, and defers processing until needed. Refreshes are faster, use less data, and drain less battery.
  • Scheduler reliability — fixed a race condition on startup that could cause a background refresh cycle to silently drop.
  • Embedder caching — the AI model is now kept warm across refresh cycles instead of reloading each time, reducing the lag before scores appear after a background refresh.
  • Battery — queue count queries are debounced so the app isn't hammering the database on every scroll.
build/9
2026-04-17
  • Cross-post & syndication dedup — title-hash matching suppresses the same story when it lands under different URLs (Reddit crossposts, re-titled syndications).
  • Feed continuity on return — coming back to Home preserves your place; new high-scorers surface at the top without shuffling what you were reading.
  • Cleaner cluster labels — FoundationModels output is sanitized to strip stray markdown links from chip labels.
  • Score breakdown fallback — widened to show 2 titles at 60 chars when match details are sparse.
  • Reddit tables render properly — HTML <table> data tables in Reddit posts now render as markdown pipe tables instead of collapsing to a wall of text.
build/8
2026-04-15
  • Affinity bar calibration — scores now map to a percentile within your own upvote history (median upvote → 50%, your best ever → 100%), so the bar reflects your actual taste rather than a raw floating-point scale. Score breakdown Final row shows the percentile too. Requires 10+ upvotes to activate; shows CAL indicator until then.
  • Apple Intelligence refusal handling — when the on-device model declines to summarize (politics, policy, international affairs), the app shows a clear message instead of silently failing. TLDR button is disabled after a refusal. Embeddings continue to use article content, not error text.
  • Full-text extraction on truncated feeds — trailing sentinels like "Read full article" and "Continue reading" now trigger extraction even when the body passes the length threshold. Fixes Ars Technica and similar stub-only publishers.
  • Saved articles open in the reader — tapping a saved article now opens the full in-app reader instead of jumping to Safari.
  • Queue Zero animation fix — "QUEUE ZERO" typewriter no longer duplicates text when switching tabs and returning to Home.
  • Scoring performance — vote embeddings are pre-normalized at insert time so scoring reduces to a single dot product per pair (was cosine similarity with two sqrt norm computations). ~2.4× faster at 2 000 votes; trims battery on a hot loop that runs on every vote and page turn.
  • Drawer row alignment — "All Feeds" row height now matches individual feed rows.
build/7
2026-04-13
  • Feedback button fixcanOpenURL check was blocking all mail clients. Removed the guard and call openURL directly; the OS routes it to the configured default mail app.
build/6
2026-04-13
  • Beta feedback button — tap [> /FEEDBACK] in the feed header to email beta notes directly. Dismissible hint; graceful toast if no mail app is configured.
  • Zero-feed onboarding — new users with no subscriptions are guided to Discover or Settings rather than landing on a blank feed.
  • Push notifications on by default — new installs opt in automatically; support email updated.
  • Hardened fetch pipeline — payload size cap on feed responses and locked-down offscreen WKWebView (navigation blocked after initial load, no popups, destroyed after Readability extraction).
  • Schema migrations via GRDB DatabaseMigrator — future DB changes apply safely and incrementally.
build/5
2026-04-12
  • Sound effects — boot chirp, upvote/downvote clicks, queue-zero tone, and notification sound. Plays over music and podcasts without interruption. Toggle in Settings → Advanced → Sound Effects.
  • Paste-to-subscribe — paste any URL in Settings → Feeds to auto-discover RSS/Atom feeds. Shows a picker when multiple feeds are found at that URL.
  • Inline images in Reddit self-posts — bare image URLs embedded in post bodies now render as images instead of text links.
build/4
2026-04-11
  • New in-app manual — accessible from onboarding ([?] Read the Manual) and Settings → Help.
  • Queue Zero celebration now triggers when the above-floor queue empties, not just the full queue.
  • Fixed duplicate matches appearing in the article detail score breakdown.
  • HTML entities in feed titles now decode properly (e.g. &amp; → &).
  • Clarified the swipe-to-vote gesture hint in the feed view.
build/3
2026-04-09
  • Added a share button to article detail.
  • Upvote / downvote buttons now light up to reflect the current vote state.
  • Cleaner article detail — title and date are more legible.
  • Full-text extraction no longer gated on isProbablyReaderable, so more articles get the full body.
  • Removed the dead seed-vote code path.
build/2
2026-04-08
  • New full-screen zoomable image viewer for article images.
  • Newly subscribed feeds fetch immediately with a toast confirming the result.
  • Keyboard auto-dismisses after adding a feed in Settings.
  • Short-article scoring penalty drops once the full text has been fetched.
  • Named HTML entities (e.g. &zwnj;) now decode properly in feed content.
  • Faster rescoring: batched DB I/O and skips unchanged article state.
  • Clustering is skipped when the queue has ≤ 1 page of articles.
  • Image disk cache capped at 200 MB.