- **Exporting** (`playlist_export`, the playlist's own sheet and the shelf card's): the desktop's five profiles, in the desktop's order and its own words — M3U8, XSPF, PLS, CSV and the backup JSON. The file is built in Rust by `playlist_formats`, ABOVE the platform fork, so the phone never rebuilds a format and the two exports cannot drift. The doors differ because the answers do: `tauri-plugin-dialog` does open Android's create-document sheet, but it answers with a `content://` URI and `std::fs::write` cannot take one, so on the phone the bytes go to `tauri-plugin-storage`'s `create_document` and its Kotlin writes them through the ContentResolver (`openOutputStream(uri, "wt")`), wherever the sheet pointed. That is a plugin function called from Rust, not a command: the file never passes through the WebView, and nothing was added to the ACL. A dismissed sheet resolves nothing and the phone says nothing — which is the desktop's `Ok(None)`. A row with no local file exports exactly as it does on the desktop: named, with a comment where the location would be (M3U8), carried without a location (XSPF, CSV, the backup), or left out (PLS, which holds only real files). The locations that ARE written are this phone's own paths, inside the app's folder — the format behaving correctly, not a bug to rewrite.