cub-scout Diff: dry-run + drift, GitOps-agnostic

A repository document, rendered for the site. View source markdown.

Generated at: 2026-07-30T12:38:02.000Z UTC · source: committed helm-expt evidence for this rendered repository document.

Day-1 dry-run and day-2 drift are the same operation: desired vs live. cub-scout already does the boolean form (object-set-matches, drift); this is the field-level design. It diffs the held render-once desired data (deterministic) against the live cluster via server-side dry-run, is GitOps-tool-agnostic (works under Argo, Flux, or cub-direct), and adds value-provenance, fleet blast-radius, authority, and honest residue. See the design.

Comparison With ArgoCD And Flux

Dimensioncub-scout diffArgoCD diffFlux diffWhy it matters
desired sideheld render-once data (deterministic; no re-render)helm template re-render (lookup + generated-value nondeterminism)helm/kustomize re-render (same nondeterminism)a re-rendered desired side drifts from what actually deploys -> OutOfSync noise
live sideserver-side --dry-run applyserver-side diffserver-side apply + drift detectionall three are accurate against the live object; cub-scout adopts this
value provenanceyes (links value-source-map: which value caused the delta)no (field diff only)no (field diff only)a dry-run that names the causing value is reviewable; a raw field diff is not
fleet / cross-environmentyes (fleet blast-radius + override-protection)per-Applicationper-HelmRelease/Kustomizationa fleet change must show its blast radius across environments, not one app
authority gate on the diffyes (reverse-reconcile policy family)nonoa governed change should be checked for who-may-change-what before apply
runtime residuenamed + witnessed (cub-scout predicates)buried in ignoreDifferencesburied in ignore ruleshonest about what cannot be pre-rendered, instead of suppressing it as noise
gitops tool couplingagnostic (argofluxcub-direct)argo-onlyflux-onlyone differ across all delivery paths, not a per-tool diff
day-1 + day-2unified (dry-run pre-apply = drift post-applyone engine)sync status + diffdrift detection

Worked examples (machine-checked, grounded in the value-source-map)

ReceiptChartOperationChangeObjectsTool-agnostic acrossStatus
redis-image-digest-dryrunbitnami/redis@25.5.3dry-runimage.digest2argo + flux + cub-directdesign-example

Each receipt's diff.changedObjects is checked to equal the chart's value-source-map prediction (proven 13/13 in blast-radius-accuracy), so the provenance is real, not asserted.

Honest scope

The schema, the capability matrix, the tool-agnostic invariance, and the value-provenance check are real. The cub-scout field-level diff command that runs the server-side dry-run end-to-end is the product piece (frontier); examples are design-example until it lands and a live dry-run + drift run agree under Argo, Flux, and cub-direct.

Regenerate

npm run cub-scout-diff:generate
npm run cub-scout-diff:verify