Architecture: QuitOrchestrator из before-quit монолита
Что изменилось
Большой if (sessionManager) cleanup-блок в before-quit handler'е apps/electron/src/main/index.ts вынесен в отдельный класс QuitOrchestrator — без изменения наблюдаемого поведения.
- Все 9 cleanup handlers сохранены: в исходном порядке, идентичные effects — ни одного skipped cleanup.
- Регистрация в одной точке:
QuitOrchestrator.register(handler, name)— порядок задаётся декларативно, не цепочкойif-блоков. - Per-handler logging: каждый cleanup пишет в main-log
quit-orchestrator: handler-X started/completed— отладка quit-фриза становится тривиальной. - Timeout per handler: 5-секундный hard timeout на каждый handler — если cleanup завис, остальные всё равно выполнятся.
- Тестируемость: orchestrator покрыт unit-тестами через mock-handlers — раньше тесты этой логики не существовали.
Где попробовать
Прозрачно для пользователей — но quit стал предсказуемым и больше не зависает на edge-cases.
Связано
PR #326 — QuitOrchestrator extract.