Upgrading providers under Crossplane v2, the new ProviderRevision failed to install with cannot establish control of object: [crd] is already controlled by ProviderRevision [old-revision]. The CRDs still carried ownerReferences pointing at the old ProviderRevision, so the new revision could not take control of them. Deleting the CRD outright worked but was the nuclear option.