Причина. Alembic пишет свои INFO в stderr. В Windows PowerShell 5.1 перенаправление stderr нативного exe (2> файл) заворачивает каждую строку в ErrorRecord → NativeCommandError. В run.ps1 на строке 15 стоит $ErrorActionPreference = "Stop", поэтому такая ошибка терминирующая: скрипт прерывается прямо на миграциях, uvicorn и vite не стартуют. Проверено воспроизведением — управление уходит в catch.
Ирония в том, что комментарий в коде предупреждает ровно про эту ловушку у 2>&1, но 2> файл наступает на неё точно так же.
Что нужно: запускать alembic так, чтобы его stderr вообще не проходил через поток ошибок PowerShell — например, Start-Process ... -RedirectStandardOutput/-RedirectStandardError -Wait -PassThru и проверка ExitCode. Проверено: оба сценария (обычное применение и «база новее ветки») отрабатывают без обрыва и с корректным кодом возврата.
run.sh не затронут: в bash перенаправление stderr обычное.
Добавленный в #36 накат миграций ломает запуск dev на Windows.
```
Applying migrations (alembic upgrade head)...
python.exe : INFO [alembic.runtime.migration] Context impl SQLiteImpl.
C:\Users\ivan\ForbidenStarsApp\run.ps1:92 знак:9
+ & $py -m alembic upgrade head 2> $migLog
+ CategoryInfo : NotSpecified: (INFO [alembic....mpl SQLiteImpl.:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
```
**Причина.** Alembic пишет свои `INFO` в stderr. В Windows PowerShell 5.1 перенаправление stderr нативного exe (`2> файл`) заворачивает каждую строку в `ErrorRecord` → `NativeCommandError`. В `run.ps1` на строке 15 стоит `$ErrorActionPreference = "Stop"`, поэтому такая ошибка **терминирующая**: скрипт прерывается прямо на миграциях, uvicorn и vite не стартуют. Проверено воспроизведением — управление уходит в `catch`.
Ирония в том, что комментарий в коде предупреждает ровно про эту ловушку у `2>&1`, но `2> файл` наступает на неё точно так же.
**Что нужно:** запускать alembic так, чтобы его stderr вообще не проходил через поток ошибок PowerShell — например, `Start-Process ... -RedirectStandardOutput/-RedirectStandardError -Wait -PassThru` и проверка `ExitCode`. Проверено: оба сценария (обычное применение и «база новее ветки») отрабатывают без обрыва и с корректным кодом возврата.
`run.sh` не затронут: в bash перенаправление stderr обычное.
Обнаружено при запуске стенда после мёржа #37.
Agent
added this to the v1.35 - промежуточная полировка версии 1.3 milestone 2026-09-09 20:55:43 +03:00
Agent
self-assigned this 2026-09-09 20:55:47 +03:00
Итог: alembic запускается через Start-Process с редиректом обоих потоков в файлы — его stderr больше не проходит через поток ошибок PowerShell, а решение принимается по ExitCode. Логика прежняя: настоящая неудача миграции останавливает запуск, «база новее ветки» лишь печатает предупреждение.
Проверки (в тех же условиях, что в лаунчере, с $ErrorActionPreference = "Stop"): обычная база — код 0 и запуск продолжается; база с чужой ревизией — код ≠ 0, случай распознан, запуск продолжается; до фикса тот же блок уходил в catch, то есть скрипт прерывался. run.ps1 остался строго ASCII, разбор парсером без ошибок.
Статус:Status/In Review Осталось за вами: влить PR и перезапустить .\run.ps1 — стенд должен подняться штатно.
Работа выполнена, открыт PR: https://gitea.arseniev.info/NotBigGhost/ForbiddenStarsApp/pulls/46
**Итог:** alembic запускается через `Start-Process` с редиректом обоих потоков в файлы — его stderr больше не проходит через поток ошибок PowerShell, а решение принимается по `ExitCode`. Логика прежняя: настоящая неудача миграции останавливает запуск, «база новее ветки» лишь печатает предупреждение.
**Проверки** (в тех же условиях, что в лаунчере, с `$ErrorActionPreference = "Stop"`): обычная база — код 0 и запуск продолжается; база с чужой ревизией — код ≠ 0, случай распознан, запуск продолжается; до фикса тот же блок уходил в `catch`, то есть скрипт прерывался. `run.ps1` остался строго ASCII, разбор парсером без ошибок.
**Статус:** `Status/In Review`
**Осталось за вами:** влить PR и перезапустить `.\run.ps1` — стенд должен подняться штатно.
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.
Добавленный в #36 накат миграций ломает запуск dev на Windows.
Причина. Alembic пишет свои
INFOв stderr. В Windows PowerShell 5.1 перенаправление stderr нативного exe (2> файл) заворачивает каждую строку вErrorRecord→NativeCommandError. Вrun.ps1на строке 15 стоит$ErrorActionPreference = "Stop", поэтому такая ошибка терминирующая: скрипт прерывается прямо на миграциях, uvicorn и vite не стартуют. Проверено воспроизведением — управление уходит вcatch.Ирония в том, что комментарий в коде предупреждает ровно про эту ловушку у
2>&1, но2> файлнаступает на неё точно так же.Что нужно: запускать alembic так, чтобы его stderr вообще не проходил через поток ошибок PowerShell — например,
Start-Process ... -RedirectStandardOutput/-RedirectStandardError -Wait -PassThruи проверкаExitCode. Проверено: оба сценария (обычное применение и «база новее ветки») отрабатывают без обрыва и с корректным кодом возврата.run.shне затронут: в bash перенаправление stderr обычное.Обнаружено при запуске стенда после мёржа #37.
Работа выполнена, открыт PR: #46
Итог: alembic запускается через
Start-Processс редиректом обоих потоков в файлы — его stderr больше не проходит через поток ошибок PowerShell, а решение принимается поExitCode. Логика прежняя: настоящая неудача миграции останавливает запуск, «база новее ветки» лишь печатает предупреждение.Проверки (в тех же условиях, что в лаунчере, с
$ErrorActionPreference = "Stop"): обычная база — код 0 и запуск продолжается; база с чужой ревизией — код ≠ 0, случай распознан, запуск продолжается; до фикса тот же блок уходил вcatch, то есть скрипт прерывался.run.ps1остался строго ASCII, разбор парсером без ошибок.Статус:
Status/In ReviewОсталось за вами: влить PR и перезапустить
.\run.ps1— стенд должен подняться штатно.