ci / rust (push) Successful in 40s
`tokio::fs::File` routes every `.read()` through `spawn_blocking`. On an idle FIFO opened r+w, that thread blocks in `read()` forever — and when the test runtime tries to shut down, the blocking-pool thread is stuck on the syscall and the test binary hangs (which is exactly what just took out CI run 11). Switch to `std::fs::File` opened `O_RDWR | O_NONBLOCK` wrapped in `tokio::io::unix::AsyncFd`. Reads now drive off epoll readiness with `try_io`; no blocking-pool threads, no hung shutdown. `Drop` still aborts the task so per-test cleanup is clean.