Skip to content

ServerSideDiff fails to detect spec changes on custom resource #25533

@llavaud

Description

@llavaud

Describe the bug

Argo CD’s server-side diff does not detect changes to the spec of a custom resource (KServe InferenceService).
A manual sync correctly applies the updates.
If I switch to client-side diff using the annotation argocd.argoproj.io/compare-options: ServerSideDiff=false, Argo CD detects the changes and applies them as expected.

To Reproduce

  1. Apply a custom resource like the following:
apiVersion: serving.kserve.io/v1beta1
kind: InferenceService
metadata:
  name: lla-test
spec:
  predictor:
    maxReplicas: 4
    minReplicas: 1
    model:
      env:
        - name: MODEL_VERSION
          value: "14"
      modelFormat:
        name: mlflow
      protocolVersion: v2
  1. Commit a change to any field in spec (for example, change predictor.maxReplicas from 4 to 2).
  2. With server-side diff enabled (argocd.argoproj.io/compare-options: ServerSideDiff=true), Argo CD shows the application as Synced and Healthy, and does not detect the spec difference.
  3. Switch to client-side diff (argocd.argoproj.io/compare-options: ServerSideDiff=false), Hit refresh, the difference is then detected and applied.

Observed behavior

  • With server-side diff: No differences are detected; the app remains Synced/Healthy even when spec fields have changed; changes on metadata are detected and applied correctly.
  • With client-side diff: Differences are detected and applied correctly.
  • Manual sync: Updates the resource correctly.

Expected behavior

Argo CD should detect differences between live and desired manifests for this resource when using server-side diff, just like it does with client-side diff.

Screenshots

  • Desired state
Image
  • Live state
Image
  • Application status
Image

Application spec

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  annotations:
    argocd.argoproj.io/compare-options: ServerSideDiff=true
  finalizers:
  - resources-finalizer.argocd.argoproj.io
  name: test-app-test2
  namespace: argo-cd
spec:
  destination:
    name: gke-alpha-01-europe-west1
    namespace: test-app
  project: sre
  source:
    helm:
      releaseName: foo
    path: chart
    repoURL: https://github.com/REDACTED/manifests-test-app.git
    targetRevision: master
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
    - CreateNamespace=true
    - ServerSideApply=true

Version

argocd: v3.2.1+8c4ab63
  BuildDate: 2025-11-30T11:48:14Z
  GitCommit: 8c4ab63a9c72b31d96c6360514cda6254e7e6629
  GitTreeState: clean
  GoVersion: go1.25.0
  Compiler: gc
  Platform: linux/amd64

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingtriage/pendingThis issue needs further triage to be correctly classified

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions