Monitor: исправления и сокращение кода
MR !57. Исходный main 461aeffbf42c937a2216e963bbe8760a4dee9483, commit 8db2cb005d76b235c11f44776f620dc548c4eda7.
Изменён только Front/Monitor. Расширение 2.4.4, серверные контракты, ASR, GPU, CI и инфраструктура не менялись. Пользовательская основная копия сохранена; writer — изолированный checkout asr-compare-timing.
Исправленные дефекты и неудачные решения
- Поздняя загрузка старого запроса могла заменить callback обновления нового. Проверка поколения теперь предшествует назначению владельца.
- Последовательное обновление обращалось к изменяемым полям после
awaitи могло затронуть новый экран. Владельцы независимых обновлений захватываются до ожидания. - Обработчик
toggleудалённого блока аудио мог отключить наблюдение уже выбранного потока. Проверяется актуальность поколения до действия. - Отклонённый Promise метаданных записи сохранялся навсегда. После ошибки повторное раскрытие снова читает запись.
- Общий кеш метаданных не содержал соответствующий waveform и принимал поздние записи другой выборки. Метаданные и waveform теперь принадлежат одному выбранному экрану.
- Повтор выбора того же потока или режима паузы пересоздавал подписки. Операции стали идемпотентными; новый callback применяется без переподписки.
- При отказе второй подписки первая оставалась активной. Частично созданные подписки закрываются, буферизованные события отбрасываются.
- Новая ревизия распознавания уже показанной фразы игнорировалась. Отображается строго более новая ревизия.
- Очистка графиков сбрасывала дедупликацию событий. Теперь очищаются только графические данные; старые пакеты повторно не принимаются.
- Завершённый поток продолжал цикл рисования. Анимация останавливается; новые валидные события могут её возобновить.
- Два загрузчика одной последовательности имели разную обработку ошибок и рекурсивно догружали историю. Используется один владелец с итеративным чтением, проверкой продвижения курсора, сохранением принятых страниц и атомарным обновлением.
- Служебная операция создавала целый SessionRequests ради одного журнала; callback закрытия обращался к изменяемому владельцу. Создаётся непосредственно SessionSequence с привязанным обработчиком закрытия. Чтение подробностей потока получает selected_session_id.
- Собственный рекурсивный JSON-парсер создавал дополнительное дерево и терял повторные ключи. Форматируются исходные токены после стандартной проверки синтаксиса; точные числа, дубли ключей и HTML как текст сохраняются. Глубокий JSON показывается без раздувания отступами.
- Удалены дублирующая кнопка переподключения, недоступная при любой ширине кнопка возврата к фильтрам, её обработчик и перекрытые CSS-правила. Два дубликата DOM-helper заменены существующим общим helper.
Объём
Production: +100 / −179, итог −79 строк. Вместе с новыми тестами: +136 / −183, итог −47 строк. Удаление настоящих дубликатов и неработающих ветвей; форматирование файлов ради счётчика не применялось.
Проверки исходников
- 215 тестов Monitor прошли; затем добавлены ещё два сценария и адресно проверены requests/audioStreams (21 тест), после уточнения загрузчика — 24 теста SessionSequence.
- Шесть новых регрессионных сценариев отдельно проверены на исходном main: все воспроизвели ошибки. Первый baseline-запуск трёх групп не стартовал из-за неполного временного checkout; после добавления исходного extensions эти группы воспроизвели четыре соответствующих ошибки.
- TypeScript и production build прошли. В build остаётся прежнее предупреждение о крупных JS chunks.
- Без ручной речи, запуска микрофона, GPU-прогонов и пересборки расширения.
CI и поставка
MR !57 влит: main aca4f5b7f8c4cdecda39762b4abc63bb5dc74bf0. Front-исходники main побайтово совпадают с проверенным commit.
Pipeline 5754: пять checks успешны, 588 frontend tests и 109 PostgreSQL/NATS integration tests. Pipeline main 5755: пять checks успешны. Штатные component build #29692 и deployment preflight #29695 запущены только для Front.
Исходный runtime: Front 461aeffb / 1.0.1166, digest 3adc716dad08b763af773baaf2572b6de1e7aaa1be2590004361070ef98e56c4, replicas 1, running true, update completed. Docker Healthcheck у контейнера отсутствует; работоспособность проверяется HTTP/UI.
Работающий результат и браузер
Штатные build #29692, preflight #29695 и refresh #29721 завершились успешно. Front работает на aca4f5b7f8c4cdecda39762b4abc63bb5dc74bf0, версия 1.0.1168, digest 440a5de93489d7073d3d45a64ce36fcc73fcc3e1039b21500e86c78186bbfaa2, replicas 1, running true, update completed. Независимо проверено через Insight; JSON до/после приложены. Gateway, Agent, LLM и Ingress остались 1.0.1165, все 1/1 running.
На реальном HTTPS Monitor после обновления:
- Сохранённый E2E-запрос
4e4fc102-fe8a-4cb2-81b6-c9dbe7ba1997: 41 наблюдение, 27 передач; 8 запросов, 12 ответов, 7 событий, ошибок доставки и инструментов 0. Это повторная проверка существующего реального запроса, новый вызов модели в этой итерации не запускался. - Восстановление выбранной передачи
98a6296a-df8e-f784-2403-16718a9937acпосле reload; журнал → схема → журнал; раскрытое содержимое сохранено при переключении. - Поиск run_js даёт ровно 4 передачи (2 запроса / 2 ответа); очистка фильтра возвращает 27. Выбранный ID сохраняется при переходе на вкладку данных и обратно.
- В данных сохранены ответ «Form Filler: Test Form - All Fields» и исходные времена 2,367 с / 2,235 с / 1,807 с / 0,123 с. Измерения не пересчитывались и не складывались.
- Светлая и тёмная темы визуально просмотрены. Пользовательская тёмная тема восстановлена. Скриншоты приложены.
- Старый поток
91835163-3cab-4dff-9648-c4adcc850f7a: архив 9,803 с открывается; журнал загружает исторические операции, выбранную квитанцию и JSON без ошибки сессии. Завершённый поток показан завершённым, лишней кнопки переподключения нет. Микрофон и ASR replay не запускались.
Ограничения проверки: narrow viewport override инструментом не применился (фактическая ширина оставалась 1920), поэтому проверка других размеров не заявляется. Старые пробелы наблюдений сохранены, не заменены догадками. В консоли Chrome до и после обновления встречается A listener indicated an asynchronous response ... message channel closed; источник не установлен, исчезновение этой прежней ошибки не заявляется. Проверенные операции Monitor завершились успешно.
Размер локальной production-сборки Monitor: JS 208526 → 205790 байт (−2736); CSS 43756 → 42729 (−1027). Gzip: JS −878 байт, CSS −134. Это уменьшение файлов, не измерение ускорения сервера или p95.