## 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.