WEB-091 · Дефект · Инфраструктура · web
P0 ДЛЯ ПЕРЕЕЗДА: набор миграций НЕ поднимает боевую БД с нуля — две миграции gated по имени БД, третья оставляет схему расходящейся (приложение отдаёт 500)
Закрыт
P0 · горит
ведёт: backup-opus
Суть
## Найдено 21.08 репетицией переезда (волна gate514, отчёт A1 ~/waves/GATE514-REPORT.md §5)
Разворачивали боевой артефакт на ЧИСТУЮ БД (nc_candidate) — ровно как будет на новом хосте. Результат: с нуля БД НЕ собирается.
### 5.1 (обходится, но в рунбук): миграции 20251212121830_rag_v2_5_init и …_fts делают CREATE EXTENSION vector / pg_trgm — нужен superuser. «permission denied to create extension vector». Для целевого Postgres: pgvector должен быть УСТАНОВЛЕН (у managed-провайдеров часто нет или allowlist) + superuser на этапе создания БД.
### 5.2 БЛОКЕР: две миграции gated ПО ИМЕНИ БД — «Meeting Rooms voice baseline migration is local/test/proof gated; current database: nc_candidate». То есть на любой БД с «неправильным» именем накат падает. Это тот же класс, что proof-БД на A1 (nc_migration_proof, meeting_rooms_migration_proof_*): гейт писался под доказательные прогоны и остался в боевом наборе.
### 5.3 БЛОКЕР: после наката схема РАСХОДИТСЯ с ожиданиями приложения — без ручной починки приложение отдаёт 500 (в замере это шаг 1.9).
## Почему P0: это блокирует ГЕЙТ 5 и ГЕЙТ 14 миграции и делает невозможным честный restore на чистом хосте (а именно им проверяется RTO). Пока не починено — «восстановление из бэкапа» доказуемо только на БД со старым именем.
## Фикс: (а) снять gating по имени БД (или перевести на явный env-флаг, который в проде выключен); (б) довести набор миграций до состояния «чистая БД → рабочее приложение без ручных правок»; (в) добавить в CI прогон «с нуля на чистой БД» — иначе регрессия вернётся; (г) в рунбук переезда: требование pgvector + superuser на этапе createdb.
## Трейл: эпик WEB-282; гейты WEB-082 (5/14); замеры репетиции — та же таблица отчёта; proof-БД прошлых репетиций на A1.
## 21.08 ~12:40 ЗАКРЫТ (волна migfix, коммит 62f492e2): боевая БД снова строится из цепочки миграций; добавлен fresh-db-check (создать БД со случайным именем → накатить → поднять приложение → дропнуть). Вместе с этим закрыты WEB-092 (указатели релиза перестали врать) и WEB-071 (флаг invite реально закрывает дверь).
Ветка archp0/fcsrc2/migfix от посадки-30 (23e0b944), worktree на A1. Отчёты: ~/waves/ARCHP0-REPORT.md, FCSRC2-REPORT.md, MIGFIX-REPORT.md.
## 21.08 — ВЫЕХАЛО НА ПРОД
**Посадка 30 состоялась 21.08 03:53 IST.** serving = `v4-504af77f`, релиз `arm64-504af77f-20260821T025311Z`, артефакт sha `a0afc41415db60377aeb4cf399d91b98a4c407217fc8839b0b1369a2542af362`, аттестация v18. Проверено после переключения: `active`, `NRestarts=0`, `paidReady=true`, `posture=enforce_ready`, `mode=enforce`, `failures=[]`, фатальных строк boot-контракта **0**, секрет сторожа файл≡процесс (`cbabe4a2b16008e3`), nft переприменены, канон проштампован (`CANON.json: serving=504af77f marker=v4-504af77f`).
Проверка байтов релиза и живая проба выполнены после переключения; подробный трейл посадки — в WEB-282.
---
## 23.08.2026 A1 — WEB091_FRESHDB_GREEN
Проверка выполнена локально на `/home/ubuntu/waves/wt-web091`, commit `26116cff032ad8f015e1e2d9cba302e1e8f7ec27`, branch `agent/web091-freshdb-20260823`. Production не трогался.
- Изолированный PostgreSQL 16.14: `127.0.0.1:55491`, Docker отсутствует; занятые `5432/5440` не использовались.
- Исходный `prisma migrate deploy` на `web091_freshdb`: rc=0, 120/120 миграций. В требуемом commit две name-gates уже сняты ранее (`20260425110000_voice_core_baseline`, `20260502130000_meeting_rooms_core`).
- Исходный строгий `prisma migrate diff --from-url ... --to-schema-datamodel`: rc=2; оставался reverse drift (legacy columns/indexes, defaults, FK ON UPDATE).
- Добавлены forward migrations `20260823090000_web091_fresh_db_schema_exact` и `20260823090100_web091_fresh_db_schema_guard`; старые migration-файлы не переписывались.
- Acceptance: `web091_clean_1` и `web091_clean_2` с DROP/CREATE — `migrate deploy rc=0`, 122 migrations, strict diff `rc=0`, `No difference detected.`
- Negative: exact-fix удалён только во временной копии migrations → `migrate deploy rc=1`, `P3018`, SQLSTATE `P0001`, exact error: `WEB-091 fresh schema alignment missing: legacy AgentTask.notebookId remains`.
- Populated-like safety check: deploy rc=0; legacy column and existing User row preserved.
Полный отчёт: `/home/ubuntu/waves/WEB091-REPORT.md`.
WEB091_FRESHDB_GREEN
## 23.08 — WEB091_FRESHDB_GREEN: две DB-name gates УЖЕ сняты в 62f492e2 (в serving 26116cff)
- Волна web091 на чистой БД: полный prisma migrate deploy на 26116cff — двух исходных gated-по-имени миграций уже НЕТ (сняты ранее вошедшим 62f492e2). Fresh-DB поднимается.
- Отчёт: A1 ~/home/ubuntu/waves/WEB091-REPORT.md. P0 переезда снят.
Починено в
26116cff
Воркер
не привязан — привязать:
curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \
-d '{"issueId":"WEB-091","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-08-23T06:51:12.048Z