WEB-045 · Обслуживание · Сборка · web
Гейт типов: 421 предсуществующая ошибка tsc скрывает фатальные баги — нужен запрет на регресс и разбор долга
Закрыт
P1 · важно
ведёт: fix-wave
Суть
Урок 19.08 из WEB-040: фатальный прод-баг (мастер импорта видео недоступен целиком) сопровождался 12 явными ошибками tsc TS2448 в MediaImport.tsx, которые лежали в baseline с 17.08 и были пропущены дважды (22-я и 23-я посадки) по правилу «нет НОВЫХ ошибок — не регрессия». Предложение: (1) зафиксировать baseline-список ошибок с привязкой к файлу+коду и запретить рост; (2) вынести КЛАССЫ ошибок, которые НИКОГДА не допускаются (TS2448 use-before-declaration, TS2454, TS7016 в новых файлах) в жёсткий блокирующий список независимо от baseline; (3) разобрать долг по 421 ошибке пачками с приоритетом по классам, которые ломают рантайм.
## 21.08 ~12:40 ИНВЕНТАРЬ+ХРАПОВИК: коммит 80305867 — гейт типов описан и внедрён механизм поэтапного включения (ratchet), чтобы не ронять сборку разом. Отмечено: ошибки есть в модулях policy/security/trust/audit/compliance/stripe — разбирать по одному.
Ветка archp0/fcsrc2/migfix от посадки-30 (23e0b944), worktree на A1. Отчёты: ~/waves/ARCHP0-REPORT.md, FCSRC2-REPORT.md, MIGFIX-REPORT.md.
## 2026-08-23 BOARDSWEEP: DEAD-SOUL-CLAIM
- Evidence: updatedAt=2026-08-21T00:32:16.707Z, older than 24h; only the old archp0 ratchet report is present, no active type-gate wave named. Candidate for return to todo; status unchanged.
- buildFixed: <empty>; canonical: v4-081ff4fb5 / 081ff4fb5f6110f8001daec7ed910ccef2e395dc.
- Status preserved by sweep: in_progress.
## 2026-08-23 WEB045_FIX_READY
- Marker: `WEB045_FIX_READY`
- Fix HEAD: `f22b665ad` (base `081ff4fb5f6110f8001daec7ed910ccef2e395dc`)
- Commits: `99efbf012` baseline snapshot; `f22b665ad` no-regression gate + CI wiring + tests.
- Patch: `/home/ubuntu/waves/WEB-045-fix.patch`
- Report: `/home/ubuntu/waves/WEB-045-FIX-REPORT.md`
- Verification: focused gate tests `rc=0` (5 passed); clean gate `rc=0` with 2,136 unique baseline identities; mutation `web045-negative.ts:1:TS2322` rejected with `rc=1`; removal returned `rc=0`.
- Scope: baseline/gate/inventory only; the existing TypeScript debt was not fixed. No deploy, paid operation, secret output, or status transition.
Чем закрывается (приёмка)
Посадка не проходит, если появляется ошибка из жёсткого списка классов, даже если общее число ошибок не выросло.
Доказательства
[25.08 ~17:30Z] СВИП → todo (никто не работает, in_progress был ложный): проблема ЖИВА и кусается — волна web368 (25.08): repo-wide tsc падает OOM ~4ГБ, targeted tsc exit 2 из-за pre-existing baseline (llmBilling.ts, meteredVendorCall.ts, pdf-parse, editor, messaging) — новые диагностики тонут в шуме. Кандидат на волну: baseline-файл (tsc --noEmit | сохранить список) + гейт «не хуже baseline» в CI/приёмку.
[2026-08-25 19:11Z] Авторская волна запущена на A1: web045 (гейт типов: baseline+запрет регресса, скрипт scripts/type-gate.cjs); luna xhigh, ветка от a453b16, зонные+негативные тесты, без full build. Маркер *_DONE, отчёт на A1.
[2026-08-25 19:47Z] АВТОРСКАЯ РАБОТА ГОТОВА (волна web045, luna): ветка web045 @1f6be24 от a453b16 — scripts/type-gate.cjs (ключ file|TSxxxx|msg, строки-инвариант), baseline 1606 уникальных диагностик от a453b16, тесты гейта 4/4 (вкл. искусственную новую ошибку → rc=1 с листингом; --update), pnpm check:type-gate + первый гейт в CI workflow. Продуктовый код не менялся. Отчёт A1:WEB045-REPORT.md. → review, ждёт независимой приёмки (батч acc2).
[2026-08-25 21:08Z] NO-GO acc2: type-gate-baseline.json содержит НЕПЕРЕНОСИМЫЕ абсолютные пути — на другой машине ключи не сматчатся. Фикс web045b: ключи baseline относительными (repo-root). Механизм гейта верный (4/4 тестов), дефект только в переносимости baseline.
[2026-08-25 21:22Z] ФИКС web045b @cb78b68: type-gate baseline теперь ПЕРЕНОСИМ (пути нормализованы к repo-root в identity и в тексте сообщений, --update не пишет абсолютный префикс), baseline пересоздан 1605 keys. Тесты 5/5 (4 исходных + portability regression). → review, ждёт re-accept. ЦЕННОСТЬ ДОКАЗАНА: гейт поймал 4 новые ошибки в web02930fix, которые функц.тесты пропустили.
[2026-08-25 22:52Z] Независимый re-accept reacc045 запущен (переносимость baseline + гейт ловит новую ошибку).
[2026-08-26 00:12Z] ПРИНЯТ reacc045 (независимо): GO. Baseline переносим между абсолютными prefix, гейт ловит новую ошибку в нетронутом файле, --update убирает исчезнувшие, 5/5 (4+portability). Гейт типов доказал ценность (поймал 4 ошибки web02930fix). -> done.
Починено в
a453b16
Воркер
не привязан — привязать:
curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \
-d '{"issueId":"WEB-045","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-08-25T23:10:11.975Z