hermes-hub/agents/inbox/2026-08-31-A48-interface-by-mockup.md

189 lines
No EOL
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Задание A48: интерфейс по макетам — исполнитель Codex
## Дата поступления
2026-08-31
## Исполнитель
**Codex на сервере `192.168.1.81`.** Не Antigravity.
Задание **отменяет A46**: там та же работа была поставлена Antigravity. Два агента в одних файлах уже приводили к тому, что один переключал ветку под работой другого. Владелец фронтенда — только это задание.
## База
```
репозиторий: /srv/projects/Agent projects/hermes-hub (уже на 80aab00)
макеты: /srv/projects/Agent projects/Разное/фронтенд
общая память: /srv/projects/AI-Memory (см. корневой AGENTS.md)
живой хаб: http://127.0.0.1:8080
```
```
git fetch origin --prune
git checkout -b codex/a48-interface-by-mockup origin/main
```
В `main` напрямую не пушить.
## Порядок
Codex работает одним исполнителем, поэтому второго прохода внутри задания нет. Вместо него — **самопроверка по пункту P0-6** и приёмка ревьюером. Пункты, помеченные «приложить», — это то, по чему работу будут принимать.
Перед началом прочитать общую память по правилам корневого `AGENTS.md`: протокол, состояние и задачи проекта. После работы обновить их.
---
## Почему это задание существует
Задание A43 объявили выполненным. Владелец поставил сборку на две машины и написал: «интерфейс вообще не изменился, какой был, такой и остался. Зачем тогда было задание на изменение по макетам?»
Он прав. Вот что изменил A43:
```
app.js +297 шесть карточек показателей, обвязка холста
workflow.js +136 панорамирование, зум колесом
index.html +8
workflow.css 15 снят потолок высоты 430 px
style.css НЕ ОТКРЫВАЛСЯ НИ РАЗУ
```
`style.css` — это и есть внешний вид. Привести экраны к макетам, не тронув его, нельзя.
Работу приняли по зелёным тестам. **Тесты внешний вид не видят.** Отсюда главное требование этого задания — проверка глазами, см. P0-3.
**Холст переделывать не нужно.** Панорамирование, зум колесом и снятый потолок высоты работают и остаются.
---
## P0-1. Первоисточник — текстовые ТЗ, а не только картинки
Рядом с макетами лежат два документа, и в них требования подробнее, чем видно на изображении:
```
Разное/фронтенд/1.txt ТЗ по главному экрану «Обзор»: рабочее пространство
агентной системы, визуальные workflow, Agent Files,
LIVE-мониторинг
Разное/фронтенд/3.txt ТЗ по вкладке «Маршрутизация»
```
Из `3.txt` важное разграничение, которое легко нарушить: **на «Маршрутизации» настраивается очерёдность аккаунтов внутри агента; связи между агентами живут на «Обзоре».** Не смешивать.
Прочитать оба целиком до начала работы. Расхождения между текстом и картинкой — вынести владельцу, а не решать молча.
## P0-2. Вёрстка
Экраны привести к макетам `1.1``7.1`: сетка, отступы, типографика, состояния карточек, расположение панелей, палитра.
1. **Открыть `style.css`.** Если по итогам работы он не изменён — задание не выполнено.
2. Правки в `index.html` и `app.js` — по необходимости; клиент **без сборки, без npm, без фреймворка** (решение зафиксировано в `docs/web-api/CONTRACT.md` §1). Tailwind, React и генераторы страниц не вносить.
3. **Три темы** — светлая, средняя, тёмная — работают на каждом экране. Цвета через переменные, не литералами.
Заметные расхождения, найденные ревьюером на экране «Обзор»:
```
шапка в макете поиск (Ctrl+K), уведомления, настройки, карточка
пользователя; в сборке две кнопки
логотип вензель и подпись против значка молнии
панель холста вертикальный столбец инструментов слева — отсутствует
карточки узлов в макете иконка, файл .md, строка «модель • аккаунт»;
в сборке три обрезанные строки без модели и аккаунта
инспектор в макете вкладки, конфигурация исполнения, Agent File,
инструменты, быстрые действия; в сборке пустая заглушка
нижний ряд в макете три карточки, в сборке две
подписи связей режутся карточками узлов: «ТАНОВКА ЗАД», «РАЙПРИЁМКА»
```
Про подписи: центрирование уже исправлено в `workflow.css`, дело **не в стиле текста**. Их перекрывают карточки узлов — лечится порядком слоёв и расстоянием между узлами в раскладке.
## P0-3. Проверка глазами — обязательная часть работы
Codex работает на том же сервере, где запущен хаб. Это ключевое отличие от прошлого захода: **сверять есть с чем прямо на месте.**
1. Открыть `http://127.0.0.1:8080` и пройти все экраны.
2. **Скриншот до и после по каждому экрану**, рядом фрагмент макета. Приложить.
3. Проверить каждую тему.
4. Холст: подвигать полотно, покрутить колесо, утащить узел за край и вернуть кнопкой «вписать».
5. Подписи связей читаются на нескольких масштабах и не перекрываются.
Отчёт без скриншотов приниматься не будет: другого способа проверить эту работу нет.
## P0-4. Что из макета не переносить
Макеты нарисованы с правдоподобными данными. В живой интерфейс они попасть не должны:
```
кольцевая диаграмма с числом 42 пример, а не измерение
«Gemini 1.5 Flash • acc-02» подпись примера
версия v2.9.0 в проекте 0.1.1, заморожена намеренно
«94.2%», «+20% к вчера» выдуманные показатели
```
Правило проекта: **число появляется только после измерения.** Нет данных под элемент — `Н/Д` с причиной. Загрузка и отсутствие пишутся разными словами: «список ещё не получен» и «моделей нет» — разное.
Модель и аккаунт для карточки узла **в снапшоте есть** — брать оттуда.
Элемент, которому нечего обслуживать (кнопки несуществующих приложений экосистемы внизу макета), не рисовать и **назвать пропущенным** в отчёте.
## P0-5. Данные берутся из снапшота
Единственный источник — `GET /api/snapshot`. Это `dataclasses.asdict(HubSnapshot)`, имена полей ровно как в датаклассе:
```
all_profiles профили; ключа "profiles" НЕ существует
providers сводки провайдеров, у них discovered_models
routing, agents, workflow, readiness, quotas, metrics
```
Перед чтением поля перечислить поля датакласса. Обращение к несуществующему ключу молча даёт пустоту: именно так экран маршрутизации показывал «0 аккаунтов» при шести подключённых.
Список моделей провайдера — `discovered_models` **у провайдера**. У профиля `preferred_models` — это настройки владельца, и `model_states` строится из них же.
## P0-6. Самопроверка перед сдачей
Пройти по списку и приложить результат:
1. `git diff --stat` — есть ли в списке `style.css`.
2. `python -m pytest -q` — сравнить с базой, на `origin/main` сейчас **496 passed**.
3. `python -m ruff check .`
4. `PYTHONPATH=src python scripts/verify_multi_provider_router.py`
5. Скриншоты собраны по всем экранам и всем темам.
6. Поиск по клиенту: не осталось ли зашитых чисел и процентов.
7. Пункт, который не сделан, **назван пропущенным**.
---
## Ограничения
- Без сборки, без npm, без фреймворка.
- Python не трогать: провайдеры и квоты — задание A42.
- Холст A43 не переделывать, только доводить.
- Учётные данные и `~/.hermes/agy_profiles/` не трогать.
- Службы `qwen-coder` и `qwen-compressor` не трогать: они только что восстановлены после того, как их подменили заглушкой.
- Версию `0.1.1` не поднимать.
- Правило честности без исключений.
## Критерии приёмки
1. Ветка в `origin`, `git status` чист.
2. `style.css` изменён; вёрстка приведена к макетам.
3. Оба текстовых ТЗ прочитаны; разграничение из `3.txt` соблюдено — очерёдность аккаунтов на «Маршрутизации», связи агентов на «Обзоре».
4. По каждому экрану приложены скриншоты до и после рядом с фрагментом макета.
5. Пройдены все макеты `1.1``7.1`.
6. Инспектор реализован по макету; отсутствующие данные показаны как `Н/Д` с причиной.
7. Карточки узлов показывают модель и аккаунт из снапшота.
8. Подписи связей не перекрываются карточками; проверено на нескольких масштабах.
9. Ни одного числа из макета в живом интерфейсе.
10. Три темы работают на всех экранах.
11. Холст не сломан: панорамирование, зум, «вписать».
12. `ruff check .` чисто; релизный гейт 10/10; тестов не меньше 496.
13. Память проекта в AI-Memory обновлена: состояние, задачи, worklog.
14. Отчёт: `START_HEAD`, `FINAL_HEAD`, `origin/main`, `git status`, `X passed / Y skipped / Z failed`.
## Главное
Владелец ждал сборку, поставил её на две машины и увидел прежний интерфейс. Холст стал лучше — но это один экран из семи, а вёрстку не начинали.
У этого задания есть преимущество, которого не было у прошлого: исполнитель сидит на том же сервере, где работает хаб, и может открыть его и сравнить с макетом сам. Поэтому сдача — скриншоты, а не описание сделанного.
## Порядок сдачи
Передать точный `FINAL_COMMIT_SHA`.