1.5.1

Fixed (#393)

  • Опечатка в PG-миграции 108 (108_usage_reasoning_tokens.up.sql:7): ALTER TABLE llm_request_log ADD COLUMN IF EXISTS ... вместо IF NOT EXISTS — невалидный синтаксис PostgreSQL (после IF грамматика ждёт NOT), из-за чего миграция физически не могла пройти ни на одном PG-инстансе. На прод-инстансе, обновлявшемся с v0.167.51 (схема 107) на v1.5.0, это обрушило миграции на старте: ошибка syntax error at or near "EXISTS" line 7, column 43 (слово EXISTS в строке 7 начинается ровно с 43-й колонки). Миграция становится идемпотентной; правка уже shipped-файла безопасна — golang-migrate контрольные суммы не хранит, а примениться успешно она нигде не могла.
  • runMigrations PG-стора (postgres.go) больше не глотает ошибку m.Up(): прежде WARN + m.Force(version) помечали упавшую миграцию применённой, и процесс поднимался со схемой, отставшей от кода, — каждый SELECT по agents/models падал SQLSTATE 42703 (нет колонок 109–116), GET /api/v1/agents отвечал 500 «failed to list agents», агент «пропадал». Теперь ошибка миграций фатальна для старта — как у SQLite-стора: инцидент виден сразу в journalctl, а не маскируется под работающий сервер. Восстановление пострадавшего инстанса (все миграции 108–116 идемпотентны): либо вручную добавить две колонки из 108 и перезапустить сервис (догонятся 109–116), либо после v1.5.1 выставить schema_migrations на 107 и обновиться штатно.
  • Регрессионный тест TestPGMigrationsNoAddColumnIfExists (migrations_test.go): во всех pgmigrations/*.sql запрещён паттерн ADD COLUMN IF EXISTS без NOT (ловит именно этот класс опечатки до попадания в PG-рантайм; корректное IF NOT EXISTS и валидное DROP COLUMN IF EXISTS не матчатся).