## Not done yet

Thirty rounds in, this is the honest map: what is deliberately absent, what
is waiting on Rust, and what is simply smaller than the rest. Most of what
the backend exposes and the phone never calls is a whole module it has no
business calling, so the list is by module — that is the reason, not the
symptom.

- **Off by design — the private layer.** Spaces, holdings, the sealed inbox,
  friends by key, shared playlists, Who has it, the persona and its profile,
  and the Soulseek↔persona link: sixty-six commands across ten modules
  (`freenet` 7, `friends` 7, `holdings` 8, `inbox` 3, `persona` 6, `profile`
  4, `proposals` 3, `shared_playlists` 13, `slsk_link` 5, `spaces` 10).
  Freenet on the phone is a later experiment; the network side is in, and
  rooms and chat are built and mock-walked. A live room is Kyle's to join.
- **Off by design — the desktop's own machinery.** The tag-import pipeline
  (all sixteen of `import.rs`: its audition, its cover report, its portable
  root — which is the import session's root, not the library folder); hover
  previews (all eight of `preview.rs`), and with them the three pause/fade
  acknowledgements that live there because they exist only to hand silence
  between the main player and the preview player; the mini window, the glass
  mode, Show in folder and SMTC; the updater (the phone's own build of it
  answers honestly that there is no channel here, and the version is in You,
  from `app_status`); the hero GPU upscaler, the cover-wordmark OCR and its
  debug tools. The phone shows a wordmark the page carries; it does not run
  the pipeline that makes one — and it does not fetch a 3000px cover upgrade
  over mobile data for a screen that cannot show it, which is why
  `catalog_cover` and `invalidate_catalog_cover` stay here too.
- **Off by design — external runtimes.** yt-dlp and deno, the vocal
  separator, the lyric alignment models, and the listener door that needs
  them.
- **Waiting on Rust, not on a picker.** Playlist EXPORT: `tauri-plugin-dialog`
  does open Android's create-document sheet from Rust, but it answers with a
  `content://` URI and `playlist_export` writes with `std::fs::write`, which
  cannot take one. It needs a ContentResolver write, or the bytes handed to
  an outbound share intent — and `crates/tauri-plugin-share` is inbound-only
  today. Playlist-FILE import wants a `pick_file` in the storage plugin,
  beside the `pick_folder` and `pick_image` it already has.
- **Still desktop-only, smaller.** Drag reorder (Move up / down / to the top
  stand in), catalog track previews, the full discography page, and the
  fused-artist portrait verdict — that last one needs the identity merge the
  phone does not run, so porting it means porting the merge first.
- **Per library folder.** Follows and the play history live in the library
  folder, so the phone's own folder starts empty of both; they arrive with a
  shared library.
