1.7.1

Fixed (#399)

  • PostgreSQL: ListLLMRequestLogs — Scan-рассинхрон с pgLLMRequestLogCols (19 колонок vs 18 приёмников: отсутствовал &e.ReasoningTokens) делал каждый запрос списка LLM-логов на PG/dual-store инстансах падающим с sql: expected 18 destination arguments in Scan, not 19GET /api/v1/admin/llm-log отвечал 500 «failed to read llm logs», страница /settings/llm-log не открывалась (#399; колонка reasoning_tokens добавлена в TokenUsage v2, миграции 108/117 — GetLLMRequestLog и SQLite-путь обновлялись, List на PG остался незамеченным: PG-тестовой инфраструктуры нет). Список приёмников вынесен в единый хелпер pgScanLLMRequestLog (общий для Get и List — рассинхрон конструкторски невозможен), регрессионный тест сверяет pgLLMRequestLogCols с полями LLMRequestLogEntry по количеству и порядку (json-теги 1:1 с колонками, по образцу guard-тестов mcp_pg_test.go). Хендлер llmlog.List/Get теперь логирует underlying-ошибку (slog.ErrorContext) перед 500 — на проде 03.09 между двумя 500 и следующим запросом в journal было пусто, причину было не видно.

Review (#399)

  • ocr review — 0 находок. Проверки: go test ./... -count=1, golangci-lint run ./internal/store/... ./internal/server/handler/... (0), go vet, make build-cross (6 платформ) — зелёные. Тест: TestPgLLMRequestLogCols_MatchEntryFields. Проверка «на проде /settings/llm-log открывается» — после деплоя релиза пользователем.