# Задание A29: дизайн-система «Крона» и новый экран «Маршрутизация»

## Дата поступления
2026-08-25

## База
Проверочный HEAD на момент выдачи: **`d5429da`**.

## Ветка
`antigravity/design-system-routing`

## Порядок исполнения

Два прохода: **Flash** реализует, **Pro** проводит аудит. Пункт **P0-5** написан для аудитора.

Второе из трёх заданий по новому фронтенду. Идёт **после A28** (реестр ролей) и **параллельно A30** (главный экран) — границы по файлам ниже.

---

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

```
cd <каталог репозитория>; git fetch origin --prune; git status
git checkout main; git pull --ff-only origin main
git checkout -b antigravity/design-system-routing
git commit -m "..."          <- сначала коммит
git push -u origin antigravity/design-system-routing
```

В `main` напрямую не пушить.

---

## Исходные материалы

Владелец передал готовый дизайн. Он лежит у него на рабочем столе, в репозиторий не копировался (там растровые макеты и логотипы):

```
Брендбук.txt          дизайн-система: палитра, три темы, типографика
Брендбук Hermes Hub.png, Брендбук Hermes Hub 2.png
Hermes Hub.png        эталонный логотип
3.txt                 полное ТЗ по вкладке «Маршрутизация»
3.1.png               утверждённый макет «Маршрутизации» (светлая тема)
2.1.png … 7.1.png     остальные экраны
лого агентов.png      знаки агентов
claude.png, grok.jfif, antигравити.png, opencode.png,
llama.png, ollama.png, nvidia.png, чат гпт.png   логотипы провайдеров
```

**Попросите файлы у владельца перед началом.** Работать по пересказу нельзя: макет — источник истины, и расхождение с ним будет считаться дефектом.

---

## P0-1. Дизайн-система: токены и три темы

Из `Брендбук.txt`. Базовая палитра задана явно:

| Token | Цвет | Назначение |
|---|---|---|
| `brand-primary` | `#101510` | глубокий фирменный зелёный |
| `brand-dark` | `#1A2A1F` | панели и поверхности |
| `brand-secondary` | `#2F4A36` | активные и вторичные поверхности |
| `brand-light` | `#F7F1E3` | фирменный кремовый |
| `brand-gold` | `#CDAA64` | основной золотой акцент |

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

**Три темы: Dark, Medium, Light.** Ключевое из брендбука, что легко упустить:

- **Medium — не осветлённый Dark**, а отдельная тема: приглушённый тёмно-зелёный фон и **светлые кремовые карточки агентов** на зелёном холсте.
- **Light не использует чистый `#FFFFFF`**: база — тёплый кремовый около `#F7F1E3`.
- Золото **не должно заливать интерфейс целиком** — только бренд, акценты, активные элементы и связи.

Требования к реализации:

1. Все цвета — **переменными CSS**, ни одного literal-цвета в разметке и в JS. Тема переключается сменой набора переменных, а не подменой стилей.
2. Переключатель тем в «Настройках», выбор сохраняется.
3. Существующие семь разделов переводятся на токены целиком. Экран, оставшийся на старых цветах, — незавершённая работа.

Логотип: геометрию эталонного знака **не перерисовывать**. Для малых размеров допустима упрощённая версия на основе `H + корни`, производная от основного знака.

## P0-2. Экран «Маршрутизация» по макету `3.1.png` и ТЗ `3.txt`

Это самая ценная часть задания: владелец жаловался на текущую маршрутизацию с первого дня.

Назначение вкладки, дословно из ТЗ: она отвечает за **очерёдность аккаунтов внутри каждого агента**. Связи между агентами живут на главном экране и здесь не настраиваются.

Структура экрана:

- **слева и по центру** — маршруты всех агентов;
- **справа** — постоянная панель «Доступные аккаунты» со всеми подключёнными аккаунтами системы.

Обязательное поведение:

1. **Перетаскивание аккаунта** из правой панели прямо в маршрут нужного агента. Плюс кнопка «+» как альтернатива — на макете она есть.
2. **Перестановка внутри маршрута** мышью: порядок — это приоритет отказоустойчивости, а не косметика.
3. В строке маршрута видно: номер по порядку, логотип провайдера, имя и почта аккаунта, **выбор модели**, квота (использовано и предел, полоса и процент), время сброса квоты, статус, кнопка удаления из роли.
4. Заголовок роли: имя, пометка важности, описание обязанностей (берётся из реестра A28), число аккаунтов, кнопка «Добавить».
5. Кнопка **«Сбросить к рекомендуемому»** в шапке — это авто-распределение из A26, второй реализации не заводить.
6. Поиск и фильтр по провайдеру в правой панели.

Действия только существующие: `save_chain`, `reorder_chain`, `assign_role`, `set_model`. Появится новое — впишите в `docs/web-api/CONTRACT.md`.

## P0-3. Честность данных на этом экране

Экран целиком построен на числах, поэтому риск выдумки здесь наивысший.

- Квоты, проценты и время сброса берутся из `quota_collector`. **Ни одного значения, которого не дал провайдер.**
- Квота неизвестна — «Н/Д» и причина, а не ноль и не пустая полоса, которую можно принять за исчерпание.
- Логотип провайдера, для которого файла не дали, — нейтральная заглушка, а не чужой знак.
- На макете стоят демонстрационные почты и числа (`coder-backup@mail.com`, `812K / 1.5M`). Это **иллюстрация**, а не данные. Ни одно из них не должно попасть в код.

Последнее — не теория: в прошлых раундах в мастере подключения уже находили выдуманные коды устройства `GRK-7842` и `CDX-9104`, а тест **требовал** их наличия.

## P0-4. Что не входит

- Главный экран, граф workflow, файлы агентов, LIVE-мониторинг — это **A30**, туда не заходить.
- Реестр ролей и двенадцать агентов — это **A28**. Здесь роли только **читаются**.
- Нижняя панель экосистемы (`Planner`, `Journal`, `Finance`, …) на макетах — соседние продукты. В этом задании она **не реализуется**; если рисуете, то как неактивную заготовку, и это оговаривается в отчёте.

## P0-5. Аудит вторым проходом

1. **Literal-цвета.** Поиском убедиться, что в разметке и в JS не осталось `#RRGGBB` мимо токенов. Иначе третья тема будет вечно «почти готова».
2. **Демонстрационные данные из макета** в коде — искать отдельно и целенаправленно.
3. **Все три темы открыть и посмотреть**, а не только Dark. Medium — отдельная тема, не осветлённый Dark; проверить именно это.
4. **Перетаскивание при отпускании вне зоны** не должно терять блок.
5. **Запустить изменённое.**
6. **Побочные изменения** объяснить.
7. **Пропущенный пункт назвать пропущенным.**

---

## Ограничения

- Десктоп (`router/ui/**`) не трогать.
- Ваша зона: `router/web/static/**`, ассеты. Серверная часть — только если действию не хватает данных, и это оговаривается.
- **A30 работает в тех же файлах.** Разделение: A29 — `style.css`, темы, экран маршрутизации; A30 — главный экран и граф. Согласуйте границы до начала, конфликты решайте через владельца, а не молча переписывая чужое.
- Правило честности без исключений.
- Тег `v0.1.1` не создавать.

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

1. Ветка в `origin`, `git status` чист.
2. Три темы работают, переключаются, выбор сохраняется; **скриншоты всех трёх**.
3. Literal-цветов вне токенов нет; проверено поиском.
4. Маршрутизация соответствует `3.1.png`: две области, правая панель аккаунтов, перетаскивание, выбор модели, квоты, время сброса, удаление из роли.
5. Перетаскивание из панели в роль и перестановка внутри роли сохраняются и переживают перезапуск.
6. Ни одного значения из макета в коде; проверено отдельно.
7. Неизвестная квота показана как «Н/Д» с причиной, а не нулём.
8. `ruff check .` чисто; релизный гейт не ухудшен.
9. Отчёт: `START_HEAD`, `FINAL_HEAD`, `origin/main`, `git status`, `X passed / Y skipped / Z failed`.

## Главное

Владелец получает интерфейс, который выглядит как управляющая система его экосистемы, и экран маршрутизации, где аккаунты раскладываются по агентам мышью. Это то, чего он просил дольше всего.

## Порядок сдачи
Передать точный `FINAL_COMMIT_SHA`.
