0.137.1

Fixed

  • **Ошибка «отношение reindex_jobs не существует» на PostgreSQL **: в internal/store/pgmigrations/ отсутствовали PG-порты миграций 075 (индексы messages.user_id, audit_log.action, audit_log.resource_type), 076 (oauth_sessions.ip_fingerprint) и 077 (таблица reindex_jobs). PG-набор прыгал 074→078, поэтому на PostgreSQL эти объекты никогда не создавались → GetActiveReindexJob падал с SQLSTATE 42P01 на каждом запросе статуса переиндексации (страница «Расширенные настройки»). Добавлены PG-миграции 075/076/077 (перевод SQLite-схемы на BIGSERIAL/TIMESTAMPTZ) + миграция 084_pg_backfill_missing_objects (идемпотентный IF NOT EXISTS) для самоисцеления уже развёрнутых PG-БД (где schema_migrations = 83, и миграции 075-077 не применятся мигратором). Для паритета номеров 1:1 добавлены SQLite-аналоги 084 (no-op, т.к. SQLite не имел разрыва).
  • **Спам поллингом статуса переиндексации **: фронт каждые 2с опрашивал /admin/embeddings/reindex/status и при ошибке не останавливался — текст ошибки мерцал (то появлялся, то пропадал). Теперь при первой же ошибке поллинг останавливается (pollingStopped=true), тихий опрос (pollTick) не сбрасывает error/loading перед запросом (убирает мерцание). Добавлена кнопка «Повторить» в блоке ошибки и метод retry().
  • Защитная обработка PG-ошибки 42P01 в хендлерах переиндексации: Status/Jobs/Cancel при отсутствии таблицы reindex_jobs отвечают idle-200 (вместо 500), чтобы UI не ломался до применения миграции. Добавлен store.IsUndefinedTableError(err) (детект pgconn.PgError Code 42P01).

Changed

  • Partial unique index uniq_active_reindex_job переведён на константу (1) (вместо status): индекс на status запрещал лишь дубликаты с одинаковым статусом, но не два разных активных job (pending+running после краха процесса). Константа (1) гарантирует максимум один active job на уровне БД (defense-in-depth). Исправлено в 077 (SQLite+PG) и 084 (backfill).
  • TestPGMigrationFilesExist усилен: добавлена проверка в обратном направлении (каждая SQLite-миграция должна иметь PG-аналог) — регресс с пропуском 075-077 теперь ловится в CI.
  • 084_pg_backfill: SET LOCAL statement_timeout = 0 перед CREATE INDEX — снимает 5-минутный лимит пула, чтобы индексация больших messages/audit_log в проде не оставила миграцию dirty.