Files
arcodangeandClaude Opus 5 613f8b0a8f fix(ops): pin the kube-context — never run destructive steps on the ambient one
sandbox-lifecycle.sh scales deployments to zero, patches the ArgoCD Application
and runs DROP OWNED ... CASCADE. Every one of those ran against whatever
kube-context happened to be current.

This workstation also carries a CLIENT production cluster. On 2026-07-25 a
`checkpoint refresh` was issued while the current context was
do-nyc3-kissmetrics-prod-k8s-cluster: the script patched the ArgoCD Application,
scaled `erp-sandbox` to zero and copied a prod secret — all against the client's
cluster. Nothing was damaged only because that cluster has no `application` CRD
and no erp/erp-sandbox namespaces, so each call failed silently under `|| true`.
That is luck, not a control.

- ERP_KUBE_CONTEXT (default: "default") pins the target; every kubectl call now
  goes through K(), so nothing inherits the ambient context.
- assert_arcodange_cluster() proves the target by positive fingerprint — the
  erp, erp-sandbox and argocd namespaces AND the erp-sandbox ArgoCD Application.
  A client cluster cannot match all four by accident. Wired into all three
  entry points, before any mutation.

Verified: refuses the client context, refuses an unknown context, passes on the
homelab and completes normally.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_01VRShc4QhLLU73FLHx9vskh
2026-07-25 23:43:26 +02:00
..