- **Android Auto can see the app, and there is nothing inside.** Round
  forty-nine made `MediaService` a `MediaLibraryService`, put three actions
  on one intent filter (media3's `MediaLibraryService` and
  `MediaSessionService`, plus the legacy
  `android.media.browse.MediaBrowserService` that Auto actually binds), and
  added `res/xml/automotive_app_desc.xml` with the
  `com.google.android.gms.car.application` meta-data that declares the app to
  Auto. So Auto lists SoulStream, opens it, and gets a root — immediately,
  from `Futures.immediateFuture`, with nothing on the main thread — and the
  root is empty. `onGetChildren` is not overridden, so the default answers
  `ERROR_NOT_SUPPORTED` and the tree is one browsable folder with no rows in
  it. What is still missing is everything under it: the library read out of
  the database **read-only** from a process with no Activity and no Tauri
  (`crates/library` is plain rusqlite and `JNI_OnLoad` publishes the Context
  at `System.loadLibrary` time, so browse can work cold), playing what it
  lists — which needs `COMMAND_SET_MEDIA_ITEM` and its neighbours, still
  deliberately unadvertised, plus the `queueBase` → `playQueueAt()` mapping —
  and search. Catalog and Soulseek rows will never play from cold: the
  resolver is 872 lines of shared JS and Soulseek needs a live session, so
  they get `STATE_ERROR` with a resolution intent instead, which is also what
  Google's quality bar asks for. The walk proves the two front doors resolve
  (`auto-browse`, `auto-library`) and `tools/auto-prober/` proves the root
  comes back cold; the car screen itself still needs the Desktop Head Unit or
  a car.
