From a58e975d08a29500dd394a91208f471855135662 Mon Sep 17 00:00:00 2001 From: Claude Sonnet 5 Date: Wed, 23 Sep 2026 22:52:38 -1000 Subject: Fedora laptop's -workspace memory: listen/feedreader/podkit context Adds workspace-layout.md, listen-handover-2026-09-21.md, and fedora-android-build-setup.md -- built on the fedora laptop, no filename overlap with tungsten's existing -workspace memory (doot/claudomator/ feedreader-on-tungsten/marine-cert scope). Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01Sj3CoWEedM56bebByKgNxA --- MEMORY.md | 3 +++ fedora-android-build-setup.md | 20 ++++++++++++++++++++ listen-handover-2026-09-21.md | 35 +++++++++++++++++++++++++++++++++++ workspace-layout.md | 20 ++++++++++++++++++++ 4 files changed, 78 insertions(+) create mode 100644 MEMORY.md create mode 100644 fedora-android-build-setup.md create mode 100644 listen-handover-2026-09-21.md create mode 100644 workspace-layout.md diff --git a/MEMORY.md b/MEMORY.md new file mode 100644 index 0000000..32b4979 --- /dev/null +++ b/MEMORY.md @@ -0,0 +1,3 @@ +- [Workspace layout](workspace-layout.md) — what each repo under /workspace is (listen, feedreader, podkit, devtools, ...) +- [Listen handover 2026-09-21](listen-handover-2026-09-21.md) — queue-advance & notif skip-forward unverified by Peter; Phase 2 decisions pending +- [Fedora Android build setup](fedora-android-build-setup.md) — JDK21 at ~/.jdks, SDK at ~/Android/Sdk, fixes for stale app/build/ diff --git a/fedora-android-build-setup.md b/fedora-android-build-setup.md new file mode 100644 index 0000000..6489ac5 --- /dev/null +++ b/fedora-android-build-setup.md @@ -0,0 +1,20 @@ +--- +name: fedora-android-build-setup +description: "How Android builds (Listen, FeeDreader) were made to work on Peter's Fedora 44 laptop — JDK and SDK location, and two stale-state traps" +metadata: + node_type: memory + type: project + originSessionId: 0e4bffd6-5847-4b40-9037-6bfb9055e654 + modified: 2026-09-21T21:30:50.235Z +--- + +As of 2026-09-21, on Peter's Fedora 44 laptop, building either `listen` or `feedreader` needed setup beyond the CLI's own Node/npm install: + +- **Fedora 44's repos have no `java-21-openjdk-devel`** (only `java-25-openjdk*` and a `java-latest` 27 EA build) — `sudo dnf install java-21-openjdk-devel` fails with "No match for argument". Worse, Java 25 itself can't run Gradle 8.14.3 (the version this repo is pinned to for Chaquopy compatibility, per `listen/CLAUDE.md`): the bundled Kotlin compiler's `JavaVersion.parse` throws `IllegalArgumentException: 25.0.4.1` — a parser bug, not a real incompatibility Gradle could work around. +- **Fix applied**: downloaded Temurin JDK 21 as a portable tarball from Adoptium (`https://api.adoptium.net/v3/binary/latest/21/ga/linux/x64/jdk/hotspot/normal/eclipse`) into `~/.jdks/jdk-21.0.12.1+1` (no sudo needed), and set `org.gradle.java.home=/home/terst/.jdks/jdk-21.0.12.1+1` in `~/.gradle/gradle.properties` (user-global, untracked — applies to every Gradle project for this user, not just Listen). +- **No system Android SDK either**: `/opt` isn't writable without sudo, and `/opt/android-sdk` (what both repos' `local.properties` pointed at, a stale value from a previous machine) doesn't exist here. Fix: installed SDK cmdline-tools into `~/Android/Sdk` (Google's `commandlinetools-linux-13114758_latest.zip`), ran `sdkmanager --licenses`, and installed `platform-tools`, `platforms;android-36`, `build-tools;36.0.0`, `ndk;27.2.12479018`. `local.properties` (gitignored, per-machine by design) was updated to `sdk.dir=/home/terst/Android/Sdk`. +- **Stale `app/build/` from the old machine**: Chaquopy's `extractDebugPythonBuildPackages` failed following a symlink to `/usr/bin/python3.12`, which doesn't exist on this machine (it has 3.14). `app/build/` is gitignored, pure build output — `rm -rf app/build build` and rebuilding resolved it. If this recurs after a repo copy/sync from another machine, the fix is the same: delete the build directory, don't debug the symlink. + +**Why this matters**: none of this is written into either repo's CLAUDE.md (correctly — it's machine-specific, not project-specific), so it's easy to silently re-hit and waste a session rediscovering it. If `feedreader` build/test is attempted on this machine and hits the same JDK/SDK/stale-build issues, the fixes above apply identically — check `~/.jdks`, `~/Android/Sdk`, and `~/.gradle/gradle.properties` before reinstalling anything. + +**How to apply:** before debugging a Gradle failure on this laptop that looks like a JDK, SDK-location, or Python-symlink problem, check whether this setup is still in place first (`~/.jdks`, `~/Android/Sdk`, `~/.gradle/gradle.properties`) rather than re-deriving the fix from scratch. diff --git a/listen-handover-2026-09-21.md b/listen-handover-2026-09-21.md new file mode 100644 index 0000000..bb26798 --- /dev/null +++ b/listen-handover-2026-09-21.md @@ -0,0 +1,35 @@ +--- +name: listen-handover-2026-09-21 +description: State of the Listen app as of 2026-09-21 end of session — artwork/player/queue-reorder committed but unverified on-device; publish blocked on host name +metadata: + node_type: memory + type: project + originSessionId: 0e4bffd6-5847-4b40-9037-6bfb9055e654 + modified: 2026-09-21T22:00:48.962Z +--- + +Commit `7f634ca` ("Add artwork, a real player screen, and queue drag-reorder") landed on `main`, +gate-green (COVERAGE_EXCEPTION used for the expected Media3-glue drop, matching the four prior +uses in `listen/CLAUDE.md`). Implements the plan at Phase 2 pre-work Peter chose: artwork +(Coil3, pinned to 3.3.0 — later versions need a newer Kotlin/Compose than this project runs), +a real player screen (scrubbing, per-show persisted speed), and queue drag-and-drop reorder +(`sh.calvin.reorderable`). Android Auto real-car verification is still deliberately deferred. + +**Not yet done, pick up here:** +- **Never verified on a device.** No phone was connected this session (`adb devices` empty). + Build succeeded (`assembleDebug`), but nobody has actually looked at artwork rendering, + scrubbing, per-show speed persistence, or drag-reorder in the app. Do this first. +- **Not published.** `/workspace/devtools/bin/publish-apk` refused: it's hard-gated to a host + named `tungsten` (the deploy box), and this session ran on `fedora`. That gate is deliberate + (its own comment: bypassing it once caused a "deploy to a sandbox" mistake). This needs a + decision from Peter — publish from wherever `tungsten` actually is, or explicitly add `fedora` + to the allowlist in `/workspace/devtools/bin/publish-apk` — not something to route around + silently. + +**Why:** the session hit its weekly limit mid-flow; Peter needed to reboot to get device access +working and asked to just get the code built and committed rather than wait. +**How to apply:** next session, check `adb devices` first — if a phone is present, sideload via +`android-launch-check` and actually exercise the four features before considering this done. + +See also [[fedora-android-build-setup]] (still the environment this all ran under) and +[[workspace-layout]]. diff --git a/workspace-layout.md b/workspace-layout.md new file mode 100644 index 0000000..6091d2a --- /dev/null +++ b/workspace-layout.md @@ -0,0 +1,20 @@ +--- +name: workspace-layout +description: What each repo/directory under /workspace is and how they relate +metadata: + node_type: memory + type: reference + originSessionId: 0e4bffd6-5847-4b40-9037-6bfb9055e654 + modified: 2026-09-21T21:12:41.985Z +--- + +`/workspace` holds several of Peter's personal software projects, each its own git repo: + +- **listen** — Android podcast app (`org.terst.listen`), Peter's primary active project. Replacing Pocket Casts. See its own `CLAUDE.md` for full detail (TDD workflow, quality gate, phase status, domain notes). +- **feedreader** (FeeDreader) — sibling Android RSS reader app. Separate repo, no shared module by design (see [[listen-feedreader-relationship]] if written). Only `Opml.kt` was ever transferable between the two. +- **podkit** — standalone Go CLI, turns a playlist/video URL (via yt-dlp) or an existing RSS feed into a self-hosted private podcast feed. Unrelated to Listen's own in-app YouTube support (Listen uses embedded Chaquopy/yt-dlp directly, not podkit). +- **devtools** — shared build/test/launch verification wrappers (`gradle-test`, `gradle-report`, `android-launch-check`, `android-ui`, `publish-apk`) used by both `listen` and `feedreader`. Mandatory per both repos' CLAUDE.md — never infer build/test/launch results from raw console or adb output. +- **doot** — has a `NewServiceProxy` reverse-proxy helper that podkit's README references for path-prefix stripping when podkit is served behind it. +- **can-can, lighting, scout, stash** — other personal projects, not yet explored in depth. + +`local.properties` (per-repo, gitignored) points at the local Android SDK — currently `/opt/android-sdk` on the Fedora laptop. -- cgit v1.2.3