1.2.0

Added (#378)

  • Настройки сроков хранения логов поддерживают значение 0 = «хранить бесконечно» (очистка отключена) (#378): потребитель очистки (internal/memory/cleanup_service.gopurgeDB при days <= 0 пропускает таблицу, файлы LLM-логов чистятся только при days > 0, janitor tool-outputs выключает только age-purge) уже исполнял эту семантику, но слой валидации запрещал её задать — у всех retention-ключей в реестре стоял Min: "1", фронт клампил 0 → 1, API отвечал 400. У 12 ключей retention_*_days в internal/settings/defs.go сменён Min: "1"Min: "0" (app_log, audit_log, tool_audit, cron_audit, file_audit, llm_usage, webhook_requests, refresh_tokens, checkpoints, llm_files, tool_outputs, llm_request_log), в каждое Description добавлена фраза «0 — хранить бесконечно (очистка отключена)» по образцу tool_outputs_size_cap_mb. Валидация validateParam не менялась (n < minV при Min="0" пропускает 0 и по-прежнему отсекает отрицательные — "-1" → 400 must be >= 0). Тесты: TestRetention_Update_ZeroMeansKeepForever (0 → 200, значение записано в стор), TestRetention_Update_BelowMin/TestRetention_Update_ErrorFormat переведены на "-1" → 400. Фронт: код не менялся (min приходит из API, кламп/validate() подхватывают автоматически), в подзаголовок /settings/log-settings добавлено пояснение «0 — записи хранятся бессрочно (очистка отключена)». Документация: новая секция «Хранение логов (retention)» в docs/guide/configuration.md (полная таблица ключей, дефолтов, диапазонов и семантики 0; нюанс retention_tool_outputs_days=0 — age-purge выключен, size-cap и orphan-очистка работают). Особые случаи: retention_refresh_tokens_days=0 — отозванные/истёкшие токены не удаляются никогда (активные и так защищены); retention_tool_outputs_days=0 — age-purge off, size-cap продолжает чистить каталог.