WEB-076 · Задача · Инфраструктура · web
[GATE-8] Санация секретов/RuntimeConfig + отзыв сессий/токенов + отдельные prod vendor-проекты
Закрыт
P1 · важно
ведёт: backup-opus
Суть
НЕ НАЧАТО: нет sanitation-отчёта со счётчиками, inventory RuntimeConfig, receipt отзыва сессий/токенов, отдельных prod vendor-проектов. Это катовер-этап; подготовить СЕЙЧАС можно: (а) inventory-скрипт RuntimeConfig-кредов в БД (перечень имён без значений), (б) чеклист ротации, (в) список vendor-проектов для дублирования. История: git-history creds (диспозиция 09.08 — фейки/тестовые), DB-пароль ротирован 06.08.
Эпик: WEB-282. Норматив: PROD-MIGRATION-PLAN-R4.md §7. Аудит-срез: M4 MIGAUDIT-REPORT.md (20.08). Owner 20.08: «по гейтам дожимайте все до конца».
## 21.08 ~08:55 ГЕЙТ 8 ПОДГОТОВЛЕН (волна gate78, отчёт M4 GATE78-REPORT.md)
Созданы: скрипт-инвентарь секретов (перечисляет ИМЕНА и классы, значения не читаются — читает envContract.ts и RuntimeConfig-контракт) + docs/operator/GATE8-SECRET-ROTATION-CHECKLIST.md (ротация/отзыв сессий/список отдельных vendor-проектов для прода).
ОСТАЛОСЬ: исполнить чеклист в момент катовера. Трейл: эпик WEB-282, R4 §6/§7.8; связка с диспозицией кредов в истории (09.08) и ротацией DB-пароля (06.08).
## 2026-08-23 BOARDSWEEP: STALE-NOT-DEPLOYED
- Evidence: buildFixed is empty. Canonical runtime/config and auth paths were inspected, but no deployed build pointer or secret-rotation receipt is present; no secrets printed.
- buildFixed: <empty>; canonical: v4-081ff4fb5 / 081ff4fb5f6110f8001daec7ed910ccef2e395dc.
- Status preserved by sweep: review.
Доказательства
[24.08 04:30] ПРИЁМКА против серва 452800ff4 (reviewacc): PARTIAL. ЕСТЬ: session revoke server-side (auth/sessions.ts:100-176, API bulk/single, sign-out hook), access-token revoke owner-scoped без raw-значений (profile/accessTokens.ts:81-109, тесты 13/13), env-контракт presence/length-only (envContract.ts:165-282). НЕТ: names-only inventory/sanitation RuntimeConfig со счётчиками (RuntimeConfig.value свободный Json, admin route возвращает value как есть), rotation/cutover receipt, отдельные prod vendor projects. Остаток — чувствительная зона (ротации/vendor-проекты) → owner-решение и отдельная волна.
[2026-08-25 19:11Z] Независимая приёмка запущена: волна accgates на A1 (sol xhigh, приёмщик≠автор), worktree от прод-коммита a453b16; обязательны негативные тесты новых классов; для не-влитых тикетов волна установит факт NOT-LANDED. Бриф /home/ubuntu/waves/accgates-brief.md, отчёт будет в ACCGATES-REPORT.md.
[2026-08-25 20:05Z] ФАКТ приёмки accgates: NOT-LANDED — RuntimeConfig boundary не санитизирует значения, session-revoke не привязан (3 writers, revoke_hits=0). В очередь на авторскую волну.
[2026-08-25 21:35Z] Автор web076 (luna): единый санитайзер RuntimeConfig + отзыв сессий на всех 3 writers, негативы. NOT-LANDED по accgates.
[2026-08-25 21:55Z] Автор web076 @9229d99: единый boundary runtimeConfigSecurity.ts — рекурсивная маскировка секретов read/API/audit, prod-reject dev/example маркеров, revoke на 3 mutation writers + 2 NER writer, credential invalidation (UserSession.revokedAt + EmailIngestToken удаление), revokeHits, fail-closed+rule-10. → review, ждёт независимой приёмки.
[2026-08-25 22:18Z] ПРИНЯТ acc076 (независимо): GO по scope RuntimeConfig security/revoke. → done.
Починено в
a453b16
Воркер
не привязан — привязать:
curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \
-d '{"issueId":"WEB-076","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-08-25T22:28:08.351Z