b233f75ab7
F1: prune retry-state by elapsed window since lastRestart instead of "not seen this tick", so a container flapping through "starting" keeps its cooldown/max-retries accounting (storm guard no longer defeated). Recovered containers quiet for > window are still cleaned up. F2: list running containers only (All:false) so stopped-unhealthy containers are never revived. F3: each ContainerRestart gets its own context (stop-timeout + buffer), separate from the per-endpoint list context, so a slow/hung restart cannot starve the others or exhaust a single shared deadline. F4: start() is idempotent (no-op when a job is already scheduled); Reload still stops first so it always reschedules. F5: frontend parseBool mirrors Go strconv.ParseBool (case-insensitive 1/t/true; present-but-invalid counts as present & false). F6: tests TestPruneRetries and TestRetryStateSurvivesStartingTick lock in the F1 behavior; added AutoHealRow parse cases. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>