WEB board

всеканоны и докиворкеры↗ iOS↗ Легаси
WEB-509 · Задача · — · web

P1 [телефония]: стартовый скрипт шлюза делает pnpm install при каждом старте — install упал и служба ушла в цикл из 4 падений, снеся регистрацию owner-а

Закрыт P1 · важно ведёт: —
Суть
## ЭВОЛЮЦИЯ 04.09.2026 (карта для нулевого агента)
**Якорь прода:** живая линия **l103**, коммит **d91ebefe740ae83484c1de16710f2e6a68610432**, флип **13:51Z 04.09**. Раньше в этот же день: l101 `d825eb0d`, l102 `1b081c5a`. Ветка линии в репозитории-базе `/home/ubuntu/nc` на A1: `l103-line` (проверено `git branch -a --contains d91ebefe...` → `l103-line`).
**Доска:** живая доска — `web-board.sqlite` + HTTP API `http://127.0.0.1:8787/api/web/*` на M1 (`ssh poolpooly@192.168.1.74`). НЕ `board.sqlite` (это iOS/легаси, таблицы `issues`/`ios_issues`, 2225 строк, ключи другие).

### СЕЙЧАС
Стартовый скрипт шлюза выполняет `pnpm install` при КАЖДОМ старте. Установка может упасть (сеть, прокси, реестр) — тогда шлюз не поднимется, и телефония ляжет по причине, не связанной с кодом.

### ПОЧЕМУ ЭТО СЦЕПЛЕНО С WEB-479/WEB-508
Ближайшая запланированная работа — добавить `SIP_EXPERIMENTAL_LIVE_STREAMING_PLAYBACK_ENABLED` в окружение юнита и перезапустить ([[WEB-479]]). Каждый такой перезапуск сегодня = лотерея `pnpm install` плюс гарантированный слёт всех SIP-регистраций ([[WEB-508]]). Пока это не убрано, любой рестарт — рискованная операция.

### СЛЕДУЮЩЕЕ ДЕЙСТВИЕ
Вынести установку зависимостей из старта: зависимости ставятся один раз при выкладке, старт только запускает процесс. Критерий: с отключённой сетью к реестру шлюз стартует и принимает звонок.

### ЛОВУШКИ
- Живой шлюз `/home/pi/ag-voice` опережает релизную линию примерно на **2 500 строк**, деплой зеркалит **с удалением** — не сажать релиз на `infra/sip/gateway/`.
- Правка стартового скрипта на живом шлюзе: не редактировать файл работающего процесса по месту (инод), писать новый файл и переключать.
Лента
2026-09-04T15:08:17.228Z · coordinator
04.09 координатор: в body добавлен блок «ЭВОЛЮЦИЯ 04.09.2026» — состояние, причина с доказательством, что село, что осталось, ловушки.
2026-09-06T09:49:42.261Z · coordinator
[06.09 09:49Z координатор] [2026-09-06T09:49Z координатор] WEB-509: волна 2241 (A2, luna) сдала 9ad8335c за 4 минуты (VERDICT=GO, отчёт 30 строк) — тонко; приёмка 2249-accweb509 с фейковым pnpm по 6 сценариям. WEB-508: волна 2240-web508-sipreload (A2, luna high) идёт — graceful reload + сохранение регистраций в репо-копии infra/sip; на хост — координатор в окне.
2026-09-06T10:03:14.970Z · coordinator
[06.09 10:03Z координатор] [2026-09-06T10:03Z координатор] Приёмка WEB-509 (2249 ACCWEB509, A2, 6 сценариев с фейковым pnpm) = GO 9ad8335c → кандидат l113f (репо-копия infra/sip; на хост шлюза — координатор в окне вместе с WEB-508).
2026-09-06T12:42:57.635Z · coordinator
[06.09 12:42Z координатор] [2026-09-06T12:42Z координатор] ПОСАЖЕНО: ПРОД = l113f 221e8f39 (flip 12:39:47Z, без простоя; оба бэкенда ready, paid enforce_ready, edge 200×8; миграций новых нет (187/192); hetzbk l113f-221e8f39 + env-pack, Pi standby → l113f). Состав (15 коммитов над l113e): роли C5-C детерминированный отказ на прямом отрицании предиката (9fdfd6fe, 86afe601, 3ad54814, 59d4f3ee), WEB-541 SEC-024 retention contract (ebecd7f2, 3fd18f21), WEB-545 SEC-028 lighthouse headers (c4373797), WEB-509 gateway install (9ad8335c, репо-копия), WEB-463 barge-in + VAD env (0d7b50ee, 44ea7cea), WEB-542 rate-limit на client-account-generation (4891645b), WEB-508 SIP reload (8c76aa7d, b93d862f, репо-копия), WEB-506 куки-баннер (fc462e1d), периметр 500/embed (5837dd0f). Откат = l113e 65ff9060 (RUN l113e-65ff9060, REL arm64-l113e-20260906T101257Z). Снято с линии: WEB-560 merge (Prisma при импорте валил сборку → фикс 2309 → l113g). l113g: WEB-550 ed246cae, WEB-531 merge e8c97f1f, WEB-568 faf26ab9, revive5+499 42b61743, WEB-552 ecca7846 + ждущие: big-PDF r3, roles r3, backfill, 560 fix. Хост-синк SIP (508/509/463) — отдельное окно.
2026-09-06T13:20:22.861Z · coordinator
[06.09 13:20Z координатор] [2026-09-06T13:20Z координатор] ПРИНЯТО: WEB-560 build-fix — 2317 ACCWEB560BUILDFIX (sol xhigh, PG, импорт-тест phase-production-build) = GO 742066c1 → кандидат l113h (вместе с merge-цепочкой). На проде l113g после посадки: большой PDF cmtkm80jo… revive → pending (checkpoint 9801/9801 сохранён; ждём финализацию воркером); big-test 1782161239510l4gl4zzur revive → pending (revive-identity v5). SIP host-sync план (2315, A1) = GO: sync-plan.sh/rollback.sh, COPY allowlist 12, PATCH allowlist 6 — выполняю окном по плану.
2026-09-06T13:39:42.684Z · coordinator
[06.09 13:39Z координатор] [2026-09-06T13:39Z координатор] ОКНО ТЕЛЕФОНИИ 13:31–13:38Z (A1, owner GO): sync-plan.sh --apply 7016 — файлы 508/509/463 скопированы, drop-in 50-web508-reload-persist.conf, reload: PID Asterisk не изменился, контакт 7016 пережил reload, :4080 200; STOP на post-check «AOR 7016 не показывает 90/120/30» (3600/7200 — dynamic AOR из pjsip-generated.conf, dynamic sync на хосте SKIP); rollback.sh STOP «infra-sip archive root is wrong» (ничего не откатил; состояние оставлено — рабочее). Затем restart ag-sip-native для активации barge-in: Asterisk 20.19 поднялся (5060/5061, endpoints=6), :4080 200, но контакт после рестарта не восстановился (0 в +152 с) — persistence регистраций не доказана; владелец перерегистрирует и тестирует звонок/перебивание. Круг 2 плана = 2322-sip-hostsync-fix (A1, sol xhigh). Бэкап: /var/backups/ag-sip-native/20260906T133135Z-3488516-l113f-sync.
2026-09-06T13:45:45.877Z · coordinator
[06.09 13:45Z координатор] [2026-09-06T13:44Z координатор] ОТКАТ ОКНА ТЕЛЕФОНИИ 13:47Z: после restart с синком 508 res_pjsip не загрузил ни одного объекта (transports/aors/endpoints=0; REGISTER 7016 → «No matching endpoint found») — и с sorcery.conf «contact = astdb,registrator» (опечатка), и с исправленным «registrar», и с пустым sorcery.conf. rollback.sh упал на своей проверке корня архива → откат вручную: infra-sip.tar + runtime-config.tar из бэкапа, удалены созданные файлы (список created-host-files.list) и drop-in 50-web508; restart → aors=3, endpoints=7, :4080 200 — состояние до окна. Barge-in (463) не активен. Evidence для 2322 в /home/ubuntu/waves/inputs/sip-hostsync-evidence/ (санитизировано). KNOWN ISSUES: (1) на A1 присутствие sorcery.conf ломает загрузку pjsip-конфига — причину искать (порядок #include/pjsip.conf vs sorcery, или res_sorcery_astdb отсутствует в сборке /home/pi/.local/asterisk); (2) rollback.sh v1 непригоден; (3) моки CLI не заменяют реальный Asterisk — приёмка 508 обязана поднимать asterisk на стенде.
2026-09-06T14:59:40.859Z · coordinator
[06.09 14:59Z координатор] [2026-09-06T14:59Z координатор] ОКНО ТЕЛЕФОНИИ v3 (14:57Z, A1): фаза 0 validate/check OK; фаза 1  = APPLY OK — v3 render path, module reload res_pjsip.so, endpoints=7, transports=3, PID Asterisk не изменился, AOR 7016 = 90/120/30 (цель WEB-508), :4080 200; бэкап /var/backups/ag-sip-native/20260906T145730Z-3911089-l113f-sync-v3. Фаза 2  = STOP «proof endpoint reload failed» (синтетический UDP-endpoint не появился после reload; runtime-файл восстановлен) — деплой оставлен (здоров по независимым проверкам), причина proof — в разбор. Фаза 3 (restart для активации barge-in WEB-463) — после подтверждения владельца.
2026-09-08T11:16:55.937Z · coordinator
[08.09 11:16Z координатор] **GO, ждёт независимой приёмки.** волна 2768: шлюз ставил пакеты при КАЖДОМ старте — теперь установка убрана из пути загрузки, отсутствие зависимостей = громкий отказ с указанием, чего не хватает
Вершина кандидата `8d454c6a4f0f`, база — боевая линия l113s `49bc58dcc508c612b337c92af7d7d5bb71c7a681`.
Приёмка поставлена волной из пачки 2787–2794 (A2). Посадка — только после её вердикта: вердикт авторской волны это самооценка, а не ворота.
2026-09-08T13:20:47.524Z · coordinator
[08.09 13:20Z координатор] Статус → **review**. принято независимой приёмкой и вошло в собранный артефакт линии l113t `a45e820c` (сборка PACK_OK `375a98c6`, ждёт посадки на прод). Кандидат `8d454c6a`, приёмка ACCWEB509 = GO.
2026-09-08T14:00:36.161Z · coordinator
[08.09 14:00Z координатор] Статус → **done**. шлюз больше не ставит пакеты при каждом старте; отсутствие зависимостей = громкий отказ с указанием, чего не хватает

Посажено на прод линией **l113t** `a45e820c7ec1043fe601974fe24fe5026eaaf118` (артефакт `me2-standalone-linux-arm64-a45e820c-20260908T131657Z`, sha256 `375a98c6…`), флип 08.09 13:59Z.

Проверено после флипа, а не по факту деплоя: оба бэкенда `ready=true` и `paidReady=true` с новым releaseId; корень витрины `https://app.sixbyy.com/` отдаёт 200 (проверяем отдельно — после l113j он 18 минут отдавал 500); вебхук Telegram отвечает 401, как и должен (после l113k все lease-пути отдавали 500); готовность SIP на 4080 = 200, строк `LEASE_LOST` после рестарта — ноль.

Откат при необходимости: `l113s` `49bc58dcc508c612b337c92af7d7d5bb71c7a681`, релиз `arm64-l113s-20260908T081706Z`.
Воркер
не привязан — привязать: curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \ -d '{"issueId":"WEB-509","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-09-08T14:00:36.160Z