Everything written this session that has not been through the device: rounds 43 to 48 (each patch adversarially verified, 43's transient-notice expectation fixed), a partial round 49, the pipeline scripts, the Android Auto design and the icon comparison mock. Also the two harness changes that were never A/B'd — adaptive waits, which may only shorten a declared wait and never lengthen it, and a ship that runs the mock walk and the deploy at the same time. The A/B and its 255-step baseline are in handoff/tools; main stays at what the phone has actually walked.
20 lines
1.3 KiB
Plaintext
20 lines
1.3 KiB
Plaintext
- **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.
|