1. Главное: ERR_CONNECTION_REFUSED в окне приложения.
browserProc.WaitForExit() возвращался МГНОВЕННО, когда Edge уже был
запущен: новый msedge.exe передаёт окно работающему экземпляру и сразу
завершается. Лаунчер считал, что окно закрыли, и убивал сервер, пока
страница ещё грузилась.
Браузер теперь запускается с отдельным профилем (--user-data-dir), то
есть процесс живёт столько же, сколько окно. Плюс подстраховка: выход
браузера быстрее пяти секунд не считается закрытием окна.
Та же ловушка была в Linux-лаунчере — исправлена там же.
Проверено вживую: сервер отвечает 200 И окно приложения живо
(«Hermes Hub — Панель управления»).
2. Установщик по галочке «Запустить сейчас» открывал ДЕСКТОП. Владелец
получал десктопное окно и принимал его за старую версию — внешне оно
и правда другое. Теперь запускается веб-интерфейс, подпись галочки
уточнена. Десктоп остаётся доступен своим ярлыком.
Тесты: 373 passed, ruff чисто. Установщик пересобран.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Три дефекта, найденные при установке владельцем на две машины.
1. Linux: лаунчер писал «Web server failed to respond», хотя сервер
поднимался нормально — в логе старт API, планировщик квот и прогрев
кэша без ошибок. Причина в самой проверке: sys импортировался ТОЛЬКО
внутри except, а использовался в успешной ветке. На здоровом ответе
возникал NameError, его ловил тот же except, и проверка всегда
возвращала отказ.
Доказано исполнением на живом сервере: старая логика -> код 1,
новая -> код 0.
2. Windows: при нечитаемом манифесте мастер показывал зашитые
InstalledVersion = "0.1.0" и InstalledDate = "19.08.2026" как факт.
Владелец видел «старую версию» на свежей установке, хотя проверка
показала правильный путь и версию 0.1.1. Заглушки заменены на
«не определена» — выдуманный факт хуже отсутствующего.
3. Манифест писался одним File.WriteAllText: прерванная запись оставляла
пустой файл, и разбор версии падал на первом символе — ровно это и
случилось у владельца (JSONDecodeError, char 0). Запись переведена на
временный файл с переносом.
Попутно: git_commit в манифесте был зашит как "8cddc9f", то есть манифест
сообщал неправду о происхождении сборки. Теперь сборщик проставляет
фактический коммит.
Тесты: 373 passed, ruff чисто. Установщик пересобран.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>