android: the faces the walk had never seen — six failure states, read back in their own words
Round thirty-one gave the phone honest error states and shipped six of them unobserved, because neither `loadHome` nor `loadLyrics` was reachable from the `__ss` handle and both answer a second ask with nothing. The handle carries the two stores and their two loaders now, and a block of mock steps arms each failure with the mock's own weather, drives the face, and asserts the sentence a person reads as well as the absence of the Rust string behind it: Home's catalog line, the Gaps line and its second tap, a catalog record's stub, the artist page's two different answers, a playlist that would not read, the lyrics lookup that failed, a refused transfer, and the library toast's Try again, pressed for the first time. It sits before the first-run block, which reloads and empties the mock's follows; every failure is disarmed by the step that proves the face heals, and a last step asserts nothing was left armed. The phone walk gets a safe step of its own — a terminal transfer row written into the store and taken away, nothing fetched and nothing reaching the shade. ANDROID.md now names what the walk still cannot see: three screens that draw a raw backend string, six error faces with no expectation, and the history mirror printed on every step and asserted on none.
This commit is contained in:
1 parent
f2cde4ec7c
commit
537bfdd5af
3 files changed
+235
-5
No files matched your search
+47
-3
@@ -940,6 +940,39 @@ merely not there yet (a fresh install still works), and refuse with
|
||||
into a row under Library folder with the path and what to do about it, and the
|
||||
toast says it in English.
|
||||
|
||||
**What the walk has seen.** The round that wrote all of the above was straight
|
||||
about what it had not proved: six of these fixes shipped with no expectation at
|
||||
all, because neither `loadHome` nor `loadLyrics` was reachable from the `__ss`
|
||||
handle the walk drives the app through, and both answer a second ask with
|
||||
nothing — `loadHome` is gated on `started`, `loadLyrics` on the track's own
|
||||
`key` — so no amount of tapping re-runs them. They are driven now: Home's
|
||||
`catalogDown`, the Gaps line, a catalog record's stub, the artist page's two
|
||||
different sentences, a playlist that would not read, the lyrics `failed` face,
|
||||
and `failed · <sentence>` on a transfer row. Each is armed with
|
||||
`__ssMock.fail`, asserted both by the words a person reads and by the Rust
|
||||
string being absent from them, and disarmed by the step that proves the face
|
||||
heals. The handle grew four names for it and no more — `home` and `loadHome`,
|
||||
`lyr` and `loadLyrics` — because a test seam that exports the internals
|
||||
wholesale stops being a seam. The toast's own **Try again** is pressed for the
|
||||
first time too, through You → **Rescan library**: `lib.error` is written by
|
||||
`loadLibrary` alone, and that row is the only door in the app that reaches it
|
||||
a second time.
|
||||
|
||||
What is still unseen, honestly. **Three sites draw a raw backend string**, so
|
||||
the rule above has holes: `screens/Browse.svelte` — a peer's shares that would
|
||||
not read, which is a full error face, Try again and all, that was simply missed
|
||||
— and `screens/Import.svelte`, twice. `SyncRoom.svelte` is a fourth, by way of
|
||||
`saveTapSync`'s catch. **Six error faces have no expectation either**: Browse's,
|
||||
Community's "The server did not answer.", Room's "Not in this room.", Album's
|
||||
"That record is gone.", Playlist's "Playlist not found." and Peer's "Not
|
||||
compared yet." — all reachable, the first two through the mock's weather and
|
||||
the rest by pushing a nav entry with a dead id. And of the probe's fields, six
|
||||
are still read out on every step and asserted on none: `accent`, `xlive`, `hd`,
|
||||
`hwant`, `navMs` and `a11yWho`. The cheapest real win left in the harness is a
|
||||
global `hd === hwant` check on every named step — the history mirror is how the
|
||||
blank page after a confirmed delete was found — but it would fire during the
|
||||
first-run reloads and needs its own thinking about the suppress window first.
|
||||
|
||||
## The downloads in the shade
|
||||
|
||||
Transfers is a screen inside the app; the desktop says what a Save is doing
|
||||
@@ -1255,7 +1288,14 @@ weather: a library index that will not read and its Try again, the client taken
|
||||
offline, a refused password and a server that cannot be reached, Search with
|
||||
nowhere to search, a room list that never arrives, and a rescan that refuses
|
||||
because the folder is gone — then all of it cleared and the app left as it was
|
||||
found. The mock answers every command the phone
|
||||
found. After the weather come the faces that failure actually draws, each one
|
||||
armed by the mock and read back by its own words: Home with every follow's
|
||||
catalog page refused, the Gaps line and its second tap, a catalog record's stub
|
||||
and its Try again, an artist page whose lookup failed beside one that was
|
||||
answered with nothing, a playlist that would not read, the lyrics face on a
|
||||
lookup that never came back, a transfer that was refused, and the library
|
||||
toast's own Try again pressed for the first time — then all of that disarmed
|
||||
too, and asserted disarmed. The mock answers every command the phone
|
||||
uses; one it does not know is named in the report (`[mock] no mock for X`)
|
||||
rather than surfacing as a TypeError toast, console warnings carry their top
|
||||
frames (the smoke bundle is built unminified for that), and every probe
|
||||
@@ -1269,8 +1309,12 @@ backend funnels through `with_client()` answers "not connected to Soulseek",
|
||||
the two connects answer the server string, and `soulseek:state` goes out — and
|
||||
`clear()` puts all of it back. They reject with a plain string because that is
|
||||
what Tauri rejects with. Fourteen mock steps drive them, and the phone walk carries
|
||||
one safe step of its own (`trouble-words`: eleven real backend strings through
|
||||
`__ss.say` on the device, every output asserted free of Rust). A mock step can
|
||||
two safe steps of its own (`trouble-words`: eleven real backend strings through
|
||||
`__ss.say` on the device, every output asserted free of Rust; and
|
||||
`trouble-xfer`: one already-failed transfer row written into the store and
|
||||
taken away again — nothing fetched, and a terminal row is not in flight, so
|
||||
nothing reaches the shade). Fifteen more mock steps drive the failure faces
|
||||
themselves, which are described under **When things go wrong**. A mock step can
|
||||
also set the
|
||||
viewport — `{ view: [915, 411] }` sends `Emulation.setDeviceMetricsOverride`
|
||||
through the same client, which is how the walk turns the phone over and back;
|
||||
|
||||
Reference in new issue
Block a user