Or been ignored. It happens.
> passed all unit tests
If they have been written at all. And every bugfix should come with a regression test.
> passed the type checker
If it hasn't been disabled. And I would expect that a bug that could be fixed with better typing would include making types more restrictive when necessary.
Unfortunately, tools like testing and types are seen in two conflicting ways. Some people embrace them and see that they can use them to write better code with less bugs. Others see them as obstacles that have been placed in their way due to the additional learning curve.
What isn't helpful is the the notion that types replace testing. Either manual testing or unit/functional/generative testing. It isn't "safer" at all, it does speed up development by catching the simple bugs so the run edit compile loop is less. If you're saying "my code compiles then it's works", I don't buy it.
I'm glad that you agree type checkers help avoid error prone and expensive manual testing work.
> What isn't helpful is the the notion that types replace testing.
Types are a type of testing. They are another tool in the toolbox for writing correct programs.
But what bugs did you not see hit production because these eliminated it?
Every bug to to ever hit production has
* passed all manual testing
* passed all unit tests
* passed the type checker