hermes-hub/agents/inbox/2026-08-31-A41-clean-first-install.md
Hermes Team e6bbd60a36 docs(agents): задание A41 — чистая конфигурация при первой установке
Установка на Windows упала с кодом 12, и причина была не в новом коде, а в
накопленном состоянии: конфигурация тащила роль под старым именем, роли без
цепочек и 24 пустых заготовки, переживших несколько переименований. Проверка
споткнулась о наследие.

Владелец сформулировал вывод: при первой установке всё должно начинаться с
нуля — сначала аккаунты, потом распределение по агентам.

Задание разводит два случая: конфигурации нет — первая установка, профилей не
создаётся вовсе; конфигурация есть — обновление, ничего не трогается. Плюс
явная кнопка сброса с подтверждением и резервной копией.

Отдельным пунктом, из-за цены ошибки: сброс касается только маршрутизации.
Каталог agy_profiles не затрагивается ни при каких условиях — потеря учётных
данных означает повторный ручной вход в два десятка аккаунтов, включая
Antigravity со входом по ссылке для каждого профиля.

Требуется также прогнать проверочный скрипт установщика на ПУСТОЙ
конфигурации: он этого случая никогда не видел, у него всегда было 24
профиля, и падение на чистой машине дало бы тот же код 12 новому
пользователю.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-31 02:07:19 +07:00

11 KiB
Raw Blame History

Задание A41: чистая конфигурация при первой установке

Дата поступления

2026-08-31

База

origin/main (380c218) — там уже слиты A34A39 и правки ревьюера.

git fetch origin --prune
git checkout -b antigravity/a41-clean-first-install origin/main

В main напрямую не пушить.

Порядок исполнения

Два прохода: Flash реализует, Pro проводит аудит. Пункт P0-5 написан для аудитора.


Задача

Владелец: «при первой установке всё должно быть сброшено по умолчанию, и настройка идёт с нуля. Как внёс аккаунты, потом распределяешь. Чтобы не было таких ошибок».

Повод конкретный. Сегодня установка на Windows упала с кодом 12, и причина была не в новом коде, а в накопленном состоянии: конфигурация тащила роль под старым именем, роли без цепочек и два десятка пустых заготовок, переживших несколько переименований. Проверка споткнулась о наследие.

Что известно проверенно

get_default_router_config() создаёт 24 профиля:
    antigravity 10, openai-codex 3, opencode-go 3, claude 3, grok 3, local 2

из них у владельца реально подключены единицы; остальные показывались как
«Аккаунт не добавлен» и «Холодный резерв», пока A26 не убрал их с экрана

install-linux.sh: «Preserving existing user router_profiles.yaml»
учётные данные лежат ОТДЕЛЬНО, в ~/.hermes/agy_profiles/, вне каталога плагина

Последнее — ключевое для этого задания, см. P0-2.


P0-1. Первая установка начинается с пустого листа

Различать два случая и вести себя по-разному:

Конфигурации нет — это первая установка. Не создавать 24 заготовки. Роли из реестра объявлены, но цепочки пусты, профилей нет вовсе. Интерфейс показывает состояние «аккаунтов нет» и предлагает подключить первый.

Конфигурация есть — это обновление. Ничего не трогать, как сейчас. У владельца на трёх машинах живут настроенные цепочки, и молчаливый сброс недопустим.

Различать по наличию файла, а не по версии: версия в проекте заморожена на 0.1.1 намеренно.

P0-2. Учётные данные не трогать никогда

Отдельным пунктом, потому что цена ошибки высока.

Сброс касается только конфигурации маршрутизации: router_profiles.yaml. Каталог ~/.hermes/agy_profiles/ и содержимое hub_settings.json в части токенов не затрагиваются ни при каких условиях.

Потеря учётных данных означает повторный вход в два десятка аккаунтов, включая Antigravity, где вход идёт по ссылке с возвратом и делается вручную для каждого профиля. Это часы работы владельца.

Защита каталогов учётных данных уже реализована в A37 (security_guard.py) — использовать её, а не писать вторую.

P0-3. Профили появляются вместе с аккаунтами

Продолжение линии A26: аккаунты вместо слотов.

  1. Подключение аккаунта создаёт профиль. Заранее заготовленных пустых профилей быть не должно.
  2. Идентификатор выдаётся сам, как уже сделано в A26 (codex-4, codex-5 и далее). Владелец про них знать не обязан.
  3. Роль получает аккаунт, когда владелец его назначил или нажал «Авто». До этого цепочка пуста, и это нормальное состояние, а не ошибка.

P0-4. Явный сброс по кнопке

В «Настройках» — «Начать настройку заново».

  1. Спрашивает подтверждение и прямо перечисляет, что будет удалено, а что сохранено. Учётные данные — в списке сохраняемого.
  2. Чистит цепочки ролей и профили, не трогая аккаунты.
  3. Резервная копия перед сбросом, чтобы ошибочное нажатие можно было отменить. Механизм резервных копий конфигурации в проекте уже есть.
  4. После сброса хаб работоспособен: интерфейс открывается, показывает пустое состояние, предлагает подключить аккаунт.

P0-5. Проверки установщика не должны зависеть от расстановки

Сегодняшняя поломка возникла именно здесь, и это надо закрыть на будущее.

scripts/verify_multi_provider_router.py уже переписан ревьюером: имя оркестрирующей роли спрашивается у реестра, пустые цепочки допустимы у ролей без аккаунтов, отказоустойчивость проверяется по механизму, а не по зашитому порядку.

Требуется убедиться, что скрипт проходит на пустой конфигурации первой установки. Сейчас он этого случая не видел: у него всегда было 24 профиля. Проверка, падающая на чистой машине, снова даст код 12 — только теперь у нового пользователя.

P0-6. Аудит вторым проходом

  1. Проверить на копии конфигурации владельца, что обновление ничего не сбрасывает. Цепочки и порядок аккаунтов обязаны совпасть до и после.
  2. Проверить, что учётные данные целы после сброса: файлы в agy_profiles/ на месте, аккаунты по-прежнему подключены.
  3. Установить начисто в пустой HERMES_HOME и пройти путь целиком: установка, открытие интерфейса, подключение аккаунта, назначение роли.
  4. Проверочный скрипт установщика прогнать и на пустой конфигурации, и на конфигурации владельца.
  5. Побочные изменения объяснить.
  6. Пропущенный пункт назвать пропущенным.

Ограничения

  • Учётные данные не удалять и не переносить ни при каких условиях.
  • Обновление поверх существующей установки ничего не сбрасывает.
  • Версию 0.1.1 не поднимать: сборки различаются коммитом.
  • Правило честности без исключений: пустое состояние показывать как пустое, а не как ошибку.

Критерии приёмки

  1. Ветка в origin, git status чист.
  2. Установка в пустой HERMES_HOME даёт конфигурацию без предсозданных профилей; интерфейс показывает внятное пустое состояние.
  3. Обновление поверх конфигурации владельца не меняет ни одной цепочки; проверено на копии, вывод приложен.
  4. Подключение аккаунта создаёт профиль; заранее заготовленных пустых нет.
  5. Кнопка сброса спрашивает подтверждение, перечисляет сохраняемое, делает резервную копию и не трогает учётные данные; проверено.
  6. verify_multi_provider_router.py проходит и на пустой конфигурации, и на конфигурации владельца; оба вывода приложены.
  7. Путь целиком пройден вручную на чистой установке: подключение аккаунта, назначение роли, работа маршрутизации.
  8. ruff check . чисто; релизный гейт не ухудшен.
  9. Отчёт: START_HEAD, FINAL_HEAD, origin/main, git status, X passed / Y skipped / Z failed. На main сейчас 486 passed.

Главное

Сегодняшняя ошибка установки возникла не из-за нового кода, а из-за состояния, накопленного за десяток версий. Чистый старт убирает целый класс таких поломок: новый пользователь получает пустую систему и заполняет её сам, а не разбирается с двумя десятками заготовок, часть из которых помнит переименования полугодовой давности.

Порядок сдачи

Передать точный FINAL_COMMIT_SHA.