-
v0.5.15 Stable
released this
2026-07-21 09:32:41 +00:00 | 27 commits to trunk since this releaseChanged
- Incremental release.
Included changes (v0.5.14 -> v0.5.15)
05151a7b434cchore: remove confirmed-dead code (dead-code hunt)
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
v0.5.14 Stable
released this
2026-07-17 11:10:50 +00:00 | 31 commits to trunk since this releaseChanged
- Bump
libseanfarm-operatorv0.4.11 -> v0.4.12 (lib-autobump: rides the shared-library release train; the envtest release gate validates the suite against it on the next ship). - Adopt the lib's canonical
operator.mkscaffolding: the Makefile's shared
dev-loop targets (manifests/generate/fmt/vet/test/lint*) and the whole
Dependencies section (tool pins + installers, go.mod-derived envtest
versions) are replaced by a vendoredoperator.mkinclude (re-synced by the
lib-bump autoland); the project Makefile keeps only repo-specific targets
(docker-*, build-installer, deploy/install, e2e).make testno longer
copiescover.outtocoverage.txt(nothing consumed it). - Adopt libseanfarm-operator v0.4.12
httpkit/reconcilehelpers: local
errorBodyExcerpt/maxErrorBodyExcerpt->httpkit.ErrorExcerpt(same 512-byte
bound, now structurally tied to the lib's condition-message limit), local
maxResponseBodySizebounded reads ->httpkit.BoundedRead/httpkit.MaxResponseBytes
(same 1 MiB), andgetPasswordFromSecret->reconcile.SecretValue(identical
value+resourceVersion contract; the ObservedSecretResourceVersion convention is
unchanged — the secret-not-found error now includes the namespace).
Included changes (v0.5.13 -> v0.5.14)
59c4521e3944chore(scaffolding): adopt operator.mk + httpkit helpers (lib v0.4.12)b6f76db276bechore(deps): bump libseanfarm-operator v0.4.11 -> v0.4.12 (lib-autobump)
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Bump
-
v0.5.13 Stable
released this
2026-07-16 16:15:40 +00:00 | 37 commits to trunk since this releaseChanged
- Bump
libseanfarm-operatorv0.4.10 -> v0.4.11 (lib-autobump: rides the shared-library release train; the envtest release gate validates the suite against it on the next ship). - Adopt libseanfarm-operator v0.4.11
reconcile.Metricsfor the GENERIC metric
families: the hand-rolled reconcile-total/duration, status-update, and Kratos
API-call counters/histograms ininternal/controller/metrics.goare deleted;
the lib records them viaConfig.Metrics/MetricsController(harness) and
Metrics.RecordCall(kratosclient.go). Dashboard-facing changes:
kratosidentity_reconcile_totalgains acontrollerlabel (now
{controller,result}) andkratosidentity_reconcile_duration_secondsis now
labeled{controller}(dropsresult);kratosidentity_api_calls_total{controller,operation,status}
replaceskratosidentity_kratos_api_calls_total{operation,status}(prefix
rename) andkratosidentity_api_call_duration_seconds{controller,operation}
replaceskratosidentity_kratos_api_duration_seconds{operation,status};
kratosidentity_status_update_totalgains{controller};
kratosidentity_status_update_failures_totalis removed (its only emission,
reason="update_error"from the status-write hook, duplicated the generic
kratosidentity_status_update_total{result="error"}the lib now records).
The kratos-DOMAIN metrics stay local and unchanged: thekratosidentity_phase
gauge keeps its exact deletion-transition bookkeeping (decrement exactly once
on the transition into Deleting — the r5 negative-gauge fix), plus
orphaned-recovery, deletion-email-lookup, and password-update-failure counters.
Included changes (v0.5.12 -> v0.5.13)
c1c21b67249echore(metrics): adopt libseanfarm reconcile.Metrics (generic families); keep the phase gauge localb1792376c29dchore(deps): bump libseanfarm-operator v0.4.10 -> v0.4.11 (lib-autobump)
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Bump
-
v0.5.12 Stable
released this
2026-07-15 18:14:24 +00:00 | 43 commits to trunk since this releaseFixed
- The ginkgo envtest controller suite RUNS now. It was gated behind
ENABLE_ENVTEST=1, whichmake testnever sets — so the 16-spec suite was
silently skipped locally AND in the pipeline-test-envtest release gate (the exact
red-suite-behind-a-green-row class the gate exists to close). Un-skipping surfaced
rot fixed in the same change: second-granularity test-namespace names colliding
with Terminating namespaces, seven specs asserting the pre-harness error contract
(nil error + dead RequeueAfter=30s) instead of propagate-for-backoff, one spec
still documenting the status-lost delete leak as a "known bug" that R5 fixed, and
two specs whose users were missing from the password fixture. 16/16 green.
Changed
- Bump
libseanfarm-operatorv0.4.9 -> v0.4.10 and dedup ontoreconcile/testkit:
deleted the all-skip ObservedGeneration documentation file, 3 skip-stub integration
tests, 2 self-asserting unit tests, and the 6-subtest secretwatch permutation suite
(lib coverage; one thin extractor-wiring test remains); collapsed the generic
harness trio intoTestMirrorStatusHook(kratos's legacy Ready/Phase mirror,
incl. the phaseFailed branch); envtest bring-up ridestestkit.StartEnvtest
(gaining bin/k8s discovery this repo never had). Makefile pins unified with
siblings: ENVTEST_VERSION/ENVTEST_K8S_VERSION now derived from go.mod (drops
the stale hardcoded release-0.19 / 1.35.0), golangci-lint v1.54.2 -> v2.8.0.
Included changes (v0.5.11 -> v0.5.12)
0b58af6245c7fix(test): un-skip the envtest suite + dedup onto reconcile/testkit (lib v0.4.10)
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- The ginkgo envtest controller suite RUNS now. It was gated behind
-
v0.5.11 Stable
released this
2026-07-15 16:13:58 +00:00 | 47 commits to trunk since this releaseChanged
- Bump
libseanfarm-operatorv0.4.7 -> v0.4.9: picks up the six shared-harness fixes from
the R5 bug-hunt (dry-run delete no longer touches the remote, Degraded message truncation,
Progressing cleared on failure, dry-run clears stale Degraded/Progressing, empty
Ready=Falsereason defaults toNotReadyinstead of a silently-swallowed 422,
dry-run converge now runsMirrorStatus).
Included changes (v0.5.10 -> v0.5.11)
b2ab700a45a1fix(deps): bump libseanfarm-operator v0.4.7 -> v0.4.9
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Bump
-
v0.5.10 Stable
released this
2026-07-15 13:33:48 +00:00 | 51 commits to trunk since this releaseFixed
- Delete no longer drops the finalizer (leaking a live identity + credential) when it lost the
identity ID and cannot resolve one by email. A(nil, nil)email lookup is ambiguous — the
identity may be genuinely gone, or not yet email-indexed (a racing create's index lag), or the
schema is non-email (email is never the lookup key). UnderHoldUntilSuccessthe CR now HOLDS the
finalizer for a bounded grace (2 min from the deletion timestamp), retrying so a lagging index can
surface a just-created identity, and only gives up afterward rather than wedgingTerminating
forever. (Deletes that still hold the recorded ID are unaffected — they delete directly.) - Steady-state fast path no longer rubber-stamps a different identity Ready. If identity X (the
one we manage) is deleted out of band and a new identity Y is created under the same email, the
fast path adopted Y asReadywithout re-asserting the spec's managed password/traits. It now
short-circuits only when the email's identity is still our recorded ID; otherwise it falls through
to the full converge soupdateIdentityre-asserts. - Legacy
status.ready/status.phasemirror is cleared on a held deletion. Under
HoldUntilSuccessa failing delete keeps the CR alive; the mirror no longer reportsReady=true
(with a staleReadyprint column) while the CR is stuckTerminating+Degraded.
Included changes (v0.5.9 -> v0.5.10)
18fe8517dd57fix(kratos): r5 cluster — delete cred-leak, adopt-guard, held-deletion mirror (3 fixes)
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Delete no longer drops the finalizer (leaking a live identity + credential) when it lost the
-
v0.5.9 Stable
released this
2026-07-14 15:03:40 +00:00 | 55 commits to trunk since this releaseChanged
- Incremental release.
Included changes (v0.5.8 -> v0.5.9)
2ab2a6851344fix(kratos): hold the finalizer on transient delete errors (was leaking live credentials)
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
v0.5.8 Stable
released this
2026-07-13 18:49:13 +00:00 | 59 commits to trunk since this releaseFixed
spec.emailis now immutable (XValidation: self == oldSelf). Email is the sole Kratos
lookup key, so editing it previously orphaned the old identity — which still carries a live
password credential — and minted a duplicate under the new address. The apiserver now rejects the
edit; change the address by deleting and recreating the KratosIdentity.- Guard against a double-create across the post-create observability window. When a create
succeeded but the identity was not yet observable via the credential-identifier index, Converge
persistedStatus.IdentityIDand returned Progressing; the next requeue re-rangetIdentity(email),
found nothing, and fired a secondcreateIdentity— 409-wedging a healthy CR under identifier
uniqueness, or minting orphaned duplicates otherwise. Converge now disambiguates by the persisted ID
(newgetIdentityByID,GET /admin/identities/{id}): if the ID still resolves it adopts the identity
(idempotent update); it only recreates when the ID is truly gone. NewTestGetIdentityByIDcovers the
200/404/5xx contract (a 5xx must hold, not recreate).
Included changes (v0.5.7 -> v0.5.8)
0028836eeb12fix(kratos): immutable spec.email + guard against post-create double-create
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
v0.5.7 Stable
released this
2026-07-13 18:33:45 +00:00 | 63 commits to trunk since this releaseFixed
- Bump
libseanfarm-operatorv0.4.1 → v0.4.7. Pulls in the v0.4.4 reconcile fix
(BLOCKER): the shared harness no longer stampsObservedGenerationon a Converge
error underObservedGenOnConvergedOnly. Previously a transient identity-update
failure stampedObservedGeneration=Nwhile leaving the CR not-yet-converged, so the
generation-skip fast path short-circuited the failed generation on the next pass and
masked it as Ready — silently dropping the spec change (groups/posix/name traits) while
reporting fully reconciled. Also carries five releases of accumulated harness fixes +
test coverage (v0.4.2–v0.4.7). Build + full controller test suite green on v0.4.7.
Included changes (v0.5.6 -> v0.5.7)
fe9a7d62008bfix(deps): bump libseanfarm-operator v0.4.1 -> v0.4.7 (blocker: ObservedGen-stamp-on-error)b44c2b0260fafix(cicd): auto-resolve CHANGELOG land conflicts via .gitattributes merge=uniona905a1425668fix(ci): pin golang:1.25 builder base by digestd25973d872e3docs(reconciliation): fix secret-watch mapfunc name (mapSecret)9de83757e0dechore(staging): open v0.5.7-dev dev cycle
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Bump
-
v0.5.6 Stable
released this
2026-07-01 13:49:05 +00:00 | 73 commits to trunk since this releaseFixed
- HTTP client: bound the success-path (HTTP 200/201) JSON response decoders with
io.LimitReader(maxResponseBodySize), matching the guard already applied on the
error paths. A hostile or malfunctioning Kratos admin API could otherwise stream
an unbounded response body intojson.Decode, exhausting operator memory; the
success paths are now capped identically to the error paths.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- HTTP client: bound the success-path (HTTP 200/201) JSON response decoders with