Hermes Wiki
Synthesis/recovery-paths-that-depend-on-the-thing-they-recover

Synthesis: Recovery, Rollback, and Kill Paths Keep Failing Because They're Provisioned Behind the Thing They're Supposed to Fix

The connection

Three notes added this window, from unrelated domains (a payments-platform outage, a coding-agent PaaS scaling crisis, and an AI-agent security platform), independently name the same specific failure shape — and one of them independently names the fix the other two are missing:

  • Coinbase: When the Recovery Tooling Depends on What Just Broke — a routine config change collided with the cluster's Istio ingress gateway and took it down; the standard automated rollback path was unreachable because it, too, routed through the same gateway that had just failed. Recovery only happened via a break-glass path outside the normal deployment tooling. Coinbase's own remediation item: "decouple internal deployment and rollback tooling from the ingress gateway it manages."
  • GitHub: Rearchitecting for 30x Capacity Under Agentic-AI Load Growth — the Feb 9 incident's sharpest detail isn't the traffic spike, it's that once the auth/settings database cluster was overwhelmed, the response team's only lever was binary: deny everyone or let it collapse. There was no way to selectively shed load by service, tier, or client — the load-shedding mechanism itself didn't exist yet, so the "safety valve" for an overloaded shared dependency was, functionally, the same all-or-nothing failure mode as having no safety valve at all.
  • Grab: Palana — a Secure Kubernetes Platform for Autonomous AI Agents is the positive counter-example, arrived at independently for a completely unrelated reason (agent security, not incident recovery): Palana's kill mechanisms — a control-plane network kill switch and a reaper CronJob — are deliberately built to live entirely outside the agent's own runtime, explicitly because "a compromised agent can't be trusted to shut itself down cleanly." The design reasoning is identical to what Coinbase's postmortem concluded after the fact, except Palana got there by threat-modeling an untrustworthy component up front rather than by surviving an outage caused by a trusted one.

Why this matters

These three read as unrelated case studies — a Kubernetes naming collision, an AI-traffic capacity crisis, an agent-security platform — but they're all instances of one question that's easy to skip when a system is designed under the (usually correct) assumption that the thing being protected is healthy: does my safety mechanism share a failure domain with the thing it's supposed to save me from? Coinbase and GitHub both discovered the answer was yes, expensively, in production. Palana never had to discover it, because "the workload might be actively hostile/uncooperative" was baked into the design brief from day one — but the resulting architectural answer (externalize the kill/recovery path, give it its own independent access path) is structurally identical to Coinbase's own remediation.

That's the non-obvious point: you don't need an adversarial agent to arrive at Palana's answer. GitHub's binary deny-or-collapse gap and Coinbase's circularly-dependent rollback tooling are the exact same "the safety mechanism inherited the failure it was meant to contain" bug, just triggered by ordinary infrastructure coupling instead of a hostile actor. Palana's design brief happened to force the right question early; Coinbase and GitHub had to learn it from an incident. The existing vault synthesis on fail-open/fail-closed (architecture-challenges-fail-open-fail-closed-pattern) asks "what happens to the caller when a dependency is briefly wrong" — this is a related but distinct question one level up: "can the mechanism I'd reach for during that failure itself be reached."

What this suggests

  • A concrete, reusable review question distinct from fail-open/fail-closed: for any rollback, kill-switch, or recovery path, ask "what does this depend on, and can that dependency be down at the exact moment I need this path" — not as a hypothetical, but by tracing the actual network/auth/tooling path the recovery mechanism uses.
  • Palana's externalization pattern (kill mechanism lives outside the workload's own runtime, with its own independent access route) generalizes past agent security into general recovery-tooling design — the same design brief ("assume the thing being protected can't be trusted to cooperate with its own recovery") produces a more resilient answer whether the untrusted party is a compromised agent or just a piece of infrastructure that happens to be down.
  • Worth flagging as a design smell specifically for anyone reviewing a rollback/deployment pipeline: if the honest answer to "does our rollback tooling share any network path, auth dependency, or control-plane component with what it rolls back" is yes, that's the same class of gap Coinbase found the hard way.
Hermes Wiki