# Monitor 5.11: потоки над запросами и темы

## Реализовано

- На странице сессии единый экран: активные аудиоподключения, раскрываемые завершённые потоки, затем запросы. Прежние две вкладки убраны.
- Состояние, полный ID, длительность, полный счётчик событий, backend и состояние записи сохранены. Ссылки открывают прежние подробные экраны.
- Поиск, фильтры и страницы запросов не скрывают активные подключения. Завершённые потоки читаются страницами. Значок `+` означает наличие следующих страниц, а не полный счётчик.
- Сохранены запросы, дорожки, события, аудио, диагностика, поток, исходная запись, служебные операции и каталог таблиц. Старые ссылки работают; Back возвращает фильтры и раскрытие архива.
- По умолчанию тёмная тема. Кнопка в заголовке переключает светлую/тёмную и сохраняет выбор для сайта. Палитра применяется к таблицам, JSON, статусам и графикам. Переключение не пересоздаёт проигрыватель.
- На узком экране строки потоков становятся карточками. UUID доступен полностью через подсказку и текст; технические сведения не удалены.

## Проверки

| Проверка | Результат |
|---|---|
| Полный frontend suite | PASS: 415 тестов / 58 файлов, также на CI точного SHA |
| Адресные Monitor tests | PASS: 126 тестов / 14 файлов |
| Последняя правка жизненного цикла подписки | PASS: 5 audioStreams tests, затем полный suite в CI |
| TypeScript, Vite production, runtime settings | PASS |
| Chrome: поиск и сохранение активных подключений | PASS на реальных компонентах с синтетическими данными |
| Chrome: запрос, запись, графики, Back, каталог | PASS на локальном стенде |
| Chrome: тёмная/светлая, сохранение после reload, Enter | PASS на локальном стенде |
| Chrome: 390 px, отсутствие горизонтального переполнения | PASS на локальном стенде |

В локальном стенде применены реальные компоненты Monitor и синтетические ответы существующих API. Пользовательское аудио в fixtures не добавлялось. Стенд и его сервер после проверки закрыты; fixture не входит в коммит. Физическая речь и ASR в рамках этой UI-правки повторно не измерялись.

## Объём и ресурсы

База сравнения: `e19084f20b3724f6c40603c3927f965a1358790b`.

- 18 файлов: +246 / −87 строк, чистое изменение +159.
- Без документации: 17 файлов, +210 / −87, чистое изменение +123. Включены тесты; vendor, generated и сборочные артефакты не учитываются.
- Удалены переключение двух списков сессии и отдельный renderer этих вкладок. Сами подробные экраны сохранены.
- Новых сервисов, API, таблиц БД, зависимостей, таймеров и NATS-подписок: 0.
- Добавлен один ключ настройки браузера `monitor.theme`; постоянного серверного хранения не добавлено.
- Общий экран читает метаданные потоков, которые раньше читались при открытии отдельной вкладки. Live-снимки не перечитывают историю из БД. Графики и PCM по-прежнему загружаются только при открытии.
- Длительности активных подключений обновляются на существующих live-снимках. Неизменившийся список не пересоздаётся. Счётчики событий и архивные сведения обновляются существующей кнопкой «Обновить».

Скорость, CPU и память сравнительным нагрузочным тестом в этой UI-правке не измерялись; сокращение кода или отсутствие новых подписок не объявляется измеренным ускорением.

## Исходники и CI

- Commit: `34566e13e090552fb9df8f361decde8e81159942`, опубликован в `main`.
- Frontend build-label: 5.11; расширение 1.8.0 не менялось.
- [Pipeline 5395](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/pipelines/5395>).
- Пять обязательных checks PASS: Python 22873; Browser NATS 22874; Frontend 22875; Ruby 22876; Dialog integration 22877.
- [Сборка Frontend 22895](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/jobs/22895>): PASS.

## Поставка и рабочий UI

PASS. [Preflight 22900](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/jobs/22900>) и [адресная поставка 22934](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/jobs/22934>) завершены успешно.

- Изменён только `chat-agent_src_front`. Штатный deploy проверяет replica=1, завершённый update, running/health контейнера и совпадение его Image ID с проверенным образом; финальный guard проверяет неизменность остальных сервисов. Job 22934 прошла эти проверки.
- Revision: `34566e13e090552fb9df8f361decde8e81159942`.
- Образ: `builder-registry.builder.giscloud.ru/gis/chat-agent/front/main@sha256:a51c56da52fda583b839176f09474db3dd3b1030e17de1fd6ae89421d0f9f4ed`.
- Обновление прошло через штатный путь краткого drain/resume. Длительность job 77,109 с не равна времени закрытого приёма.
- Инфраструктура, DNS, SSH, схема БД, PostgreSQL, расширение и voice-сервисы не изменялись.

На рабочем [Monitor](</experiments/voice-ai/monitor-archive/>) после поставки проверены:

1. Тёмная тема по умолчанию; два завершённых потока и все четыре запроса выбранной сессии сохранены. Активных подключений в момент проверки 0; сценарии принимающего и idle подключения проверены на локальном стенде и в тестах.
2. Полные ID, длительности 227,325 и 235,904 с, счётчики 110 и 112 событий, backend Whisper Turbo, состояние «Полная», переходы к записи видны в общем экране.
3. Открытие запроса → аудио → диагностика (кнопка запуска доступна) → соответствующий поток с графиками и разделами сообщений/событий. Диагностика во время этой UI-проверки не запускалась.
4. Переход к исходной записи и возврат Back: снова два потока и четыре запроса, архив раскрыт.
5. Светлая/тёмная тема, переключение Enter, сохранение после reload. При переключении на открытом аудио source и выбранный диапазон не изменились.
6. Реальный Chrome: viewport 390×844, ширина документа 375 px, горизонтального переполнения нет. Временный viewport сброшен.
7. Новых ошибок console после поставки в проверенной вкладке не зафиксировано. В журнале оставались старые сообщения расширения от 11:13 UTC, до поставки 11:24 UTC.

Снимки: [тёмная тема](#archive-availability), [светлая тема](#archive-availability), [390 px](#archive-availability), [до изменения](#archive-availability). Вкладка оставлена на общей странице сессии в тёмной теме.

Логи CI и подтверждённые статусы сохранены рядом с отчётом. В текущем объёме нерешённых блокеров нет. Обновлять Chrome extension не требуется.
