Enforcing exhaustiveness — making the compiler tell you when a union grows a new case
Which of the three layers — assertNever, satisfies Record, pattern matching libraries — to reach for and when, and why a catch-all default branch hides what you missed