docs(task): A8 — installer must offer reinstall when Hub is already present

SetupEngine.IsInstalled is computed but never reaches the wizard UI, so the
first-install flow repeats verbatim on a machine that already has Hub. Adds the
reinstall screen, the mirror semantics it triggers, the list of user data that
must survive it, and a /reinstall silent flag.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Hermes Team 2026-08-22 21:20:12 +07:00
parent 20078f5ff6
commit 3c55d0c624

View file

@ -95,6 +95,38 @@ router/gui_server.py
Требуется точное зеркало источника: удалять файлы, которых нет в источнике, исключать `__pycache__`. **Тест:** развернуть, удалить файл из источника, развернуть снова, убедиться, что в цели его нет.
## P0-4bis. Установщик должен различать первую установку и переустановку
Требование владельца: если программа уже установлена, мастер обязан предлагать **переустановку**, а не повторять сценарий первой установки.
Сейчас `SetupEngine.IsInstalled` вычисляется (`HermesHubSetup.cs:86`), но **в интерфейсе не используется ни разу**. Мастер всегда показывает одни и те же экраны — «Добро пожаловать в установку» → «Параметры установки» → «Установить», — независимо от того, стоит Hub на машине или нет.
Требуется: при обнаружении установленной копии первый экран показывает её состояние и предлагает действия.
```
Hermes Hub уже установлен
Установленная версия : 0.1.0 (19.08.2026)
Версия в дистрибутиве: 0.1.1
[ Переустановить ] [ Удалить ] [ Отмена ]
```
**Переустановка** означает точное зеркало: файлы программы и плагина приводятся в соответствие дистрибутиву, а всё, чего в новой версии нет, — удаляется. Это тот же механизм, что и в P0-4, но вызванный явной кнопкой.
**Что удаляется:** устаревшие модули, файлы переименованных и перенесённых пакетов, `__pycache__`, скомпилированные остатки прошлых версий.
**Что обязано сохраниться:** `router_profiles.yaml`, каталоги профилей с авторизацией (`agy_profiles`, `codex_profiles`, `opengo_profiles` и аналогичные), `hub_settings.json`, журналы, состояние роутера и телеметрии. Пользовательские данные лежат отдельно от программных файлов — переустановка их не касается.
Перед удалением показать, что именно будет удалено, хотя бы количеством файлов. Молча стирать нельзя.
**Тихий режим:** добавить флаг `/reinstall` с тем же поведением и кодами возврата, что и у остальных режимов. Существующий `/repair` либо привести к этой же семантике, либо явно развести: сейчас он объявлен, но отличие от обычной установки не документировано.
**Тесты:**
1. В песочнице: развернуть версию A, удалить файл из источника, запустить переустановку версии B — файла в цели нет, остальные соответствуют источнику.
2. Пользовательские данные переживают переустановку: создать профиль с `auth.json`, `router_profiles.yaml` с правкой и `hub_settings.json`, переустановить, убедиться, что всё на месте и не изменилось.
3. Обнаружение установленной копии: при наличии `HermesHub.exe` мастер показывает экран переустановки, при отсутствии — обычный сценарий.
## P0-5. Команда самопроверки
Расширить `print_diagnostics_cli` до проверки, отвечающей на вопрос «работает ли Hub» **без запуска десктопа Hermes**: