From a6076bd86ece6b4be932940fac09fd6f2012231a Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 6 Oct 2026 11:29:12 +0600 Subject: [PATCH] [2026-10-06] eagle: work/projects/cpm-web-extension-public-attribution-2026-10-05.md --- ...extension-public-attribution-2026-10-05.md | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/work/projects/cpm-web-extension-public-attribution-2026-10-05.md b/work/projects/cpm-web-extension-public-attribution-2026-10-05.md index 6435cf1a..a4654877 100755 --- a/work/projects/cpm-web-extension-public-attribution-2026-10-05.md +++ b/work/projects/cpm-web-extension-public-attribution-2026-10-05.md @@ -72,6 +72,29 @@ **Ограничение эффекта:** после публикации первый post-reload CPM probe всё ещё завершился timeout 670 раз на iOS и 232 на macOS, поэтому reload не гарантирует немедленного восстановления даже измеряемого native-вызова. Это не сбой самого API reload. Отдельный `debug.web.extension.reload.failed.daily` после публикации содержит один macOS error для `embedded / cpm_messaging_hung / load` и 223 iOS errors для **другого** `adBlocking / scriptlet_update / unload` extension; до публикации этих operation errors нет. На текущих данных M4 восстанавливает измеряемый background → native путь у части установок; нельзя вычислить долю stuck-эпизодов с полноценным `initResp` и CPM-функцией, которые остались невосстановленными, или изменение общей частоты init failures. +## 6. Другие CPM / Web Extension пиксели: что реально видно в системе + +Сверка сделана по тем же версиям, полному UTC-дню 5 октября и с разделением по времени release tag. Полный наблюдаемый перечень `autoconsent` и `web.extension` с `pixel_id`, именем, platform suffix, частотой и числом записей — `related_pixels.tsv` (329 сгруппированных строк, включая отдельный pre-tag срез). `autoconsent_sources.tsv` делит каждый daily-пиксель по `fromExtension=1`, `0` и отсутствующему параметру; `autoconsent_summary.tsv` делает то же для standard summary и раскрывает счётчики событий внутри него. В таблице ниже только **после release tag**; записи до tag остаются в TSV отдельно. + +| Сигнал после tag | iOS 7.240 | macOS 1.210 | Что он проверяет | +|---|---:|---:|---| +| `autoconsent_init.daily`, только `fromExtension=1` | **56 906** | **2 825** | Background Web Extension получил `init`, дошёл до разрешённой ветки CPM и отправил native pixel. Это происходит до отдельной попытки `chrome.tabs.sendMessage(initResp)` и не подтверждает доставку ответа. | +| `autoconsent_summary`, только `fromExtension=1` | **324 549** standard-отчётов; **1 760 177** накопленных `init` | **54 421** отчёт; **213 878** `init` | Фоновый скрипт накопил события и позже отправил сводку через native. Это наблюдение многих успешных background→native проходов, но не denominator для `init failure.daily`: другое окно, другой тип частоты, эпизоды не соединены. | +| `web_extension_loaded.daily` | 61 902 | 2 870 | Manager загрузил хотя бы одно extension; имя не указывает, что это CPM, и ничего не говорит о конкретной вкладке. | +| `web_extension_state_checked.daily` | 62 004 | 2 805 | Lifecycle coordinator проверил набор ожидаемых/загруженных extension в manager. | +| `web_extension_embedded_not_loaded.daily` | **3 389** | **1** | Во время хотя бы одной проверки embedded extension ожидался, но отсутствовал в manager. Не проверяет controller/scripts конкретной вкладки. | +| `web_extension_load_error.daily` | 4 | 4 | Ошибка общей загрузки extension. Это отдельный сигнал от CPM timeout; по одному имени тип extension не известен. | + +**Почему `autoconsent_init` нужно делить по источнику.** Одинаковое имя пикселя используют Web Extension и старый Autoconsent user script. Всего `init.daily` после tag пришло 60 720 на iOS и 3 351 на macOS; из них `fromExtension=1` — 56 906/2 825, `fromExtension=0` — 1 100/1, без параметра — 2 714/525. В release-коде user script ставит `0` только при доступном Web Extensions API, но недоступном autoconsent extension; отсутствие параметра также не доказывает работу extension. `.daily` ограничен по общему имени, поэтому нельзя считать этот split долей всех init-вызовов. Standard summary не имеет такого daily throttle: extension-источник дал 324 549/54 421 сводок с `init` счётчиками, но сводка запускается двухминутным alarm и может прийти существенно позже навигации. + +**Функциональные CPM-события тоже есть:** с `fromExtension=1` после tag получены `autoconsent_popup-found.daily` 31 363 iOS / 1 918 macOS и `autoconsent_done.daily` 23 050 / 1 578; `disabled-for-site.daily` 4 763 / 694. Они показывают, что Web Extension действительно обнаруживает и обрабатывает popup на части навигаций. Ошибки `error_optout.daily` 513/107 и `error_reload-loop.daily` 280/49 относятся к обработке popup, а не к доставке `initResp`. `self-test-fail.daily` 153/97 **не имеет `fromExtension=1`** в этих данных и потому не служит сигналом ошибки extension. Все эти имена общие с legacy user script, поэтому исходный `fromExtension` обязателен. + +**Lifecycle и соседние семейства:** `web_extension_embedded_installed.daily` 51 958/1 756 и `embedded_upgraded.daily` 804/741 отражают операции установки, а не исполнение content script. Есть отдельные пиксели install/uninstall, ad-blocking, dark-reader, scriptlet fetch/validation/install и `web_extension_ad_blocking_not_loaded`; полный набор реально поступивших имён и чисел в `related_pixels.tsv`. Они полезны для общей работоспособности Web Extensions, но не локализуют CPM `init`-timeout. Все debug CPM health-пиксели и actual `web_extension_reload_failed` разобраны выше в разделах 1–5. + +**Вывод для крупнейшей группы init failure:** в совокупности данные подтверждают, что Web Extension широко запускается и обрабатывает CPM на этих билдах. Они **не подтверждают**, что в 3 717 iOS / 911 macOS строках с исправным native-снимком background получил именно тот `init`, отправил `initResp` и content script его принял. Нет event/pixel для `content init sent`, `background init received` с общим navigation ID, `initResp sent/received`, начала/результата `refreshCpmDashboardState` или исхода сопоставления URL. Сопоставить `autoconsent_init`/`summary` с конкретным `initialization.failed` по текущей анонимной телеметрии нельзя. На macOS лишь 1 общий `embedded_not_loaded.daily` при 77 init failures с controller mismatch без scripts: это согласуется с тем, что глобальный manager может быть исправен, пока отдельная вкладка прикреплена неверно. + +Код release tags: `WebExtensionPixelFiring.swift` (семейства и частоты CPM); `WebExtensionManager.swift` (`.loaded` после общего load); `WebExtensionLifecycleCoordinator.swift` (`stateChecked`/`embeddedNotLoaded`); платформенные `AutoconsentMessageHandlerDelegate` (пересылка Web Extension пикселей); `AutoconsentUserScript.swift` (то же имя с `fromExtension=0` или без параметра); release bundle background `handleAutoConsentMessage`, `firePixel`, `sendSummaryPixel` (`init`, `initResp` и двухминутная сводка). + ## Источники и воспроизведение сверки Локальная выгрузка и код подсчёта: `cpm-public-attribution-2026-10-06/` в `/Users/admin/DuckDuckGo/apple-browsers.git`. `inventory.tsv` — полный CPM daily/count перечень и actual reload errors; `release_cutover_daily.tsv` — все CPM daily и actual reload daily по обе стороны release-tag timestamp; `initialization_daily.tsv` и `events_daily.tsv` — PII-free строки attribution с точным timestamp; `release_cutover_groups.tsv` и `release_cutover_reasons.tsv` — группы и причины по обе стороны tag, воспроизводятся `analyze_cutover.py`; `daily_groups_exclusive.tsv`, `daily_families.tsv`, `daily_reasons.tsv`, `daily_signatures.tsv` — сводки **полного дня, включая pre-tag**; `release_cpm_daily_trends.tsv` — 982 строки дневных трендов шести версий. Код поведения: `CPMMessagingHealthMonitor.swift` (`reportFailure`, `reportSuccess`), `WebExtensionManager.swift` (`onConfirmedHang`, `reloadEmbeddedExtensionAfterCPMMessagingHang`), `WebExtensionLifecycleCoordinator.swift` (navigation gate), `PixelKit.swift` (лимит `.daily` по имени и UTC). Снимок законченного дня; для вывода о динамике incidence нужен следующий полный UTC-день новой версии и знаменатель активных установок той же версии.