01 · Start from what runs
The cluster, not just the repo.
The daily upgrade scan starts from the live HelmReleases,
OCI sources and container images. It links each one back to the file
in git that declares it. The assistant treats a release that exists only in git, or only
in the cluster, differently from one that is in both.
Here the assistant finds kube-prometheus-stack, pinned at
61.3.2. Your team has tuned its values block over
the years.
02 · What is out there
Check the chart repository for every newer release.
The assistant fetches the index.yaml of the chart (or lists OCI tags).
It uses your repository credentials where needed. It drops pre-releases.
It skips versions that you or we marked known-bad.
Container images get the same treatment through Docker Hub, GHCR
and your own registries.
03 · Read the changelogs
Every hop between here and there, oldest first.
Release notes come from GitHub releases. If a project
publishes no releases, they come from CHANGELOG.md / UPGRADE.md.
The assistant extracts each breaking change and sorts it into a class.
The classes are a values rename, a required step, a CRD change and a
migration path.
If the assistant cannot fetch a changelog, the MR says so in a banner and
the risk goes up. The assistant never reports missing evidence as "no breaking
changes".
04 · Does it affect you?
A breaking change only counts if it touches your values.
The assistant checks each finding against your HelmRelease values. It also checks against
a render of the chart with those values. Helm never installs the
versions in between. So a change that 63 introduces and 64 reverts
is irrelevant to a jump past 64.
Required-step changes are hard stops. Your values do not change that.
05 · Pick the boundary
The highest version before the first change that applies.
The rule is simple, and the MR states it. If breaking-change
evidence is in range, the assistant stops just before it and quotes the excerpt. If there is
none, it goes up to a year of releases in one step.
Here the first stop that applies is 67.0.0, so the
target is 66.7.1. That is five major versions in one reviewed
MR. The next step becomes its own MR after you merge this one.
06 · Render both versions
See what really changes in the cluster.
The assistant runs helm template at the current and at the target
version with your values. It then compares the two outputs. This shows what the version string hides, such as new CRDs,
changed selectors and a container that gains an argument.
Changes to load-bearing fields raise the risk, and the MR calls them out.
These fields are container specs, Service ports, RBAC and storage.
07 · Ask the API server
Would the cluster accept this? Asked before you review.
The assistant checks the rendered objects against the CRD schemas that the
cluster actually serves. It can also send the changed HelmRelease as a
server-side dry-run: the API server tests the change but does not apply it.
This dry-run is in development. It runs in observe mode, so it records the
result but does not change the proposal. The objects that the chart renders
are not sent yet.
A dedicated identity sends the request, and an admission policy limits that
identity to dry-run only. It can ask, but it can never apply.
08 · The proposal
A one-line diff, and everything you need to trust it.
The diff is tiny. The MR body carries the reasoning. It says why the assistant chose this
version and not the newest. It lists which breaking changes apply and what
to do about them. It lists what the assistant could not evaluate, and what to watch
after you merge. The full MR is below.