Matt Keeter posted a compact WebGPU failure that deserves a place in every graphics build. A Rust [[f32; 3]; 3] occupies 36 tightly packed bytes. WGSL gives mat3x3f a size of 48 bytes and an alignment of 16. The next field begins at byte 48 in the shader, not byte 36.
The compiler can accept both types. The host can write the buffer. The shader can read it. None of those facts proves that both sides agree on the map.
Keeter's repair parses the WGSL with Naga and compares its structure metadata with Rust offsets. Facet supplies runtime type information for the Rust side. The Facet derive is enabled only in tests, so the shipping struct does not need reflection support.