You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
helm diff --three-way-merge does not detect manual changes on Custom Resources (CRDs) #917
We are seeing inconsistent behavior with helm diff upgrade --three-way-merge when detecting manual changes made directly in the Kubernetes cluster, specifically for Custom Resources (CRDs).
For built-in Kubernetes resources (e.g. Deployment), helm diff --three-way-merge correctly detects live changes made via kubectl edit/patch.
However, for CRDs (example below uses KEDA ScaledObject), manual changes in the cluster are not detected, even when the field is explicitly defined in the Helm chart.
What works ✅
For built-in resources (e.g. Deployment):
1.Deploy via Helm
2.Manually edit: kubectl edit deployment my-app
change resources.limits.memory value
Activity
closedEyesSearch commentedon Jan 23, 2026
Also experiencing this with crossplane CRDs. Diffs don't catch drifts, kubectl does though.
fix: detect manual changes on CRDs and CRs with three-way-merge
test: add tests for three-way merge with unstructured objects
yxxhero commentedon Feb 1, 2026
@orco49 could you try to use this fix/cr-three-way-merge?
terabyte128 commentedon Feb 10, 2026
I'm experiencing the same issue with Istio's CRDs (specifically,
AuthorizationPolicy). Steps to reproduce:kubectl editto anAuthorizationPolicyresourcehelmfile apply --interactivedoes not show a diffhelmfile template | kubectl diff -f -doesI tried the branch you posted and got an error that I'll post over in that PR.
frittentheke commentedon Aug 3, 2026
@orco49 did you test the proposed fix in #923?
test: add e2e regression test for CR/CRD drift detection (#917)
fix(test): pre-install the CRD before helm install in #917 e2e test
fix(test): adopt the pre-installed CRD into the release in #917 e2e test
fix(test): drift a names field instead of served in #917 CRD scenario
fix: detect manual changes on CRDs and CRs with three-way-merge (#923)