What problem does it solve? Rust async code fails in ways the compiler and lints do not catch: shutdown hangs from select! loops without a cancelled() arm, lost work from non-cancel-safe futures dropped by select! or timeout, deadlocks from std::sync::Mutex guards held across .await, and unnumbered "future cannot be sent between threads safely" errors from AsyncFn callbacks. This Skill provides decision tables, triage tables, and verification commands to write, review, and debug tokio-based async code correctly. ## Core Features & Use Cases - Decision and triage tables: Map symptoms like shutdown hangs, task stalls, broadcast Lagged data loss, and blocking-pool saturation to concrete causes and fixes, covering select!, JoinSet, TaskTracker, CancellationToken, spawn_blocking, and block_in_place. - Cancel-safety discipline: Enforces cancel-safe:/NOT cancel-safe: annotations on futures used in select!, timeout, or FuturesUnordered, with a library-method cancel-safety table and a spawn-and-join firewall pattern for atomic critical sections. - Async bounds guidance: Resolves Send, 'static, and dyn-compatibility failures for AsyncFn closures, async fn in traits, RPIT captures in edition 2024, and concurrent futures over shared state. - Use Case: A service hangs on shutdown in production. The triage table points to a select! loop missing a cancelled() arm; the fix adds biased; plus a CancellationToken arm, and a bounded-shutdown test with tokio::time::timeout verifies it. ## Quick Start Ask the agent to review your tokio select! loop or spawned-task shutdown path for cancel safety and blocking calls using the rust-async-internals skill.