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-opSELECT 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-commitfix end of filesтребует ровно один завершающий перевод строки, файлы соответствуют. Проверки:go test ./... -count=1,golangci-lint run ./...(0),go vet,make build-cross(6 платформ) — зелёные; фронт не менялся.