summaryrefslogtreecommitdiff
path: root/CLAUDE.md
diff options
context:
space:
mode:
Diffstat (limited to 'CLAUDE.md')
-rw-r--r--CLAUDE.md24
1 files changed, 23 insertions, 1 deletions
diff --git a/CLAUDE.md b/CLAUDE.md
index e78257a..67de4bd 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -54,11 +54,23 @@ with `adb shell monkey`. Use the shared wrappers, which report from exit codes,
and a logcat capture started before launch:
```
-/workspace/devtools/bin/gradle-test /workspace/listen -- --rerun-tasks
+/workspace/devtools/bin/gradle-test /workspace/listen -- --rerun-tasks
+/workspace/devtools/bin/gradle-report /workspace/listen detekt
/workspace/devtools/bin/android-launch-check org.terst.listen \
--apk app/build/outputs/apk/debug/app-debug.apk --settle 15
+/workspace/devtools/bin/android-ui org.terst.listen dump
+/workspace/devtools/bin/publish-apk \
+ app/build/outputs/apk/debug/app-debug.apk listen-debug.apk
```
+**Never read `app/build/reports/detekt/detekt.xml` directly.** An invalid config aborts detekt
+before it analyses anything and leaves the previous run's report in place; it was read as
+current findings three times. `gradle-report` refuses a report older than the run.
+
+**Never `adb shell input tap X Y`.** A blind tap landed in FeeDreader's settings and the
+screenshot after it was reported as Listen. `android-ui` checks the foreground package first
+and taps by label.
+
See `/workspace/devtools/README.md`. These exist because grepped console text has produced wrong
claims three separate times across these repos.
@@ -130,3 +142,13 @@ intro/outro skipping. Schema fields for manual skip offsets exist but nothing re
- **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.
+
+- **The playing episode is always the head of the queue.** `advance()` drops the head, so if
+ something played from a show list isn't there, finishing it deletes a queued episode unplayed.
+ `play()` calls `playNow()` first to hold that invariant. Don't add a playback entry point that
+ skips it.
+
+- **Two reachability tests guard dead code**, one for helper objects and one for DAO methods.
+ Both exist because code was written, tested, documented and never called: `findFeedLink` (the
+ share-sheet bug) and `QueueRepository.advance` (the queue silently stopped). Adding to their
+ allowlists needs a reason, not just a name.