summaryrefslogtreecommitdiff
path: root/CLAUDE.md
diff options
context:
space:
mode:
authorClaude <noreply@anthropic.com>2026-09-21 21:03:53 +0000
committerClaude <noreply@anthropic.com>2026-09-21 21:03:53 +0000
commit19cc10e549749da0629aea4037008e915b8998a6 (patch)
treefdd9245e52c372fa5c9a959662bf4b4cf54c8e07 /CLAUDE.md
parent8d980bb234b8303f17908621501620cb898d17ef (diff)
Make unsubscribe reachable, and guard view models for reachability
Found while auditing what phase 1 still owed: unsubscribe existed on the view model and no screen called it, so there was no way to remove a podcast. Not dead code -- a feature the user could not get to, which had survived the whole phase. The reachability guard covered helper objects and DAOs but not view models, which is the third place this class has hidden. It now checks that every view model function is reached by some screen, matching both a direct call and a method reference. It fails on unsubscribe before the fix and passes after. Unsubscribing asks first. It cascades to episodes, downloads and every playback position for that show, and none of that is recoverable from anywhere. CLAUDE.md now records what phase 1 deliberately does not have -- artwork, a player screen, queue reordering -- so the next session finds them written down rather than rediscovering them. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018AwnALZL6bD4VBtATDVv3B
Diffstat (limited to 'CLAUDE.md')
-rw-r--r--CLAUDE.md25
1 files changed, 20 insertions, 5 deletions
diff --git a/CLAUDE.md b/CLAUDE.md
index 130d3a8..f97e524 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -90,11 +90,26 @@ claims three separate times across these repos.
## State
-Phase 1 is built: subscribe (share sheet, pasted URL, OPML import), refresh, download, queue,
-play, variable speed, sleep timer, retention. 182 unit tests plus instrumented tests.
-
-**Not built yet:** everything in phase 2 — the rule engine, slow-drip subscriptions, and
-intro/outro skipping. Schema fields for manual skip offsets exist but nothing reads them.
+**Phase 1 is complete.** Subscribe (share sheet, pasted URL, OPML import), refresh, download,
+queue, play, variable speed, sleep timer, retention, unsubscribe, Android Auto with a browsable
+library and voice search. 207 unit tests plus instrumented tests covering the media browse tree.
+
+**Phase 2, not started:** the auto-queue rule engine, slow-drip subscriptions, and intro/outro
+skipping. `skipIntroMs`/`skipOutroMs` exist on `SubscriptionEntity` and nothing reads them.
+
+**Known gaps in what is built** (deliberate, not forgotten):
+
+- **No artwork anywhere.** The parser captures `imageUrl` at channel and item level and the
+ media session passes it to the lock screen, but no screen renders it. Needs an image-loading
+ dependency (Coil) and caching.
+- **No player screen.** There is a transport bar only: play/pause, skip, title. No scrubbing,
+ no per-show speed (the field exists on `SubscriptionEntity`, only the global is reachable).
+- **No queue reordering.** `QueueOrdering.move` and `QueueRepository.move` are written and
+ tested with no UI, which the reachability guard tolerates because they are on a class rather
+ than an object.
+- **Android Auto is unverified in a real car.** The session protocol is proven by
+ `MediaBrowseTest`; whether Auto's own compatibility checks pass on a head unit is untested,
+ and a sideloaded media app may need Auto's developer mode enabled.
## Domain notes worth keeping