/* ── the faces no walk had seen ───────────────────────────────────── Each of these fails if round thirty-one's fix is undone: stop reading `slot.error` and Home's line empties; drop the `gapErr` branch and the Gaps line falls back to "See what's missing" and can be tapped for ever; put `lyr.failed` back and the face says "No lyrics found" about a lookup that never answered; take `say()` out of `stateLine` and the raw string is on the row again. Every one asserts the sentence a person reads AND that the Rust string is not in it — the second half is the round-thirty-one rule, and the half that survives any rewording of the first. */ "faces-home-down": (i) => i.homeSlots > 0 && i.homeErr === i.homeSlots && /^Couldn't reach the catalog, so there's nothing new/.test(i.catDown) && !/New from your artists/.test(i.secs), "faces-gap-down": (i) => /Couldn't reach the catalogue — tap to try again/.test(i.gapLine) && !i.gapCards, "faces-gap-again": (i) => /more released/.test(i.gapLine) && !/Couldn't reach/.test(i.gapLine) && i.gapCards >= 3, "faces-album-down": (i) => /^The catalog did not answer/.test(i.why) && /The network didn't answer/.test(i.why) && !/io:|connection reset/.test(i.why) && i.again && !i.trks, "faces-album-again": (i) => !i.why && !i.again && i.trks > 0, /* the pair that proves the distinction is real and not decoration */ "faces-artist-down": (i) => /only what this phone holds is here/.test(i.catNote) && /didn't answer/.test(i.stubText) && !/io:|address information/.test(i.catNote + i.stubText), "faces-artist-none": (i) => !i.catNote && /had nothing to add/.test(i.stubText) && !/didn't answer/.test(i.stubText), "faces-playlist-down": (i) => /^Couldn't read this playlist/.test(i.why) && /library folder isn't readable/.test(i.why) && i.again && !i.plrows && !/database file/.test(i.why), "faces-playlist-again": (i) => !i.why && !i.again && i.plrows > 0, "faces-lyrics-down": (i) => i.lyrFailed === "yes" && !i.lyrLines && /^Couldn't look up the words/.test(i.lyrNote) && i.lyrTools && !/io:|address information/.test(i.lyrNote), "faces-lyrics-again": (i) => i.lyrFailed === "no" && i.lyrLines >= 3 && !i.lyrNote, "faces-xfer-failed": (i) => i.title.startsWith("Transfers") && /failed · They refused the transfer \(File not shared\)/.test(i.xferFail) && !/transfer rejected/.test(i.xferFail), "faces-library-toast": (i) => /library folder isn't readable right now/.test(i.toast) && i.retry === "Try again" && !/database file/.test(i.toast), "faces-library-again": (i) => i.title.startsWith("You") && !i.toast && !i.retry, /* the disarm, proved: no toast, no armed action, no stub, Home's slots healthy and its rails back — so the first run below is not quietly running on something this block left standing */ "faces-clear": (i) => !i.toast && !i.why && !i.catDown && !i.retry && i.homeSlots > 0 && i.homeErr === 0 && /New from your artists/.test(i.secs) && /^(Good |Still)/.test(i.title),