-
v0.5.17 Stable
released this
2026-07-24 09:39:55 +00:00 | 0 commits to main since this releaseFixed
- Verify schema, active state, and canonicalized traits on every steady-state
identity read so out-of-band Kratos edits are repaired without re-writing an
unchanged password on the next pass. - Reject ambiguous credential-identifier lookups instead of silently adopting
the first returned identity, and preserve HTTP status in typed client errors
so invalid configuration stops retrying while conflicts, throttling, and
outages continue through controller backoff. - Upgrade both build/validation toolchains to Go 1.26.5 and the
x/net/x/textdependency family to patched versions identified by
govulncheck; make standalone Athens defaults fail over on any proxy error.
Included changes (v0.5.16 -> v0.5.17)
0e5740415a78build: align validation toolchain and Athens fallback148ce5459439fix(identity): repair remote drift and classify API errors
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Verify schema, active state, and canonicalized traits on every steady-state
-
v0.5.16 Stable
released this
2026-07-23 17:25:43 +00:00 | 5 commits to main since this releaseSecurity
- Require every
KratosIdentityto use the exact namespace-local Admin API
endpoint (http://kratos-admin.<namespace>.svc.cluster.local:4434). This
prevents a CR author from redirecting the controller's Secret-backed password
submission to an arbitrary or cross-tenant HTTP endpoint. - Path-escape Kratos-returned identity IDs before update and delete requests so
a malformed or compromised response cannot alter the Admin API path.
Changed
- Fail safely instead of panicking when the reconciler HTTP client is not
configured. - Clear the repository's lint and
gosecbacklog (unchecked response closes,
mock response writes, and stale controller-runtime assertions); both strict
full-repository gates now report zero issues.
Included changes (v0.5.15 -> v0.5.16)
6b8737bc5354fix(controller): constrain Kratos admin requests
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Require every
-
v0.5.15 Stable
released this
2026-07-21 09:32:41 +00:00 | 9 commits to main 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 | 13 commits to main 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 | 19 commits to main 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 | 25 commits to main 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 | 29 commits to main 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 | 33 commits to main 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 | 37 commits to main 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 | 41 commits to main 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