WEB board

всеканоны и докиворкеры↗ iOS↗ Легаси
WEB-171 · Задача · Инфраструктура · web

SCALESPIKE-07: operational hardening

Закрыт P2 ведёт: q171-m4 эпик: WEB-77
Суть
Фаза 7 эпика WEB-77. Production readiness.

Kill switches (env-управляемые):
- DISABLE_ROOM_STREAMS → polling fallback
- CAP_ROOM_JOINS → reject новых join сверх лимита
- CAP_PER_USER_SOCKETS → лимит на пользователя
- CAP_PER_ROOM_SOCKETS → лимит на комнату
- PAUSE_FLOOR_LIVE_COUNTS → статические counts

Dashboards:
- Redis: memory, ops/sec, evictions, hit rate
- Gateway: active sockets, events/sec, backpressure disconnects
- Per-shard room distribution
- Postgres: write/read rates, pool usage, slow queries
- Prisma connection pool: active/idle connections, wait time

Load tests в CI/nightly:
- 1k / 5k / 10k room симуляции
- Проверка graceful degradation (Redis down → polling fallback)
- Проверка recovery после рестарта Redis

Ключевые точки:
- src/lib/prisma.ts:3-7 (connection pool monitoring)
- src/lib/podcast/interactive/studioRoomPresenceStore.ts (graceful degradation fallback)
- Новые файлы: lib/health/ roomHealth.ts, lib/admin/killSwitches.ts

Спайк: STUDIO-SCALE-SPIKE.md, раздел «Фаза 7».
Оценка: M (3-5 дней).
Зависимости: все предыдущие фазы должны быть в проде.
Параллелить с: ни с чем — финальная.
Доказательства
[25.08 ~15:45Z] Взято волной web171 (sol xhigh, от 2857a88): 5 env-kill-switches (default off = байт-в-байт текущее, негатив-тесты) + /api/ops/realtime-stats за админ-гейтом + docs/ops/SCALE-DASHBOARDS.md.

[25.08 ~18:35Z] СДЕЛАНО волной web171: commit 83046e6 (от 2857a88). 5 kill-switches ship-dark (пусто/false/невалид = legacy path байт-в-байт): DISABLE_ROOM_STREAMS → 503+X-Realtime-Fallback:polling+Retry-After+statusUrl; CAP_ROOM_JOINS (rejoin сохранён); CAP_PER_USER_SOCKETS и CAP_PER_ROOM_SOCKETS → realtime:error+disconnect; PAUSE_FLOOR_LIVE_COUNTS → mode=static без Redis/Prisma. + /api/ops/realtime-stats за админ-гейтом + docs/ops/SCALE-DASHBOARDS.md. 📎 Трейл: отчёт /home/ubuntu/waves/WEB171-REPORT.md; ветка web171@83046e6. → review; кандидат посадки 55.
[2026-08-25 19:11Z] Независимая приёмка запущена: волна accscale на A1 (sol xhigh, приёмщик≠автор), worktree от прод-коммита a453b16; обязательны негативные тесты новых классов; для не-влитых тикетов волна установит факт NOT-LANDED. Бриф /home/ubuntu/waves/accscale-brief.md, отчёт будет в ACCSCALE-REPORT.md.
[2026-08-25 20:05Z] ПРИНЯТО (accscale): влит в a453b16 (git-факт ancestry), hardening: caps/kill-switches/snapshot, зонные+негативные тесты волны зелёные. GO → done. Отчёт A1:ACCSCALE-REPORT.md. ВАЖНО из epic77plan: код в проде, но ВКЛЮЧЕНИЕ на живых данных не доказано (флаги dark) — включение отдельными тикетами эпика WEB-77.
Починено в
a453b16
Воркер
не привязан — привязать: curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \ -d '{"issueId":"WEB-171","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-08-25T19:57:41.849Z