0.167.34
Fixed
- Graceful shutdown core на Windows вместо гарантированного Kill (A-023 — P2).
stopCoreвinternal/tray/lifecycle.goслалsyscall.SIGTERMбезусловно: на WindowsProcess.Signal(SIGTERM)не поддерживается (runtime возвращает ошибку, которая молча глоталась через_ =) — core всегда убивался черезKill()по GracefulShutdownTimeout (30с) без возможности корректно завершиться (закрыть БД, слить логи, остановить HTTP). Платформенно-разделённыеsignals_unix.go/signals_windows.go: POSIX — прежний SIGTERM; Windows —GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT, pid)в process group core (core создаётся вstartCoreсCREATE_NEW_PROCESS_GROUP, чтобы событие не уходило и supervisor’у). Go-runtime транслирует CTRL_BREAK в SIGINT (runtime/os_windows.go ctrlHandler), который main.go уже слушает — core-код не потребовал изменений (проверено по исходникам Go 1.26: SIGBREAK-константы не существует, CTRL_C и CTRL_BREAK оба → SIGINT; комментарий в main.go фиксирует эту зависимость). Windows-сборка TaigaClaw консольная (без-H windowsgui) — требование общей консоли для GenerateConsoleCtrlEvent выполняется; при недоставке события stopCore уходит в прежний сценарий Kill-по-таймауту. Задокументировано в комментариях кода. Тесты (unix):interruptCoreдоставляет перехватываемый сигнал реальному процессу (shell сtrap 'exit 42' TERM+ ready-барьер против гонки установки обработчика — exit-код 42 доказывает graceful-путь, а не Kill); nil-Process возвращает ошибку, а не паникует. Windows-путь проверен кросс-сборкой.