    /* the row's own words on the device, and then its absence. The "gone"
       clause is written against THIS row's sentence rather than against
       `xferFail` being empty: a real failed transfer of Kyle's sitting in
       the list is not a reason to fail the step, and the real core
       answering faster than a mock would cannot change either reading —
       both are settled state, written and removed by the step itself. The
       screen underneath is deliberately not named: sibling rounds append
       their own phone steps before `end` too, so whichever screen the back
       lands on is theirs, not this round's. What IS asserted is that the
       back popped at all — a sheet left up would close instead and the bar
       would still say Transfers. */
    "trouble-xfer": (i) => i.title.startsWith("Transfers")
        && /failed · They refused the transfer \(File not shared\)/.test(i.xferFail)
        && !/transfer rejected/.test(i.xferFail),
    "trouble-xfer-gone": (i) => !/^Transfers/.test(i.title) && !/File not shared/.test(i.xferFail),
