Tasks move through INITED → RUNNABLE → BLOCKED → FINISHED → FINALIZED.
SharedState source/sink dependencies connected through inject_shared_state()?_try_to_reserve_memory() before materializing large structures?_memory_sufficient_dependency wired in where pressure should block, not overrun?revoke_memory() preserves the existing spill path?set_ready() fast-path precheck vs is_blocked_by() lock-first asymmetry respected?Dependency subclasses pair block() / set_ready() on every path?CountedFinishDependency::add() and sub() under _mtx?