From 3eb15dbd84da689943f54d48a4d4974aa3d7f017 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 21 Sep 2026 09:31:52 +0000 Subject: Record phase 1 state and the gate overrides in CLAUDE.md Four coverage exceptions and five detekt relaxations, all deliberate and all documented at the point they were taken. Writing them down in one place so a future session can see the pattern rather than rediscovering each decision -- and so the question of whether framework adapters belong in the coverage metric at all stays visible instead of being quietly settled by attrition. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_018AwnALZL6bD4VBtATDVv3B --- CLAUDE.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index d6160d3..e78257a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -76,6 +76,14 @@ claims three separate times across these repos. touched in the same diff. Room tracks by version; a wrong migration corrupts a real, non-reproducible library. +## 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. + ## Domain notes worth keeping - **Playback position is the crown jewel of the data model.** It must survive process death. Save @@ -105,3 +113,20 @@ claims three separate times across these repos. - **Gradle is pinned to 8.14.3, not 9.x**, because Chaquopy 16.1.0 calls `org.gradle.util. VersionNumber`, removed in Gradle 9. Chaquopy 17 moved to AGP 9.x; going there means bumping AGP, Gradle and Chaquopy together. This is the one deliberate divergence from FeeDreader. + +## Things a future session should know + +- **The coverage gate has been overridden four times**, each recorded in the commit message. All + four are Android-framework glue that cannot execute off-device: the Chaquopy bridge, + PlaybackService, ChaquopyYouTubeSource, PlayerConnection and the two Workers. Each time the + gate fired it was a useful prompt — it drove PositionWriter onto a narrow Playhead interface + and pulled RetentionSweeper out of its Worker, both of which found or prevented real bugs. + If the exceptions keep accumulating, the honest fix is a jacoco exclusion for framework + adapters, which is a decision for Peter rather than something to slip in. + +- **Detekt config has been relaxed five times**, all documented inline in `config/detekt/detekt.yml`. + Twice the better answer was restructuring instead: `Screens.kt` was split per screen and + `ListenViewModel` was split into library and player halves rather than raising a limit again. + +- **Feeds are big.** A real subscription in testing produced 2753 episodes in one refresh. Any + per-episode work — a query in a loop, an O(n²) match — needs to be considered at that scale. -- cgit v1.2.3