Починен запуск dev на Windows: накат миграций, добавленный в #36, обрывал run.ps1.
Что происходило. Alembic пишет свои INFO в stderr. Windows PowerShell 5.1 при любом перенаправлении stderr нативного exe превращает каждую строку в ErrorRecord → NativeCommandError. В начале скрипта стоит $ErrorActionPreference = "Stop" (строка 15), поэтому такая ошибка — терминирующая: лаунчер умирал прямо на миграциях, uvicorn и vite не стартовали. Воспроизвёл: управление уходит в catch.
Отдельно неприятно, что комментарий в прежнем коде предупреждал ровно про эту ловушку у 2>&1 — а перенаправление в файл наступает на неё точно так же.
Как исправлено. Alembic запускается через Start-Process с редиректом обоих потоков в файлы и -Wait -PassThru: его stderr вообще не проходит через поток ошибок PowerShell, а решение принимается по ExitCode. Логика осталась прежней — обычная неудача миграции останавливает запуск, «база новее ветки» лишь печатает предупреждение.
run.sh не трогал: в bash перенаправление stderr обычное, там проблемы нет.
Коммиты
29a0e17 run.ps1: запускать alembic так, чтобы stderr не убивал скрипт
Проверки
Блок прогнан ровно в условиях лаунчера ($ErrorActionPreference = "Stop"):
обычная база → код 0, выполнение продолжается, вывод alembic перехвачен и в консоль не сыплется;
база с ревизией, которой нет в ветке → код ≠ 0, случай распознан как «база новее», запуск продолжается;
до фикса тот же блок с 2> файл уходил в catch — то есть скрипт прерывался;
run.ps1 — разбор Parser::ParseFile без ошибок, файл остался строго ASCII.
## Что сделано
Починен запуск dev на Windows: накат миграций, добавленный в #36, обрывал `run.ps1`.
**Что происходило.** Alembic пишет свои `INFO` в stderr. Windows PowerShell 5.1 при **любом** перенаправлении stderr нативного exe превращает каждую строку в `ErrorRecord` → `NativeCommandError`. В начале скрипта стоит `$ErrorActionPreference = "Stop"` (строка 15), поэтому такая ошибка — терминирующая: лаунчер умирал прямо на миграциях, uvicorn и vite не стартовали. Воспроизвёл: управление уходит в `catch`.
Отдельно неприятно, что комментарий в прежнем коде предупреждал ровно про эту ловушку у `2>&1` — а перенаправление в файл наступает на неё точно так же.
**Как исправлено.** Alembic запускается через `Start-Process` с редиректом обоих потоков в файлы и `-Wait -PassThru`: его stderr вообще не проходит через поток ошибок PowerShell, а решение принимается по `ExitCode`. Логика осталась прежней — обычная неудача миграции останавливает запуск, «база новее ветки» лишь печатает предупреждение.
`run.sh` не трогал: в bash перенаправление stderr обычное, там проблемы нет.
## Коммиты
- `29a0e17` run.ps1: запускать alembic так, чтобы stderr не убивал скрипт
## Проверки
Блок прогнан ровно в условиях лаунчера (`$ErrorActionPreference = "Stop"`):
- обычная база → код 0, выполнение продолжается, вывод alembic перехвачен и в консоль не сыплется;
- база с ревизией, которой нет в ветке → код ≠ 0, случай распознан как «база новее», запуск продолжается;
- до фикса тот же блок с `2> файл` уходил в `catch` — то есть скрипт прерывался;
- `run.ps1` — разбор `Parser::ParseFile` без ошибок, файл остался строго ASCII.
## Отклонения от плана
Нет.
Closes #45
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01BoiJK9ux8peeyjLb8TYjFf
Накат миграций из #36 обрывал запуск dev на Windows. Alembic пишет свои INFO в
stderr, а Windows PowerShell 5.1 при любом перенаправлении stderr нативного exe
превращает каждую строку в NativeCommandError. В начале скрипта стоит
$ErrorActionPreference = "Stop", поэтому ошибка терминирующая: лаунчер умирал
прямо на миграциях, uvicorn и vite не стартовали.
Комментарий в прежнем коде предупреждал про эту ловушку у "2>&1", но перенаправление
в файл наступает на неё ровно так же — проверено воспроизведением, управление
уходит в catch.
Теперь alembic запускается через Start-Process с редиректом обоих потоков в файлы:
его stderr вообще не проходит через поток ошибок PowerShell, решение принимается по
ExitCode. Оба сценария проверены в тех же условиях (ErrorActionPreference = Stop):
обычное применение — код 0, база новее ветки — распознаётся и запуск продолжается.
#45
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.
Что сделано
Починен запуск dev на Windows: накат миграций, добавленный в #36, обрывал
run.ps1.Что происходило. Alembic пишет свои
INFOв stderr. Windows PowerShell 5.1 при любом перенаправлении stderr нативного exe превращает каждую строку вErrorRecord→NativeCommandError. В начале скрипта стоит$ErrorActionPreference = "Stop"(строка 15), поэтому такая ошибка — терминирующая: лаунчер умирал прямо на миграциях, uvicorn и vite не стартовали. Воспроизвёл: управление уходит вcatch.Отдельно неприятно, что комментарий в прежнем коде предупреждал ровно про эту ловушку у
2>&1— а перенаправление в файл наступает на неё точно так же.Как исправлено. Alembic запускается через
Start-Processс редиректом обоих потоков в файлы и-Wait -PassThru: его stderr вообще не проходит через поток ошибок PowerShell, а решение принимается поExitCode. Логика осталась прежней — обычная неудача миграции останавливает запуск, «база новее ветки» лишь печатает предупреждение.run.shне трогал: в bash перенаправление stderr обычное, там проблемы нет.Коммиты
29a0e17run.ps1: запускать alembic так, чтобы stderr не убивал скриптПроверки
Блок прогнан ровно в условиях лаунчера (
$ErrorActionPreference = "Stop"):2> файлуходил вcatch— то есть скрипт прерывался;run.ps1— разборParser::ParseFileбез ошибок, файл остался строго ASCII.Отклонения от плана
Нет.
Closes #45
🤖 Generated with Claude Code
https://claude.ai/code/session_01BoiJK9ux8peeyjLb8TYjFf