[CL-79] bounded graceful drain in-flight runs на shutdown #84
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/claude-graceful-drain"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что сделано
Bounded graceful drain в
shutdown()(server/src/index.ts) ПЕРЕД reap/cancel: ждём покаrunningProcessesопустеет (in-flight runs завершатся естественно), boundedSHUTDOWN_DRAIN_MAX_MS(default 20s, env-configurable).server/src/services/fleet-shutdown-drain.ts— чистая тестируемаяdrainActiveRuns(injectable clock/sleep)server/src/index.ts— drain послеprepareForShutdown, до early-killserver/src/__tests__/fleet-shutdown-drain.test.ts— 4 casesЗачем
На
pm2 restart(агенты self-деплоят ~1/час)shutdown()СРАЗУ убивает claude-детей mid-turn → "TOOL ERRORED / Exit code 5 / INPUT empty" в transcript → run ретраится впустую. Это root cause исходного вопроса "почему агенты вызывают инструменты с ошибками". Drain даёт runs закончиться.FAIL-SAFE: try/catch + pm2
kill_timeout= hard backstop → баг может только задержать shutdown (bounded), не повесить рестарт. Нет регрессии (fallthrough к текущему immediate kill).План тестирования
vitest src/__tests__/fleet-shutdown-drain.test.ts→ 4/4 passtsc --noEmit(server) → 0 errorsДеплой (требуется)
pm2
kill_timeout>= 30s (сейчас 10s) чтобы 20s drain + kill-grace (1+5s) поместились, иначе pm2 SIGKILL обрежет cleanup. Применяется при деплое (выставлю отдельно).Где могу ошибиться
runningProcessesможет пополняться во время drain — bounded регардлесс;prepareForShutdownвызван до drain.fix/PIX-7823-v2-local(ветка флота, не master).Closes #79