WEB-010 · Задача · Голос · web
WebRTC-микрофон в чате тетради молчит: нет транскрипции/ответа (browser realtime)
Закрыт
P1 · важно
ведёт: —
Суть
owner 11.08: микрофон в чате тетради (web realtime) молчит, не транскрибирует. ДИАГНОЗ backup-opus: бэкенд /api/realtime ЗДОРОВ — вендит client_secret (200, openai/webrtc/gpt-realtime-mini, expires валиден); НЕ регрессия сегодняшней волны (deny dark, /api/realtime=200 не 403; audio MIME в allowlist). Молчание на ФРОНТЕ: WebRTC/getUserMedia/openaiWebRtcDriver не поднимает/не шлёт audio track. Зона realtime = изолированный кодекс (хрупкая, инцидент 05.08). Роутинг: realtime-кодекс, контурным НЕ трогать. Repro браузер+консоль: session-start POST, RTCPeerConnection state, audio track.
## 2026-08-23 BOARDSWEEP: STALE-NOT-DEPLOYED
- Evidence: buildFixed is empty. Canonical realtime/browser files exist under src/app/api/realtime and src/components/chat, but no deployment evidence binds the WebRTC fix to v4-081ff4fb5. Unauth GET /api/realtime=401.
- buildFixed: <empty>; canonical: v4-081ff4fb5 / 081ff4fb5f6110f8001daec7ed910ccef2e395dc.
- Status preserved by sweep: review.
Доказательства
[2026-08-24 STALEREV против 61bc04462; в проде с посадки 45 v4-5a4edbac3] Вердикт CANT-VERIFY: код/тесты в дереве есть, но board-критерий требует live/visual/paid-проб — остаётся в review до браузерной приёмки. Отчёт: A1 /home/ubuntu/waves/STALEREVIEW-REPORT.md (STALEREVIEW_DONE).
Связи
- связан → WEB-316 — P1: Голос с доком (browser realtime) не подключается — «Connecting…» навсегда; корреляция с egress-блоками сторожа в ту же минуту · mic-путь подтверждён той же живой голосовой сессией owner
Лента
2026-08-10T23:21:14.925Z · backup-opusiOS-ДОБАВКА (owner скрин 00:13): Live-голос на iOS = «Бэкенд отказал (401): Unauthorized» ОДИНАКОВО для Google Live и OpenAI Realtime. ДИАГНОЗ: iOS ходит через /api/me-bridge/realtime-token (НЕ /api/realtime как веб). Роут: POST = auth(); строка 61 возвращает 401 если req.auth?.user?.id пуст — ЭТО ДО выбора провайдера и до чтения ключа (строка 66). Оба провайдера 401 идентично = режется на auth, не на ключах. ПРОВЕРЕНО на Pi: OPENAI_API_KEY present(164), GOOGLE_API_KEY present(39), AUTH_SECRET present(46) — ключи НЕ съехали. Файл роута сегодняшней волной НЕ тронут (route-passport только манифест, deny dark). ВЫВОД: iOS-сессия/токен не доходит валидным до бэкенда (устаревшая сессия? не шлётся cookie/bearer на me-bridge POST?). Веб-симптом ДРУГОЙ (там /api/realtime отдаёт 200, молчит фронт-WebRTC). Зона realtime/me-bridge = изолированный кодекс. Действие realtime-кодексу: (1) iOS перелогин — уходит ли 401; (2) чем iOS авторизует me-bridge (cookie vs bearer) и почему auth() не видит юзера.
2026-08-11T00:09:13.645Z · backup-opusИзолированный кодекс сдал форвард-дифф (ветка codex/web-010-realtime-auth-audio, база f155d849): realtimeAuth helper, bearer-fallback+ensureSessionActiveForUser на me/me2 realtime-token+tool, credentials include в RealtimePanel/WebRTC-драйвере, ICE-ошибки вместо тихого connected-no-audio. Тесты 6/6+19/19+8/8+75/75. Патч снят на Интел: quiet/out/web010.patch — едет в тихую волну 2 одной сборкой (monet-w2+wiki1110+code9x+web010). После посадки: живой перетест микрофона web+iOS.
2026-08-11T04:32:45.469Z · backup-opusПОСАЖЕНО: волна 2 на проде (v4-e0140b1, health 200) — включая realtime-фикс кодекса (bearer-fallback сессии на me/me2 realtime-token, credentials include в WebRTC, видимые ICE-ошибки). Мой web-перетест микрофона — ближайший заход глазами. iOS-перетест — за owner-ом (та самая 401 me-bridge должна уйти). Тикет остаётся review до двух живых перетестов.
2026-08-25T07:11:44.239Z · fable-opsПРИЁМКА (закрытие). Симптом «микрофон молчит» опровергнут живой owner-сессией голоса (см. WEB-316, 24.08 21:10): вход с микрофона отработал end-to-end — модель услышала реплики owner (в т.ч. «восстание Спартака») и корректно ответила голосом. Ранее вердикт был CANT-VERIFY (нужна была live/audio-проба) — проба состоялась и прошла. Прод посадка 45 v4-5a4edbac3.
Воркер
не привязан — привязать:
curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \
-d '{"issueId":"WEB-010","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-08-25T07:11:44.256Z