dumpingOnFailure
suspend fun <T> LogTapClient.dumpingOnFailure(emit: (String) -> Unit = ::printLine, block: suspend () -> T): T
Run block; if it fails, dump the device's captured logs (via dumpLogs) before re-throwing the original failure — so a failed assertion carries the device's own logs into the test output. The block's result is returned unchanged on success.
Structured-concurrency cancellation propagates untouched and is not dumped: a cancelled scope cannot reliably pull, and swallowing the cancel would be a bug.