1.2.1

Fixed (#379)

  • Tray-логи core.log и selfexec.log больше не растут бесконечно (#379): при открытии добавлена size-based ротация — файл больше 10 МБ переименовывается в <имя>.old (одна генерация, существующий .old перезаписывается), запись продолжается в новый файл. Ротация именно при открытии (не фоновая горутина): supervisor/helper стартуют при каждом запуске приложения и после обновлений, этого достаточно для диагностических логов. Новый кроссплатформенный подпакет internal/tray/logfile (Open + PrepareDir, порог MaxLogSizeBytes = 10 МБ; ошибка rename не блокирует открытие — лог продолжит писаться в растущий файл до следующего старта), применён в трёх точках открытия: internal/tray/lifecycle.go (core.log), internal/tray/selfexec/helper.go (setupLogger) и internal/tray/selfexec/spawn.go (stdout/stderr хелпера; selfexec-ветки только !windows). Сопутствующие фиксы fd: в spawn.go файл лога закрывается в родителе после cmd.Start() (хелпер пишет через унаследованный fd — раньше копия супервизора утекала на каждом спавне) и при неудачном Start(); в RunTray core.log закрывается через defer при выходе (раньше fd жил без close; рестартам core не мешает — они идут внутри RunTray). Тесты: internal/tray/logfile/logfile_test.go — ротация oversized-файла (.old создан, новый пустой), файл ниже порога не трогается, существующий .old перезаписывается, создание отсутствующего файла, append-режим, PrepareDir. ocr review — 4 находки: 2 закрыты (закрытие fd в spawn/RunTray), 2 отклонены с обоснованием (молчаливый rename — осознанный best-effort для диагностического лога; двойное открытие selfexec.log в spawn и helper — предсуществующее поведение, append-режим корректен, оба fd в одном файле не конфликтуют).