What problem does it solve? Rust developers hit confusing compiler errors like "is invariant over the parameter", "borrowed for 'static", or "lifetime may not live long enough" when a lifetime coercion is refused. This Skill explains why the type constructor—not the lifetime—decides variance, and provides compile probes, exact rustc diagnostics, and worked repairs for each failure shape. ## Core Features & Use Cases - Variance probes and tables: Compile three one-line probe functions to determine whether a type is covariant, contravariant, or invariant, with a full variance table for std constructors and PhantomData forms. - Symptom-to-fix routing: A triage table maps exact rustc notes (E0597, E0106, invariance notes) to the right repair, including trait bounds matching by equality, free lifetimes in dyn Trait, and &mut parameters pinning caller lifetimes. - Soundness and API guidance: Covers unbounded lifetimes from raw pointers, the unsound contravariant channel pattern, and how adding Cell/RefCell/Mutex to a public type is a breaking change to lock with compile_fail doctests. - Use Case: When names.resize_with(10, service_name) fails with E0597, use this Skill to learn that fn item types fix Output by equality and apply one of the three fixes: an unbounded output lifetime, a wrapping closure, or a fn pointer coercion. ## Quick Start Ask the agent to diagnose why the compiler says my struct is invariant over a lifetime parameter and show me how to fix the coercion.