What problem does it solve? Rust's Any trait requires T: 'static, so a HashMap<TypeId, Box<dyn Any>> cannot store values that borrow, and the resulting E0597 error blames the caller rather than the map. This Skill guides you through choosing the right erasure design — a lifetime-parameterized enum, a dyn Any map, or a GAT owner/element store — and through reviewing the unsafe cast, variance marker, and extraction layers that make or break soundness. ## Core Features & Use Cases - Symptom-to-section routing: Maps concrete rustc diagnostics (E0597, E0271, E0277, E0117, E0637) and design tasks directly to the fix, including why type_name must never be used as a type key. - The three-rung ladder: Provides compile-checked patterns for a closed enum, an open Box<dyn Any> extensions map, and the exotic GAT bijection store for open sets of borrowed values, with the exact unsafe cast and its SAFETY comment. - Soundness review checklist: Covers the invariance marker PhantomData<UnsafeCell<&'a mut ()>>, the elided get lifetime, Miri verification under Stacked and Tree Borrows, compile_fail doctests, and the unsound extractor shape that detaches a lifetime. - Use Case: You are building an ECS-style world or request-extensions map and hit error[E0597]: argument requires that s is borrowed for 'static. Use this Skill to decide whether to switch to Arc, restructure as an enum, or implement the GAT owner/element map correctly. ## Quick Start Ask the agent to review your TypeId-keyed map or diagnose your E0597 error using the rust-type-erasure skill, and it will route the symptom to the right design rung and verification steps.