Changelog — Jarvis Helm Chart
All notable changes to the Jarvis Helm chart (oci://ghcr.io/kj187/charts/jarvis) are documented in this file. The format is based on Keep a Changelog, and the chart follows Semantic Versioning. The chart version is decoupled from the Jarvis app version; appVersion is the image tag the chart deploys by default. The app changelog lives in the repository root.
Every chart version lists a Breaking Changes section, even when there are none. A breaking change is anything that can make helm install/helm upgrade fail or change the behavior of an existing release without the user changing their values: removed or renamed values, changed defaults, new validations that reject previously accepted values, new resources that need extra permissions, or changed selector labels. A breaking change always bumps the chart's major version.
Entries up to and including 1.7.6 were reconstructed from the git history when this file was introduced; their breaking-change classification was assessed retroactively.
Unreleased
Breaking Changes
- No breaking changes.
Added
config.silenceDurationsvalue, rendered asJARVIS_SILENCE_DURATIONSin the ConfigMap only when set. It defines the instance-wide default durations of the Fast-Silence and Extend-silence menus (comma-separatedm/h/d/w/ydurations, up to 12, each 1m–365d); an invalid value makes the app refuse to start, so it surfaces on rollout rather than silently. Empty by default, so an existing release renders unchanged and keeps the built-in durations — not breaking.clusters[].auth.*values for per-cluster upstream Alertmanager authentication: OAuth2 client credentials, bearer token, basic auth, and custom headers — rendered as the existingJARVIS_CLUSTER_<n>_*variables the backend already reads.oauth2.clientSecret,bearerTokenandbasicAuth.passwordare stored in the chart's Secret, never the ConfigMap;clusters[].auth.existingSecretsources them from an externally managed Secret instead, consistent withdatabase.existingSecretandauth.existingSecret. Settingoauth2.clientIdwithoutoauth2.tokenUrlfails the render, mirroring the backend's own startup validation instead of failing silently at runtime.
Changed
- The chart README now keeps only chart values and chart-specific examples; release verification, upgrade/rollback, and authentication procedures link to their canonical guides instead of duplicating them. Documentation only, no rendered change.
- The Kubernetes section of docs/authentication-alertmanager.md and the chart README now document
clusters[].auth.*directly instead of theextraEnvworkaround;extraEnvis kept as a documented fallback for chart versions before this one. - The ingress section points at the new reverse-proxy guide and states that
config.allowedOriginsmust name the URL the browser uses — the WebSocket annotations alone are not enough. Documentation only, no rendered change. artifacthub.io/links's Documentation entry now points at the published docs site (https://kj187.github.io/jarvis/) instead of thedocs/tree on GitHub, following the docs restructure into a reader-intent site. Metadata only, no rendered change.- Comments in
values.yamland the template files pointing atdocs/persistence.mdnow point atdocs/postgres-ha.md, following the same restructure. Comments and a test suite name only, no rendered change.
Fixed
- The values table in the chart README documents six values that existed but were listed nowhere:
podLabels,persistence.annotations,updateStrategy.type,autoscaling.minReplicas,autoscaling.maxReplicasandautoscaling.targetCPUUtilizationPercentage.updateStrategy.typematters most — its auto-selection (Recreatewith a PVC,RollingUpdateotherwise) was explained only in avalues.yamlcomment and therefore reached neither the website nor Artifact Hub. Documentation only, no rendered change.
2.0.0 - 2026-09-15
Breaking Changes
- SQLite (
database.dsnis a file path) combined withreplicaCount > 1orautoscaling.enablednow fails the render regardless ofpersistence.enabled. Previously the guard only fired with a PVC, so the default emptyDir setup rendered fine — while every pod polled Alertmanager independently and kept its own divergent history. Migration: setreplicaCount: 1or switch to PostgreSQL (database.dsn: postgres://..., see docs/persistence.md). (#194) auth.providerother thannonenow fails the render unlessauth.secretKeyorauth.existingSecretis set, andauth.provider: oidcadditionally requiresauth.oidc.issuer,auth.oidc.clientIdandauth.oidc.redirectUrl. Such releases previously rendered, but the pod never started (CreateContainerConfigError). Migration: set the missing values. (#193)
Changed
appVersionbumped to1.12.0.- The chart now ships its own
CHANGELOG.md; the Artifact Hub links point to both the chart and the app changelog. - The chart is published only after the image for its
appVersionexists — as part of an app release, or on its own for chart-only releases. The README documents the versioning rules (breaking change → major). Chart.yamlcomments point to the release process at its new location (.agents/skills/release/SKILL.md); comment-only, no rendered change.
Fixed
- The generated Secret renders
dsn,secret-keyandoidc-client-secretindependently. Settingdatabase.existingSecretno longer suppresses the auth secret key the Deployment references. (#192)
1.7.6 - 2026-09-09
Breaking Changes
No breaking changes.
Changed
appVersionbumped to1.11.0.
1.7.5 - 2026-09-05
Breaking Changes
No breaking changes.
Changed
appVersionbumped to1.10.1.
1.7.4 - 2026-09-05
Breaking Changes
No breaking changes.
Changed
appVersionbumped to1.10.0.
1.7.3 - 2026-08-17
Breaking Changes
No breaking changes.
Changed
appVersionbumped to1.9.3.
1.7.2 - 2026-07-17
Breaking Changes
No breaking changes.
Changed
appVersionbumped to1.9.2.
1.7.1 - 2026-07-16
Breaking Changes
No breaking changes.
Added
database.maxOpenConns(default10) →JARVIS_DB_MAX_OPEN_CONNS, caps the PostgreSQL connection pool per pod. Ignored for SQLite. (#120)
Changed
appVersionbumped to1.9.1.
1.7.0 - 2026-07-15
Breaking Changes
leaderElection.podLabel.enableddefaults totrue: the chart now renders aRole(pods:get,patch) and aRoleBinding, and the pod mounts its ServiceAccount token (automountServiceAccountToken: trueat pod level) so the leader can label itself. Installations whose Helm user may not create RBAC resources, or that rely on the token not being mounted, must setleaderElection.podLabel.enabled: false. (#112)
Added
- Leader pod label
jarvis.kj187.de/role=leader(PostgreSQL multi-replica), withPOD_NAME/POD_NAMESPACEinjected via the Downward API. (#112) podDisruptionBudget.enabled/podDisruptionBudget.minAvailableand atopologySpreadConstraintspassthrough for HA deployments. (#113)metrics.serviceMonitor.relabelings,metricRelabelings,annotationsandhonorLabels. (#117)
Changed
appVersionbumped to1.9.0.
1.6.2 - 2026-07-13
Breaking Changes
No breaking changes.
Changed
appVersionbumped to1.8.0.
1.6.1 - 2026-07-09
Breaking Changes
No breaking changes.
Changed
appVersionbumped to1.7.0.
1.6.0 - 2026-07-04
Breaking Changes
No breaking changes.
Added
- Prometheus scraping for
/metrics: an opt-inServiceMonitor(metrics.serviceMonitor.enabled) andprometheus.io/*pod annotations (metrics.podAnnotations). - Artifact Hub annotations (category, license, links) in
Chart.yaml.
Changed
- Chart versioning is decoupled from the app version: the chart is published by its own workflow on changes under
charts/and signed keylessly with cosign. Previous chart versions were identical to the app version. appVersionbumped to1.6.0.
1.5.0 - 2026-06-26
Breaking Changes
No breaking changes.
Changed
- Chart README recommends PostgreSQL for Kubernetes deployments.
appVersionbumped to1.5.0. Chart versions 1.5.1–1.5.3 only bumpedappVersionto the matching app release.
1.4.0 - 2026-06-22
Breaking Changes
No breaking changes.
Changed
authvalues point to the split user-authentication docs (docs/authentication-user.md).appVersionbumped to1.4.0.
1.3.1 - 2026-06-19
Breaking Changes
- SQLite with
persistence.enabled: truecombined withreplicaCount > 1orautoscaling.enablednow fails the render. This was released as a patch at the time.
Added
updateStrategy.type; when empty, the Deployment strategy is auto-selected:Recreatewithpersistence.enabled,RollingUpdateotherwise.
Fixed
- Rolling updates with an RWO volume (e.g. EBS) no longer force a volume detach that caused
SQLITE_IOERR_READ.
Changed
appVersionbumped to1.3.1. Chart version 1.3.0 only bumpedappVersion.
1.2.0 - 2026-06-18
Breaking Changes
No breaking changes.
Added
extraEnv,extraVolumes,extraVolumeMountsandserviceAccountTokenProjection(projected, audience-scoped ServiceAccount token, e.g. for Vault/JWT). All disabled by default.
Changed
appVersionbumped to1.2.0. Chart version 1.1.0 only bumpedappVersion.
1.0.2 - 2026-06-16
Breaking Changes
No breaking changes (first published chart version).
Added
- Initial chart: Deployment, Service, ConfigMap, Secret, PVC, HPA, ServiceAccount and Ingress (nginx and Traefik WebSocket examples).
- User authentication values:
auth.provider(none/internal/oidc),auth.mode(write_protect/full_protect),auth.secretKey/auth.existingSecret, OIDC settings. - helm-unittest suite.
Chart versions 1.0.3–1.0.5 only bumped appVersion to the matching app release.
