Totally agree. I think the microservices thing is actually a distraction from the real concepts at play. As a good thought exercise, imagine if the same thing happened within a single process.
If code was written that expected version 2, and a version 1 object was provided, the static type checker would catch it at compile time.
But with microservices, there is no static type checker and you're essentially coding as if you were in a dynamically typed language.
Hopefully you've at least set up integration tests where you can test the service you're about to deploy against the others, but I think in many microservice situations the only integration testing that happens is in production.
If code was written that expected version 2, and a version 1 object was provided, the static type checker would catch it at compile time.
But with microservices, there is no static type checker and you're essentially coding as if you were in a dynamically typed language.
Hopefully you've at least set up integration tests where you can test the service you're about to deploy against the others, but I think in many microservice situations the only integration testing that happens is in production.