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.
- Локальные проверки.
- Браузерные результаты.
- Gateway rollout, Front rollout, восстановление границ.
- Renderer на 390 px, обе поверхности.