run.ps1 обрывается на миграциях: NativeCommandError при ErrorActionPreference = Stop (#45) #46

Merged
NotBigGhost merged 1 commits from issue-45-runps1-migration-stderr into dev 2026-09-09 20:57:37 +03:00
Collaborator

Что сделано

Починен запуск 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.ai/code/session_01BoiJK9ux8peeyjLb8TYjFf

## Что сделано Починен запуск 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
Agent added 1 commit 2026-09-09 20:56:55 +03:00
Накат миграций из #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
NotBigGhost merged commit aabcc106d3 into dev 2026-09-09 20:57:37 +03:00
NotBigGhost deleted branch issue-45-runps1-migration-stderr 2026-09-09 20:57:38 +03:00
Sign in to join this conversation.