hermes-hub/agents/inbox/2026-08-23-A14-antigravity-flash-accounts.md
Hermes Team a18de5d468 docs(tasks): A13 и A14 — оставшийся долг
A13 (Pro): раздел контракта о границе между учётными системами Hub и
Hermes — единственный незакрытый пункт A11; варианты связывания профилей
с ценой каждого; устранение нестабильности набора тестов (шесть корней
Tk дают до семи плавающих ошибок на прогон, мешая отличать настоящую
поломку от шума).

A14 (Flash): два невыполненных пункта A12 — компактные карточки
аккаунтов (accounts_view.py не менялся вообще) и разбор дублирующих
разделов «Провайдеры»/«Квоты» (quotas_view.py не тронут), плюс живые
скриншоты, которых не было.

Принято по A11: пропуск вызова без роли работает — замер 0.10 с без
попыток цепочки; зонд переведён на agy models; выдуманный список
gemini-2.5-* убран; refresh_codex_token появился; source квоты не
опережает данные. Релизный гейт стал зелёным, 7/7.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 15:52:07 +07:00

13 KiB
Raw Permalink Blame History

Задание A14 (Antigravity Flash, другой ПК): компактные аккаунты и чистка разделов

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

2026-08-23

База

Проверочный HEAD на момент выдачи: 9c0da36.

Ветка

antigravity/accounts-compact


Порядок работы с git

Шаг 1. В начале — обновить локальную копию:

cd <каталог репозитория>; git fetch origin --prune; git status
git checkout main; git pull --ff-only origin main
git checkout -b antigravity/accounts-compact

Шаг 2. После первого коммита — отправить ветку:

git commit -m "..."          <- сначала коммит
git push -u origin antigravity/accounts-compact

Именно в таком порядке. Push без коммита ничего не сохраняет: в прошлом раунде второй исполнитель отправил ветку, но забыл закоммитить, и его работа существовала только на диске.

Шаг 3. В конце — push и проверка:

git push origin antigravity/accounts-compact
git status                                              <- дерево должно быть чистым
git log --oneline -1 origin/antigravity/accounts-compact <- должен быть ваш финальный коммит

Что принято по A12

Проверено исполнением:

  • тест достижимости службы моделей написан правильно — импортирует согласованный путь напрямую и падает при ImportError, а не глотает его. Именно это и требовалось: защитный except ImportError в интерфейсе прячет несобранную интеграцию, и теперь есть тест, который её не пропустит;
  • тесты подключения Claude и Grok;
  • упорядочивание пяти провайдеров, тест test_dashboard_renders_all_five_providers_in_order;
  • причины у Н в providers_view;
  • скрипт съёмки скриншотов scripts/capture_live_a12_screenshots.py.

Граница зоны не нарушена, слияние прошло без конфликтов.

Два главных пункта задания не выполнены, и это задание — про них.


P0-1. Компактные карточки аккаунтов

accounts_view.py не менялся вообще. В components.py — только мелкие правки уже существовавших ячеек квоты (height=5height=4). Переделки нет.

Жалобы владельца дословно: «аккаунты должны выглядеть как у кокпит тулс, компактно», «вид не тот, не надо делать раскрывающееся окно», «в аккаунтах квота так и не отображается».

Требуется:

  • плотный список фиксированной высоты: провайдер, идентичность, роль, состояние авторизации, квота — одной строкой, без раскрытия;
  • квота видна сразу, числом и полосой, с указанием пула и периода. У Antigravity четыре пула, и «просто процент» вводит в заблуждение — надо Claude/GPT — неделя, а не 62%;
  • шестнадцать аккаунтов читаются без прокрутки внутрь карточек;
  • дельта-отрисовку по стабильным ключам не терять: изменение одного аккаунта не перерисовывает остальные.

Данные настоящие и уже приходят. Замер на живых аккаунтах владельца:

ag-w2   Claude/GPT — неделя   осталось 37.4%   source=provider_api
ag-w3   Claude/GPT — неделя   осталось 90.1%   source=provider_api
ag-w1   Gemini — неделя       осталось 99.7%   source=provider_api

Где данных нет — Н с причиной, а не ноль и не голый прочерк. У opencode-go и grok провайдер лимитов не отдаёт, причина уже лежит в unavailable_reason.

Про дельта-отрисовку: COCKPIT_TOOLS_ARCHITECTURE_COMPARISON.md в корне объясняет, почему это принципиально — при пересборке всех карточек на 50 аккаунтах выходит больше тысячи операций с виджетами в UI-потоке, и окно заметно подвисает. Документ — архитектурное сравнение, не макет: берите принцип обновления и плотность, не буквальную вёрстку.

Тест: изменение квоты одного аккаунта не пересоздаёт виджеты остальных.

P0-2. Разобрать дублирующие разделы

quotas_view.py не тронут, providers_view.py — десять строк. Решение не принято.

Жалоба: «провайдеры и квоты и лимиты вообще не понятно для чего нужны, там всё то же, что и в аккаунты».

Владелец прав: после появления квот прямо в карточках аккаунтов отдельный раздел квот потерял смысл. Нужно решение, а не сохранение обоих на всякий случай.

  • «Квоты и лимиты» — убрать из навигации либо оставить только то, чего нет в «Аккаунтах»: сводка по провайдеру целиком, история расхода, ближайшие сбросы. Нет такого содержания — убрать раздел вместе с пунктом навигации.
  • «Провайдеры» — оставить относящееся к провайдеру, а не к аккаунту: доступность runtime, обнаруженные модели, версия CLI, состояние авторизации в целом.

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

P0-3. Живая проверка со скриншотами

Скрипт съёмки написан, но скриншотов нет. Задание без них не принимается — это правило действует с раунда B5 и оно не формальное: пустые состояния доказывают вёрстку, но не работоспособность.

Нужны снимки с настоящими данными:

  1. «Аккаунты» — шестнадцать аккаунтов, видимые квоты с указанием пулов;
  2. подключение Grok от начала до конца: выбор провайдера, авторизация, назначение роли, завершение;
  3. окно роли с цепочкой и квотами;
  4. «Обзор» после чистки разделов.

По Grok: слоты уже есть, проверено — find_free_slot("grok") возвращает grok-worker-1, find_free_slot("claude") возвращает claude-orch. Мастер больше не должен упираться в «свободный слот не найден». Пройти весь путь, а не только выдачу слота: подключение, роль, появление в маршрутизации, тест профиля.

Жалоба владельца была «при подключении грока ошибка» — закрывается только пройденным вживую сценарием.


Полезное к сведению

  • Релизный гейт стал зелёным, 7/7. Не ухудшать.
  • Набор тестов нестабилен: полный прогон даёт до семи ошибок, которые кочуют между файлами, хотя изолированно те же тесты проходят. Причина — шесть отдельных корней Tk в наборе. Это чинит A13, вам с этим ничего делать не нужно, но знайте: если увидите ошибки в test_ui_* при полном прогоне, сначала проверьте файл изолированно, прежде чем искать дефект у себя.
  • Обнаружение моделей сейчас отдаёт пустой список, потому что agy models виснет сам по себе (проверено прямым вызовом, rc=124 по таймауту 100 секунд). Это не дефект интерфейса. Карточка обязана честно показывать «Список моделей ещё не получен», а не пустой выпадающий список без объяснения.

Ограничения

  • Параллельно идёт A13. Ваши файлы: src/antigravity_provider/router/ui/**, tests/test_ui_*.py по существу, scripts/capture_live_*. Не ваши: docs/**, tests/conftest.py, backend вне ui/.
  • Не выдумывать числа, идентификаторы и названия моделей.
  • Три темы сохранить, дельта-отрисовку не терять.
  • Мастер не ломать: шесть потоков подключения, трёхэлементная распаковка start_profile_oauth, destroy() в _finish выполняется всегда.
  • Сеть и подпроцессы — не в UI-потоке.
  • Тег v0.1.1 не создавать.

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

  1. Ветка в origin, финальный коммит виден через git log origin/antigravity/accounts-compact, git status чист.
  2. Карточка аккаунта компактна, фиксированной высоты, без раскрытия; шестнадцать аккаунтов читаются без внутренней прокрутки.
  3. Квота видна сразу, с указанием пула и периода; где данных нет — причина.
  4. Дельта-отрисовка сохранена; проверено тестом.
  5. Принято решение по «Провайдерам» и «Квотам»; перенесённое и удалённое перечислено; пустых разделов и висящих пунктов навигации нет.
  6. Скриншоты всех четырёх сценариев с настоящими данными приложены.
  7. Grok подключается вживую: подключение, роль, маршрутизация, тест профиля.
  8. Прогон в обоих окружениях; обе команды и оба результата в отчёте.
  9. ruff check . чисто; релизный гейт остаётся 7/7.
  10. Отчёт: START_HEAD, FINAL_HEAD, origin/main, git status, точный X passed / Y skipped / Z failed.

Главное

Это последний крупный визуальный долг. Квоты настоящие, роли настраиваются, Grok разблокирован, гейт зелёный. Осталось, чтобы шестнадцать аккаунтов читались с одного взгляда и в интерфейсе не было разделов, про которые владелец спрашивает «а это зачем».

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

Передать точный FINAL_COMMIT_SHA. Сдано только после появления коммита в origin.