WEB board

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

Посадка V2M-фактчека в прод: мердж agent/v2m-r10-ledger → прод-линия + сборка + чеклист

Закрыт P1 · важно ведёт: backup-opus
Суть
## Контекст (owner-решение 20.08 ~18:45)
Ревизорский гейт V2M пройден (R21 GO, эпик WEB-284). Owner: приступать к прод-активации.
⚠️ ВАЖНО: моя фраза «код лежит тёмным, нужен только флип» оказалась НЕВЕРНОЙ — грепы релиза arm64-bb1186a по маркерам V2M (unsupported-conjunct, propositionLedger, factualSentencesOf, strippedAnswerText) дают 0. V2M-код в прод НЕ посажен. Активация = полноценная посадка.

## План
1. Мердж: прод-источник bb1186a7eabb34866944ca1d5f0a9644cc061bb9 (дерево /home/ubuntu/waves/voicefix-tree на A1) + фактчек-линия agent/v2m-r10-ledger (тек. тип 53be04fb, релизный 95177ed2 — источник в пакете FACTCHECK-V2M-R17 на A1; бандл mirrors/factcheck-r10-line.bundle отстал: 8d43c2bd). РУКАМИ, без -X theirs (урок 20.08: тихие дубликаты ключей). Волна videorebase дала образец: восстановить merge-base, слить трёхсторонне, тест связности.
2. Сборка arm64 на A1 (NODE_OPTIONS=--max-old-space-size=8192, НЕ более одной сборки разом — A1 OOM 19.08).
3. Если посадка меняет paidEntrypointRegistry.json (фактчек = платная поверхность, ВЕРОЯТНО меняет) — переподпись манифеста + свежая аттестация из /tmp/attroot (см. HANDOFF).
4. Полный чеклист посадки (sha на хопах, греп байтов на V2M-маркеры, 6 env-пинов, drop-in, b2-nft-apply, flip-cap.secret, /api/ready/paid, ledger.jsonl, stamp-canon, синк доски).
5. Verify enforcing (deployed≠enforcing gap): /api/factcheck/run под QA-учёткой должен ходить через V2M verdict-pipeline — доказательство: маркеры в ответе/трейсе, не только байты в релизе.

## Ссылки
Эпик WEB-284; спека board/specs/FACTCHECK-V2M-EPIC.md (хроника R6-R24); пакет R24 sha 11bbe8aa…; вердикт R21 GO. Волна мерджа: fcmerge на A1, лог ~/waves/fcmerge.log.

## 21.08 ~01:35 ⭐ПОСАДКА 29 СЕЛА (v4-f1e49bca). Хроника: мердж fcmerge (V2M на прод-линию руками, коммит 40684a2a; f1e49bca=штамп sw); сборка падала ДВАЖДЫ rc=134 — корень: build-скрипт package.json хардкодит NODE_OPTIONS 4096 и перетирает внешний env (класс «значение переопределено позже»; отдельный тикет на скрипт); собрано напрямую next build с 16ГБ, BUILD_ID O1wv2rmQtG9IUR0xmacu-. Артефакт f6fb7cf1…, sha сверен на 4 хопах. Реестр платных путей НЕ менялся (git-дифф пуст) → манифест 8a915a0a остался; аттестация v16 сгенерирована на ноутбуке и подписана owner-ключом (builderIdentity backup-opus-landing29). Пины+enforce-start+drop-in обновлены (бэкапы .bak-l29), b2-nft переприменён, flip-cap==FENCE secret, paidReady=true enforce_ready failures=[], fence-ledger живой. Байты: unsupported-conjunct в 3 файлах релиза. ОСТАЛОСЬ (шаг 5): verify enforcing — живой /api/factcheck/run обязан пройти через V2M (маркеры в трейсе) — после этого закрывать и запускать батарею WEB-061.

## 21.08 ~02:55 ЗАКРЫТ: verify-enforcing ПРОЙДЕН (волна fcverify, отчёт M4 FCVERIFY-REPORT.md). Живой прогон составной формулировки «Эйфелева башня в Париже, а построена в 1999»: verdict=unknown, verdictReason=unsupported-conjunct, маркеры factcheck:unsupported-conjunct-v1 + comparabilityVeto=true (run cmt1xtep0001z13i91ezvghj3). Старый движок дал бы supported (класс R9 38/54). Контроль (простое истинное) — обычный путь без veto. V2M живёт и решает на проде. Посадка 29 полностью принята пост-QA координатором. Примечание: подвоз внешних источников всё ещё болен (WEB-066/067/068) — это отдельная линия, движку не мешает.
Воркер
не привязан — привязать: curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \ -d '{"issueId":"WEB-058","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-08-20T20:09:12.851Z