WEB-481 · Задача · Голос · web
Продукт: пользовательские настройки телефонии/мессенджеров — может ли «домохозяйка» поднять SIP-телефон, Telegram, Signal, WhatsApp по тому, что видит в меню (аудит + починка)
Закрыт
P1 · важно
ведёт: —
Суть
Owner 02.09 16:43 (voice): «пользователю где-то выдаём настройки SIP: сервер, порт, прокси, логин, пароль, номер; QR для Linphone у меня не сработал (может, сам Linphone); разные номера разным юзерам; должен зайти как домохозяйка и увидеть настройки для SIP-телефона, Telegram, Signal, WhatsApp — прописано ли, что вводить. Снарядить кого-то на глубокий анализ.» Известные факты для аудита: (1) 01.09 — provisioning-метаданные обещали 5074/tcp, реальный клиент owner-а регистрировался на 5060/udp (линия native) → расхождение в выдаваемых настройках (WEB-370 body 01.09 14:00Z); (2) Linphone не согласовывал media_encryption=sdes (force_avp+optimistic) — SRTP-параметр в выдаче; (3) пароль SIP в pjsip-generated auth (proof7016) ≠ ag701626290 из DB metadata — источник правды для пароля в UI под вопросом; (4) три линии телефонии (память telephony-three-lines-correct): native 5060/udp, opus-experimental 5074; внешний адрес 129.213.25.105 за NAT; (5) PIN на 8000 закрыт (WEB-395/476/474), номера 7016/8000/8010. План: аудит-волна 1270-sipsettingsaudit (A1): карта UI под QA со скриншотами, сверка каждой выданной величины с живым A1 (pjsip endpoint/auth/transport), декод QR (стандарт Linphone provisioning), per-user номера и политика «могут ли звонить друг другу», то же для Telegram/Signal/WhatsApp (что работает, что декорация) → список дефектов P0/P1/P2 → фикс-волны → приёмка → l92+.
Лента
2026-09-02T17:40:16.576Z · Fable[A1 18:22 Фабл] Аудит 1270-sipsettingsaudit сдан: A1 /home/ubuntu/waves/SIPSETTINGSAUDIT-REPORT.md (209 строк) + 21 файл evidence (скриншоты прода под QA). Короткий ответ: НЕТ — обычный пользователь по тому, что видит, SIP-телефон не поднимет. 12 дефектов: P0 (1) нет полного комплекта SIP-данных (нет endpoint/extension/password, generic server и активная пустая кнопка) — connections.ts:782–819, ConnectionsWorkspace.tsx; (2) 7016: credential/transport в DB и живом Asterisk несовместимы → QR из DB не аутентифицируется (sipProvisioning.ts:59–96 vs pjsip-generated.conf); (3) provisioning XML не задаёт media-профиль (SDES/codec) — Asterisk SDES optimistic → Linphone не сходится. P1 (4) порты 5060/5074/5160 — три истины (sidecar default 5160, infra 5074, QA 5060); (5) nb.wool2.online vs sip.wool2.online как разные SIP domain/realm; (6) UI обещает пароль «от оператора», API отдаёт null; (7) Signal route 404 при видимой карточке, WhatsApp self-service без runtime health (последняя активность 30.04); (8) номер выглядит внутренним, dialplan per-user не маршрутизирует; (9) allocator считает уникальность в user scope при глобальном constraint. P2 (10–12) три похожих раздела, нет инструкции «что вводить», жаргон. Мессенджеры: Telegram-текст жив; Signal не поднимается (WEB-471); WhatsApp нельзя обещать; Telegram calls — пилот. Конфигом (§7): единый public lane sip.wool2.online 5060/UDP, sync credential 7016 (после — старый пароль отозван, owner перерегистрирует Linphone по новому QR), гейт Signal/WhatsApp. → волна 1288-sipsettingsfix (A1): P0 1–3 + P1 4–9 в коде (один генератор/deploy target + drift-guard, XML media-профиль, SIP_PUBLIC_LANES descriptor, честные статусы, i18n-инструкция). Dialplan per-user — отдельно (WEB-479 зона).
2026-09-02T17:47:34.352Z · Fable[A1 17:55 Фабл] Уточнения owner-а (voice 17:45): WhatsApp у нас — только текст через ссылку/код доступа к боту (как Telegram), звонки не работают → в фиксе WhatsApp-текст сохраняется с честной проверкой живости моста (провайдерский webhook: src/app/api/messenger/v1/whatsapp/*; последняя активность 30.04 по аудиту — проверить на проде), calls = недоступны. Требование owner-а: экран настроек SIP/мессенджеров для «домохозяйки» должен быть сделан правильно с точки зрения продакт-дизайна и GUI («по фэн-шую»). План: 1288-sipsettingsfix = суть (данные/источник правды/статусы/инструкция); затем отдельная продуктовая волна UX/GUI (единый раздел, шаги, без жаргона, макет) → визуальная приёмка owner-ом (не rubber-stamp) → l92+.
2026-09-02T18:56:43.686Z · Fable[A1 19:15 Фабл] Волна 1288-sipsettingsfix сдана: коммит f8667d8b66 (ветка sipsettingsfix-1288, база l91-candidate) — P0 1–3 и P1 4–9 по аудиту 1270 (комплект данных, один источник правды credential/transport + drift-guard, XML media-профиль, SIP_PUBLIC_LANES descriptor, realm, пароль, Signal/WhatsApp gating, номера). Отчёт: A1 /home/ubuntu/waves/SIPSETTINGSFIX-REPORT.md. Дальше: приёмка 1320-accsipsettingsfix (A1, другой verifier, сверка с живым pjsip A1) → GO → l93 → конфиг при посадке (единый lane 5060/UDP, sync credential 7016 → owner перерегистрирует Linphone по новому QR) → отдельная UX/GUI-волна с макетом на визуальную приёмку owner-а. Бандл: A1 mirrors/lines/sipsettingsfix-1288.bundle; A2 ref sipsettingsfix-1288/head.
2026-09-02T19:42:07.324Z · Fable[A1 20:40 Фабл] Приёмка 1320-accsipsettingsfix = NO-GO (sol, отчёт A1 /home/ubuntu/waves/ACCSIPSETTINGSFIX-REPORT.md). Блокеры: P0-2 остаётся второй writer pjsip-generated.conf (infra/sip/sync-dynamic-sip-endpoints.ts + experimental launch-скрипты) и drift-guard не видит подмену realm (фикстура: тот же digest + realm=wrong → ready вместо drift); P0-3 в XML provisioning нет overwrite=true → Linphone не обязан применить; P1-9 allocator рекомендует номер без атомарной резервации; P1-5 live 7016 всё ещё userpass без realm на 5060. Что исправлено: P0-1 и большинство P1-контрактов. Круг 2 = волна 1329-sipsettingsfix2 (A1, Luna xhigh, от коммита f8667d8b66): один генератор, guard по realm/transport/port/encryption/codecs, overwrite=true, атомарный allocator, runbook посадки (sync 7016 → owner перерегистрирует Linphone → register/media smoke на живом lane). Затем приёмка 1330 → l93/l94 → конфиг lane 5060/UDP на проде.
2026-09-02T20:22:03.708Z · Fable[A1 20:25 Фабл] 1329-sipsettingsfix2 сдана: коммит 10e1e9db0f (A1), круг 2 (один генератор pjsip, drift-guard по realm/transport/port/encryption/codecs, XML overwrite=true, атомарный allocator, runbook). Дальше: приёмка 1330-accsipsettingsfix2 (A1, в очереди), в бриф добавлен atomic write pjsip-generated.conf после инцидента 19:50.
2026-09-02T20:52:00.101Z · Fable[A1 20:58 Фабл] Приёмка 1330-accsipsettingsfix2 = NO-GO (отчёт A1 /home/ubuntu/waves/ACCSIPSETTINGSFIX2-REPORT.md). Закрыто: второй writer делегирует canonical renderer; drift-guard по realm и др.; XML overwrite. Осталось: (1) публикация pjsip-generated.conf не атомарна (прямой writeFile без temp+rename; launcher start-sip-native.sh:303 обнуляет target до старта) — fault-injection даёт 0 байт, ровно инцидент 19:50; (2) allocator: SERIALIZABLE + advisory lock не выдерживает реальную гонку на PostgreSQL 16 (serialization failure → 500), авторский мок сериализовал транзакции целиком; (3) runbook POST_L93_LANDING.md без единой команды — координатору не исполним; (4) тестовый gate не закреплён. Круг 3 = волна 1346-sipsettingsfix3 (A1, Luna xhigh, от 10e1e9db).
2026-09-02T21:30:26.850Z · Fable[A1 21:57 Фабл] Owner 21:28: «продуктово-дизайнерская часть вывода настроек SIP для домохозяйки до сих пор пилится?» — честно: не была запущена (ждала бэкенд-круга). Запускаю параллельно: волна 1374-sipsettingsux (M4, Luna xhigh): UX-спека docs/sip/SETTINGS-UX.md, один экран (данные для Linphone с copy, QR/provisioning, проверка регистрации, drift-баннер), компонент + Playwright-скриншоты 3 состояний + HTML-макет → визуальная приёмка owner-ом. Бэкенд круг 3 (1356) бежит на A1.
2026-09-02T21:34:11.076Z · Fable[A1 22:05 Фабл] Волна 1356-sipsettingsfix3 (перезапуск 1346 после капа) сдана: коммит 7374d522e5 (атомарная публикация pjsip-generated.conf + launcher не обнуляет target; allocator с учётом MVCC/P2034; copy-paste runbook POST_L93_LANDING.md; закреплённый тестовый gate). Отчёт: A1 /home/ubuntu/waves/SIPSETTINGSFIX3-REPORT.md. Дальше: приёмка 1377-accsipsettingsfix3 (A1, Sol high, в очереди) → l94 → конфигурация lane 5060/UDP на проде по runbook → перерегистрация Linphone owner-ом; UX-часть — волна 1374 (M4).
2026-09-02T22:31:34.285Z · Fable[A1 00:35 Фабл] OWNER 22:30 UTC (Telegram): «UX O.K.» — визуальная приёмка макета настроек SIP «для домохозяйки» (волна 1374, коммит 19046f8a; 3 состояния × desktop/mobile, артефакт https://claude.ai/code/artifact/76ca11a5-5ae8-455c-9130-71f95f7c185e) ПРИНЯТА owner-ом без замечаний. Дальше: техприёмка 1396-accsipsettingsux (M4, после восстановления codex-auth) → l94 вместе с бэкенд-кругом 3 (1356 → приёмка 1377).
2026-09-02T22:37:59.722Z · Fable[A1 01:20 Фабл] Приёмка 1377-accsipsettingsfix3 = NO-GO (отчёт A1 /home/ubuntu/waves/ACCSIPSETTINGSFIX3-REPORT.md). PASS: атомарная публикация pjsip-generated.conf, launcher не обнуляет target, allocator/API для продукта, закреплённый gate. Блокеры: (1) preflight runbook фильтрует ss -lunp по $5 вместо $4 → всегда 0 совпадений и стоп; (2) canonical sync редактирует sipPassword до сохранения → одноразовый пароль недоступен для передачи owner-у; (3) unit-фейк allocator сериализует транзакции. РЕШЕНИЕ по (2): единственная ротация делается owner-ом в UI (экран «Мой номер» 1374, кнопка «перевыпустить»), runbook получает только redacted receipt и сверяет с живой конфигурацией. Круг 4 = волна 1401-sipsettingsfix4 (A1, Luna high, от 7374d522).
2026-09-02T23:20:22.314Z · Fable[A1 03:10 Фабл] Приёмка 1396-accsipsettingsux (UX) = NO-GO технически (визуально owner принял «UX O.K.»): drift сравнивает только host/port/transport (serverIp/mediaEncryption/codecs игнорируются, drifted:false гасит проверку); тест на node:test, а не Vitest; preview-моки ?preview= в production-компоненте показывают ложный «Registered»; touch-targets <44 px; скриншоты не с точного коммита. Круг 2 = волна 1410-sipsettingsux2 (M4, Luna high, от 19046f8a), раскладка не меняется. Из отчёта — контракт backend для честного «Registered» (user-scoped probe endpoint, registrationStatus/lastRegistrationAt/clientIp) → в backend-круг 5.
2026-09-02T23:59:55.240Z · Fable[A1 06:15 Фабл] Волна 1401-sipsettingsfix4 сдана: коммит 1e2f9870fd (preflight по правильному полю ss; ротация — owner в UI, runbook только redacted receipt; конкурентный unit-фейк/PG16-gate; полный dry-run). Отчёт: A1 /home/ubuntu/waves/SIPSETTINGSFIX4-REPORT.md. Приёмка 1425 (A1, Sol high, в очереди) → l95 → конфигурация lane на проде.
2026-09-03T00:14:44.581Z · Fable[A1 07:05 Фабл] Волна 1410-sipsettingsux2 сдана: коммит 8e1481bb26 (drift по всем операционным полям, Vitest, preview вне prod-path, touch 44px, контракт Registered). Приёмка 1430 (M4, Sol high, в очереди) → l95.
2026-09-03T00:35:31.268Z · Fable[A1 08:50 Фабл] Приёмка 1430-accsipsettingsux2 = GO (M4, Sol): drift по всем операционным полям, Vitest, preview вне prod-path, touch ≥44 px, раскладка совпадает с принятым owner-ом макетом. Линия sipsettingsux2 (8e1481bb) идёт в l95-candidate.
2026-09-03T02:14:29.832Z · Fable[A1 Фабл] Приёмка 1425-accsipsettingsfix4 = GO (независимая, Sol high). Коммит 1e2f9870 (sipsettingsfix4, круг 4 «домохозяйка поднимает SIP по меню»). Идёт в l95-candidate на A2 (cherry-pick поверх l94+sipsettingsux2). Проверка на проде после посадки l95: выдача настроек SIP в UI = живая конфигурация ag-sip-native.
2026-09-03T03:16:03.454Z · Fable[A1 Фабл] Обе принятые линии WEB-481 (sipsettingsux2 8e1481bb, sipsettingsfix4 1e2f9870) слиты в базу l95 волной 1438b (9c2a29db, конфликт ConnectionsWorkspace.tsx решён объединением). Дальше — финальная сборка l95 и сборка/посадка.
2026-09-03T05:15:09.249Z · Fable[A1 Фабл] ПОСАЖЕНО в l95 (f7b9a4fd). Owner-у отправлены шаги POST_L93: ротация 7016 в «Мой номер» + Linphone (UDP 5060, SDES optimistic, ulaw/alaw) → Registered → звонок 9999.
2026-09-08T13:30:28.945Z · coordinator[08.09 13:30Z координатор] Статус → **review**. Принято независимой приёмкой ACCEDITORPROD = GO. Настройки телефонии берутся из того же источника, что живая конфигурация шлюза — расхождение 5074/tcp против 5060/udp закрыто; пароль SIP не попадает ни в журналы, ни в разметку. В линию ещё не собрано.
2026-09-08T15:51:06.401Z · coordinator[08.09 15:51Z координатор] Статус → **done**. настройки телефонии берутся из того же источника, что живая конфигурация шлюза — расхождение 5074/tcp против 5060/udp закрыто; пароль SIP не попадает ни в журналы, ни в разметку
Посажено на прод линией **l113u** `4e0e5406db8b3844bfc7bc43148c37ddd4cdbf99` (артефакт `me2-standalone-linux-arm64-4e0e5406-20260908T151242Z`, sha256 `43a6d010…`), флип 08.09 15:34Z.
Проверено ПОСЛЕ флипа, не по факту деплоя: оба бэкенда `ready=true` и `paidReady=true` с новым releaseId; корень `https://app.sixbyy.com/` = 200; вебхук Telegram = 401; готовность SIP 4080 = 200; строк `LEASE_LOST` — 0.
Откат: l113t `a45e820c7ec1043fe601974fe24fe5026eaaf118`, релиз `arm64-l113t-20260908T131657Z`.
Воркер
не привязан — привязать:
curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \
-d '{"issueId":"WEB-481","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-09-08T15:51:06.400Z