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>
This commit is contained in:
parent
9d93a1739b
commit
31e4e7f66c
1 changed files with 97 additions and 0 deletions
97
agents/inbox/2026-08-21-B4-codex-restore-account-actions.md
Normal file
97
agents/inbox/2026-08-21-B4-codex-restore-account-actions.md
Normal file
|
|
@ -0,0 +1,97 @@
|
||||||
|
# Задание 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 ← сейчас
|
||||||
|
```
|
||||||
|
|
||||||
|
В фазах 2–6 карточка аккаунта лишилась управляющих элементов. Сейчас на ней только «Обновить» и «Удалить». Пропали:
|
||||||
|
|
||||||
|
| Действие | Обработчик в приложении | Триггер в 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`.
|
||||||
Loading…
Reference in a new issue