The whole git/mercurial thing is, as I understand it, related to the extensibility of the systems. Mercurial is hackable and extensible in ways that matter, git isn't (or at least wasn't)
The one version policy only really matters for third party dependencies. If you're making a change to a library that is entirely within the monorepo, you can do a three phase migration (add the new functionality, migrate users, deprecate the old functionality). Google is exceedingly efficient at this, and the vast majority of the time these migrations can be done without any effort by local owners.
For third party deps, you can't usually do that, but there's a workaround[2].
I also think that this post and the one here[1] are amusingly both on the front page at the same time. This one decrying the exact sort of mandate based approaches that "make SRE scale".
Also worth mentioning that
> The person making the new API is expected to change client code to match, but is not responsible for ensuring the change does not break the client.
Is just explicitly untrue. There are policies that are clear about this (this generally comes down to "we cannot break your tests, but if it isn't tested, we can't know we broke it")
[1]: https://news.ycombinator.com/item?id=28825352
[2]: https://opensource.google/docs/thirdparty/oneversion/#tempor...