1.2.3
Fixed (#380)
- Очистка файлов LLM-логов больше не зависит от расширения и формата имени (#380): раньше
PurgeOldLogsудаляла только*.jsonlс датойYYYY-MM-DDв имени — любые другие файлы вllm-logs/<agentID>/(эволюция формата, например вынос тел в отдельные.json, или ручное попадание) остались бы навсегда. Теперь возраст определяется по дате в имени независимо от расширения (последнее расширение срезается черезfilepath.Ext), при неудаче парсинга — fallback на mtime файла: каталог полностью принадлежит подсистеме, политика «старше cutoff — удалить» гарантирует отсутствие утечек любого происхождения. Недатированные файлы НЕ попадают вRemovedKeys(ключа для БД у них нет), датированные — дедуплицированы по<agentID>/<date>(при сосуществовании.jsonl+.jsonодной даты ключ один, аPurgedсчитает каждый файл — задокументировано в godoc). Опустевшие после очистки каталоги агентов удаляются (кореньllm-logs/не трогается); ошибки удаления файла/каталога (кромеIsNotExist) логируются на debug и не дают попробовать удалить заведомо непустой каталог. Тесты: расширеныTestPurgeOldLogs(старые.jsonl/.jsonудаляются, свежие и недатированные-свежие остаются), новыеTestPurgeOldLogs_UndatedFileFallsBackToMtime(os.Chtimes→ удаление по mtime) иTestPurgeOldLogs_RemovesEmptyAgentDirs(опустевший каталог удалён, живой и корень остаются). ocr review — 5 находок: 4 закрыты (godoc дедупликации, единый русский godoc, лог ошибок удаления каталога,agentDirEmpty=falseпри неудачном удалении файла), security-high (mtime-fallback может удалить «чужие» файлы) отклонён с обоснованием: прямое требование issue — консервативная политика именно гарантирует «в llm-logs ничего старше cutoff», каталогllm-logs/<agentID>/по дизайну не предназначен для посторонних файлов.