WEB-372 · Задача · — · web
P2 [голос]: inline-цитаты в голосовом режиме (WebRTC) — паритет с чатом (цифры+подсветки источников на лету)
Закрыт
P2
ведёт: fable-coordinator
Суть
## ДЛЯ НУЛЕВОГО АГЕНТА (обновлено 2026-09-05 UTC)
- **Суть одной строкой:** P2 [голос]: inline-цитаты в голосовом режиме (WebRTC) — паритет с чатом (цифры+подсветки источников на лету)
- **Текущее состояние:** статус: done; Владелец 05.09 ~01:18Z (l106): голосовой диалог через WebRTC, экспорт chat-json-2026-09-05T01-18-11-410Z.json — 10 сообщений channel:"voice", у ассистента ни одного [n] и нет поля citations; модель: «1032 не охвачен», «по 1027.txt только карточка, текст не загружен в realtime-контекст», «нет соде… | Проверка «докладывали, что сделано»: волна 1297 (02.09, INLINECITATIONS, WEB-486/487) провела realtime-транскрипт через общий CitationText и сохранение provider citations в Message/realtimeLogs/VoiceTurn.citationsJson — коммит a453b16897 на проде (предок l106: ДА). Коммит приёмки ACCINLINECITATIO… | В голосовом режиме нет [n]: экспорт чата → channel: voice, у ассистента нет поля citations; модель говорит «текст не загружен в realtime-контекст» → в контекст идут только карточки источников, retrieval/судья цитат не участвуют. Рендер/persist цитат для voice есть на проде (a453b168, волна 1297).… | [05.09 04:48Z координатор] Автор (волна 1904 VOICECITE, A2, opus) = GO, коммит 35e4bfdf поверх 6930c683. Причина не в рендере (полотно канал-агностично), а в трёх обрывах до него: (1) голосовой ретривал жил в браузерном сторе без тела источников (persistNotebookState partial, sync summary) → «тол… | [05.09 07:32Z координатор] ПРИЁМКА (ACCVOICECITE, M4 luna) = GO, коммит 35e4bfdf поверх 6930c683: в voice transcript тот же контракт inline-цитат, что в typed chat (все транспорты). Кандидат в l108. | [05.09 08:28Z координатор] l108 (c3ff5d94c) СЕЛ на прод 08:26Z: оба бэкенда, edge ×8, paid ok, воркеры на l108. Голосовые inline-цитаты (35e4bfdf) в живой линии, все транспорты.
- **Кто работал:**
- 2026-09-05T01:30:40.174Z — координатор — Владелец 05.09 ~01:18Z (l106): голосовой диалог через WebRTC, экспорт chat-json-2026-09-05T01-18-11-410Z.json — 10 сообщений channel:"voice", у ассистента ни одного [n] и нет поля citations; модель: «1032 не охвачен», «п
- 2026-09-05T01:31:46.013Z — координатор — Проверка «докладывали, что сделано»: волна 1297 (02.09, INLINECITATIONS, WEB-486/487) провела realtime-транскрипт через общий CitationText и сохранение provider citations в Message/realtimeLogs/VoiceTurn.citationsJson —
- 2026-09-05T01:41:11.761Z — координатор — KNOWN ISSUES / ТРАБЛШУТИНГ (правило владельца 05.09: в каждом тикете — чтобы смены не спотыкались об одно место): В голосовом режиме нет [n]: экспорт чата → channel: voice, у ассистента нет поля citations; модель говорит
- 2026-09-05T04:48:03.137Z — coordinator — [05.09 04:48Z координатор] Автор (волна 1904 VOICECITE, A2, opus) = GO, коммит 35e4bfdf поверх 6930c683. Причина не в рендере (полотно канал-агностично), а в трёх обрывах до него: (1) голосовой ретривал жил в браузерном
- 2026-09-05T07:32:32.310Z — coordinator — [05.09 07:32Z координатор] ПРИЁМКА (ACCVOICECITE, M4 luna) = GO, коммит 35e4bfdf поверх 6930c683: в voice transcript тот же контракт inline-цитат, что в typed chat (все транспорты). Кандидат в l108.
- 2026-09-05T08:28:53.699Z — coordinator — [05.09 08:28Z координатор] l108 (c3ff5d94c) СЕЛ на прод 08:26Z: оба бэкенда, edge ×8, paid ok, воркеры на l108. Голосовые inline-цитаты (35e4bfdf) в живой линии, все транспорты.
- **Ветки/бандлы/отчёты:** нет данных в тикете; sha: a453b16897, d2750ad942, a453b168, 35e4bfdf, 6930c683, c3ff5d94c
- **KNOWN ISSUES / ТРАБЛШУТИНГ:**
- Проверка «докладывали, что сделано»: волна 1297 (02.09, INLINECITATIONS, WEB-486/487) провела realtime-транскрипт через общий CitationText и сохранение provider citations в Message/realtimeLogs/VoiceTurn.citationsJson — коммит a453b16897 на проде (предок l106: ДА). Коммит приёмки ACCINLINECITATIO…
- KNOWN ISSUES / ТРАБЛШУТИНГ (правило владельца 05.09: в каждом тикете — чтобы смены не спотыкались об одно место):
- В голосовом режиме нет [n]: экспорт чата → channel: voice, у ассистента нет поля citations; модель говорит «текст не загружен в realtime-контекст» → в контекст идут только карточки источников, retrieval/судья цитат не участвуют. Рендер/persist цитат для voice есть на проде (a453b168, волна 1297).…
- [05.09 04:48Z координатор] Автор (волна 1904 VOICECITE, A2, opus) = GO, коммит 35e4bfdf поверх 6930c683. Причина не в рендере (полотно канал-агностично), а в трёх обрывах до него: (1) голосовой ретривал жил в браузерном сторе без тела источников (persistNotebookState partial, sync summary) → «тол…
- **Эволюция:**
- 2026-09-05 → Владелец 05.09 ~01:18Z (l106): голосовой диалог через WebRTC, экспорт chat-json-2026-09-05T01-18-11-410Z.json — 10 сообщений channel:"voice", у ассистента ни одного [n] и нет поля citations; модель: «1032 не охвачен», «по 1027.txt только карточка, текст не заг
- 2026-09-05 → Проверка «докладывали, что сделано»: волна 1297 (02.09, INLINECITATIONS, WEB-486/487) провела realtime-транскрипт через общий CitationText и сохранение provider citations в Message/realtimeLogs/VoiceTurn.citationsJson — коммит a453b16897 на проде (предок l106:
- 2026-09-05 → KNOWN ISSUES / ТРАБЛШУТИНГ (правило владельца 05.09: в каждом тикете — чтобы смены не спотыкались об одно место): В голосовом режиме нет [n]: экспорт чата → channel: voice, у ассистента нет поля citations; модель говорит «текст не загружен в realtime-контекст»
- 2026-09-05 → [05.09 04:48Z координатор] Автор (волна 1904 VOICECITE, A2, opus) = GO, коммит 35e4bfdf поверх 6930c683. Причина не в рендере (полотно канал-агностично), а в трёх обрывах до него: (1) голосовой ретривал жил в браузерном сторе без тела источников (persistNotebo
- 2026-09-05 → [05.09 07:32Z координатор] ПРИЁМКА (ACCVOICECITE, M4 luna) = GO, коммит 35e4bfdf поверх 6930c683: в voice transcript тот же контракт inline-цитат, что в typed chat (все транспорты). Кандидат в l108.
- 2026-09-05 → [05.09 08:28Z координатор] l108 (c3ff5d94c) СЕЛ на прод 08:26Z: оба бэкенда, edge ×8, paid ok, воркеры на l108. Голосовые inline-цитаты (35e4bfdf) в живой линии, все транспорты.
- Владелец 05.09 ~01:18Z (l106): голосовой диалог через WebRTC, экспорт chat-json-2026-09-05T01-18-11-410Z.json — 10 сообщений channel:"voice", у ассистента ни одного [n] и нет поля citations; модель: «1032 не охвачен», «по 1027.txt только карточка, текст не загружен в realtime-контекст», «нет соде…
- Проверка «докладывали, что сделано»: волна 1297 (02.09, INLINECITATIONS, WEB-486/487) провела realtime-транскрипт через общий CitationText и сохранение provider citations в Message/realtimeLogs/VoiceTurn.citationsJson — коммит a453b16897 на проде (предок l106: ДА). Коммит приёмки ACCINLINECITATIO…
- KNOWN ISSUES / ТРАБЛШУТИНГ (правило владельца 05.09: в каждом тикете — чтобы смены не спотыкались об одно место):
- [05.09 04:48Z координатор] Автор (волна 1904 VOICECITE, A2, opus) = GO, коммит 35e4bfdf поверх 6930c683. Причина не в рендере (полотно канал-агностично), а в трёх обрывах до него: (1) голосовой ретривал жил в браузерном сторе без тела источников (persistNotebookState partial, sync summary) → «тол…
- [05.09 07:32Z координатор] ПРИЁМКА (ACCVOICECITE, M4 luna) = GO, коммит 35e4bfdf поверх 6930c683: в voice transcript тот же контракт inline-цитат, что в typed chat (все транспорты). Кандидат в l108.
- [05.09 08:28Z координатор] l108 (c3ff5d94c) СЕЛ на прод 08:26Z: оба бэкенда, edge ×8, paid ok, воркеры на l108. Голосовые inline-цитаты (35e4bfdf) в живой линии, все транспорты.
- **Следующий шаг:** Владелец 05.09 ~01:18Z (l106): голосовой диалог через WebRTC, экспорт chat-json-2026-09-05T01-18-11-410Z.json — 10 сообщений channel:"voice", у ассистента ни одного [n] и нет поля citations; модель: «1032 не охвачен», «по 1027.txt только карточка, текст не загружен в realtime-контекст», «нет соде… | Проверка «докладывали, что сделано»: волна 1297 (02.09, INLINECITATIONS, WEB-486/487) провела realtime-транскрипт через общий CitationText и сохранение provider citations в Message/realtimeLogs/VoiceTurn.citationsJson — коммит a453b16897 на проде (предок l106: ДА). Коммит приёмки ACCINLINECITATIO…
Доказательства
[2026-08-25 20:38Z] Смежное рыночное исследование звонков (callscaleres, 54 источника) доставлено owner: Telegram-шлюзы серая зона (не офиц.API), Signal автодозвон запрещён ToS, индустрия=гибрид мессенджер-сигналинг+WebRTC/SIP. Рекоменд: общий WebRTC/SIP кор. Отчёт A1:CALLSCALERES-REPORT.md.
[2026-08-26 01:35Z] Автор web372 @2e5536d: inline-цитаты в голосовом режиме — текстовая дорожка realtime получает тот же цитат-байндинг что чат, чипы в текстовом зеркале; отражены chip-integrity правила WEB-367 (голос не может показать незаработанную ссылку). Тесты 30/30, платных вызовов не было. -> review.
[2026-08-26 02:20Z] acc372 NO-GO: ДВА негатива провалены — подделанный marker в текстовой дорожке СОЗДАЁТ чип (несвязанный источник с общими токенами принят: citationIds:['unrelated'] для 'launch date [1]' против 'recipe for lentil soup'). 4 других сценария PASS. Фикс web372fix: порог перекрытия/верификации не слабее чатового, переиспользовать verifier WEB-367.
[2026-08-26 03:10Z] ФИКС web372fix: порог перекрытия/верификации голосовых чипов приведён к чатовому (переиспользован verifier WEB-367), подделанный маркер больше не создаёт чип. Тесты 35/35. -> review, запущена повторная приёмка acc372b.
[2026-08-26 03:18Z] ПРИНЯТ acc372b (повторно, независимо): GO — подделанный маркер с несвязанным источником больше НЕ создаёт чип, порог голосовых цитат равен чатовому (verifier WEB-367 переиспользован), позитив и 4 прежних PASS-сценария зелёные. Голосовые inline-цитаты готовы. -> done.
[29.08 21:20Z] Owner спросил судьбу голосовых цитат (не был уверен, что тикет заводился). Подтверждено: заведён/реализован/принят 26.08, код в l70 (VoiceResultCard + verifier WEB-367, git grep по 3ec0f19d). Живьём не видно из-за WEB-445 (голос мёртв на auth-границе). После посадки l71+SVCIDENT: пункт живой пробы — «цифры-цитаты и подсветки во время голосового диалога, паритет с чатом»; отсутствие = регресс, заводить дефект.
Починено в
a453b16
Лента
2026-09-05T01:30:40.174Z · координаторВладелец 05.09 ~01:18Z (l106): голосовой диалог через WebRTC, экспорт chat-json-2026-09-05T01-18-11-410Z.json — 10 сообщений channel:"voice", у ассистента ни одного [n] и нет поля citations; модель: «1032 не охвачен», «по 1027.txt только карточка, текст не загружен в realtime-контекст», «нет содержания 1098». Вывод: в голосовом режиме в контекст идут карточки источников без текста, retrieval и судья цитат не участвуют → инлайн-цитат нет. Ожидание владельца: паритет с чатом для всех голосовых транспортов (WebRTC, SIP, Telegram, Signal) — [n] в полотне чата. На доске нет отчёта о выполнении WEB-372 (тело пустое с 29.08; grep по отчётам волн A1/A2/M4 — пусто). Авторская волна → 1894-voicecite (A2, opus): карта голосового пути, retrieval до ответа + пост-привязка транскрипта тем же судьёй цитат, общий интерфейс для транспортов, red/green на стенде. Связано: WEB-487 (маркеры сущностей в транскрипте), WEB-99 (1884 — «не вижу документы» в тексте), WEB-449. Правила: WEB-449.
2026-09-05T01:31:46.013Z · координаторПроверка «докладывали, что сделано»: волна 1297 (02.09, INLINECITATIONS, WEB-486/487) провела realtime-транскрипт через общий CitationText и сохранение provider citations в Message/realtimeLogs/VoiceTurn.citationsJson — коммит a453b16897 на проде (предок l106: ДА). Коммит приёмки ACCINLINECITATIONS d2750ad942 на линии НЕТ (проверить в 1894, тесты ли это). Итог: «показывалка» цитат в голосе на проде есть, но realtime-контекст содержит только карточки источников (без текста/чанков), провайдер цитат не возвращает → рендерить нечего. Недостающее — retrieval и судья цитат в голосовом пути (все транспорты) → 1894-voicecite. Правила: WEB-449.
2026-09-05T01:41:11.761Z · координаторKNOWN ISSUES / ТРАБЛШУТИНГ (правило владельца 05.09: в каждом тикете — чтобы смены не спотыкались об одно место):
В голосовом режиме нет [n]: экспорт чата → `channel: voice`, у ассистента нет поля citations; модель говорит «текст не загружен в realtime-контекст» → в контекст идут только карточки источников, retrieval/судья цитат не участвуют. Рендер/persist цитат для voice есть на проде (a453b168, волна 1297). Проверка: экспорт чата после голосового диалога — поле citations у assistant. Волна 1894 (A2).
2026-09-05T04:48:03.137Z · coordinator[05.09 04:48Z координатор] Автор (волна 1904 VOICECITE, A2, opus) = GO, коммит 35e4bfdf поверх 6930c683. Причина не в рендере (полотно канал-агностично), а в трёх обрывах до него: (1) голосовой ретривал жил в браузерном сторе без тела источников (persistNotebookState _partial, sync summary) → «только карточка источника», REALTIME_RETRIEVAL_UNAVAILABLE; теперь card-only ход исполняется серверным POST /api/realtime/tool-call из PostgreSQL с fallback; (2) улики без идентичности → retrieveRealtimeEvidence → {context, evidence}, строковый контракт побайтово прежний, маршрут отдаёт citations; (3) телефония считала цитаты (VoiceTurn.citationsJson), но buildTelephonyCanvasMessages не читал, GET /api/sync не выбирал поле. Привязка утверждение→источник — детерминированный судья src/lib/chat/claimEvidenceMatch.ts (вынесен из evidenceGrounding без изменения весов). Приёмка 1944-accvoicecite (M4, luna): все транспорты, экспорт как в текстовом чате, негатив «маркер зарабатывается».
2026-09-05T07:32:32.310Z · coordinator[05.09 07:32Z координатор] ПРИЁМКА (ACCVOICECITE, M4 luna) = GO, коммит 35e4bfdf поверх 6930c683: в voice transcript тот же контракт inline-цитат, что в typed chat (все транспорты). Кандидат в l108.
2026-09-05T08:28:53.699Z · coordinator[05.09 08:28Z координатор] l108 (c3ff5d94c) СЕЛ на прод 08:26Z: оба бэкенда, edge ×8, paid ok, воркеры на l108. Голосовые inline-цитаты (35e4bfdf) в живой линии, все транспорты.
Воркер
не привязан — привязать:
curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \
-d '{"issueId":"WEB-372","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-09-05T21:05:36.494Z