docs(agents): задание A41 — чистая конфигурация при первой установке
Установка на Windows упала с кодом 12, и причина была не в новом коде, а в накопленном состоянии: конфигурация тащила роль под старым именем, роли без цепочек и 24 пустых заготовки, переживших несколько переименований. Проверка споткнулась о наследие. Владелец сформулировал вывод: при первой установке всё должно начинаться с нуля — сначала аккаунты, потом распределение по агентам. Задание разводит два случая: конфигурации нет — первая установка, профилей не создаётся вовсе; конфигурация есть — обновление, ничего не трогается. Плюс явная кнопка сброса с подтверждением и резервной копией. Отдельным пунктом, из-за цены ошибки: сброс касается только маршрутизации. Каталог agy_profiles не затрагивается ни при каких условиях — потеря учётных данных означает повторный ручной вход в два десятка аккаунтов, включая Antigravity со входом по ссылке для каждого профиля. Требуется также прогнать проверочный скрипт установщика на ПУСТОЙ конфигурации: он этого случая никогда не видел, у него всегда было 24 профиля, и падение на чистой машине дало бы тот же код 12 новому пользователю. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
380c218547
commit
e6bbd60a36
1 changed files with 126 additions and 0 deletions
126
agents/inbox/2026-08-31-A41-clean-first-install.md
Normal file
126
agents/inbox/2026-08-31-A41-clean-first-install.md
Normal file
|
|
@ -0,0 +1,126 @@
|
||||||
|
# Задание A41: чистая конфигурация при первой установке
|
||||||
|
|
||||||
|
## Дата поступления
|
||||||
|
2026-08-31
|
||||||
|
|
||||||
|
## База
|
||||||
|
|
||||||
|
`origin/main` (`380c218`) — там уже слиты A34–A39 и правки ревьюера.
|
||||||
|
|
||||||
|
```
|
||||||
|
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`.
|
||||||
Loading…
Reference in a new issue