Dev-лаунчер стартует на старой схеме БД — миграции не применяются (#36) #37

Merged
NotBigGhost merged 1 commits from issue-36-dev-launcher-migrations into dev 2026-09-09 20:03:39 +03:00
Collaborator

Что сделано

run.ps1 и run.sh в режиме development теперь применяют alembic upgrade head перед запуском uvicorn. Раньше после переключения на ветку с новой миграцией приложение поднималось на старой схеме и падало 500 на первом обращении к новой таблице — ровно это случилось с 0012_match_finish_draft из #28: создание партии отвечало no such table: match_finish_drafts. В test/prod проблемы нет, там схему накатывает entrypoint.sh контейнера.

Отдельно разобран обратный случай — база новее ветки. После возврата с ветки задачи alembic не находит ревизию, которой в этой ветке ещё нет, и падает с «Can't locate revision». Останавливать запуск здесь не за что: лишние таблицы старому коду не мешают. Такой случай теперь распознаётся по тексту ошибки, печатается предупреждение, и запуск продолжается. Настоящая ошибка миграции по-прежнему останавливает старт — на старой схеме приложение работать не должно.

Мелочь, которая стоила проверки: stderr alembic в run.ps1 уводится во временный файл, а решение принимается по $LASTEXITCODE. В Windows PowerShell 5.1 2>&1 на нативном exe заворачивает каждую строку в ErrorRecord и сбивает $?, поэтому проверять успех через $? здесь нельзя. run.ps1 остался строго ASCII, как требует CLAUDE.md.

Коммиты

  • 763745a Dev-лаунчер: применять миграции перед стартом

Проверки

  • run.ps1 — разбор [System.Management.Automation.Language.Parser]::ParseFile без ошибок, файл ASCII (file подтверждает)
  • run.sh — bash -n без ошибок
  • Сценарий «база новее ветки» проверен на живой dev-базе (она сейчас на 0012, а ветка от dev этой ревизии не содержит): код возврата ≠ 0, ветка предупреждения срабатывает, запуск продолжается
  • Сценарий обычного применения проверен на чистой временной базе: alembic upgrade head → код 0, лаунчер идёт дальше молча

Отклонения от плана

Задача просила останавливать запуск при любой неудачной миграции. При проверке выяснилось, что это заблокировало бы обычное переключение веток назад, поэтому случай «база новее ветки» выделен и запуск в нём не прерывается.

Closes #36

🤖 Generated with Claude Code

https://claude.ai/code/session_01BoiJK9ux8peeyjLb8TYjFf

## Что сделано `run.ps1` и `run.sh` в режиме `development` теперь применяют `alembic upgrade head` перед запуском `uvicorn`. Раньше после переключения на ветку с новой миграцией приложение поднималось на старой схеме и падало 500 на первом обращении к новой таблице — ровно это случилось с `0012_match_finish_draft` из #28: создание партии отвечало `no such table: match_finish_drafts`. В test/prod проблемы нет, там схему накатывает `entrypoint.sh` контейнера. Отдельно разобран обратный случай — **база новее ветки**. После возврата с ветки задачи alembic не находит ревизию, которой в этой ветке ещё нет, и падает с «Can't locate revision». Останавливать запуск здесь не за что: лишние таблицы старому коду не мешают. Такой случай теперь распознаётся по тексту ошибки, печатается предупреждение, и запуск продолжается. Настоящая ошибка миграции по-прежнему останавливает старт — на старой схеме приложение работать не должно. Мелочь, которая стоила проверки: stderr alembic в `run.ps1` уводится во временный файл, а решение принимается по `$LASTEXITCODE`. В Windows PowerShell 5.1 `2>&1` на нативном exe заворачивает каждую строку в `ErrorRecord` и сбивает `$?`, поэтому проверять успех через `$?` здесь нельзя. `run.ps1` остался строго ASCII, как требует CLAUDE.md. ## Коммиты - `763745a` Dev-лаунчер: применять миграции перед стартом ## Проверки - `run.ps1` — разбор `[System.Management.Automation.Language.Parser]::ParseFile` без ошибок, файл ASCII (`file` подтверждает) - `run.sh` — `bash -n` без ошибок - Сценарий «база новее ветки» проверен на живой dev-базе (она сейчас на `0012`, а ветка от `dev` этой ревизии не содержит): код возврата ≠ 0, ветка предупреждения срабатывает, запуск продолжается - Сценарий обычного применения проверен на чистой временной базе: `alembic upgrade head` → код 0, лаунчер идёт дальше молча ## Отклонения от плана Задача просила останавливать запуск при любой неудачной миграции. При проверке выяснилось, что это заблокировало бы обычное переключение веток назад, поэтому случай «база новее ветки» выделен и запуск в нём не прерывается. Closes #36 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01BoiJK9ux8peeyjLb8TYjFf
Agent added 1 commit 2026-09-09 20:01:10 +03:00
Ветка задачи может принести миграцию, а run.ps1/run.sh сразу запускали uvicorn:
приложение поднималось на старой схеме и падало 500 на первом обращении к новой
таблице. Так вышло с 0012_match_finish_draft — создание партии отвечало «no such
table: match_finish_drafts». В test/prod такого нет, там схему накатывает
entrypoint.sh контейнера.

Отдельно разобран случай «база новее ветки»: после возврата с ветки задачи alembic
не находит ревизию, которой в этой ветке ещё нет. Останавливать запуск тут не за
что — лишние таблицы старому коду не мешают, поэтому печатаем предупреждение и
идём дальше. Настоящая ошибка миграции по-прежнему останавливает запуск.

stderr alembic в run.ps1 уводится в файл: в Windows PowerShell 5.1 «2>&1» на
нативном exe заворачивает каждую строку в ErrorRecord, а решение принимается по
коду возврата. run.ps1 остался строго ASCII.

#36

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BoiJK9ux8peeyjLb8TYjFf
NotBigGhost merged commit 2986a58ef1 into dev 2026-09-09 20:03:39 +03:00
NotBigGhost deleted branch issue-36-dev-launcher-migrations 2026-09-09 20:03:39 +03:00
Sign in to join this conversation.