May 20th, 2026

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.