hermes-hub/agents/inbox/2026-08-21-B4-codex-restore-account-actions.md
Hermes Team 31e4e7f66c docs(task): B4 — restore the account actions the redesign dropped
accounts_view went from four user actions to one in d0d15ae: test, set_main,
set_orchestrator and assign_role lost their triggers, and assign_role is now
unreachable entirely although its handler and modal still exist. Also scopes
what the approved mockups can and cannot drive, since their headline numbers
are exactly the metrics Gap 12 says the backend does not measure.

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

8.4 KiB
Raw Blame History

Задание B4 (Codex): вернуть пропавшие действия и привести экраны к макетам

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

2026-08-21

База

Проверочный HEAD: 9d93a17, origin/main = 9d93a17. git fetch, зафиксировать BASE_SHA, работать от свежего main.

Ветка

codex/restore-actions


P0. Регрессия: с экрана «Аккаунты» пропали действия

Пользователь установил сборку и сообщил, что часть функций перестала работать. Причина найдена и подтверждена историей файла ui/views/accounts_view.py:

39b1f92  действий = 4
a7027b4  действий = 4     ← до редизайна
d0d15ae  действий = 1     ← «feat(ui): complete redesign phases 2 through 6»
9d93a17  действий = 1     ← сейчас

В фазах 26 карточка аккаунта лишилась управляющих элементов. Сейчас на ней только «Обновить» и «Удалить». Пропали:

Действие Обработчик в приложении Триггер в UI
test — « Тест» есть только в меню экрана «Команда»
set_main — «★ Сделать основным» есть только в меню «Команда»
set_orchestrator — «👑 Назначить оркестратором» есть только в меню «Команда»
assign_role — «Назначить роль» есть, вместе с модалкой _open_assign_role_modal нет нигде

То есть backend-обработчики и модальное окно назначения роли живы, но добраться до них из интерфейса нельзя. assign_role недостижим полностью.

Требуется вернуть все четыре действия на экран «Аккаунты» — в карточку и/или её меню , как было до редизайна. Проверить заодно остальные экраны на такую же потерю: сверить список действий, которые шлёт UI, со списком, который обрабатывает hermes_hub_app._handle_action. Расхождений быть не должно ни в одну сторону.

Тест обязателен: проверка, что для каждого обработчика в _handle_action существует хотя бы один вызывающий элемент в UI. Это ровно тот класс дефекта, который уже возникал с assign_role в раунде 2 и вернулся снова.


P1. Соответствие макетам

Владелец сравнил установленную сборку с утверждёнными макетами и оценил расхождение как значительное. Разберём честно, что из этого выполнимо.

Что нужно и можно сделать

  1. Плотность и структура. На макетах — многоколоночные рабочие области с чёткой сеткой: слева список, в центре схема, справа панель деталей. Сейчас экраны заметно разрежённее. Привести к более плотной компоновке с постоянной правой панелью деталей выбранного объекта.

  2. Панель деталей. На всех четырёх макетах выбранный объект раскрывается в правой панели: аккаунт, маршрут, агент. Сейчас детали живут в модальных окнах. Перевести на постоянную боковую панель — это ближе к макету и удобнее в работе.

  3. Схема маршрутизации. На макетах — визуальная схема «оркестратор → провайдеры → агенты» со связями. Сейчас цепочка отображается списком. Схему в упрощённом виде (узлы + линии на CTkCanvas) сделать реально.

  4. Строка состояния и хлебные крошки сверху, как на первом макете.

Что сделать нельзя — и почему

Макеты содержат данные, которых не существует:

842 rps · 98 ms P95 · 99.98% успешные · 1.23% ошибки
1.2M / 3.0M токенов · история использования в USD за 7 дней
CPU 28% · Память 61% · Диск 39% · Сеть 42 Мбит/с
$120.00 лимит · $45.32 использовано · 99.98% доступность

По контракту (docs/UI_STATE_CONTRACT.md, раздел 7, Gap 12) backend не измеряет латентность, RPS, проценты ошибок, стоимость и SLA. Тепловые карты квот по времени, графики истории в долларах, метрики CPU/памяти/диска — источников не имеют.

Эти блоки рисовать запрещено. Либо «Н/Д», либо блок отсутствует. Требование не изменилось и не обсуждается: продукт создан, чтобы показывать правду о квотах, и первый же аудит выявил именно фабрикацию таких чисел.

Если владелец хочет видеть эти показатели по-настоящему — это отдельная работа в backend (учёт токенов, замер латентности, стоимость), и она ставится отдельным заданием Antigravity, а не дорисовывается в интерфейсе.

Как поступить с макетом

Взять из макетов композицию, плотность, типографику и визуальный язык. Не переносить содержимое карточек с числами, которых нет. Там, где на макете «842 rps», должно быть либо пусто, либо честное «Н/Д», либо блок, заменённый на то, что данные реально есть: состояние авторизации, семейства моделей, позиция в цепочке отказоустойчивости.


Ограничения

  • Граница прежняя: ваша зона — src/antigravity_provider/router/ui/**, hermes_hub_app.py, tests/test_ui_*.py.
  • Сеть и подпроцессы — не в UI-потоке.
  • Секреты маскировать.
  • Тег v0.1.1 не создавать.

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

  1. Все четыре действия (test, set_main, set_orchestrator, assign_role) доступны с экрана «Аккаунты».
  2. Для каждого обработчика _handle_action есть вызывающий элемент в UI; закреплено тестом.
  3. Приложение запускается, все девять экранов открываются без ошибок.
  4. Ни одного выдуманного числа: RPS, латентность, стоимость, CPU/память/диск/сеть отсутствуют либо «Н/Д».
  5. Прогон в обоих окружениях — без UI-зависимостей и с customtkinter/pillow/psutil; обе команды и оба результата в отчёте.
  6. ruff check . чисто; release gate не ухудшен.
  7. В отчёте — скриншоты основных экранов и раздел «расхождения с макетом с указанием причины».

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

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