32f1b601b6
The auto-update/auto-heal daemon apply paths (recreate/pull/rollback/cleanup/ heal-restart) mutate production containers but had no executing tests because they took a concrete *dockerclient.Client. Introduce minimal seam interfaces (dockerClient + containerRecreator) and thread them through updateStandalone/ cleanupOldImage/updateStack/inspectImageID/healthGate/rollback, extract the heal restart loop into healContainers — all behaviour-preserving (the concrete client and ContainerService satisfy the interfaces). Add a call-recording fake and ordering/gating integration tests: cleanup runs strictly AFTER a healthy health-gate (rollback target never deleted early), rollback fires on gate failure and preserves the target, the 'updated' event is held until health is confirmed, and the heal restart respects its cooldown. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>