What happens
The single-node release MIGs use stateful configuration that preserves the cache disk and the container declaration across a recreate. The instance template carries no access config, so the external IP is not preserved. Any recreate — a roll, a resize, a preemption, or the drain/restore inside the chain-state snapshot pipeline — brings the instance back with no external address.
The node stays RUNNING, /ready and /healthy both return ok, and it keeps announcing an address that no longer routes to it. From every health signal we have, it looks fine. It is simply unreachable inbound.
Why it does not self-heal
The only code path that reattaches a reserved address lives inside the chain-state snapshot pipeline, and only runs during a snapshot cut. Nothing in the deploy or recreate path reattaches, so outside of a cut the condition persists indefinitely.
The existing repair helper cannot fix it alone: it reads the instance's current external IP and exits early if there is not one. It repairs the announced address once an IP is attached, but cannot perform the attach. That two-step requirement is not obvious from its error message, which just reports no external IP found.
Nothing detects it
- The fleet status tool prints a "N/M P2P open" count but exits 0 regardless, so it cannot be alerted on.
- The health endpoints stay green throughout, so any check based on them passes.
The result is a node that is silently undiscoverable for an unbounded period.
Observations
Four of six release nodes were found in this state during unrelated work. They were repaired by hand. It then recurred twice more the same day following MIG recreates, most recently 2026-08-25 — repaired by hand again each time. Three occurrences in one day is the reason this needs a real fix rather than another manual pass.
Notably, the peer/seed MIGs do not show this, because they carry a stateful external-IP policy. The release MIGs appear to lack that policy, which looks like the underlying asymmetry.
Suggested directions
- Make recreates preserve the address. Add stateful external-IP policy to the release MIGs, matching the peer MIGs. This removes the failure mode rather than repairing it after the fact, and is likely the smallest correct change.
- Failing that, move the reattach into the deploy/recreate path so it is not exclusive to the snapshot pipeline.
- Make the condition alertable. An opt-in flag on the fleet status tool that exits non-zero when a node has no external address, so a scheduled check can page on it. This is worth doing regardless of 1 or 2, because "RUNNING and healthy but undiscoverable" is currently invisible.
Also worth improving the repair helper's error message to state that an address must be attached first, and how.
What happens
The single-node release MIGs use stateful configuration that preserves the cache disk and the container declaration across a recreate. The instance template carries no access config, so the external IP is not preserved. Any recreate — a roll, a resize, a preemption, or the drain/restore inside the chain-state snapshot pipeline — brings the instance back with no external address.
The node stays
RUNNING,/readyand/healthyboth return ok, and it keeps announcing an address that no longer routes to it. From every health signal we have, it looks fine. It is simply unreachable inbound.Why it does not self-heal
The only code path that reattaches a reserved address lives inside the chain-state snapshot pipeline, and only runs during a snapshot cut. Nothing in the deploy or recreate path reattaches, so outside of a cut the condition persists indefinitely.
The existing repair helper cannot fix it alone: it reads the instance's current external IP and exits early if there is not one. It repairs the announced address once an IP is attached, but cannot perform the attach. That two-step requirement is not obvious from its error message, which just reports no external IP found.
Nothing detects it
The result is a node that is silently undiscoverable for an unbounded period.
Observations
Four of six release nodes were found in this state during unrelated work. They were repaired by hand. It then recurred twice more the same day following MIG recreates, most recently 2026-08-25 — repaired by hand again each time. Three occurrences in one day is the reason this needs a real fix rather than another manual pass.
Notably, the peer/seed MIGs do not show this, because they carry a stateful external-IP policy. The release MIGs appear to lack that policy, which looks like the underlying asymmetry.
Suggested directions
Also worth improving the repair helper's error message to state that an address must be attached first, and how.