    /* ── the faces no walk had seen ─────────────────────────────────────
       Round thirty-one gave six screens an honest failure and its own
       verifier was straight about what it had shipped unobserved: Home's
       `catalogDown`, the lyrics `failed` note, Gaps' `gapErr`, Playlist's
       `loadErr`, the catalog record's and the artist page's stubs, and
       `failed · <sentence>` on a transfer row. It could drive none of them
       because neither `loadHome` nor `loadLyrics` was reachable from the
       `__ss` handle — both are gated on `started` / `key` and answer a
       second ask with nothing at all, so no amount of tapping re-runs
       them. The handle carries the two stores and their two loaders now,
       and this block is what they were added for.

       It sits HERE, before the first run, and not at the end of the list:
       the block below reloads the page twice, and the mock's follows live
       in a module-level `let` that a reload empties — after `fresh-off`
       nobody is followed, and Home's `catalogDown` (which needs a follow)
       and the Gaps shelf (which IS the follows) are both structurally
       unreachable. Here the block inherits what the weather left behind:
       signed in, on Home, Daft Punk followed, a track on the mini bar.

       Every assertion is on settled state — an armed failure stays armed,
       an error stub stays up, the toast stays until it is dismissed — and
       the two forced loads return their promise, which `cdp.evaluate`
       awaits, so the fetch is over before the step's wait even begins.
       Every failure is disarmed by the step that proves the face heals,
       and `faces-clear` is the proof that nothing was left armed. */
    { do: `(function () { __ssMock.clear(); __ss.player.error = ''; __ss.lib.error = ''; __ss.player.retry = null; return __settle(); })()`, wait: 800 },
    /* Home with every follow's catalog page refused. `home.svelte.js` has
       always set `slot.error` there; until round thirty-one nothing read
       it, and until this step nothing had ever seen the line that does. */
    { do: `(function () { __ssMock.fail('catalog_artist', 'io: failed to lookup address information: no address associated with hostname'); return __ss.loadHome(true); })()`, name: "faces-home-down", wait: 1200 },
    /* the same armed failure, on the other screen that asks the same
       command: Gaps. Home stays poisoned through these three steps on
       purpose — it is asserted above, and the second tap below is what
       clears the weather for both. */
    { do: `document.querySelectorAll('.nav button')[2].click()`, wait: 800 },
    { do: `__click('.segtabs button', 'Gaps')`, wait: 700 },
    { do: `__click('.gapline', null)`, name: "faces-gap-down", wait: 1400 },
    /* a failed lookup leaves `gapRows[key]` undefined, so the second tap
       genuinely asks again rather than merely opening a rail */
    { do: `__ssMock.fail('catalog_artist', '')`, wait: 300 },
    { do: `__click('.gapline', null)`, name: "faces-gap-again", wait: 1600 },
    /* a catalog record. The walk has already made 302127 `ready` and
       `lookupAlbum` returns early on anything but an error, so the entry is
       forgotten first — the smallest honest way to say "ask again". */
    { do: `(function () { delete __ss.catalog.albums[302127]; return __ssMock.fail('catalog_album', 'io: connection reset by peer'); })()`, wait: 300 },
    { do: `__ss.push('catalogAlbum', { id: 302127, artist: 'Daft Punk', title: 'Discovery' })`, name: "faces-album-down", wait: 1500 },
    { do: `__ssMock.fail('catalog_album', '')`, wait: 300 },
    { do: `__click('.imp-foot .btn', 'Try again')`, name: "faces-album-again", wait: 1600 },
    { do: `__ss.back()`, wait: 700 },
    /* the artist page has TWO of these and they say different things: a
       lookup that FAILED is "didn't answer", one that came back empty is
       "had nothing to add". `bestArtistFor` is what has to fail for the
       first — failing `catalog_artist` alone never reaches the page at all
       and leaves the status at none, which is the other copy. */
    { do: `__ssMock.fail('catalog_search', 'io: failed to lookup address information: no address associated with hostname')`, wait: 250 },
    { do: `__ss.push('artist', { name: 'Hollow Signal' })`, name: "faces-artist-down", wait: 1600 },
    { do: `(function () { __ssMock.fail('catalog_search', ''); __ss.back(); return true; })()`, wait: 700 },
    { do: `__ss.push('artist', { name: 'Hollow Signal' })`, name: "faces-artist-none", wait: 1600 },
    { do: `__ss.back()`, wait: 700 },
    /* a playlist that will not read. Id 1 survives the whole walk — it is
       the one renamed to "Late night drive II"; the one deleted was New
       Playlist. Try again clears `loadErr` and bumps `again`, which is
       what re-arms the effect. */
    { do: `__ssMock.fail('playlist_items', 'unable to open database file')`, wait: 250 },
    { do: `__ss.push('playlist', { id: 1 })`, name: "faces-playlist-down", wait: 1400 },
    { do: `__ssMock.fail('playlist_items', '')`, wait: 300 },
    { do: `__click('.imp-foot .btn', 'Try again')`, name: "faces-playlist-again", wait: 1400 },
    { do: `__ss.back()`, wait: 700 },
    /* the lyrics face. Sheet.svelte asks with the UN-forced `loadLyrics()`,
       which returns at once while `lyr.key` is already this track's — so
       the face alone can never ask again, which is exactly why round
       thirty-one could not drive this one. The loader, forced. */
    { do: `(function () { __ss.openSheet(); return true; })()`, wait: 900 },
    { do: `document.querySelectorAll('.fbtn')[1].click()`, wait: 900 },
    { do: `(function () { __ssMock.fail('lyrics_get', 'io: failed to lookup address information: no address associated with hostname'); return __ss.loadLyrics(true); })()`, name: "faces-lyrics-down", wait: 1200 },
    { do: `(function () { __ssMock.fail('lyrics_get', ''); return true; })()`, wait: 250 },
    { do: `__ss.loadLyrics(true)`, name: "faces-lyrics-again", wait: 1200 },
    { do: `(function () { document.querySelectorAll('.fbtn')[0].click(); __ss.closeSheet(); return true; })()`, wait: 700 },
    /* a transfer that was refused, written straight into the store the way
       the shade steps above do — nothing is fetched, and `failed` is in
       DONE, so `xfernote.shape()` sees nothing in flight and posts no
       notice. The id is far above the backend's own counter, and `list()`
       sorts id-descending, so this row is the first one on the screen. */
    { do: `(function () { __ss.transfers.items[990011] = { id: 990011, username: 'walk_peer', path: 'Walk\\\\walk-c.flac', name: 'walk-c.flac', state: 'failed', queue_place: null, local_path: null, error: 'transfer rejected: File not shared.', received: 0, total: 0 }; __ss.push('transfers', {}); return true; })()`, name: "faces-xfer-failed", wait: 1300 },
    { do: `(function () { delete __ss.transfers.items[990011]; __ss.back(); return true; })()`, wait: 800 },
    /* the one toast action round thirty-one armed that no step had ever
       pressed. `lib.error` is written by `loadLibrary` alone —
       `watchLibrary`'s own reload swallows its failure — so You → Rescan
       library is the only door in the app that reaches it twice. */
    { do: `document.querySelectorAll('.nav button')[4].click()`, wait: 800 },
    { do: `__ssMock.fail('library_albums', 'unable to open database file')`, wait: 250 },
    { do: `__click('.screen .row', 'Rescan library')`, name: "faces-library-toast", wait: 1500 },
    { do: `__ssMock.fail('library_albums', '')`, wait: 300 },
    { do: `__click('.toast:not(.notice) .na', 'Try again')`, name: "faces-library-again", wait: 1400 },
    /* and all of it put away, so the first run below starts exactly where
       it would have started without this block at all */
    { do: `(function () { __ssMock.clear(); __ss.player.error = ''; __ss.lib.error = ''; __ss.player.retry = null; __settle(); return __ss.loadHome(true); })()`, wait: 900 },
    { name: "faces-clear", wait: 1200 },
