WEB board

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

[ARCH-P0.5] Пул соединений к БД не задан: при росте процессов лимит умножается вслепую

Закрыт P0 · горит ведёт: backup-opus
Суть
Один PrismaClient на процесс есть (`src/lib/prisma.ts:1-7`), но connection_limit/pool_timeout не заданы, общий бюджет между web и worker не распределён (`prisma/schema.prisma:10-13`).
СДЕЛАТЬ: на A1 снять SHOW max_connections, задать РАЗНЫЕ connection_limit/pool_timeout для web и worker, зафиксировать суммарный бюджет и алерт на P2024. НЕ запускать 4 воркера с дефолтами. PgBouncer — не сейчас, только по измерениям.
ОЦЕНКА: малая кровь, 0.5-1 день.

Источник: аудит архитектуры (волна archaudit, sol/xhigh, 21.08), отчёт M4 `/Users/milamarty/work/ARCHAUDIT-REPORT.md`, снимок кода `a9b2440d`. Вердикт аудита: годимся для роста 25→1000 после короткого P0/P1-hardening; переписывать не надо.

**Документы эпика (обогащение по требованию owner 21.08):**
- Первичный аудит (ОТДАН РЕВИЗОРУ owner-ом): ~/Downloads/АУДИТ-АРХИТЕКТУРЫ-20260821.md на ноутбуке; оригинал M4 /Users/milamarty/work/ARCHAUDIT-REPORT.md (365 строк, снимок кода a9b2440d, каждое утверждение со ссылкой file:line).
- Раздел с полной таблицей чеклиста — §1; детальный разбор базового слоя — §2; 10 массовых запросов и минимальный индексный пакет — §3; распределённость и гонки — §4; observability — §5; выкатка/rollback/health — §6; ТОП-5 рисков — §7; ЧТО НЕ ДЕЛАТЬ — §8; backlog по риску — §9; rollout по когортам — §10.
- Смежные документы: план переезда ~/Downloads/prodplan-20260810/PROD-MIGRATION-PLAN-R4.md (Intel), аудит миграции M4 MIGAUDIT-REPORT.md, репетиция переезда A1 ~/waves/GATE514-REPORT.md (измеренные RTO), эпик миграции WEB-282.
- Ветка работ: archp0 (worktree A1 wt-archp0, от посадки-30 23e0b944).

## 21.08 ~12:40 СДЕЛАНО: коммит edbbba54 — явные бюджеты пула Prisma по ролям + ГРОМКИЙ P2024 (правило 10: тихая ошибка запрещена). Замер max_connections на живой БД — отдельным шагом (в отчёте помечено таймаутом).
Ветка archp0/fcsrc2/migfix от посадки-30 (23e0b944), worktree на A1. Отчёты: ~/waves/ARCHP0-REPORT.md, FCSRC2-REPORT.md, MIGFIX-REPORT.md.

## 21.08 — ВЫЕХАЛО НА ПРОД
**Посадка 30 состоялась 21.08 03:53 IST.** serving = `v4-504af77f`, релиз `arm64-504af77f-20260821T025311Z`, артефакт sha `a0afc41415db60377aeb4cf399d91b98a4c407217fc8839b0b1369a2542af362`, аттестация v18. Проверено после переключения: `active`, `NRestarts=0`, `paidReady=true`, `posture=enforce_ready`, `mode=enforce`, `failures=[]`, фатальных строк boot-контракта **0**, секрет сторожа файл≡процесс (`cbabe4a2b16008e3`), nft переприменены, канон проштампован (`CANON.json: serving=504af77f marker=v4-504af77f`).
Проверка байтов релиза и живая проба выполнены после переключения; подробный трейл посадки — в WEB-282.

## 2026-08-23 BOARDSWEEP: STALE-NOT-DEPLOYED
- Evidence: buildFixed is empty. Canonical inspection found pool controls/tests in src/lib/prisma.ts, src/lib/db/connectionPool.ts, tests/unit/db-connection-pool.test.ts and docs/operator/DB-POOL-BUDGET.md; no deployed build pointer or live SHOW max_connections receipt.
- 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).

[2026-08-25 ~10:05] ЗАМЕР (единственный открытый пункт): serving Postgres max_connections=100, живьём 25/100 (25%, комфортный запас). Пул-бюджеты по ролям в проде (commit edbbba54 с посадки 30) + громкий P2024-алерт. Развёрнутый web+worker бюджет демонстрируемо влезает под 100. КАНДИДАТ НА ЗАКРЫТИЕ. PgBouncer — только по измерениям под нагрузкой.

[25.08 ~12:25] ЗАКРЫТО: живой замер max_connections=100, занято 25/100; бюджеты пула в проде + алерт. Кандидат был доложен owner 11:32 без возражений; закрыто по ГО owner на чистку доски.
Воркер
не привязан — привязать: curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \ -d '{"issueId":"WEB-098","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-08-25T11:24:19.532Z