9.7 KiB
A48 — промежуточный отчёт, НЕ ГОТОВО К ПРИЁМКЕ
Дата: 2026-08-31. Исполнитель: Codex, один исполнитель, без субагентов.
Контрольные точки
- START_HEAD:
80aab00ee2bef353e12d128bd8ba6a6dde503abd. - origin/main перед началом:
80aab00ee2bef353e12d128bd8ba6a6dde503abd. - Ветка:
codex/a48-interface-by-mockup, отдельный worktreehermes-hub-a48. - FINAL_HEAD / FINAL_COMMIT_SHA: ещё не определён — визуальная приёмка не завершена. SHA промежуточного коммита передаётся в сообщении исполнителя.
- Главный checkout и незакоммиченная
.agents/сохранены; ветка A47 не переключалась. - Живой хаб фактически слушает порт 5800, сообщает сборку
81a58f6. На 8080 работает другое приложение; оно не изменялось. - Предпросмотр клиента A48: loopback 5801, защищённый API пересылается в существующий хаб без добавления авторизации и без изменения служб. Для другого порта браузеру требуется отдельный вход владельца.
Что изменено в клиенте
style.css: общая сетка семи страниц, навигация, типографика, состояния карточек, отдельные цвета поверхностей/обрамления для трёх тем, адаптивность.- Утверждённый логотип из существующих assets; SVG-значки меню, поиск по экранам/агентам/аккаунтам с Ctrl+K, переходы к событиям и настройкам. Вместо вымышленного Administrator указано отсутствие профиля пользователя в API.
- Обзор: столбец инструментов, модель и аккаунт на узле, автоматический первоначальный выбор агента, сводка инспектора и переходы к существующему редактору Agent File. Три нижние карточки; кольцевая статистика не выдумана.
- Сохранены механизмы панорамирования и масштабирования A43. Подписи связей выделены в отдельный SVG-слой; размещение учитывает прямоугольники узлов и других подписей. Добавлено разнесение узлов как явно сохраняемый черновик.
- Маршрутизация читает
RolePipeline.nodesвместо отсутствующегоpreferred_chain; порядок сохраняется существующимsave_chain. Фильтры провайдеров/состояний, поиск, выбор модели, кнопочное добавление и удаление профиля из цепочки. Связи агентов остаются на Обзоре. - Списки моделей —
ProviderSummary.discovered_models. Настроенная, но не обнаруженная модель отмечается неподтверждённой. «Список ещё не получен» и «доступных моделей нет» различаются по времени обновления провайдера. - Аналитика исправлена на
telemetry.by_provider/by_role. Состояние — наmetrics.host. Нулевые измерения не заменяются отсутствием данных. - Настройки сгруппированы; не полученные настройки не выдаются за текущие значения. Сохраняются только явно выбранные изменения. Поля, не имеющие источника/обработчика в этом потоке, помечены Н/Д.
- Журнал показывает события workflow из снапшота (не более 60). Это не полный журнал сервера: при требовании единственного источника
/api/snapshotболее широкий журнал недоступен. Детали события и фильтры предусмотрены.
Источники проверены до изменения чтения
HubSnapshot: generation, seq, timestamp, profiles_by_provider, all_profiles, readiness, agents, providers, routing, quotas, metrics, is_stale, workflow.
Прочитаны определения ProfileViewModel, ProviderSummary, RolePipeline, SystemReadiness, HostMetricsSnapshot, TelemetryAggregates, WorkflowEvent и реализация WorkflowService.snapshot. Текстовые ТЗ 1.txt и 3.txt прочитаны полностью. Все изображения 1.1–7.1 просмотрены.
Проверки
- База origin/main: 495 passed / 1 skipped / 0 failed, 4 deselected.
- Текущий клиент: 495 passed / 1 skipped / 0 failed, 4 deselected. В A48 указано 496 passed, но это не воспроизводится даже на исходной базе; Python и тестовые маркеры не изменены.
python -m ruff check .: чисто.PYTHONPATH=src python scripts/verify_multi_provider_router.py: 10/10.scripts/release_gate.py: PASSED. Сам скрипт содержит 7 групп проверок; 10/10 относится к отдельному router verifier.node tests/test_workspace_a48.js: прошёл (модели, отсутствие/нулевая квота, host metrics, telemetry keys, экранирование).node tests/test_web_handlers_dom_contract.js: прошёл.node --checkдля трёх файлов клиента иgit diff --check: чисто.- Первый промежуточный запуск pytest дал 1 сбой: новый стартовый обработчик вызывался из файла, который тест загружает отдельно. Инициализация перенесена в собственный JS-файл; повторный тест прошёл.
- Поиск демонстрационных чисел/версий/моделей: совпадения только с геометрией кривой (0.42) и настройкой порога (20%), не со статистикой.
Визуальные доказательства и пропуски
Галерея макет / до / промежуточная вёрстка.
- Собраны 21 исходный снимок: 7 экранов × 3 темы, авторизованный живой хаб.
- Собраны 21 снимок
layout-onlyбез входа для проверки базовой сетки/тем. Они НЕ заменяют требуемые скриншоты после с реальными данными; часть последних мелких CSS-правок требует повторной съёмки. - ПРОПУЩЕНО / ожидает входа: 21 авторизованный снимок после, инспектор на живом снапшоте, панорамирование/зум/узел за край/вписать, читаемость подписей на нескольких масштабах, проверка действий маршрутизации и выбора модели с подключёнными аккаунтами, повторный полный визуальный проход.
- ПРОПУЩЕНО намеренно: кнопки несуществующих приложений экосистемы, выдуманные графики/рост процентов/кольцо 42, версия v2.9.0, неподдерживаемые настройки уведомлений/backup/2FA, история температур и сетевых замеров без источника, вымышленный профиль Administrator.
- Отличия от макета: используется существующий утверждённый растровый логотип с кремовой подложкой, а не генерация нового вензеля; нет фиктивных аккаунтов и назначений. Точные плотность и отступы окончательно не приняты.
- Ограничение backend:
set_modelменяет предпочтение профиля, общее для его использования в разных ролях. Независимые модели на каждую пару роль/аккаунт нельзя честно обещать без отдельного изменения backend. Python в A48 не менялся.
Продолжение
После входа владельца на 5801: перезагрузить клиент, проверить консоль и DOM, исправить найденные дефекты, снять авторизованные после для всех тем, пройти холст, обновить галерею и отчёт. Только затем назначить FINAL_COMMIT_SHA и пометить A48 выполненным.