### What each walk actually proves

The two step lists are not the same test, and which is which had never been
written down. The mock walk is the bigger one (252 named steps) and the only
one that can arm a failure, turn the phone over or answer as a fresh install.
The device walk (121 named steps, up from 88) is the smaller one and the only
one that touches a real core, a real library, a real audio thread and the
system underneath them. The gap between them is where this list lives.

Writing it down turned up four phone steps — `library-ambience`, `queue`,
`lyrics` and `community` — that were named, screenshotted, and asserted
against nothing at all: the driver reads `expect[s.name] ? expect[s.name](info)
: true`, so a missing key in `PHONE_EXPECT` is a silent pass, and all four had
one. They have expectations now.

**Proven on the device.** Boot and its census; playback out of the real
library; the ambience following a real cover — the accent is in the still and
asserted by neither walk; the artwork viewer; the queue reordered, and a queue
row's sheet opened; the lyrics face, the nudge, the per-track auto-sync
switch, the tap room and the real-DSP estimate (all of it discarded); a reload
that keeps the audio thread; a library track's own sheet, off a real path; the
Library's shape, its sort and every one of its five tabs; Search and its
recents; a playlist made, filled, dragged, a row removed and put back by Undo,
filtered and deleted; four import doors — including the folder door on a real
folder, and two of their system pickers dismissed with BACK — and the review's
Keep-unresolved switch; the share-sheet intent; six of You's switches and
chips written to the real config and read back out of it, then put back —
volume normalization, word-by-word fill, the upload slots, the streaming
ceiling, the embedded-cover size and the stream cache's retention — and the
listening port both ways and a refused one; the sleep timer; the Wi-Fi-only
guard; the shade's notice read back out of `dumpsys notification`; contacts
read over real IPC; a cold artist page, its ⋯, the whole-discography page and
its A–Z; the first-run preview with `setupWrites` at 0; eleven raw backend
strings through `__ss.say`; and a refused transfer's sentence.

Then, after the step loop, seven things the mock cannot do at all: a
force-stop and the paused restore that follows it (waited out past the
thirteen-second FGS-kill window), the position restored, playback resumed, the
system media session and its ownership, media keys, ten seconds in the
background with the position still advancing, and SoulStream's own mixer
underruns.

One block in the phone walk pulls bytes, and only when the app is signed in:
the trailing network block types `--query` into Search, streams a peer's copy
into the stream cache, and browses the raw peers and a share. Nothing else in
either list downloads, joins, sends or signs in.

**Mock-only, and why** (178 named steps). These are the reasons rather than a
partition: a step can sit under more than one of them, and the last bullet is
the only one that says a step could move and has not.

- *Needs `__ssMock`* — the nine weather steps and the fifteen failure faces.
  That object is the mock library's own door and does not exist in a real
  build. The SENTENCES those screens print are proven on the device anyway, by
  `trouble-words` and `trouble-xfer`; the screens that carry them are not.
- *Needs a fresh install* — the ten `fresh-*` steps. On the device only the
  preview door is walked, and it writes nothing.
- *Needs a viewport override* — the nine landscape and portrait steps. A
  `view` step on the phone walk is a deliberate failure, because a real
  device's orientation is not the harness's to set, so the sideways layout has
  never been seen on a device at all.
- *Needs the dev flavour* — `diag` and `diag-back`. `devBuild` is
  `import.meta.env.DEV` or the mock key, and the embedded build Kyle carries
  reads false, so the row is not there to tap.
- *Would download, save or rewrite his files* — the catalog, peer, browse and
  Save steps, the cover re-fetch, the portrait refresh, chosen and pasted
  lyrics, a saved sync, the vocal-reduced copy, a hero photo set.
- *Would join, send or sign in* — rooms and their users, buddies, the contact
  editor, the taste chips, a user looked up.
- *Would change what is playing* — `queue-removed` and `queue-moved-up`. The
  device opens that sheet and reads it; it does not tap a row in it.
- *Destroys his data* — `history-confirm` and `history-cleared`. Never on his
  phone.
- *Structurally empty on this phone* — Home's feed sections and the Gaps
  shelf. Follows live in the library folder and the phone's own folder starts
  without any, so on the device `gaps` can only be asked to render and to stay
  quiet.
- *No reason but time* — not every remaining step has a reason above it.
  These would be safe on the device and simply have not been moved: the
  sheet's own Move-up and Move-down rows and a drag refused under a filter
  (all three on the walk's own playlist), rename, unpin, `wifi-off`, the
  empty search and the did-you-mean pair (both wanting a query his own
  library can answer for), and the several `-again` steps that only put a
  screen back. This round stopped where it stopped.

**Conditional on the device.** Six of the new steps pass vacuously when his
own data cannot produce the condition, and are named here so they do not
become the next generation of silent passes: `gaps` (no follows),
`queue-row-sheet` (nothing after the walked track), `playlist-drag-held` and
the drag-refusal clause of `playlist-filter` (both need a playlist longer than
one row — a one-track record makes a one-row playlist, and `reorder.js`
refuses to lift a list that short), `import-keep-off` (a paste that resolved
completely), and `you-keep` (the cache already set to Forever, which the step
will not move because coming back writes the flag and not the number). The row
count `playlist-row-sheet` stashes is what keeps the rest of that block from
passing on a probe that read nothing.

**Needs a person.** A live room joined and a message sent; a real Save over
cellular with the Wi-Fi switch on; the lock-screen card (`--lockscreen` takes
that still and asserts nothing about it); the first real export written
through Android's create-document sheet, which the walk only ever dismisses
with BACK; the phone physically turned sideways; and a genuine first run on a
device that has never had the app.
