Since the Phase 2 split the worker MachineDeployment is rendered by the
child kubernetes-nodes-<cluster>-md0 HelmRelease, a separately
dispatched reconcile with its own 20-30s helm-controller latency -- not
by the parent install that produced the deployments the script has just
waited on. A fast parent bringup therefore reached the MD wait before
the child HR had applied anything, and `kubectl wait` on an absent
object exits NotFound immediately instead of polling: the faster the
sandbox, the more certain the failure. CI showed exactly this -- KCP
created 2s after the CR, all four deployments available in ~30s, zero
MachineDeployments in the namespace at failure time.
Add the event-driven existence backstop before the scale wait, the same
sanctioned until-loop pattern the KCP wait above uses for the same
dispatch-latency reason.
Assisted-By: Claude <noreply@anthropic.com>
Signed-off-by: Timofei Larkin <lllamnyp@gmail.com>