🤖 Generated by the Codex Daily AI Engineer instance.
Description
The production deploy can push a valid Platform artifact but then deadlock before Flux applies it: flux-system/ksail-registry-credentials is KSail-managed and can retain a revoked GHCR pull credential even after k8s/bases/bootstrap/secret.enc.yaml is rotated. The workflow runs workload reconcile before cluster update, and KSail currently ignores credential-only drift, so the root OCIRepository returns GHCR DENIED and every dependent Kustomization stalls.
Steps to Reproduce
- Rotate
stringData.ghcr_dockerconfigjson in the Git/SOPS bootstrap Secret while the live root Flux Secret still has the previous value.
- Run the production deploy.
- Observe that artifact push/signing succeeds.
- Observe
workload reconcile fail on OCIRepository/flux-system before cluster update can run.
Expected Behavior
The deploy proves the authoritative Git/SOPS pull credential can read the production artifact and refreshes the root Flux Secret before reconciliation. It reasserts the same value after any KSail-owned cluster update.
Actual Behavior
Merge/heal run 29265027478 timed out with the root source returning GHCR DENIED; apps remained blocked. Credential-only rotation was not applied to the KSail-managed Secret.
Environment
- Production Talos/Hetzner cluster
- KSail 7.167.0
- Flux OCI source
flux-system/flux-system
Acceptance Criteria
Additional Context
Child of #2613. KSail credential-only refresh remains tracked in devantler-tech/ksail#6107; the broader Talos node pull-credential convergence remains in the parent and is not closed by this slice.
Description
The production deploy can push a valid Platform artifact but then deadlock before Flux applies it:
flux-system/ksail-registry-credentialsis KSail-managed and can retain a revoked GHCR pull credential even afterk8s/bases/bootstrap/secret.enc.yamlis rotated. The workflow runsworkload reconcilebeforecluster update, and KSail currently ignores credential-only drift, so the rootOCIRepositoryreturns GHCRDENIEDand every dependent Kustomization stalls.Steps to Reproduce
stringData.ghcr_dockerconfigjsonin the Git/SOPS bootstrap Secret while the live root Flux Secret still has the previous value.workload reconcilefail onOCIRepository/flux-systembeforecluster updatecan run.Expected Behavior
The deploy proves the authoritative Git/SOPS pull credential can read the production artifact and refreshes the root Flux Secret before reconciliation. It reasserts the same value after any KSail-owned cluster update.
Actual Behavior
Merge/heal run 29265027478 timed out with the root source returning GHCR
DENIED;appsremained blocked. Credential-only rotation was not applied to the KSail-managed Secret.Environment
flux-system/flux-systemAcceptance Criteria
ghcr_dockerconfigjsoninto a mode-restricted temporary file; never expose plaintext or derived base64 in argv/logs.ghcr.io/devantler-tech/platform/manifests:latest..data[".dockerconfigjson"]beforeworkload reconcile.cluster update, including partial update failures after a successful initial preflight.Additional Context
Child of #2613. KSail credential-only refresh remains tracked in devantler-tech/ksail#6107; the broader Talos node pull-credential convergence remains in the parent and is not closed by this slice.