# Monitor v4 — реализация и приёмка

## Исходники

Один MR: https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/merge_requests/35.
База: `0b9857f572106bbd98279c02ac23ffbb680eec01`. MR source: `a1f0ff07bbe901252f4f1ae064da838c7e9ad90b`, merge: `e1a1621a6320301a9d8b9868bdb6ed051727e6ea`.
Перед поставкой добавлено уточнение кнопки боковой панели: `b0d1ba04def9d891b0964813eaddff19ab53cf85`. Это текущий source SHA для обоих изменённых компонентов.

25 файлов, +494 / −230 строк. Изменены Front и read-only проекция Gateway; расширение, ASR, GPU, DRS, инфраструктура, БД и корневой CI не менялись. Зависимости не добавлялись и не обновлялись. Основной пользовательский checkout сохранён; writer — существующий изолированный checkout `asr-compare-timing`.

## Поведение

- Три постоянных раздела: Данные, Диагностика, Последовательность событий. Один AudioArchive сохраняет плеер и прогон между вкладками.
- Данные: компактные вопрос/ответ/замеры/аудио; параметры, история вызовов, трассы, генерации и JSON находятся в раскрытиях и модальных окнах. Измерения указывают владельца часов и границы; вложенные интервалы не выдаются за независимые слагаемые.
- У waveform удалены числовые поля. Мышь и клавиатура выбирают участок только для прослушивания; сброс и длительность сохранены.
- Диагностика: единая таблица исходного и последнего диагностического прогона, исходная модель и «Фраза» по умолчанию. Новый прогон очищает прежний результат; отмена, ошибка и завершение без результата различаются. Оценки отделяют отсутствие поддержки, несохранённые и некорректные значения.
- Журнал/схема используют одну последовательность и общий выбор. Audio Ingress и остальные компоненты имеют точные имена в подсказках. Историческое `asr` не подменяется предполагаемым сервисом. Отступы до 32 px основаны только на сохранённом parent_id инструментов; временная близость не обозначает параллельность.
- Боковая панель открывается строкой и кнопкой. Переход на схему выделяет стрелку и участников; возврат выбирает строку. Сохранены фильтры, старые ссылки и положение чтения.
- Gateway разрешает существующий payload_ref для окончательного ответа тем же resolver, что использует event_content; циклы, отсутствие данных, чужая сессия/запрос и будущая ссылка не раскрывают содержимое.
- Ошибки инструментов считаются по уникальному tool_call_id отдельно от ошибок доставки. Неполная история не выдаётся за полный исходный прогон.

## Проверки исходников и CI

Локально: 100 адресных frontend-проверок основного изменения; после уточнений повторялись только затронутые группы, включая 45 UI-сценариев, 37 AudioArchive-проверок и 8 проверок журнала. TypeScript, Vite build, check-source и diff --check пройдены. PostgreSQL: 22 integration tests.

Pipeline 5667 проверил Python, Browser NATS и integration; Ruby suite штатно пропущена по отбору влияния. Первый frontend-прогон выявил тестовые обращения к удалённому прежнему интерфейсу. Сценарии обновлены, включая Exchanges, LiveView и настоящий вход Monitor. Один дальнейший прогон упал на существующем 5-секундном тайм-ауте неизменённого extension/domRuntime.test.ts; код и лимиты расширения не менялись.

Pipeline 5670: frontend — 513/513, runtime-settings и типизация пройдены; неизменённые группы штатно пропущены. Pipeline 5671: пять jobs завершены успешно с существующим отбором влияния (Ruby — пропуск). Pipeline 5672 проверяет последнюю frontend-правку; остальные группы пропускаются как неизменённые.

Предыдущие runtime digest и версии находятся в runtime-before.json. Результаты поставки и проверки HTTPS дополняются ниже после фактического выполнения.

## Поставка — текущее состояние

Gateway: pipeline [5673](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/pipelines/5673>), [build component 27853](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/jobs/27853>) — success, 20,1 с. Кандидат: `api-gateway/main@sha256:2c785f171dedd9690925014a42ac9e98f605aba0f1d572dcdcc46fb6075f247b`.

Front: pipeline [5674](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/pipelines/5674>), [build component 27904](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/jobs/27904>) — success, 68,4 с. Опубликован `front/main:monitor-frontend-b0d1ba04def9d891b0964813eaddff19ab53cf85`. Один production bundle. Оба образа собраны только для указанных компонентов; другие приложения не пересобирались.

Для сборки использованы существующие scoped-фазы `chrome-gateway` и `monitor-frontend` через job `build component`, с точными тегами SHA и штатным CI_FORCE_BUILD. Корневой CI не менялся. У этих двух подготовительных pipelines проверки штатно пропущены по сравнению того же SHA: этот код уже прошёл проверку в 5672. Первоначальная job 27802 имела пустой отбор и образ не создала; её успех не засчитывается как публикация Gateway.

[Gateway refresh 27883](<https://git.giscloud.ru/voice-chat/webrtc-komaroff/-/jobs/27883>) получила и проверила новый образ, затем завершилась deadline до переключения. Сервис остался на прежнем digest `158d4dce…`, update=completed. Front refresh 27934 не запускалась; его прежний digest `d63158d1…` сохранён. Откат образов не понадобился — переключения не было.

Восстановительная job 27869 остановилась с guard «ASR rollout is not drained»: допуск уже был открыт. Дополнительно через авторизованный терминал Core выполнен только GET `/healthz`: `ok=true`, `draining=false`, `audio_connections=1`. Серверные env и credentials не выводились в этот артефакт.

**Блокер:** живой поток `d9a1fa13-7afb-438c-bc14-8f57fbab2893`, сессия `4f051baa-3791-443a-8362-63717683f53c`, продолжает принимать аудио. Штатный drain требует ноль audio_connections (`stack/runtime_probe.py:103`). Запрошено разрешение завершить только этот захват; подтверждение пока не получено. Повторять deployment job до устранения причины не следует.

**Приёмка нового production UI ещё не выполнена:** работающий HTTPS Monitor пока обслуживает прежний Front. Просмотр локального макета и старого Monitor не считается приёмкой новой версии. После освобождения потока остаются Gateway → контрольный запрос → Front → обе темы/журнал/схема/старые ссылки → один повтор архивной фразы. Микрофон для приёмки включать не нужно.

[Активный поток](#archive-availability) · [машинный статус](</experiments/voice-ai/archive/v/11/02/monitor-request-v4/implementation/delivery-status.json>).

Запуск manual jobs с переменными использует штатный [GitLab Jobs API](<https://docs.gitlab.com/api/jobs/#run-a-job>); новые CI-правила и обходы guard не добавлялись.


## Обновление после разрешения владельца

Блокер снят, Gateway → Front поставлены и прошли HTTPS-проверку. Актуальный итог: [rollout/REPORT.md](</experiments/voice-ai/archive/v/11/02/monitor-request-v4/rollout/REPORT.md>). Все прежние записи о незавершённой поставке выше относятся к предыдущему моменту проверки.
