Dorgu is the self-healing loop and nothing else
Both halves drop every surface that was not part of detect, diagnose, propose, approve, heal. Both releases are breaking if you used one of the removed surfaces, so read the upgrade steps before you upgrade.
Upgrade steps
- If you used
dorgu generate,init,config,persona generate|apply,cluster setup|info|init,platform serve,watchorsync, read the CLI migration guide. It lists what to use instead for each one. The last commit with them is taggedpre-harness. - If your Helm values set
webhook.enabled=true, remove it before upgrading the chart. The install fails with a message saying the webhook was removed, rather than silently dropping the value. - If you run the operator binary directly with a
--webhook-*or--enable-webhookflag, remove the flag. The binary no longer starts with it.
CLI v0.13.0
Removedgenerate,init,config,persona generate,persona apply,cluster init,cluster setup,cluster info,platform serve,watch,sync,health --watch,health --operator-url, and the global--configflag..dorgu.yamland~/.config/dorgu/config.yamlare no longer read.- The CLI’s own LLM integration (OpenAI, Anthropic, Gemini, Ollama). The CLI now makes no calls to a model provider and reads no API key. AI diagnosis and AI plans come from the operator, in your cluster, only when you enable them.
- A global
--contextflag, applied to everykubectlcall.persona status,persona listandcluster statusgain--kubeconfig, and every command now honours both on every call it makes. The production-context guard onapproveandhealchecks the--contextvalue when you set one. DORGU_PROTECTED_CONTEXTS: comma-separated, case-insensitive substrings of kube-context names thatapproveandhealrefuse to patch a workload through. The default staysprod, and a blank value falls back to it.
- “Operator not installed” hints now print the
helm installcommand for the operator instead of the removeddorgu cluster setup.
- A
kubectlflag value equal to a verb name, as inkubectl -n logs delete deployment/foo, no longer makes a write look read-only. On a workload Dorgu does not own, a step command is printed only if it reads, and the verb is now found by position rather than by scanning for the first word that looks like one. kubectl auth reconcileandkubectl rollout -n status restartare no longer classified as read-only.authandrolloutare judged by the subcommand that immediately follows them.- Protected contexts now refuse every
approve, including--no-heal. Approving is itself a change, and the refusal used to suggest--no-healas the way through.
Operator v0.12.0 and Helm chart 0.12.0
Removed- The Deployment validating admission webhook, with its
webhook.*chart values, Service,ValidatingWebhookConfiguration, and--enable-webhookand--webhook-*flags. It never produced a warning or a denial in any release. Persona validation still runs and reports on the persona’s status. See Helm values. - An older code path that opened
OOMKilledincidents and proposed fixes even with detection turned off.
healthCheck.enabled=falsenow means what it says. The operator records persona health only, and never opens an incident or proposes a fix.--enable-health-checkdefaults totruein the binary, matching the chart, which has defaultedhealthCheck.enabledtotruesince 0.8.0.- The remediation deny-list protects the namespace Dorgu runs in. It used to protect a hardcoded
dorgu-operator-system, so the documenteddorgu-systeminstall was not covered. The operator now reads its namespace fromPOD_NAMESPACE, which the chart sets.kube-systemstays protected.
safety.excludedNamespaces(flag--safety-excluded-namespaces): more namespaces Dorgu never proposes a remediation in. The ClusterPersona’sexcludeNamespacesstill applies alongside it.- The chart creates a metrics Service and a
metrics-readerClusterRole, and exportsdorgu_incidents_total,dorgu_proposals_totalanddorgu_remediation_transitions_total. See Metrics and probes.
- Gemini: the API key is sent in a request header rather than in the URL, and the chart injects the environment variable that matches the chosen
llm.provider. See Using Gemini. - Scraping
/metricson a Helm install no longer fails with a 500. With secure metrics on, the chart now grants the operator what it needs to authenticate scrapers. - A protected namespace is refused before the AI planner is asked for a plan, so incidents there no longer cost a model call or send that namespace’s details to the provider.