WEB-494 · Дефект · Сборка · web
P1 сборка/флаги: NEXT_PUBLIC_DOCUMENT_SESSION_GATED_WRITER/MUTATING_AI читаются как build-time и в собранном l93-бандле = 0, хотя runtime env = 1 — gated writer и мутирующий ИИ выключены у пользователя
Закрыт
P1 · важно
ведёт: —
эпик: WEB-282
Суть
Матрица 1350 (раздел G, улика gated-writer-dom.json): live DOM data-gated-writer=off, build-enabled=0, raw-env-value=0, reason build-disabled; при этом /proc nc-a1: DOCUMENT_SESSION_GATED_WRITER=1, NEXT_PUBLIC_DOCUMENT_SESSION_GATED_WRITER=1, NEXT_PUBLIC_DOCUMENT_SESSION_MUTATING_AI=1. Причина: EditorModal.tsx:850 читает public-флаги как build-time с дефолтом 0; сборка l93 на A2 шла без этих NEXT_PUBLIC (паритет флагов build↔prod не проверен — см. память landing-flag-parity-byte-gate). Два действия: (1) ops: добавить NEXT_PUBLIC_DOCUMENT_SESSION_* в build-env A2 (l9x-prebuild/hashes) и gate «NEXT_PUBLIC в прод-env == в build-env» в l9x-prebuild.sh; (2) код: сделать эти флаги runtime (server-injected через /api/feature-toggles или next.config publicRuntimeConfig), чтобы flip не требовал пересборки. Эпик WEB-282 (посадка) + WEB-283 (E7/WEB-325).
Лента
2026-09-02T23:00:37.662Z · Fable[A1 02:00 Фабл] Волна 1385-publicflagsruntime сдана: коммит efa196733c (runtime-источник public-флагов DOCUMENT_SESSION_* + клиентский хук с fallback; gate паритета NEXT_PUBLIC build↔prod для l9x-prebuild). Отчёт: A1 /home/ubuntu/waves/PUBLICFLAGSRUNTIME-REPORT.md. Приёмка 1405 (A1, Sol high, в очереди) → l94 (сборка l94 уже несёт полный набор NEXT_PUBLIC).
2026-09-03T00:02:41.086Z · Fable[A1 06:30 Фабл] Приёмка 1405-accpublicflagsruntime = NO-GO (отчёт A1 /home/ubuntu/waves/ACCPUBLICFLAGSRUNTIME-REPORT.md): runtime-флаги и базовые фикстуры gate — PASS; блокеры: R1 DOM-диагностика расходится при build=1/runtime=0; P1 gate не учитывает layered env (last-file-wins); P2 инструкция для l9x-prebuild неточная. Круг 2 = волна 1426-publicflagsruntime2 (A1, Luna high, от efa19673).
2026-09-03T03:52:14.097Z · Fable[M4 Фабл] Приёмка 1464-accpublicflagsruntime2 = NO-GO (25d9ce34): R1 PASS, P1 core PASS, kill-switch/cohort/allowlist PASS; блокеры — parity suite красный на macOS (2/5), wiring regression 52/53, P2 не передаёт spend-runtime как required layer и без полного inventory. Круг 3 = волна 1467 (M4, Luna high).
2026-09-03T04:13:18.403Z · Fable[M4 Фабл] Волна 1467-publicflagsruntime3 сдана: коммит 7f8e2d5f. Приёмка 1471 (M4, Sol high) в очереди.
2026-09-03T04:33:49.810Z · Fable[M4 Фабл] Приёмка 1471-accpublicflagsruntime3 = GO (независимая, Sol high): parity suite 5/5, wiring 53/53, P2 с spend-runtime как required layer, живая 2×2 DOM-матрица. Коммит 7f8e2d5f (круг 3) → dry-run на l95-candidate; gate паритета вставить в l9X-prebuild по инструкции отчёта.
2026-09-03T04:45:41.394Z · Fable[A1 Фабл] publicflags3 (GO 1471) в l95 не попал: cherry-pick поверх финального l95 (f7b9a4fd) конфликтует в 6 файлах с toolbar4/c06 (dry-run на промежуточной базе был чист). Волна слияния 1477 (A1, Luna high) → база l96. Гейт паритета NEXT_PUBLIC уже встроен в сборку l95 (скрипт из линии).
2026-09-03T05:26:32.462Z · Fable[Фабл] Слияние 1477 сдано: 55821cfd = l95 + publicflags3 (6 конфликтов решены объединением) → база l96-candidate (A1 и A2).
2026-09-03T09:44:26.237Z · coordinator[пост-QA l96 на ЖИВОМ проде, 03.09 09:39-09:45Z] ПОДТВЕРЖДЕНО. Паритет публичных флагов на проде l96 (98a23c70): снимок /home/ubuntu/nextpublic-prod-resolved.env перегенерирован для линии l96-98a23c70 и содержит ровно 12 ключей NEXT_PUBLIC_*. Полный (не выборочный) греп по всему релизу /home/ubuntu/prod/releases/arm64-l96-20260903T084751Z/.next подтвердил присутствие ЗНАЧЕНИЙ всех 12 флагов в собранном артефакте: NEXT_PUBLIC_APP_URL найден в 58 файлах (в т.ч. middleware.js, robots.txt/route.js, dashboard/referrals/page.js), NEXT_PUBLIC_TELEGRAM_BOT_USERNAME — в 9 (connect/[slug]/page.js, api/settings/connections/route.js, api/connect/[slug]/activate/route.js), Sentry DSN и остальные девять — присутствуют. Дрейфа нет. Примечание для протокола: первый прогон дал ложное 'baked=False' по двум флагам из-за выборки 400 файлов из 2978 — проверять только полным грепом.
2026-09-03T16:16:10.073Z · coordinator03.09 21:45 IST. Ops-половина ЗАКРЫТА и проверена на живом проде. В цепочку сборки добавлен гейт паритета «NEXT_PUBLIC в прод-env == в build-env» (стадия 2c в l9Xchain.sh, снимок /home/ubuntu/nextpublic-prod-resolved.env, 12 ключей); на живом l96 (98a23c70) сверены все 12 флагов NEXT_PUBLIC_* против собранного артефакта — совпадение один в один, дрейфа нет. Исходный симптом (в бандле 0 при рантайме 1) сейчас не воспроизводится. ОСТАЁТСЯ вторая половина из тела тикета — сделать флаги runtime: в l96 EditorModal.tsx по-прежнему читает process.env.NEXT_PUBLIC_* с дефолтом '0' (строки ~894–905, импорты GATED_WRITER_ENV / MUTATING_AI_ENV около 181–192), runtime-источника в файле нет — то есть любое будущее расхождение build↔prod снова выключит gated writer и мутирующий ИИ, а смена флага требует пересборки. Роздано: волна 1581-runtimeflags идёт на A1 (старт 16:14:44Z). Тикет остаётся in_progress до её приёмки.
2026-09-03T17:53:18.805Z · coordinatorКодовая половина сдана: коммит fafba2d0 «fix(document-session): make writer flags runtime». Оперативная половина закрыта на живом проде (12/12 NEXT_PUBLIC совпали со снимком, полный греп по релизу). Приёмка = волна 1586-accdocnerflags на A1: флаг реально читается в рантайме, безопасный дефолт, второй ветки чтения не появилось.
2026-09-08T11:16:55.940Z · coordinator[08.09 11:16Z координатор] **GO, ждёт независимой приёмки.** волна 2769: два публичных флага document-session читались как build-time с дефолтом 0 — переведены в runtime, флип больше не требует пересборки
Вершина кандидата `24a15a869f57`, база — боевая линия l113s `49bc58dcc508c612b337c92af7d7d5bb71c7a681`.
Приёмка поставлена волной из пачки 2787–2794 (A2). Посадка — только после её вердикта: вердикт авторской волны это самооценка, а не ворота.
2026-09-08T13:20:47.533Z · coordinator[08.09 13:20Z координатор] Статус → **review**. принято независимой приёмкой и вошло в собранный артефакт линии l113t `a45e820c` (сборка PACK_OK `375a98c6`, ждёт посадки на прод). Кандидат `24a15a86`, приёмка ACCWEB494 = GO.
2026-09-08T14:00:36.170Z · coordinator[08.09 14:00Z координатор] Статус → **done**. публичные флаги document-session переведены в runtime — флип больше не требует пересборки
Посажено на прод линией **l113t** `a45e820c7ec1043fe601974fe24fe5026eaaf118` (артефакт `me2-standalone-linux-arm64-a45e820c-20260908T131657Z`, sha256 `375a98c6…`), флип 08.09 13:59Z.
Проверено после флипа, а не по факту деплоя: оба бэкенда `ready=true` и `paidReady=true` с новым releaseId; корень витрины `https://app.sixbyy.com/` отдаёт 200 (проверяем отдельно — после l113j он 18 минут отдавал 500); вебхук Telegram отвечает 401, как и должен (после l113k все lease-пути отдавали 500); готовность SIP на 4080 = 200, строк `LEASE_LOST` после рестарта — ноль.
Откат при необходимости: `l113s` `49bc58dcc508c612b337c92af7d7d5bb71c7a681`, релиз `arm64-l113s-20260908T081706Z`.
Воркер
не привязан — привязать:
curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \
-d '{"issueId":"WEB-494","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-09-08T14:00:36.168Z