Основная задача и актуальные правила: api#260. Подготовка/эскизы утверждены;21.10 владелец разрешил полную реализацию и выпуск после проверок без дополнительных подтверждений. Реализация/проверки/разрешённый stage-выпуск по KB-плану260 завершены.
Согласовано21.10: преленды на отдельных собственных доменах, рекламы напрямую на основной сайт нет, дополнительных редиректов темы нет. Каждый преленд хранит локальный manual, без него новые UTM/rnd/default могут менять тему. При existing claim/handoff основной сайт всегда принимает фактически показанную тему преленда поверх прежнего main manual, без изменения рекламных меток; main→преленд обратной синхронизации нет. Спорный сценарий dark manual Preland1→light manual main→повторdarkPreland1→maindark явно одобрен. Direct main по адресу/закладке восстанавливает последнюю тему main. Не обещать общую cookie независимых доменов.
Desktop88×44 и compact mobile64×30(как menu30) одобрены. Menu open/theme/close проверены320/390×2темы. Новый light/dark «Для бизнеса» входит в общий контракт API; полный светлый эскиз localhost4326/business утверждён владельцем21.10. Только theme_changed event для будущего Keitaro; collector/сбор сейчас не нужен. Automatic handoff не manual event.
Перед внедрением/выпуском: единый switch/state/early restore, все входы/reload/back/error/upload/claim/geometry, обе темы и устройства, защита runtime config/domain brands, review и stage-only release. Полная матрица/история/ограничения в основной задаче260 и KB. Production-преленды заморожены по#4. Владелец отдельно разрешил исполнение и выпуск21.10 после обязательной приёмки; цели Preland по#4не расширяются. Эту задачу не закрывать до реализации/приёмки соответствующей части.
APIv2026.10.21.3/run461 и stagePreland0193354/run462 SUCCESS actualrunner37. PublishedAPI72/Preland12/storage120+120 PASS; protected9SHA неизменны. KBmaster1d8e146. Полный итог — в последнем комментарии. Actual BFCache/физические устройства остаются в явно связанном api#297 OPEN; за проверенные здесь не выдаются.
Основная задача и актуальные правила: [api#260](http://git.dira89kv.beget.tech:3000/anton/api/issues/260). Подготовка/эскизы утверждены;21.10 владелец разрешил полную реализацию и выпуск после проверок без дополнительных подтверждений. Реализация/проверки/разрешённый stage-выпуск по KB-плану260 завершены.
Согласовано21.10: преленды на отдельных собственных доменах, рекламы напрямую на основной сайт нет, дополнительных редиректов темы нет. Каждый преленд хранит локальный manual, без него новые UTM/rnd/default могут менять тему. При existing claim/handoff основной сайт всегда принимает фактически показанную тему преленда поверх прежнего main manual, без изменения рекламных меток; main→преленд обратной синхронизации нет. Спорный сценарий dark manual Preland1→light manual main→повторdarkPreland1→maindark явно одобрен. Direct main по адресу/закладке восстанавливает последнюю тему main. Не обещать общую cookie независимых доменов.
Desktop88×44 и compact mobile64×30(как menu30) одобрены. Menu open/theme/close проверены320/390×2темы. Новый light/dark «Для бизнеса» входит в общий контракт API; полный светлый эскиз localhost4326/business утверждён владельцем21.10. Только theme_changed event для будущего Keitaro; collector/сбор сейчас не нужен. Automatic handoff не manual event.
Перед внедрением/выпуском: единый switch/state/early restore, все входы/reload/back/error/upload/claim/geometry, обе темы и устройства, защита runtime config/domain brands, review и stage-only release. Полная матрица/история/ограничения в основной задаче260 и KB. Production-преленды заморожены по#4. Владелец отдельно разрешил исполнение и выпуск21.10 после обязательной приёмки; цели Preland по#4не расширяются. Эту задачу не закрывать до реализации/приёмки соответствующей части.
## Workflow исполнения21.10
- [x] KBспецификация/план939141d, freshworktrees/roles/ledger; новаяQA26085migrations/freshassets/base42checksPASS.
- [x] Task1 сервер/canonicalpreference/freshclaim/overlay RED→GREEN + независимыйreview.
- [x] Task2 inlineUI/runtime/Preland/approved lightBusiness + review.
- [x] Task3 реальныеjourneys/редкиесостояния/3engines/firstpaint/fullgate.
- [x] Task4 wholebranchreview/APIprodtagworkflow/stagePreland/smoke/KBclose.
## Итог21.10.2026
APIv2026.10.21.3/run461 и stagePreland0193354/run462 SUCCESS actualrunner37. PublishedAPI72/Preland12/storage120+120 PASS; protected9SHA неизменны. KBmaster1d8e146. Полный итог — в последнем комментарии. Actual BFCache/физические устройства остаются в явно связанном api#297 OPEN; за проверенные здесь не выдаются.
Согласования владельца21.10: ручной выбор темы закрепляется жёстко и имеет высший приоритет над новой concrete theme UTM, rnd, default и paid override темы. При отсутствии ручного выбора новая реклама вправе менять тему: был light без клика→новый theme=dark даёт dark; theme=rnd даёт новый результат random Preland. Сам показ страницы не создаёт ручного предпочтения. Рекомендация сохраняет paid override для оплативших без ручного выбора; остальные UTM и override не меняются. Междоменное ограничение явно объяснено: cookie основного сайта недоступна независимому преленду, без отдельного согласованного механизма нельзя гарантировать прежнюю тему на первом экране нового домена. Исследуем передачу ручного предпочтения через существующий claim отдельно от рекламных меток, stale tabs/flow snapshots и исключение api-pricing. Реализации/выката сейчас нет.
Согласования владельца21.10: ручной выбор темы закрепляется жёстко и имеет высший приоритет над новой concrete theme UTM, rnd, default и paid override темы. При отсутствии ручного выбора новая реклама вправе менять тему: был light без клика→новый theme=dark даёт dark; theme=rnd даёт новый результат random Preland. Сам показ страницы не создаёт ручного предпочтения. Рекомендация сохраняет paid override для оплативших без ручного выбора; остальные UTM и override не меняются. Междоменное ограничение явно объяснено: cookie основного сайта недоступна независимому преленду, без отдельного согласованного механизма нельзя гарантировать прежнюю тему на первом экране нового домена. Исследуем передачу ручного предпочтения через существующий claim отдельно от рекламных меток, stale tabs/flow snapshots и исключение api-pricing. Реализации/выката сейчас нет.
Подготовительный этап выполнен, внедрение/выкат НЕ начаты. Реестр api#260/preland#13 остаётся OPEN для утверждения эскиза и архитектурных развилок. KB master d3def0720b36abcd0afb63d991c59c81db0f0ae9: «2026-10-21 Переключение темы — подготовка и конфликтные сценарии», индекс и заметка UTM/Keitaro.
Исследованы actual API master74f53ba/product production bce7bfa (image label), Preland3740839, FunnelContext, ClaimAction/StagedUploadAccess, layouts main/auth/upscale/error, public/private controllers, RegistrationFlow snapshot, old toggle handler, legacy Keitaro Client/PostbackJob. Четыре Figma узла прочитаны design_context+screenshot. Реальная шапка/логотипы Zoomzilla/ZoomStage сохранены, устаревшие Figma-логотипы не переносились.
Согласовано: ручная тема выше concrete/rnd/default/paid override; без ручного выбора новый рекламный вход меняет тему по текущим правилам. Предложено сохранить paid override для оплативших без manual. Нажатие активной кнопки закрепляет manual без события смены. Новый ThemePreference отдельно от рекламных funnel_display и chb; старые image/registration snapshots не должны отменять manual. Существующие scalar UTM уже передаются в URL: историческая спека#235 с чистыми URL устарела, новый технический handoff нужно явно исключить из forwarder. Текущий stage rnd light0/dark1/defaultdark, настройки не менялись.
Междоменная развилка: direct новый независимый преленд не может читать cookie основного сайта. Локальная cookie+claim решает текущий переход, но не первый экран нового домена после выбора только на основном сайте. Строгая гарантия требует top-level центрального входа через основной домен до показа преленда и allowlist целей/передачи предпочтения; нельзя обещать iframe/CORS/localStorage магию или перекрашивать уже показанную страницу. Нужен выбор владельца до реализации.
Событие theme_changed: schema/event_id/from/to/source=manual/surface/host/path/occurred_at. Только реальные ручные смены, не auto/UTM/rnd/paid/cookie/active/reinit/handoff/storage. Retry с тем же event_id; переключения и уникальные люди разные метрики. Никакого conversion registration/sale вместо смены. Keitaro не подключался, событий наружу не отправляли. Без collector статистику до подключения задним числом не восстановить; сбор с первого запуска — отдельное решение.
Проверки: check-issue260-web17PASS; отдельные14runtime cases приоритетов/старогоimage/URL;52browser states1440/390 light/dark public+Private и8реальныхmobile menu→profile tabs; горизонтальногоoverflowнет. Светлая база готова у основных внешних и приватных экранов, но «Для бизнеса» принудительноdark по прежнему контракту. Не выдано за полную приёмку оплаты/PIN/всех gallery/loading/error/modal состояний, физических устройств и трёх browser engines: для них карта/матрица в KB. Новых prod upload нет.
Диагностика ограничений: check-issue237-webFAIL из-за старого ожидания6display вместо7послеfocus; check-issue239FAIL на старом текстовом ожидании CPanel пояснения. Не выдаются заGREEN, не исправлялись в подготовке. Локальная subscription ошибка от старой cards.js в QA static volume (с source не совпала); actual production light→subscription read-only безpageerror. В реализации нужен целостный QA assetкэш. Header coin-wh на light требует отдельного визуального контроля.
Эскиз: output/theme260, локально http://127.0.0.1:4326/ (loopback Docker zoomzilla-theme260-preview), main/preland и Mobile/Desktop,88×44px/две44×44кнопки/24pxиконки/14pxскругление.12published-page previewcases1440/390/320×2темы×2сайтаPASS: оба направления клика, header90/68неизменен, nooverflow. Отдельныйreviewboard interactionPASS. На320логотип пропорционально ужимается без обрезки. Это локальная подстановка в браузере, не опубликованный UI и не продуктовая persistence/аналитика. Browser plugin отсутствовал, использован имеющийся Docker Playwright без установки ПО.
Открыто перед реализацией: утверждение вида, центральный вход vs ограниченные гарантии по доменам, пересмотр dark api-pricing, collector с первого запуска vs только будущий адаптер. Остальное уже согласовано, не запрашивать повторно. Production-преленды по#4заморожены.
Подготовительный этап выполнен, внедрение/выкат НЕ начаты. Реестр api#260/preland#13 остаётся OPEN для утверждения эскиза и архитектурных развилок. KB master d3def0720b36abcd0afb63d991c59c81db0f0ae9: «2026-10-21 Переключение темы — подготовка и конфликтные сценарии», индекс и заметка UTM/Keitaro.
Исследованы actual API master74f53ba/product production bce7bfa (image label), Preland3740839, FunnelContext, ClaimAction/StagedUploadAccess, layouts main/auth/upscale/error, public/private controllers, RegistrationFlow snapshot, old toggle handler, legacy Keitaro Client/PostbackJob. Четыре Figma узла прочитаны design_context+screenshot. Реальная шапка/логотипы Zoomzilla/ZoomStage сохранены, устаревшие Figma-логотипы не переносились.
Согласовано: ручная тема выше concrete/rnd/default/paid override; без ручного выбора новый рекламный вход меняет тему по текущим правилам. Предложено сохранить paid override для оплативших без manual. Нажатие активной кнопки закрепляет manual без события смены. Новый ThemePreference отдельно от рекламных funnel_display и chb; старые image/registration snapshots не должны отменять manual. Существующие scalar UTM уже передаются в URL: историческая спека#235 с чистыми URL устарела, новый технический handoff нужно явно исключить из forwarder. Текущий stage rnd light0/dark1/defaultdark, настройки не менялись.
Междоменная развилка: direct новый независимый преленд не может читать cookie основного сайта. Локальная cookie+claim решает текущий переход, но не первый экран нового домена после выбора только на основном сайте. Строгая гарантия требует top-level центрального входа через основной домен до показа преленда и allowlist целей/передачи предпочтения; нельзя обещать iframe/CORS/localStorage магию или перекрашивать уже показанную страницу. Нужен выбор владельца до реализации.
Событие theme_changed: schema/event_id/from/to/source=manual/surface/host/path/occurred_at. Только реальные ручные смены, не auto/UTM/rnd/paid/cookie/active/reinit/handoff/storage. Retry с тем же event_id; переключения и уникальные люди разные метрики. Никакого conversion registration/sale вместо смены. Keitaro не подключался, событий наружу не отправляли. Без collector статистику до подключения задним числом не восстановить; сбор с первого запуска — отдельное решение.
Проверки: check-issue260-web17PASS; отдельные14runtime cases приоритетов/старогоimage/URL;52browser states1440/390 light/dark public+Private и8реальныхmobile menu→profile tabs; горизонтальногоoverflowнет. Светлая база готова у основных внешних и приватных экранов, но «Для бизнеса» принудительноdark по прежнему контракту. Не выдано за полную приёмку оплаты/PIN/всех gallery/loading/error/modal состояний, физических устройств и трёх browser engines: для них карта/матрица в KB. Новых prod upload нет.
Диагностика ограничений: check-issue237-webFAIL из-за старого ожидания6display вместо7послеfocus; check-issue239FAIL на старом текстовом ожидании CPanel пояснения. Не выдаются заGREEN, не исправлялись в подготовке. Локальная subscription ошибка от старой cards.js в QA static volume (с source не совпала); actual production light→subscription read-only безpageerror. В реализации нужен целостный QA assetкэш. Header coin-wh на light требует отдельного визуального контроля.
Эскиз: output/theme260, локально http://127.0.0.1:4326/ (loopback Docker zoomzilla-theme260-preview), main/preland и Mobile/Desktop,88×44px/две44×44кнопки/24pxиконки/14pxскругление.12published-page previewcases1440/390/320×2темы×2сайтаPASS: оба направления клика, header90/68неизменен, nooverflow. Отдельныйreviewboard interactionPASS. На320логотип пропорционально ужимается без обрезки. Это локальная подстановка в браузере, не опубликованный UI и не продуктовая persistence/аналитика. Browser plugin отсутствовал, использован имеющийся Docker Playwright без установки ПО.
Открыто перед реализацией: утверждение вида, центральный вход vs ограниченные гарантии по доменам, пересмотр dark api-pricing, collector с первого запуска vs только будущий адаптер. Остальное уже согласовано, не запрашивать повторно. Production-преленды по#4заморожены.
Согласование владельца: desktop эскиз одобрен; на mobile обязательно сохранить кнопку меню рядом с логотипом и переключателем. В прежнем сохранённом HTML визуально кнопка была, но после удаления штатных scripts для безопасного прототипа раскрытие не работало. Эскиз дополнен локальным open/close обработчиком и aria-expanded; продуктовый сайт не менялся. Проверены320/390×light/dark: логотип+switch+burger видны, открыть меню→сменить тему при открытом меню→закрыть, navbar68px сохранён, no overflow. Переключатель остаётся видимым, пункты меню соответствуют текущей внешней шапке. Артефакты output/theme260/menu-review.json и mobile-menu-*.png; localhost4326 обновлён. Desktop размеры/расположение не менялись.
Согласование владельца: desktop эскиз одобрен; на mobile обязательно сохранить кнопку меню рядом с логотипом и переключателем. В прежнем сохранённом HTML визуально кнопка была, но после удаления штатных scripts для безопасного прототипа раскрытие не работало. Эскиз дополнен локальным open/close обработчиком и aria-expanded; продуктовый сайт не менялся. Проверены320/390×light/dark: логотип+switch+burger видны, открыть меню→сменить тему при открытом меню→закрыть, navbar68px сохранён, no overflow. Переключатель остаётся видимым, пункты меню соответствуют текущей внешней шапке. Артефакты output/theme260/menu-review.json и mobile-menu-*.png; localhost4326 обновлён. Desktop размеры/расположение не менялись.
Новые прямые ограничения владельца: преленды строго на независимых собственных доменах; никаких дополнительных редиректов/общей входной точки для темы. Варианты поддоменов и central top-level theme-gate исключены. При сохранённых ограничениях гарантировать прежнее предпочтение на первом экране нового независимого домена нельзя: cookie/localStorage другого домена недоступны, iframe/XHR зависят от third-party storage restrictions. Предложение на согласование: manual сохраняется отдельно на каждом домене, а в штатном existing Preland→claim→основной сайт передаётся отдельным preference payload; новый ранее не посещённый домен использует свою UTM/rnd/default до локального manual. Это честное ограничение, а не уже внедрённая глобальная синхронизация. Никаких сопоставлений по IP/fingerprint не предлагается.
Дизайн: владелец одобрил desktop, потребовал уменьшить mobile до высоты меню. Эскиз обновлён: desktop88×44 прежний, mobile64×30/иконки20/round9, navbar68. Вертикальная hit-area расширена до44 без увеличения видимого корпуса. PASS фактические измерения320/390/1440, тап выше видимой кнопки сработал, nooverflow;4menu open/theme/close cases320/390×2темы PASS. localhost4326 обновлён, output/theme260/compact.json/compact-mobile-*.png. Продуктовый код не менялся.
Новые прямые ограничения владельца: преленды строго на независимых собственных доменах; никаких дополнительных редиректов/общей входной точки для темы. Варианты поддоменов и central top-level theme-gate исключены. При сохранённых ограничениях гарантировать прежнее предпочтение на первом экране нового независимого домена нельзя: cookie/localStorage другого домена недоступны, iframe/XHR зависят от third-party storage restrictions. Предложение на согласование: manual сохраняется отдельно на каждом домене, а в штатном existing Preland→claim→основной сайт передаётся отдельным preference payload; новый ранее не посещённый домен использует свою UTM/rnd/default до локального manual. Это честное ограничение, а не уже внедрённая глобальная синхронизация. Никаких сопоставлений по IP/fingerprint не предлагается.
Дизайн: владелец одобрил desktop, потребовал уменьшить mobile до высоты меню. Эскиз обновлён: desktop88×44 прежний, mobile64×30/иконки20/round9, navbar68. Вертикальная hit-area расширена до44 без увеличения видимого корпуса. PASS фактические измерения320/390/1440, тап выше видимой кнопки сработал, nooverflow;4menu open/theme/close cases320/390×2темы PASS. localhost4326 обновлён, output/theme260/compact.json/compact-mobile-*.png. Продуктовый код не менялся.
НОВОЕ СОГЛАСОВАНИЕ ВЛАДЕЛЬЦА21.10, заменяет прежний абсолютный приоритет manual на границе Preland→main: преленды технически обслуживают рекламные источники, переход на основной домен должен быть незаметным. При штатном входе с любого преленда основной сайт обязан принять фактически показанную на нём тему, даже если на main раньше был противоположный ручной выбор. Прежнюю main manual-настройку нужно заменить/сбросить, не просто временно накрыть CSS: она не должна всплывать в Tour/Join/регистрации/Private. На преленде1 его локальное manual сохраняется независимо; main не синхронизирует изменения обратно. Преленд2 без local manual показывает свои UTM/rnd/default, и именно показанная тема передаётся в existing claim/handoff без дополнительных редиректов. После приёма пользователь может заново вручную выбрать тему на main; она действует до следующего явного переключения или следующего штатного входа с преленда. Переход с преленда — отдельная подтверждённая граница, произвольный theme query на документах/Private не должен сбрасывать выбор. Не переписывать рекламную UTM ради оформления; передавать shown theme отдельным согласованным handoff-контрактом. Paid override темы тоже не должен перекрасить следующий экран вопреки обязательной непрерывности; другие override/UTM сохраняют прежнее поведение. Автоматический импорт темы с преленда не является ручным theme_changed: не учитывать его в статистике пользовательских переключений. Внедрение пока не начато; обновляется подготовительный контракт/матрица.
НОВОЕ СОГЛАСОВАНИЕ ВЛАДЕЛЬЦА21.10, заменяет прежний абсолютный приоритет manual на границе Preland→main: преленды технически обслуживают рекламные источники, переход на основной домен должен быть незаметным. При штатном входе с любого преленда основной сайт обязан принять фактически показанную на нём тему, даже если на main раньше был противоположный ручной выбор. Прежнюю main manual-настройку нужно заменить/сбросить, не просто временно накрыть CSS: она не должна всплывать в Tour/Join/регистрации/Private. На преленде1 его локальное manual сохраняется независимо; main не синхронизирует изменения обратно. Преленд2 без local manual показывает свои UTM/rnd/default, и именно показанная тема передаётся в existing claim/handoff без дополнительных редиректов. После приёма пользователь может заново вручную выбрать тему на main; она действует до следующего явного переключения или следующего штатного входа с преленда. Переход с преленда — отдельная подтверждённая граница, произвольный theme query на документах/Private не должен сбрасывать выбор. Не переписывать рекламную UTM ради оформления; передавать shown theme отдельным согласованным handoff-контрактом. Paid override темы тоже не должен перекрасить следующий экран вопреки обязательной непрерывности; другие override/UTM сохраняют прежнее поведение. Автоматический импорт темы с преленда не является ручным theme_changed: не учитывать его в статистике пользовательских переключений. Внедрение пока не начато; обновляется подготовительный контракт/матрица.
Владелец одобрил финальный компактный mobile-эскиз (desktop одобрен ранее). Запросил сводную таблицу общих и конфликтных правил, внедрение пока не поручено. Новое замечание владельца: исключение/тонкое место — на преленде был ручной выбор, человек вернулся через тот же преленд, но на основном сайте мог позже выбрать другую тему; сам преленд об этом не знает. Владелец отметил, что частое переключение маловероятно, но окончательный алгоритм приоритета для этого конфликта ещё не выбран. В сводке обозначить его открытым, не подменять утверждённым latest-wins и не обещать обратную синхронизацию. Базовое прежнее правило принятия показанной темы преленда сохраняется для остальных случаев; строгие отдельные домены/нетдополнительныхредиректов остаются.
Владелец одобрил финальный компактный mobile-эскиз (desktop одобрен ранее). Запросил сводную таблицу общих и конфликтных правил, внедрение пока не поручено. Новое замечание владельца: исключение/тонкое место — на преленде был ручной выбор, человек вернулся через тот же преленд, но на основном сайте мог позже выбрать другую тему; сам преленд об этом не знает. Владелец отметил, что частое переключение маловероятно, но окончательный алгоритм приоритета для этого конфликта ещё не выбран. В сводке обозначить его открытым, не подменять утверждённым latest-wins и не обещать обратную синхронизацию. Базовое прежнее правило принятия показанной темы преленда сохраняется для остальных случаев; строгие отдельные домены/нетдополнительныхредиректов остаются.
Окончательные уточнения владельца: рекламы напрямую на основной сайт не будет, весь рекламный трафик идёт только через независимые домены прелендов. Самостоятельный возврат main по адресу/закладке восстанавливает последнюю тему main. В спорном сценарии Preland1manualdark→mainmanuallight→повторPreland1dark→main владелец прямо выбрал dark: main всегда принимает показанную тему входящего преленда, прежний main manual заменяется. Исключений latest-main-wins на этой границе нет. Desktop и mobile64×30 эскизы одобрены.
Владелец поручил сделать полноценную светлую тему «Для бизнеса» без отдельного Figma-дизайна. Прежнее deliberate dark исключение api-pricing снимается для новой реализации; страница входит в общий двухтемный контракт. На текущем подготовительном этапе делаем полноценный визуальный эскиз на основе существующей структуры/светлых стилей, проверяем desktop/mobile, затем внедрение по общему плану. Аналитика: явный ответ владельца — сейчас только событие; сбор после подключения Keitaro, collector/сбор с первого дня не нужен. Обе прежние продуктовые развилки закрыты. Перед выпуском обязательна полная приёмка light/dark редких состояний public/registration/payment/Private, не объявлять готовность всех состояний по52базовым экранам.
Окончательные уточнения владельца: рекламы напрямую на основной сайт не будет, весь рекламный трафик идёт только через независимые домены прелендов. Самостоятельный возврат main по адресу/закладке восстанавливает последнюю тему main. В спорном сценарии Preland1manualdark→mainmanuallight→повторPreland1dark→main владелец прямо выбрал dark: main всегда принимает показанную тему входящего преленда, прежний main manual заменяется. Исключений latest-main-wins на этой границе нет. Desktop и mobile64×30 эскизы одобрены.
Владелец поручил сделать полноценную светлую тему «Для бизнеса» без отдельного Figma-дизайна. Прежнее deliberate dark исключение api-pricing снимается для новой реализации; страница входит в общий двухтемный контракт. На текущем подготовительном этапе делаем полноценный визуальный эскиз на основе существующей структуры/светлых стилей, проверяем desktop/mobile, затем внедрение по общему плану. Аналитика: явный ответ владельца — сейчас только событие; сбор после подключения Keitaro, collector/сбор с первого дня не нужен. Обе прежние продуктовые развилки закрыты. Перед выпуском обязательна полная приёмка light/dark редких состояний public/registration/payment/Private, не объявлять готовность всех состояний по52базовым экранам.
yury
changed title from Подготовка переключения тем: UTM, override, междоменный переход и эскиз to Переключение тем преленда и передача показанной темы на основной сайт2026-10-21 18:48:15 +02:00
Владелец утвердил полный светлый эскиз «Для бизнеса»21.10 («Просто шикарно»). Desktop/mobile переключатель, поведение новых рекламных входов/ручной темы/обязательного импорта показанной темы с преленда, отдельные домены/без redirect, светлая бизнес-страница, event-only без collector — согласованы. Открытых продуктовых вопросов по подготовленному объёму нет. По просьбе владельца показываем актуальную основную задачу260; продуктовая реализация/выкат ещё не начаты, обязательные проверки остаются открытыми.
Владелец утвердил полный светлый эскиз «Для бизнеса»21.10 («Просто шикарно»). Desktop/mobile переключатель, поведение новых рекламных входов/ручной темы/обязательного импорта показанной темы с преленда, отдельные домены/без redirect, светлая бизнес-страница, event-only без collector — согласованы. Открытых продуктовых вопросов по подготовленному объёму нет. По просьбе владельца показываем актуальную основную задачу260; продуктовая реализация/выкат ещё не начаты, обязательные проверки остаются открытыми.
Владелец поручил21.10 исполнить260 до production без дополнительных подтверждений, спецификацию/планы в KB и закрытие после проверки. Прочитаны текущие описания/все10API+8Prelandкомментариев, код/KB;3read-only аудита Yii/frontend/QAops. Fresh worktrees wt/issue260@74f53ba, preland-worktrees/issue260@3740839, known-base-worktrees/issue260@bd18878, родительские ветки/dirty не менялись; native worktree tool composite root NotGit, использован gitfallback.
Workflow привязан к api#260/preland#13: Task0 новая QA/fullimage/newassets+DB/baseline; Task1 canonical ThemePreference+freshclaim overlay RED→GREEN/review; Task2 общий inline runtime/UI+Preland+approved light business RED→GREEN/review; Task3 реальные journeys/rare states/error-recovery/3engines/firstpaint+fullgate; Task4 wholebranchreview/taggedmaster APIprod/stage-onlyPreland/postsmoke/KB/Giteaclose. Спецификация «2026-10-21 Переключение тем — согласованный контракт», план «2026-10-21 Переключение тем — исполнение260» вKB; ledger/briefs .superpowers/sdd/issue260-theme-switch. Повторное утверждение согласованного плана не ожидаем согласно прямому поручению, новые бизнес/UI вопросы не угадываем.
Синхронизация с основным реестром api#260 (решения3263–3266): backend43ea9d46 принят67новыхchecks/43cleanDBgate; UIsourceAPI508e9ed/Preland5ffb0f3 послеTask2fixloop.
Preland: общий byte-copy inline runtime/control/style, host-only canonical preference отдельно от advertising UTM, shown_theme фактически показанной темы считывается в момент перехода (pending upload/recovery/rejection включены). Событие только ручное; аналитического сборщика нет. Runtime CSS встроен до content, доменный ZoomStage/config/150N не меняются. Shared mirror при первом bootstrap обновляется только из валидной cookie если отличается; storage/pageshow/refresh/reinit0writes/0manualevents. Blockedcookie+LS ручная тема сохраняется в памяти документа после lifecycle callback. Условий синхронизации между независимыми доменами не добавляли.
НезависимыйTask2review нашёлP2storage-deniedrefresh, адресныйRED→GREEN есть; scoped re-review и новыйfinalimage/gate44 сейчас выполняются. Промежуточные образы не выпускаются. ДальшеTask3реальные UIjourneys/Private/3engines/firstpaint, затемAPItaggedmasterproduction и только staging→zoomstage.online. Productionzoompixel.ru/.online остаются заморожены по#4; новыхproductionuploads/payment/unsubscribe нет. Задачи открыты до фактического выпуска/приёмки.
Синхронизация с основным реестром api#260 (решения3263–3266): backend43ea9d46 принят67новыхchecks/43cleanDBgate; UIsourceAPI508e9ed/Preland5ffb0f3 послеTask2fixloop.
Preland: общий byte-copy inline runtime/control/style, host-only canonical preference отдельно от advertising UTM, shown_theme фактически показанной темы считывается в момент перехода (pending upload/recovery/rejection включены). Событие только ручное; аналитического сборщика нет. Runtime CSS встроен до content, доменный ZoomStage/config/150N не меняются. Shared mirror при первом bootstrap обновляется только из валидной cookie если отличается; storage/pageshow/refresh/reinit0writes/0manualevents. Blockedcookie+LS ручная тема сохраняется в памяти документа после lifecycle callback. Условий синхронизации между независимыми доменами не добавляли.
НезависимыйTask2review нашёлP2storage-deniedrefresh, адресныйRED→GREEN есть; scoped re-review и новыйfinalimage/gate44 сейчас выполняются. Промежуточные образы не выпускаются. ДальшеTask3реальные UIjourneys/Private/3engines/firstpaint, затемAPItaggedmasterproduction и только staging→zoomstage.online. Productionzoompixel.ru/.online остаются заморожены по#4; новыхproductionuploads/payment/unsubscribe нет. Задачи открыты до фактического выпуска/приёмки.
Финальный whole-branch reviewer (gpt-6-astra high) вынес READY для API74f53ba..be82063 и Preland3740839..0193354: открытыхP0/P1/P2 нет, оба runtime/quotaP2 закрыты,25bfab9/8строкTODO и finalQA evidence проверены. Отчёт final-wholebranch-review.md сохранён с исходной историей findings. Root повторно fetch: master74f53ba/main+staging3740839 остаются предками проверенных HEAD, оба checkout чистые, v2026.10.21.3 свободен. Protected9SHA неизменны.
Начинаем разрешённый выпуск: APIHEADbe82063→master, новыйv2026.10.21.3→production-release.yml, обязательно фактическийrunner37/zoomzilla-prod-org и CIgate/preflight/backup/deploy/smoke. После успеха API — Preland0193354→main/staging, толькоzoomstage.online. Runtimeconfig/доменныеSVG/150N/productionzoompixel неизменны. Postrelease — настоящие GET/click/theme/storage UI проверки3engines и raw source/static/brand hashes; формы/productionuploads/платежи не отправляются. Закрытие260/13 только после этих шагов.
Финальный whole-branch reviewer (gpt-6-astra high) вынес READY для API74f53ba..be82063 и Preland3740839..0193354: открытыхP0/P1/P2 нет, оба runtime/quotaP2 закрыты,25bfab9/8строкTODO и finalQA evidence проверены. Отчёт final-wholebranch-review.md сохранён с исходной историей findings. Root повторно fetch: master74f53ba/main+staging3740839 остаются предками проверенных HEAD, оба checkout чистые, v2026.10.21.3 свободен. Protected9SHA неизменны.
Начинаем разрешённый выпуск: APIHEADbe82063→master, новыйv2026.10.21.3→production-release.yml, обязательно фактическийrunner37/zoomzilla-prod-org и CIgate/preflight/backup/deploy/smoke. После успеха API — Preland0193354→main/staging, толькоzoomstage.online. Runtimeconfig/доменныеSVG/150N/productionzoompixel неизменны. Postrelease — настоящие GET/click/theme/storage UI проверки3engines и raw source/static/brand hashes; формы/productionuploads/платежи не отправляются. Закрытие260/13 только после этих шагов.
Открытыйпроверочныйостаток api#297 OPEN (связь3273): реальныйBFCache/физическийRedmi/Яндекс не заявляются пройденными; actualBack/freshSSR иsyntheticpersisted проверены отдельно. LiveGP/настоящиебанки/SMTP не подменяются локальнымdummy. Этот остаток явновыделен в связанномаудите, не спрятан закрытием260/13. Реализованный и разрешённый выпуск260/13 завершён; задачи закрываются. Финальная административная отметка closed/журналы будет синхронизирована следом без изменения продукта.
Завершено и выпущено21.10.2026.
• API: master/tagv2026.10.21.3, commitbe82063d321671fa302cbeedc7c753bfc30c3511; production-release461/job656 SUCCESS, actualrunner37 zoomzilla-prod-org. Реальный image digestde49511a5e335f72e3706fe486522b3610a25a5c876e8a469daa3b8199a8048a, OCIrevisionbe82063, apihealthy/все9Composeconfigконтейнеровrunning.
• Preland01933546a70768781f1ab7c56b2878294f7cb80e вmain/staging; workflow462/job657 SUCCESS натомжеrunner. Толькоzoomstage.online; productionzoompixel.ru/.online заморожены и не менялись.
• Ручнойlight/dark, утверждённыеdesktop/mobile, полнаяlight«Для бизнеса», отдельноеpreference/earlyrestore/newclaimoverride/replayprotection, event-onlytheme_changed безcollector готовы. БазовыеUTM/paid/chb/доступ/банковские контракты сохранены. НайденныеnativeSetCookieP1/profileoverflow/quotaP2/storage-propagationP2 исправлены и независимо проверены, исходныеRED сохранены.
Приёмка: clean localgate45/45 (включая73HTTPcookie/67semantic), realjourney3engine/PINerror/recovery/dummydecline/retry→Private, storage120/fullgrid240/firstclaim6/importnotify3/authcookie-recovery3, runtime/deterministic4+late/quota6/state30/firstpaint24. Whole-branchmost-capablereview READY/noP0/P1/P2. Test-onlycommitsfbc957e/25bfab9, productпосле809 не менялся; CI строил именно taggedbe82063.
На опубликованных сайтах после CI: API72/72 иPreland12/12 реальныхclick/input/reload/theme/geometry/logo cases (Chromium/Firefox/WebKit,390/1440,обетемы), JSerrors0/overflow0; дополнительно realtrustedforegroundstorage120/120 на каждомorigin, automaticmanualevents0. CurrentSVGpair2/staticrawCSS+cards2/protected9SHA PASS. Сохраненыconfigstage/доменныеZoomStageSVG/150N/замороженныеproductionprelands. Ниоднойновойproductionфотографии/формы/оплаты не отправляли.
Postharnessnetworkidle timeout разобран: selectedpair/миниатюры/шрифты ужеready, pendingтолько следующиеbackgroundpairs; correctedharness ждётштатныйexamplesState=ready+обадекодированныхизображения. ПродуктрадиPASSнепатчили. ИзмеренныйCLSChromium≤0.000810455;FF/WKAPIunsupported/null, rAFgeometryстрого пройдена. Прежний1.8125pxglyphmetricшапки подтверждёнA/B74, общийконтейнер/форма/compareне сдвигаются.
База знанийmaster1d8e146d3849998847beb729d3ce5153067da242: финальныйконтракт/план, API/Prelandprojectnotes, актуализацияUTM/default/paid/persistent/boundary, UIreadinessprocess. Localartifacts output/issue260; reportsв.superpowers/sdd/issue260-theme-switch. Убранытолькосвои12QAcontainers/10generatedvolumes/10networks; source/images/artifacts иpreview4326 сохранены.
Открытыйпроверочныйостаток **api#297 OPEN** (связь3273): реальныйBFCache/физическийRedmi/Яндекс не заявляются пройденными; actualBack/freshSSR иsyntheticpersisted проверены отдельно. LiveGP/настоящиебанки/SMTP не подменяются локальнымdummy. Этот остаток явновыделен в связанномаудите, не спрятан закрытием260/13. Реализованный и разрешённый выпуск260/13 завершён; задачи закрываются. Финальная административная отметка closed/журналы будет синхронизирована следом без изменения продукта.
Финальная административная синхронизация выполнена. KBmaster5d76c3865d43371068a8b2d76aaa841b4babac9b содержит CLOSED-статусы, завершённый план, актуальный индекс и проектные/UTM/process дополнения; API master66ac9b1414169ac7fb6c449ea48ef9a5e918aae8 — только итоговый TODO-журнал поверх deployedtagbe82063, продукт не переиздавался. Root TODO/AGENT_LOG и SDDledger синхронизированы. Выпуск и финальные проверки остаются указанными в итоговом комментарии; api#297 OPEN сохранён как явно связанный проверочный остаток. Новых блокировок/незакоммиченного productcode нет.
Финальная административная синхронизация выполнена. KBmaster5d76c3865d43371068a8b2d76aaa841b4babac9b содержит CLOSED-статусы, завершённый план, актуальный индекс и проектные/UTM/process дополнения; API master66ac9b1414169ac7fb6c449ea48ef9a5e918aae8 — только итоговый TODO-журнал поверх deployedtagbe82063, продукт не переиздавался. Root TODO/AGENT_LOG и SDDledger синхронизированы. Выпуск и финальные проверки остаются указанными в итоговом комментарии; api#297 OPEN сохранён как явно связанный проверочный остаток. Новых блокировок/незакоммиченного productcode нет.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Основная задача и актуальные правила: api#260. Подготовка/эскизы утверждены;21.10 владелец разрешил полную реализацию и выпуск после проверок без дополнительных подтверждений. Реализация/проверки/разрешённый stage-выпуск по KB-плану260 завершены.
Согласовано21.10: преленды на отдельных собственных доменах, рекламы напрямую на основной сайт нет, дополнительных редиректов темы нет. Каждый преленд хранит локальный manual, без него новые UTM/rnd/default могут менять тему. При existing claim/handoff основной сайт всегда принимает фактически показанную тему преленда поверх прежнего main manual, без изменения рекламных меток; main→преленд обратной синхронизации нет. Спорный сценарий dark manual Preland1→light manual main→повторdarkPreland1→maindark явно одобрен. Direct main по адресу/закладке восстанавливает последнюю тему main. Не обещать общую cookie независимых доменов.
Desktop88×44 и compact mobile64×30(как menu30) одобрены. Menu open/theme/close проверены320/390×2темы. Новый light/dark «Для бизнеса» входит в общий контракт API; полный светлый эскиз localhost4326/business утверждён владельцем21.10. Только theme_changed event для будущего Keitaro; collector/сбор сейчас не нужен. Automatic handoff не manual event.
Перед внедрением/выпуском: единый switch/state/early restore, все входы/reload/back/error/upload/claim/geometry, обе темы и устройства, защита runtime config/domain brands, review и stage-only release. Полная матрица/история/ограничения в основной задаче260 и KB. Production-преленды заморожены по#4. Владелец отдельно разрешил исполнение и выпуск21.10 после обязательной приёмки; цели Preland по#4не расширяются. Эту задачу не закрывать до реализации/приёмки соответствующей части.
Workflow исполнения21.10
Итог21.10.2026
APIv2026.10.21.3/run461 и stagePreland0193354/run462 SUCCESS actualrunner37. PublishedAPI72/Preland12/storage120+120 PASS; protected9SHA неизменны. KBmaster1d8e146. Полный итог — в последнем комментарии. Actual BFCache/физические устройства остаются в явно связанном api#297 OPEN; за проверенные здесь не выдаются.
Согласования владельца21.10: ручной выбор темы закрепляется жёстко и имеет высший приоритет над новой concrete theme UTM, rnd, default и paid override темы. При отсутствии ручного выбора новая реклама вправе менять тему: был light без клика→новый theme=dark даёт dark; theme=rnd даёт новый результат random Preland. Сам показ страницы не создаёт ручного предпочтения. Рекомендация сохраняет paid override для оплативших без ручного выбора; остальные UTM и override не меняются. Междоменное ограничение явно объяснено: cookie основного сайта недоступна независимому преленду, без отдельного согласованного механизма нельзя гарантировать прежнюю тему на первом экране нового домена. Исследуем передачу ручного предпочтения через существующий claim отдельно от рекламных меток, stale tabs/flow snapshots и исключение api-pricing. Реализации/выката сейчас нет.
Подготовительный этап выполнен, внедрение/выкат НЕ начаты. Реестр api#260/preland#13 остаётся OPEN для утверждения эскиза и архитектурных развилок. KB master d3def0720b36abcd0afb63d991c59c81db0f0ae9: «2026-10-21 Переключение темы — подготовка и конфликтные сценарии», индекс и заметка UTM/Keitaro.
Исследованы actual API master74f53ba/product production bce7bfa (image label), Preland3740839, FunnelContext, ClaimAction/StagedUploadAccess, layouts main/auth/upscale/error, public/private controllers, RegistrationFlow snapshot, old toggle handler, legacy Keitaro Client/PostbackJob. Четыре Figma узла прочитаны design_context+screenshot. Реальная шапка/логотипы Zoomzilla/ZoomStage сохранены, устаревшие Figma-логотипы не переносились.
Согласовано: ручная тема выше concrete/rnd/default/paid override; без ручного выбора новый рекламный вход меняет тему по текущим правилам. Предложено сохранить paid override для оплативших без manual. Нажатие активной кнопки закрепляет manual без события смены. Новый ThemePreference отдельно от рекламных funnel_display и chb; старые image/registration snapshots не должны отменять manual. Существующие scalar UTM уже передаются в URL: историческая спека#235 с чистыми URL устарела, новый технический handoff нужно явно исключить из forwarder. Текущий stage rnd light0/dark1/defaultdark, настройки не менялись.
Междоменная развилка: direct новый независимый преленд не может читать cookie основного сайта. Локальная cookie+claim решает текущий переход, но не первый экран нового домена после выбора только на основном сайте. Строгая гарантия требует top-level центрального входа через основной домен до показа преленда и allowlist целей/передачи предпочтения; нельзя обещать iframe/CORS/localStorage магию или перекрашивать уже показанную страницу. Нужен выбор владельца до реализации.
Событие theme_changed: schema/event_id/from/to/source=manual/surface/host/path/occurred_at. Только реальные ручные смены, не auto/UTM/rnd/paid/cookie/active/reinit/handoff/storage. Retry с тем же event_id; переключения и уникальные люди разные метрики. Никакого conversion registration/sale вместо смены. Keitaro не подключался, событий наружу не отправляли. Без collector статистику до подключения задним числом не восстановить; сбор с первого запуска — отдельное решение.
Проверки: check-issue260-web17PASS; отдельные14runtime cases приоритетов/старогоimage/URL;52browser states1440/390 light/dark public+Private и8реальныхmobile menu→profile tabs; горизонтальногоoverflowнет. Светлая база готова у основных внешних и приватных экранов, но «Для бизнеса» принудительноdark по прежнему контракту. Не выдано за полную приёмку оплаты/PIN/всех gallery/loading/error/modal состояний, физических устройств и трёх browser engines: для них карта/матрица в KB. Новых prod upload нет.
Диагностика ограничений: check-issue237-webFAIL из-за старого ожидания6display вместо7послеfocus; check-issue239FAIL на старом текстовом ожидании CPanel пояснения. Не выдаются заGREEN, не исправлялись в подготовке. Локальная subscription ошибка от старой cards.js в QA static volume (с source не совпала); actual production light→subscription read-only безpageerror. В реализации нужен целостный QA assetкэш. Header coin-wh на light требует отдельного визуального контроля.
Эскиз: output/theme260, локально http://127.0.0.1:4326/ (loopback Docker zoomzilla-theme260-preview), main/preland и Mobile/Desktop,88×44px/две44×44кнопки/24pxиконки/14pxскругление.12published-page previewcases1440/390/320×2темы×2сайтаPASS: оба направления клика, header90/68неизменен, nooverflow. Отдельныйreviewboard interactionPASS. На320логотип пропорционально ужимается без обрезки. Это локальная подстановка в браузере, не опубликованный UI и не продуктовая persistence/аналитика. Browser plugin отсутствовал, использован имеющийся Docker Playwright без установки ПО.
Открыто перед реализацией: утверждение вида, центральный вход vs ограниченные гарантии по доменам, пересмотр dark api-pricing, collector с первого запуска vs только будущий адаптер. Остальное уже согласовано, не запрашивать повторно. Production-преленды по#4заморожены.
Согласование владельца: desktop эскиз одобрен; на mobile обязательно сохранить кнопку меню рядом с логотипом и переключателем. В прежнем сохранённом HTML визуально кнопка была, но после удаления штатных scripts для безопасного прототипа раскрытие не работало. Эскиз дополнен локальным open/close обработчиком и aria-expanded; продуктовый сайт не менялся. Проверены320/390×light/dark: логотип+switch+burger видны, открыть меню→сменить тему при открытом меню→закрыть, navbar68px сохранён, no overflow. Переключатель остаётся видимым, пункты меню соответствуют текущей внешней шапке. Артефакты output/theme260/menu-review.json и mobile-menu-*.png; localhost4326 обновлён. Desktop размеры/расположение не менялись.
Новые прямые ограничения владельца: преленды строго на независимых собственных доменах; никаких дополнительных редиректов/общей входной точки для темы. Варианты поддоменов и central top-level theme-gate исключены. При сохранённых ограничениях гарантировать прежнее предпочтение на первом экране нового независимого домена нельзя: cookie/localStorage другого домена недоступны, iframe/XHR зависят от third-party storage restrictions. Предложение на согласование: manual сохраняется отдельно на каждом домене, а в штатном existing Preland→claim→основной сайт передаётся отдельным preference payload; новый ранее не посещённый домен использует свою UTM/rnd/default до локального manual. Это честное ограничение, а не уже внедрённая глобальная синхронизация. Никаких сопоставлений по IP/fingerprint не предлагается.
Дизайн: владелец одобрил desktop, потребовал уменьшить mobile до высоты меню. Эскиз обновлён: desktop88×44 прежний, mobile64×30/иконки20/round9, navbar68. Вертикальная hit-area расширена до44 без увеличения видимого корпуса. PASS фактические измерения320/390/1440, тап выше видимой кнопки сработал, nooverflow;4menu open/theme/close cases320/390×2темы PASS. localhost4326 обновлён, output/theme260/compact.json/compact-mobile-*.png. Продуктовый код не менялся.
НОВОЕ СОГЛАСОВАНИЕ ВЛАДЕЛЬЦА21.10, заменяет прежний абсолютный приоритет manual на границе Preland→main: преленды технически обслуживают рекламные источники, переход на основной домен должен быть незаметным. При штатном входе с любого преленда основной сайт обязан принять фактически показанную на нём тему, даже если на main раньше был противоположный ручной выбор. Прежнюю main manual-настройку нужно заменить/сбросить, не просто временно накрыть CSS: она не должна всплывать в Tour/Join/регистрации/Private. На преленде1 его локальное manual сохраняется независимо; main не синхронизирует изменения обратно. Преленд2 без local manual показывает свои UTM/rnd/default, и именно показанная тема передаётся в existing claim/handoff без дополнительных редиректов. После приёма пользователь может заново вручную выбрать тему на main; она действует до следующего явного переключения или следующего штатного входа с преленда. Переход с преленда — отдельная подтверждённая граница, произвольный theme query на документах/Private не должен сбрасывать выбор. Не переписывать рекламную UTM ради оформления; передавать shown theme отдельным согласованным handoff-контрактом. Paid override темы тоже не должен перекрасить следующий экран вопреки обязательной непрерывности; другие override/UTM сохраняют прежнее поведение. Автоматический импорт темы с преленда не является ручным theme_changed: не учитывать его в статистике пользовательских переключений. Внедрение пока не начато; обновляется подготовительный контракт/матрица.
Владелец одобрил финальный компактный mobile-эскиз (desktop одобрен ранее). Запросил сводную таблицу общих и конфликтных правил, внедрение пока не поручено. Новое замечание владельца: исключение/тонкое место — на преленде был ручной выбор, человек вернулся через тот же преленд, но на основном сайте мог позже выбрать другую тему; сам преленд об этом не знает. Владелец отметил, что частое переключение маловероятно, но окончательный алгоритм приоритета для этого конфликта ещё не выбран. В сводке обозначить его открытым, не подменять утверждённым latest-wins и не обещать обратную синхронизацию. Базовое прежнее правило принятия показанной темы преленда сохраняется для остальных случаев; строгие отдельные домены/нетдополнительныхредиректов остаются.
Окончательные уточнения владельца: рекламы напрямую на основной сайт не будет, весь рекламный трафик идёт только через независимые домены прелендов. Самостоятельный возврат main по адресу/закладке восстанавливает последнюю тему main. В спорном сценарии Preland1manualdark→mainmanuallight→повторPreland1dark→main владелец прямо выбрал dark: main всегда принимает показанную тему входящего преленда, прежний main manual заменяется. Исключений latest-main-wins на этой границе нет. Desktop и mobile64×30 эскизы одобрены.
Владелец поручил сделать полноценную светлую тему «Для бизнеса» без отдельного Figma-дизайна. Прежнее deliberate dark исключение api-pricing снимается для новой реализации; страница входит в общий двухтемный контракт. На текущем подготовительном этапе делаем полноценный визуальный эскиз на основе существующей структуры/светлых стилей, проверяем desktop/mobile, затем внедрение по общему плану. Аналитика: явный ответ владельца — сейчас только событие; сбор после подключения Keitaro, collector/сбор с первого дня не нужен. Обе прежние продуктовые развилки закрыты. Перед выпуском обязательна полная приёмка light/dark редких состояний public/registration/payment/Private, не объявлять готовность всех состояний по52базовым экранам.
Подготовка переключения тем: UTM, override, междоменный переход и эскизto Переключение тем преленда и передача показанной темы на основной сайтВладелец утвердил полный светлый эскиз «Для бизнеса»21.10 («Просто шикарно»). Desktop/mobile переключатель, поведение новых рекламных входов/ручной темы/обязательного импорта показанной темы с преленда, отдельные домены/без redirect, светлая бизнес-страница, event-only без collector — согласованы. Открытых продуктовых вопросов по подготовленному объёму нет. По просьбе владельца показываем актуальную основную задачу260; продуктовая реализация/выкат ещё не начаты, обязательные проверки остаются открытыми.
Владелец поручил21.10 исполнить260 до production без дополнительных подтверждений, спецификацию/планы в KB и закрытие после проверки. Прочитаны текущие описания/все10API+8Prelandкомментариев, код/KB;3read-only аудита Yii/frontend/QAops. Fresh worktrees wt/issue260@74f53ba, preland-worktrees/issue260@3740839, known-base-worktrees/issue260@bd18878, родительские ветки/dirty не менялись; native worktree tool composite root NotGit, использован gitfallback.
Workflow привязан к api#260/preland#13: Task0 новая QA/fullimage/newassets+DB/baseline; Task1 canonical ThemePreference+freshclaim overlay RED→GREEN/review; Task2 общий inline runtime/UI+Preland+approved light business RED→GREEN/review; Task3 реальные journeys/rare states/error-recovery/3engines/firstpaint+fullgate; Task4 wholebranchreview/taggedmaster APIprod/stage-onlyPreland/postsmoke/KB/Giteaclose. Спецификация «2026-10-21 Переключение тем — согласованный контракт», план «2026-10-21 Переключение тем — исполнение260» вKB; ledger/briefs .superpowers/sdd/issue260-theme-switch. Повторное утверждение согласованного плана не ожидаем согласно прямому поручению, новые бизнес/UI вопросы не угадываем.
Технические решения: nonauth host-only theme_choice canonical v1:theme:source:revision (strict128/enum/revision), syncJS-cookie+SSR, localStoragemirror, noDB/migration/newservice. Source manual|preland, incoming показаннаяtheme overlay послеpaid. Отдельный shown_theme извлекается/удаляется изforward/context, импорттолькоfirstsuccessfulclaim aftercommit. Replayстарогоclaim неоткатывает manual. FrozenRegistrationcontextнепереписывать, толькоpresentation. ErrorreadnoDB. Layoutsвесьownedfrontend, controllers/classownedYii; Python/инфраструктурныйсервисне нужен. QAновыйпотомустарыйassetsvolumeсcards.jsустарел;baselinelegacy237/239/260actualizewithoutweakening. APIprod releaseauthorizedтолькоv*masterworkflow, prelandстрогоstagezoomstage.online/configbrands150Nunchanged; новыхprodfileuploadsнет. Аналитикатолькоevent, no collector/noKeitarocalls.
Синхронизация с основным реестром api#260 (решения3263–3266): backend43ea9d46 принят67новыхchecks/43cleanDBgate; UIsourceAPI508e9ed/Preland5ffb0f3 послеTask2fixloop.
Preland: общий byte-copy inline runtime/control/style, host-only canonical preference отдельно от advertising UTM, shown_theme фактически показанной темы считывается в момент перехода (pending upload/recovery/rejection включены). Событие только ручное; аналитического сборщика нет. Runtime CSS встроен до content, доменный ZoomStage/config/150N не меняются. Shared mirror при первом bootstrap обновляется только из валидной cookie если отличается; storage/pageshow/refresh/reinit0writes/0manualevents. Blockedcookie+LS ручная тема сохраняется в памяти документа после lifecycle callback. Условий синхронизации между независимыми доменами не добавляли.
НезависимыйTask2review нашёлP2storage-deniedrefresh, адресныйRED→GREEN есть; scoped re-review и новыйfinalimage/gate44 сейчас выполняются. Промежуточные образы не выпускаются. ДальшеTask3реальные UIjourneys/Private/3engines/firstpaint, затемAPItaggedmasterproduction и только staging→zoomstage.online. Productionzoompixel.ru/.online остаются заморожены по#4; новыхproductionuploads/payment/unsubscribe нет. Задачи открыты до фактического выпуска/приёмки.
Финальный whole-branch reviewer (gpt-6-astra high) вынес READY для API74f53ba..be82063 и Preland3740839..0193354: открытыхP0/P1/P2 нет, оба runtime/quotaP2 закрыты,25bfab9/8строкTODO и finalQA evidence проверены. Отчёт final-wholebranch-review.md сохранён с исходной историей findings. Root повторно fetch: master74f53ba/main+staging3740839 остаются предками проверенных HEAD, оба checkout чистые, v2026.10.21.3 свободен. Protected9SHA неизменны.
Начинаем разрешённый выпуск: APIHEADbe82063→master, новыйv2026.10.21.3→production-release.yml, обязательно фактическийrunner37/zoomzilla-prod-org и CIgate/preflight/backup/deploy/smoke. После успеха API — Preland0193354→main/staging, толькоzoomstage.online. Runtimeconfig/доменныеSVG/150N/productionzoompixel неизменны. Postrelease — настоящие GET/click/theme/storage UI проверки3engines и raw source/static/brand hashes; формы/productionuploads/платежи не отправляются. Закрытие260/13 только после этих шагов.
Завершено и выпущено21.10.2026.
• API: master/tagv2026.10.21.3, commitbe82063d321671fa302cbeedc7c753bfc30c3511; production-release461/job656 SUCCESS, actualrunner37 zoomzilla-prod-org. Реальный image digestde49511a5e335f72e3706fe486522b3610a25a5c876e8a469daa3b8199a8048a, OCIrevisionbe82063, apihealthy/все9Composeconfigконтейнеровrunning.
• Preland01933546a70768781f1ab7c56b2878294f7cb80e вmain/staging; workflow462/job657 SUCCESS натомжеrunner. Толькоzoomstage.online; productionzoompixel.ru/.online заморожены и не менялись.
• Ручнойlight/dark, утверждённыеdesktop/mobile, полнаяlight«Для бизнеса», отдельноеpreference/earlyrestore/newclaimoverride/replayprotection, event-onlytheme_changed безcollector готовы. БазовыеUTM/paid/chb/доступ/банковские контракты сохранены. НайденныеnativeSetCookieP1/profileoverflow/quotaP2/storage-propagationP2 исправлены и независимо проверены, исходныеRED сохранены.
Приёмка: clean localgate45/45 (включая73HTTPcookie/67semantic), realjourney3engine/PINerror/recovery/dummydecline/retry→Private, storage120/fullgrid240/firstclaim6/importnotify3/authcookie-recovery3, runtime/deterministic4+late/quota6/state30/firstpaint24. Whole-branchmost-capablereview READY/noP0/P1/P2. Test-onlycommitsfbc957e/25bfab9, productпосле809 не менялся; CI строил именно taggedbe82063.
На опубликованных сайтах после CI: API72/72 иPreland12/12 реальныхclick/input/reload/theme/geometry/logo cases (Chromium/Firefox/WebKit,390/1440,обетемы), JSerrors0/overflow0; дополнительно realtrustedforegroundstorage120/120 на каждомorigin, automaticmanualevents0. CurrentSVGpair2/staticrawCSS+cards2/protected9SHA PASS. Сохраненыconfigstage/доменныеZoomStageSVG/150N/замороженныеproductionprelands. Ниоднойновойproductionфотографии/формы/оплаты не отправляли.
Postharnessnetworkidle timeout разобран: selectedpair/миниатюры/шрифты ужеready, pendingтолько следующиеbackgroundpairs; correctedharness ждётштатныйexamplesState=ready+обадекодированныхизображения. ПродуктрадиPASSнепатчили. ИзмеренныйCLSChromium≤0.000810455;FF/WKAPIunsupported/null, rAFgeometryстрого пройдена. Прежний1.8125pxglyphmetricшапки подтверждёнA/B74, общийконтейнер/форма/compareне сдвигаются.
База знанийmaster1d8e146d3849998847beb729d3ce5153067da242: финальныйконтракт/план, API/Prelandprojectnotes, актуализацияUTM/default/paid/persistent/boundary, UIreadinessprocess. Localartifacts output/issue260; reportsв.superpowers/sdd/issue260-theme-switch. Убранытолькосвои12QAcontainers/10generatedvolumes/10networks; source/images/artifacts иpreview4326 сохранены.
Открытыйпроверочныйостаток api#297 OPEN (связь3273): реальныйBFCache/физическийRedmi/Яндекс не заявляются пройденными; actualBack/freshSSR иsyntheticpersisted проверены отдельно. LiveGP/настоящиебанки/SMTP не подменяются локальнымdummy. Этот остаток явновыделен в связанномаудите, не спрятан закрытием260/13. Реализованный и разрешённый выпуск260/13 завершён; задачи закрываются. Финальная административная отметка closed/журналы будет синхронизирована следом без изменения продукта.
Финальная административная синхронизация выполнена. KBmaster5d76c3865d43371068a8b2d76aaa841b4babac9b содержит CLOSED-статусы, завершённый план, актуальный индекс и проектные/UTM/process дополнения; API master66ac9b1414169ac7fb6c449ea48ef9a5e918aae8 — только итоговый TODO-журнал поверх deployedtagbe82063, продукт не переиздавался. Root TODO/AGENT_LOG и SDDledger синхронизированы. Выпуск и финальные проверки остаются указанными в итоговом комментарии; api#297 OPEN сохранён как явно связанный проверочный остаток. Новых блокировок/незакоммиченного productcode нет.