1.5.2

Fixed (#394)

  • Миграция-ремонт 117 repair_usage_reasoning_tokens (#394, хвост #393): добирает колонки llm_usage.reasoning_tokens / llm_request_log.reasoning_tokens на PG-инстансах, которые из-за сломанной миграции 108 (опечатка ADD COLUMN IF EXISTS + тихий Force в v1.5.0) обновились дальше без неё — у таких инстансов каждый LLM-запрос падал с ERROR llmlog db insert: столбец "reasoning_tokens" не существует (SQLSTATE 42703) и не писался лог LLM-запросов. PG-вариант идемпотентен (ADD COLUMN IF NOT EXISTS ... DEFAULT 0): на здоровых инстансах (108 применена штатно) — no-op, на свежих БД — no-op вслед за исправленной 108. SQLite-вариант — no-op SELECT 1; (опечатка была только в PG-файле, SQLite-инстанции 108 применили штатно; файл существует для парности номеров). Down-файлы — no-op: колонки принадлежат миграции 108, откат вводится её down-файлом.

Review (#394)

  • ocr review (несколько прогонов) — закрыты: medium «SELECT 1 вместо comment-only в SQLite no-op» (конвенция дерева: 051/062/070/080/104); medium «нет записи в CHANGELOG» (эта секция); low «неточная формулировка про IF NOT EXISTS в SQLite» (комментарий переформулирован без утверждения о поддержке синтаксиса); low «согласование “не нужно”» (опечатка). Отклонены с обоснованием: medium «тест ремонтного пути на синтетическом broken-PG» — PG-миграции невоспроизводимы в unit-тестах без живого PostgreSQL-сервера; класс опечатки закрыт TestPGMigrationsNoAddColumnIfExists, фактический эффект проверки — на инстансе после обновления (критерий готовности #394); low « не существует» — issue создан в Gitea (agaltsovav/taigaclaw#394), ревьюер искал только в кодовой базе; low «завершающая пустая строка» — pre-commit fix end of files требует ровно один завершающий перевод строки, файлы соответствуют. Проверки: go test ./... -count=1, golangci-lint run ./... (0), go vet, make build-cross (6 платформ) — зелёные; фронт не менялся.