Не проглоти отмену
Исправить Result-обёртку для suspend-вызова
capture превращает обычное исключение операции в Result.failure. Исправь заготовку: внешняя отмена должна распространяться, фатальные ошибки уровня Error не должны маскироваться.
Зависимость: kotlinx-coroutines-core 1.11.0 (используются стабильные API).
Проверь мысленно или в своём Kotlin-проекте:
blockвернул 7 →Result.success(7).blockбросилIllegalStateException→ failure с тем же исключением.blockбросилCancellationException→ исключение выходит из capture.blockбросилAssertionError→ ошибка выходит наружу.
Обёртка не переносит работу на IO и не добавляет retry. Это узкий договор, а не универсальная классификация всех сетевых ошибок.
Основа: safe API call из draft/lifeconding.md и draft/M++.md.
Сохранённый код превышает предел редактора. Скачай его перед сбросом; исходная запись сохранена.
runCatching перехватывает Throwable, включая отмену. Здесь CancellationException обрабатывается первой и пробрасывается. Catch Exception превращает оставшиеся исключения в результат, не перехватывая Error. Если предметная область различает ошибки транспорта и программирования, сужайте перехват дополнительно. Kotlin: исключения корутин, runCatching.
Кооперативная отмена всё ещё зависит от block: эта обёртка не делает произвольный блокирующий API отменяемым. Пример разобран статически; выполнение в Kotlin не подтверждалось.