Control and ownership
You can’t use data contracts - or anything - to try to gain control over something owned by someone else.
You can only use it as part of a process that encourages the behaviours you want, and discourages the behaviours you don’t.
It’s the same as any API or interface.
Stripe could change their API tomorrow, breaking everyone who has integrated with it. They won’t, because they know stability it’s important to their consumers. In fact, they invest in a lot of tooling and reviewing to prevent this happening, deliberately or otherwise. But it’s in their control, and no one else has that control over their API.
Similarly, the authors of Pandas could change the dataframe
interface and release it as a patch release, which would break lots of things for their consumers. There’s an implicit agreement they won’t, and would create a new major version with a migration path. But again, only they have the control here.
That’s why data contracts must be owned by the producer. Only they have control over the data, and it’s quality.