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, лаунчер идёт дальше молча
Отклонения от плана
Задача просила останавливать запуск при любой неудачной миграции. При проверке выяснилось, что это заблокировало бы обычное переключение веток назад, поэтому случай «база новее ветки» выделен и запуск в нём не прерывается.
## Что сделано
`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
Ветка задачи может принести миграцию, а 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
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Что сделано
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.12>&1на нативном exe заворачивает каждую строку вErrorRecordи сбивает$?, поэтому проверять успех через$?здесь нельзя.run.ps1остался строго ASCII, как требует CLAUDE.md.Коммиты
763745aDev-лаунчер: применять миграции перед стартомПроверки
run.ps1— разбор[System.Management.Automation.Language.Parser]::ParseFileбез ошибок, файл ASCII (fileподтверждает)run.sh—bash -nбез ошибок0012, а ветка отdevэтой ревизии не содержит): код возврата ≠ 0, ветка предупреждения срабатывает, запуск продолжаетсяalembic upgrade head→ код 0, лаунчер идёт дальше молчаОтклонения от плана
Задача просила останавливать запуск при любой неудачной миграции. При проверке выяснилось, что это заблокировало бы обычное переключение веток назад, поэтому случай «база новее ветки» выделен и запуск в нём не прерывается.
Closes #36
🤖 Generated with Claude Code
https://claude.ai/code/session_01BoiJK9ux8peeyjLb8TYjFf