WEB-510 · Задача · — · web
P0 [мессенджер]: бот владельца в Telegram отвечал ошибкой на КАЖДОЕ сообщение с 28.08 — TrustedIdentityError в chat.messenger.rag
Закрыт
P0 · горит
ведёт: —
Суть
Симптом: на каждое сообщение владельца бот отвечал «Не удалось получить ответ на этот запрос. Попробуйте ещё раз.» По боевой базе за 12 часов 29 входящих и почти столько же таких ответов. Это личный канал владельца, он был мёртв неделю.
Причина (волна 1651): вебхук Telegram отдаёт проверенный integration.userId → botRagQuery → src/lib/integrations/rag.ts вызывает chatWithSources с chatSurface chat.messenger.rag и только trustedUserId → в src/app/actions.ts pre-scoped ветка ставила chatTrustedIdentity=null → buildChatOptions не передавал billing.identity → src/lib/ai/providers/metered.ts звал resolveTrustedIdentity(undefined) и бросал TrustedIdentityError: authenticated session is missing (trustedIdentity.ts:374). В журнале это же видно как [shapeguard3][realtime_auth_boundary_failed].
Виновник: 3217331d «WEB108A: unify Council billing and failure observability» от 2026-08-28, заменивший прежний actor-id путь.
Правка: b57bc838 «fix(messenger): pass service identity to RAG chat», 5 файлов, 234 вставки, база прямо на l97. Тест ДО 1 pass/2 fail, ПОСЛЕ 5 pass/0 fail, связанные наборы 7/7, 6/6, 32/32.
Приёмка 1666-acctgbot2: VERDICT=GO. Проверено, что граница НЕ ослаблена: неизвестный chatId, отвязанный и неактивный UserIntegration, чужой userId — каждый отбивается. Гость и общий доступ сохранили поведение. Соседние вызывающие (meeting-rooms, podcast preview, веб-чат) не сломаны.
---
## ДОПИСКА 05.09.2026 ~00:15 IST (18:45Z 04.09) — координатор: вердикты дня 04.09
Правила обогащения: WEB-449. Эта секция ДОПИСАНА в конец (append-only), ничего выше не перезаписано.
**Ленты дня 04.09 (время UTC / IST = UTC+5:30):**
- **l101 `d825eb0d`** — флип **08:47Z / 14:17 IST**. Девять ранее принятых изменений + фикс realtime-сокета, который отдавал 500 с l96.
- **l102 `1b081c5a`** — флип **11:18Z / 16:48 IST**. Этап C движка, фикс окна цитат, мобильные боковые панели, преflight окна восстановления бэкапа.
- **l103 `d91ebefe`** — флип **13:51Z / 19:21 IST**. Перебазированная работа по ролям, фикс диалога приглашения, фикс контура бэкапа.
- **l104 `4d858be7`** — флип **18:03Z / 23:33 IST**. Проводка движка, регрессионный тест телеграм-бота, фикс ретенции бэкапа.
**Якорь прода на момент записи: линия l104, коммит `4d858be7`.** Отдельных тикетов-линий для l101–l104 на доске НЕТ — журнал посадок ведётся здесь и в [[WEB-320]].
### ВЕРДИКТ: регрессионный тест телеграм-бота сел в l104
**Когда:** 04.09, флип **18:03Z / 23:33 IST**. **Линия:** l104 `4d858be7`.
В l104 приехал **регрессионный тест бота владельца в Telegram** — вместе с проводкой движка ([[WEB-333]] `44530b3a`) и фиксом ретенции бэкапа ([[WEB-470]] `0b2d6aed`).
Тем самым ранее принятая правка `b57bc838` (передача сервисной идентичности в RAG-чат) закрыта тестом, который не даёт дефекту `TrustedIdentityError` вернуться незаметно. Отдельного коммита теста в переданном вердикте не названо — фиксирую факт содержимого линии, номер коммита не выдумываю.
Лента
2026-09-04T04:47:03.361Z · coordinatorПОСАДКА l100 ВЫПОЛНЕНА — правка бота на проде.
Линия l100 = l99 (32c2c885) + be673d4d (правка бота, приёмка 1666 GO) + 6e9b2046 (генератор манифеста артефакта, круг 18 репетиции). Коммит выпуска 6e9b2046e32f4690d17410d0dd66b56189ced06c. Артефакт me2-standalone-linux-arm64-6e9b2046-20260904T042626Z.tar.gz, sha256 640164a236708e72f14410207038e33b5b9ad5f73e32d8f5de9de82fd47a4fd4. Подпись владельца, отпечаток доверенного ключа da2e5642ccfa5fb8 совпал с pem в рабочем каталоге.
Стадии: распаковка 834 МБ → окружение (ключи идентичны прошлому выпуску, sha подтянуты из аттестации) → загрузочный контракт «boot proceeds», проблем нет → сухой прогон на 3011: health 200, paidReady true, posture enforce_ready, отказов нет, release.sourceCommit 6e9b2046 → миграции: No pending migrations to apply → переключение.
После переключения: nc-a1 active, health 200, /api/ready ready=True release.id=6e9b2046e32f, отказов нет, /api/ready/paid 200. Публичные https://nb.wool2.online/api/health, /api/ready/paid и /login — по 200. Пост-QA: метрики растут 3384 → 3388 за полторы минуты, heartbeat воркера индексации свежий.
ПРОВЕРКА ИМЕННО ПУТИ БОТА. Счётчики в журнале nc-a1: за час ДО переключения TrustedIdentityError=4; с момента переключения (04:40:59 UTC) TrustedIdentityError=0, chat.messenger.rag=0, realtime_auth_boundary_failed=0, ошибок вообще 0. ЧЕСТНАЯ ОГОВОРКА: в этот час трафика владельца нет (он спит), поэтому нулевые счётчики сами по себе слабое доказательство. Поэтому добавлена детерминированная проверка: чанк, несущий путь chat.messenger.rag, в выложенной сборке ОТЛИЧАЕТСЯ от прошлого выпуска — .next/server/chunks/73045.js sha 56a44aad9ea1c8c1 на l99 против db9d999d924bcdbf на l100. Код мессенджера действительно выложен. Окончательное подтверждение — первое утреннее сообщение владельца боту.
ТЕЛЕФОНИЯ НЕ ТРОНУТА: рестарт ag-sip-native вырезан из посадочного скрипта в обеих точках. После переключения readiness шлюза 4080=200, строк LEASE_LOST ноль, Asterisk не перезапускался (аптайм 2 ч 41 мин), приложение Stasis зарегистрировано.
Резервный контур: release_id=l100-6e9b2046, remote /home/app-artifact/l100-6e9b2046, 228096906 байт, retention 5. HETZBK_ENV_LINE и HETZBK_ENV_ATTESTATION_FILE переключены на l100, копия настроек сохранена. Упаковка окружения: env-l100-6e9b2046-20260904T044341Z.tar.enc, sha256 16cdd7626743c3bf84b9018c333e0ba833288445c5cd8276ef4b72d14c7f21cf, retention 10.
⚠️ ВАЖНО ДЛЯ СЛЕДУЮЩИХ ВЫПУСКОВ: артефакт этого релиза ПЕРЕУПАКОВАН ВРУЧНУЮ. Генератор .artifact-manifest.json из круга 18 НЕ встроен в боевой путь упаковки — штатная стадия «5. упаковка» делает tar из .next/standalone и манифест туда не кладёт (в первом собранном тарболе его было 0). Манифест сгенерирован вручную (migrationCount=178, список ровно 178) и артефакт переупакован, поэтому метка времени в имени поздняя. ПОКА НЕ СЯДЕТ КРУГ 19 (волна 1672), каждый артефакт требует ручной проверки манифеста — не считать это автоматическим. Без манифеста репетиция восстановления падает с rc=37.
2026-09-08T13:30:28.947Z · coordinator[08.09 13:30Z координатор] Статус → **review**. Принято независимой приёмкой ACCEDITORPROD = GO. Личный канал владельца в Telegram: сообщение доходит до ответа с личностью для биллинга, отсутствие личности даёт явный отказ вместо вежливой отписки. В линию ещё не собрано.
2026-09-08T15:51:06.405Z · coordinator[08.09 15:51Z координатор] Статус → **done**. личный канал владельца в Telegram: сообщение доходит до ответа с личностью для биллинга, отсутствие личности даёт явный отказ вместо вежливой отписки
Посажено на прод линией **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-510","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-09-08T15:51:06.403Z