Голосовые системы

Markdown и диагностика нераспознанных фраз — результат поставки

27 октября 2026. Код: e2185e482bdcf130604a7988d3d66e4d7a6fa2d7. Изменения отправлены в canonical main из изолированного checkout. Основная рабочая копия пользователя не изменялась.

Что реализовано

  • Один renderer Markdown в существующем ChatUI для новых ответов, обновлений и восстановленной истории. Закреплён markdown-it 15.0.3. HTML выключен; ссылки только HTTP/HTTPS, noopener noreferrer; изображения представлены ссылками. Таблицы и код прокручиваются внутри сообщения. Текст пользователя и технические JSON остаются обычным текстом.
  • Отказы ASR показываются отдельной карточкой существующего запроса: причина, «Копировать ID», «Диагностика в Monitor», «Команда не отправлена». Живое событие, восстановление и межвкладочное представление используют одну функцию. Повторная доставка обновляет карточку. Отказ не запускает модель чата или инструменты.
  • Существующая проекция widget_history дополнена необязательным include_asr_outcomes, выключенным по умолчанию. Расширение 1.8.2 включает его. Хронология и дедупликация по request_id сохранены. Между панелями используется прежний history_view.
  • Monitor показывает «Речь не распознана» и причину вместо пустого заголовка/ошибочного сообщения об отсутствии итога. Подтверждение показа распознанного текста применяется к успешным фразам.
  • Подтверждённые координаты теперь вычисляются для завершённых final/rejected/error в любом порядке доставки окон и результата. Проверки окон и PCM сохранены. Отказ распознавания не запрещает диагностику пригодного аудио.
  • Выполнено ограниченное восстановление отсутствовавших исторических границ: проверено 25, восстановлено 25, недостаточных данных 0. Менялись только отсутствовавшие координаты; исходные результаты, записи и receipt не переписывались. Добавлена ручная CI-операция восстановления, привязанная к точной версии работающего Gateway.

Новых сервисов, таблиц, хранилищ истории, соединений или подписок NATS нет. ASR worker и порог уверенности не менялись. Инфраструктура, DNS, SSH и PostgreSQL не перенастраивались.

Фактическая поставка

Компонент Версия Проверенное состояние
Chrome extension 1.8.1 → 1.8.2 Установлено по прежнему пути; пользователь подтвердил перезагрузку. Новая карточка и Markdown проверены в его Chrome. Все поля manifest, кроме версии, сохранены.
Gateway 6.10 → 6.11 Rollout 23980 SUCCESS; точный образ e2185e48, Running/health, завершённое обновление и сохранность соседних сервисов проверены существующим release guard.
Front 5.13 → 5.14 Rollout 23994 SUCCESS с той же проверкой runtime; новые данные видны в Monitor.
Восстановление границ Однократная операция Job 23981 SUCCESS; 25/25.

Build label обоих серверных образов: 1.0.0.1005. Ревизия: e2185e482bdcf130604a7988d3d66e4d7a6fa2d7.

  • Gateway digest: sha256:4af93e689306001414a989dee2a73ca55e2b9771932909f891d59a692922053b.
  • Front digest: sha256:a6a807418edc7ea91ffebffad0918eabc72443d4863249f3ff159f2a898dd82e.
  • Путь расширения: `локальный источник
  • Сохранён резервный пакет 1.8.1: `локальный источник

Проверка указанного запроса

b263a032-6639-5ab8-b768-afe9cab2ed42, сессия 9a64b321-91d8-437b-af68-3a404da9e40b.

Проверка Результат
История установленного расширения Одна карточка между 25ee6c04… и 5134a9b5…; правильный request_id, причина и «Команда не отправлена».
Копирование Панель показывает «ID скопирован». Точный аргумент clipboard.writeText проверен unit-тестом; чтение системного буфера через browser tool не подтвердилось и не используется как доказательство его содержимого.
Переход из карточки Реальный клик открыл Monitor с правильными session_id/request_id и section=phrase.
Границы Отсутствовали → 0,152–2,496 с, длительность 2,344 с.
Прослушивание Chrome: readyState=4; воспроизведение дошло до 2,344 с, ended=true, paused=true.
Диагностика «Фраза + контекст»: 0,000–3,496 с; передано 3,496 / 3,496 с PCM.
Завершение 7,15 с, соединение закрыто, слот освобождён.
Итог модели Whisper Turbo снова вернул rejected / low_confidence. Это результат распознавания; прежняя блокировка доступа к аудио устранена.

Время этого прогона: подготовка 0,87 с; предзагрузка и подключение 1,28 с; подача PCM 1× 3,49 с; завершение ASR 1,32 с. Это один функциональный прогон, не медиана и не p95. Очередь модели 0,1–0,2 мс, отдельные Decoder-вызовы 145,1–150,8 мс. Эти измерения не смешиваются со временем интерфейса.

В установленном расширении восстановились 26 ответов с Markdown и 7 таблиц. После обновления серверов панель сначала показала ошибку выдачи доступа; штатная кнопка «Повторить» восстановила подключение и историю. Повторный вход/перезагрузка расширения не понадобились. В новой вкладке Monitor после перехода из карточки ошибок console не зарегистрировано.

Восстановленная карточка в установленном расширении

Проверки

Pipeline 5413, все пять обязательных проверок PASS:

Проверка Job
Python 23932
Browser NATS 23933
Frontend 23934
Ruby 23935
Dialog integration 23936

Локально:

  • Frontend: 438 тестов / 61 файл, TypeScript и Vite PASS; npm audit — 0 уязвимостей.
  • Python: 247 passed, 1 skipped, 13 subtests. Реальные PostgreSQL/NATS integration: 41 passed, 2 subtests.
  • Дополнительная адресная проверка контрактов/Monitor: 63 passed, 2 subtests; этот набор пересекается с остальными, числа не суммируются.
  • Ruby release: 30 runs, 229 assertions. CI lint и git diff --check PASS.
  • Проверены совместимость старого widget_history, порядок/дедупликация отказов, изоляция отображения в соседней вкладке без инструментов, поздние окна, повторная доставка, отсутствие координат, повреждённый PCM, повтор активной фразы, ограниченность и идемпотентность исторического восстановления. Эти межвкладочные и граничные случаи подтверждены автоматическими тестами, а не новым физическим голосовым прогоном в нескольких вкладках.
  • Реальный renderer проверен в браузере: восстановление и повторная доставка, незавершённая разметка, HTML/опасные ссылки, отсутствие img-загрузок, внутренний scroll таблиц/кода. Светлая и тёмная поверхности, ширина 390 px — без горизонтального переполнения страницы. Продукционная проверка: светлая панель расширения и тёмный Monitor. Временные viewport overrides сняты.

ZIP и отдельный сбой CI

Job build Chrome extension 23939 собрал расширение, но завершился ошибкой при загрузке artifact: DNS runner не разрешил gitlab (server misbehaving). Поэтому весь pipeline не объявляется зелёным, несмотря на PASS пяти обязательных checks и успешные серверные rollout.

ZIP 1.8.2 отдельно опубликован в GitLab Package Registry. Скачанный пакет побайтно совпал с проверенным локальным ZIP.

  • Размер: 946 115 байт.
  • SHA-256: ff3dac5e42b8c23929b4f2d462a25169cb876f97ebc5b13536255445d255684f.
  • Локальный ZIP.

Объём изменений и доказательства

43 файла, +578 / −103 строки; итог +475. Новых сервисов и таблиц: 0. Новая библиотека renderer: 1. Новая ручная операция CI для ограниченного восстановления: 1.

Исходник

Скачать Markdown · К материалам исследования