Verified against #7376**`5d1cb4abd2`**, 20 October 2026. These expectations apply to that published branch; the PR is closed without merge. The macOS counterpart #7484 still has the earlier `was_stuck` contract. Full values and limitations: [[cpm-pr0-episode-telemetry-summary-2026-10-16]].
# Privacy Triage: Apple - CPM Extension Health Pixels
> **Historical privacy draft; current contract checked 20 October 2026.** The separate event list below is superseded on the published #7376 branch by one `web_extension_cpm_episode` with **daily+count**. The PR is closed without merge; no shipping claim follows from this note.
> **Status checked 20 October 2026.** This note preserves the original M3 schema merged in #6844, with later production evidence in iOS 7.240+ / macOS 1.210+. It is not the schema of the current #7376 branch.
# CPM Service Worker — architecture, diagnostics, failure gaps
> **Current implementation context — 20 October 2026.** The architecture/source audit below remains dated September 25; its bundle versions, milestones and open-source bug shipping statements are historical. Current sources/worktrees: [[cpm-web-extension-code-guide-2026-10-09#0. Текущая карта worktree и точек входа]].
> **Актуальный локальный итог P1/P2 — 16 октября, 12:30 UTC / 18:30 Бишкек.**В`cpm-e2e-init` добавлены точечные production-кандидаты и две app-регрессии: **22/22 текущих app methods PASS**, 0 failed/skipped/expected failures в positive runs; P2 same-document повторён дважды. С выключенными фиксами обе новые регрессии красные по функциональным причинам. Пакет: 806 tests, 14 skipped, 0 failures; strict SwiftLint — 0 нарушений. **P2 в окончательном варианте повторяет только background load и сохраняет context; full-context prototype отвергнут как нестабильный.** Подробный итог и ограничения — раздел «Окончательный итог точечных P1/P2-кандидатов». Это macOS с управляемыми fault conditions, не доказательство natural iOS production cause. Коммитов/PR изменений нет; прежние разделы и красные прогоны сохранены.
Внутренний документ. **Цифры из ClickHouse, в публичные PR, комментарии и issues не переносить** (репозитории `duckduckgo/apple-browsers` и `duckduckgo/duckduckgo-privacy-extension` публичные). Заменяет заметку `cpm-telemetry-data-requirements-2026-10-15` (теперь ссылка сюда). Исторические срезы с собственными датами и знаменателями: [[cpm-web-extension-public-attribution-2026-10-05]], [[cpm-web-extension-data-analysis-summary-2026-10-08]], [[cpm-web-extension-repro-and-fix-2026-10-08]]. Актуальная карта worktree и точек входа добавлена в [[cpm-web-extension-code-guide-2026-10-09]]; её прежние разделы сохранены как карта на 9 октября.
**Дополнение 16 октября: app-hosted integration tests.** Добавлены 20 методов в `cpm-e2e-init`, схема `CPM Integration Tests`, штатная Apple Development signing, без commits. Финальный тестовый результат — **20/20 PASS в группах 18+1+1**, 0 failed/skipped/expected failures. **Это не «все production-кейсы кроме P3 воспроизведены»: часть методов использует явные fault injections, а все app methods — тестовое окружение и инструментированный bundle.** Связь с production-причинами доказана не для всех групп. Все результаты, включая красные совместные прогоны, отрицательный P3 и ограничение app P5, находятся в §13 и [[#Финальный app-hosted итог — 16 октября 2026]]. Финальную сводку §13 считать текущей; ранние «пока нет результатов» — сохранённая хронология. PR/CI и ClickHouse в рамках app-тестов заново не запрашивались.
**Предыдущая сверка — 15 октября, 17:26 UTC / 23:26 Бишкек.** Разделы 1–9 — сводный статус; §10–11 — сохранённая хронология экспериментов, где «пока», «не найдено» и красные ожидания относятся к моменту записи. Текущий итог всех 14 P5/P6-проверок, границы доказательства и команды — §12. PR/CI сверены read-only через GitHub; результаты локальных тестов сверены с существующими логами и исходниками, в этом документационном проходе тесты и ClickHouse-запросы заново не запускались.
Внутренний документ. **Цифры ClickHouse не переносить в публичные PR/comments/issues.** Каждый production cut сохраняет свои даты и знаменатели. Исторические результаты тестов относятся к указанным heads; факт merge/approval/зелёного CI сам по себе не устанавливает rollout. Старые краткие сводки и прежний план сохранены в §9а.
Parser должен разделять по **`,` и `;`**, игнорировать пустые entries и standalone `...`. Старый comma-only parser неверно прочитает границу. Отсутствие error/death token в обрезанном таймлайне не доказывает отсутствие события.
**Обрезание уже было в production — проверен срез 14 октября UTC.** Daily attribution reports, iOS major=7/minor≥240, macOS major=1/minor≥210, `pixel_id=debug` и соответствующие agents:
**Обрезание уже было в production — проверен срез 14 октября UTC.** Daily attribution reportsс непустым `context_loaded`, iOS major=7/minor≥240, macOS major=1/minor≥210, `pixel_id=debug` и соответствующие agents:
- iOS init: 1,103,215 reports с bg_events; 192,070 (17.41%) содержат 12 событий; **166,327 (15.08%) без исходного load**.
- iOS stuck: 169,115; 79,217 (46.84%) содержат 12 событий; **69,097 (40.86%) без load**.
@@ -175,6 +170,10 @@ Parser должен разделять по **`,` и `;`**, игнорирова
Полный contract, частоты, 11 retired pixels и 9 удалённых полей: [[cpm-pr0-episode-telemetry-summary-2026-10-16]]. Источник текущей сериализации: [WebExtensionPixelFiring.swift на 5d1cb4abd2](https://github.com/duckduckgo/apple-browsers/blob/5d1cb4abd2f5e16d23a19f0c43c7017a52e9c9b6/SharedPackages/WebExtensions/Sources/WebExtensions/Pixels/WebExtensionPixelFiring.swift); [bg_events encoder](https://github.com/duckduckgo/apple-browsers/blob/5d1cb4abd2f5e16d23a19f0c43c7017a52e9c9b6/SharedPackages/WebExtensions/Sources/WebExtensions/Autoconsent/CPMMessagingDiagnostics.swift).
### Проверка актуальности документации — 20 октября 2026
Сверены все 18 содержательных CPM-заметок в vault: текущие sections описывают опубликованный contract, старые proposals/PR states/test results явно датированы как история. PR summary остаётся на английском, без таблиц. Проверкой diff/schema подтверждены наличие описаний **всех 18 wire fields**, частота daily+count, **все 11 retired definitions** и перечисление **9 удалённых старых полей**. Текст и frontmatter повторно прочитаны после записи; исходные cohorts, красные прогоны и ограничения сохранены. Это документационный проход: код, branches, PR states и dependency lockfile не менялись; новые app/unit tests не запускались.
### Историческая оценка до перехода на единый эпизод
Следующее описание относится к прежнему дизайну PR0, до замены отдельных failure/recovery-пикселей единым эпизодом.
@@ -194,7 +193,7 @@ Parser должен разделять по **`,` и `;`**, игнорирова
| скаляры вместо `bg_events` | 0.96% | 4.4% |
| без `bg_events` | 0.25% | 2.0% |
Верхняя граница прироста от новых полей (синтетическое независимое равновероятное поле): со старым `bg_events` при десяти значениях iOS 21%, macOS 65%; со скалярами 3.6% / 15.8%. **Вывод:** «хуже не будет» можно утверждать только со скалярами. Главный идентификатор уже выкачен (`bg_events`).
Верхняя граница прироста от новых полей (синтетическое независимое равновероятное поле): со старым `bg_events` при десяти значениях iOS 21%, macOS 65%; со скалярами 3.6% / 15.8%. **Граница этого исторического расчёта:** скаляры снижали наблюдаемую уникальность старого payload; это не гарантия, что добавление новых полей не увеличит различимость. `bg_events` — существенный источник редких сочетаний, а не доказанный идентификатор пользователя. Оценка нового двухфазного payload отдельно не выполнена.
**`bg_events`:** единственный источник давности загрузки (`load`, `base_url_changed`) и причины смерти (`died_*`). `view`, `dealloc`, `proxy_on`, `error_*` дублируют `bg_view_creations` и `context_errors`; `hold/release/proxy_off` равны нулю. Скаляры воспроизводят когорты загрузки и пробуждения на 100% строк. Теряется: поиск неожиданных последовательностей в остатке (смягчить удалённым флагом).
@@ -283,6 +282,16 @@ multiIf(
> **Отдельная ветка P1/P2 — финал 16 Oct, 13:33 UTC.** Новый worktree `alex/cpm-fix-p1-p2` от текущего `alex/cpm-messaging-readiness-telemetry` (`01d4a0ec22`): только P1/P2-кандидаты и необходимые тесты. Новых методов **2 app + 4 unit**; **22 — полный старый research app-набор**. На новой signed app-сборке **2/2 PASS**, unit **165 PASS**, strict lint 0; те же два app-теста при выключенных flags дают ожидаемые функциональные FAIL. Текущая база использует episode contract: P2 `failed_measurement_response`, `reload_state=none`, плюс реальная доставка initResp в тот же документ без навигации. История исправленного test teardown сохранена. Коммитов нет; scratch не изменён; подробности и артефакты — в конце документа.
### Дополнения и исходные сводки — 15–16 октября
> **Актуальный локальный итог P1/P2 — 16 октября, 12:30 UTC / 18:30 Бишкек.**В`cpm-e2e-init` добавлены точечные production-кандидаты и две app-регрессии: **22/22 текущих app methods PASS**, 0 failed/skipped/expected failures в positive runs; P2 same-document повторён дважды. С выключенными фиксами обе новые регрессии красные по функциональным причинам. Пакет: 806 tests, 14 skipped, 0 failures; strict SwiftLint — 0 нарушений. **P2 в окончательном варианте повторяет только background load и сохраняет context; full-context prototype отвергнут как нестабильный.** Подробный итог и ограничения — раздел «Окончательный итог точечных P1/P2-кандидатов». Это macOS с управляемыми fault conditions, не доказательство natural iOS production cause. Коммитов/PR изменений нет; прежние разделы и красные прогоны сохранены.
Внутренний документ. **Цифры из ClickHouse, в публичные PR, комментарии и issues не переносить** (репозитории `duckduckgo/apple-browsers` и `duckduckgo/duckduckgo-privacy-extension` публичные). Заменяет заметку `cpm-telemetry-data-requirements-2026-10-15` (теперь ссылка сюда). Исторические срезы с собственными датами и знаменателями: [[cpm-web-extension-public-attribution-2026-10-05]], [[cpm-web-extension-data-analysis-summary-2026-10-08]], [[cpm-web-extension-repro-and-fix-2026-10-08]]. Актуальная карта worktree и точек входа добавлена в [[cpm-web-extension-code-guide-2026-10-09]]; её прежние разделы сохранены как карта на 9 октября.
**Дополнение 16 октября: app-hosted integration tests.** Добавлены 20 методов в `cpm-e2e-init`, схема `CPM Integration Tests`, штатная Apple Development signing, без commits. Финальный тестовый результат — **20/20 PASS в группах 18+1+1**, 0 failed/skipped/expected failures. **Это не «все production-кейсы кроме P3 воспроизведены»: часть методов использует явные fault injections, а все app methods — тестовое окружение и инструментированный bundle.** Связь с production-причинами доказана не для всех групп. Все результаты, включая красные совместные прогоны, отрицательный P3 и ограничение app P5, находятся в §13 и [[#Финальный app-hosted итог — 16 октября 2026]]. Финальную сводку §13 считать текущей; ранние «пока нет результатов» — сохранённая хронология. PR/CI и ClickHouse в рамках app-тестов заново не запрашивались.
**Предыдущая сверка — 15 октября, 17:26 UTC / 23:26 Бишкек.** Разделы 1–9 — сводный статус; §10–11 — сохранённая хронология экспериментов, где «пока», «не найдено» и красные ожидания относятся к моменту записи. Текущий итог всех 14 P5/P6-проверок, границы доказательства и команды — §12. PR/CI сверены read-only через GitHub; результаты локальных тестов сверены с существующими логами и исходниками, в этом документационном проходе тесты и ClickHouse-запросы заново не запускались.
# CPM Web Extension breakage — полное summary сессии
> **Контекст актуализирован 20 октября 2026.** Это summary исследований 7–9 октября с follow-up от 15 октября, а не текущий PR contract. Последние states/CI и implementations — [[cpm-status-2026-10-15]], код — [[cpm-web-extension-code-guide-2026-10-09#0. Текущая карта worktree и точек входа]].
# CPM Web Extension: attribution и сравнение релизов — 5 октября 2026
> **Исторический отчёт за 5 октября; контекст сверён 20 октября 2026.** Таблицы, release-tag cutoffs и контрольные суммы сохранены без пересчёта. Актуальные PR/CI, отдельные когорты 12–14 октября и проверка обрезания history за 14 октября — [[cpm-status-2026-10-15]]. Новые числа нельзя переносить в прежние знаменатели.
title: CPM Web Extension failures — reproduction and fixes
date: '2026-10-08'
status: draft-for-asana
status: historical-summary
tags:
- work
- cpm
- webkit
updated: '2026-10-20'
---
# CPM Web Extension failures: reproduction and fixes
Reference in new issue
Block a user
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.