Hotfix к v1.29.0 (process-режим песочницы). Изменён только orphan-guard воркера; контракты хелперов, стратегия, схема SQLite и BUILDER_VERSION (14) не тронуты — пересборка индексов не требуется.
Исправлено
- Worker-процесс сессии больше не гибнет при завершении треда, вызвавшего
rlm_start(Linux). Было так: orphan-guard воркера ставилPR_SET_PDEATHSIG=SIGKILL, но на Linux этот сигнал привязан к ТРЕДУ, породившему процесс, а не к процессу-родителю. Когдаrlm_startвыполнялся на короткоживущем треде (например, из пула тредов сервера), воркер получалSIGKILLпри завершении/ретайре этого треда — хотя MCP-сервер жив, — и следующийrlm_executeв той же сессии падал сSandboxCrashedError(BrokenPipeError). Починили без ослабления hard orphan-guard: на Linux всеmultiprocessing.Process.start()песочницы проходят через долгоживущий spawn-broker thread процесса сервера, поэтомуPDEATHSIGпривязан к стабильному thread, переживает ретайр AnyIO-thread и по-прежнему kernel-level убивает worker при смерти сервера — в том числе когда пользовательский native-код удерживает GIL. Ожидание broker-а ограничено общим startup deadline: зависший broker выводится из ротации, новые сессии обслуживает новый, а возможный поздний spawn остаётся во владении старого broker-а и принудительно очищается. Ожидаемый PID сервера передаётся worker до spawn и закрывает стартовую гонку сinit/subreaper. На macOS и прочем best-effort POSIX используетсяgetppid-watchdog; Windows Job Object не менялся. Основной путь остановки (kill-tree родителем наrlm_end/TTL/timeout/shutdown) также не менялся.
Полный список изменений: CHANGELOG.md