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(); вRunTraycore.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 в одном файле не конфликтуют).