diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md index 3006d92f..a996f6f3 100644 --- a/work/projects/cpm-project-summary-2026-11-03.md +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -86,3 +86,18 @@ Next, metrics: Open: - No fix for macOS wake failures and tab not connected. If the new metrics show nothing actionable, close the project and reset the target. + + +## Состояние на 10 ноября: стопка PR очистки + +Раскладка. **PR 1** [#8025](https://github.com/duckduckgo/apple-browsers/pull/8025), ветка `alex/cpm-episode-metrics` (ворктри `cpm-episode-metrics`), конец `6928847174` (merge `origin/main` `ba38c366b5`), запушен, метка `skip pixel check`, ждёт ревью. **PR 2** (pixel cleanup по плану), ветка `alex/cpm-pixel-cleanup` (ворктри `cpm-pixel-cleanup`) от `6928847174`, переделка в работе, сессию просили остановить, что успела изменить, неизвестно, не запушена. Старые ветки с неверно скроенным PR 2 (чистка вместе с новым пикселем, вердиктом по концу страницы и полем `background`) и метками диагностики init wake: `alex/cpm-breakage-pixel` (`e6419bb910`) и `alex/cpm-init-diagnostics` (`adb28e643d`), не запушены, использовать как заготовки. Расширение: правки в `~/DuckDuckGo/duckduckgo-privacy-extension`, ветка `alex/cpm-init-progress` (PR `#3727`), без коммита (метка `page_init_sent` в `shared/js/cpm.js`; `config_read`, `settings_checked`, `site_checked` и обработка метки в `cookie-prompt-management.js`); тесты расширения не запускались. + +**PR 1 сделано.** Удалены флаги и код: graveyard, hang recovery, late document recovery, P2 `cpmBackgroundLoadRecovery` (с веткой повтора загрузки), флаг `webExtensionSharedPinnedTabWindowClose` (фикс остался, безусловный). Удалены пиксели `background_load_retry`, `late_document_reload`, `startup_response_missing`, `install_readiness`, `upgrade_readiness`, `background_wake`, перечисления `CPMRecoveryFix`/`CPMRecoveryOutcome`, класс `CPMBackgroundReadinessRecovery`, значение `cpm_messaging_hung` в `reload_trigger`. Определения пикселей удалены сознательно. Планировщик восстановления после error 6 (cooldown, пауза в фоне, pending, возобновление) оставлен и проверяет теперь флаг `cpmBackgroundLoadRestart`. Остаются флаги-выключатели: `cpmBackgroundLoadRestart`, `cpmNetworkProcessRecovery`, `cpmStableBaseURL`, `cpmUpgradeBeforeLoad`, `stateRestorationGate`. + +**PR 2, целевая реализация (по плану Pixel data cleanup, без нового пикселя и без новой логики детекта).** Удалить: `CPMMessagingDiagnosticsRecorder`, `CPMMessagingDiagnostics`, `CPMBackgroundWebViewDelegateProxy`, `CPMBackgroundReadinessObserver`, `CPMDiagnosticsFeatureFlags` и их тесты; флаги `cpmDiagnosticsRecorder` и `cpmBackgroundDelegateProxy` (`PrivacyFeature`, `FeatureFlag` обеих платформ); проводку в `WebExtensionManager`, `+iOS`, `+macOS`, `+EmbeddedExtensions`, `+NativeMessaging`; параметр `appSession:` в iOS `makeManager` и его вызов в `MainCoordinator`; `cpmAppSessionDiagnostics` в macOS `AppDelegate`; пункт «CPM Background WebContent PID» в macOS `WebExtensionsDebugMenu`; `diagnosticsProvider` в `CPMMessagingHealthMonitor`. Урезать пиксель `web_extension_cpm_episode` (имя остаётся): убрать 8 диагностических булевых, `bg_events`, четыре поля загрузки фона, `was_stuck`, `interrupted`, `response_after`; оставить `reason`, `outcome`, `tabs_affected`, `repeat_failures`, `reload_state`; обновить `CPMMessagingEpisodeReport`, определения в `web_extensions.json5` и записи в `params_dictionary.json5` обеих платформ (macOS сохраняет суффикс `["daily_count"]` и параметры `appVersion`, `pixelSource`, `channel`). Таймеры, лайфсайкл эпизода, детект и restart-наблюдение не менять. Не добавлять новый пиксель, вердикт по концу страницы, поле `background`, метки `cpmInitProgress`. Изменение параметров существующего пикселя потребует метку Danger. + +**Дальше по плану.** Перманентный пиксель рядом со старым эпизодом на один релиз, затем старый убрать: вердикт по концу страницы, поле «пробуждение или тёплый фон» через `didCreateBackgroundWebView`, мгновенная поломка по `cpmStage`; учесть 9 находок ревью старого PR 2 (определение macOS не совпадало с отправляемым, молчащие замеры старше 5 минут отбрасывались, нет минимального времени жизни, падение процесса вкладки засчитывалось как поломка, `background` по загрузке дольше 1 с неверно, утечка `navigationWaitContexts`, нет теста на разбор `cpmStage`). Диагностика init wake: приём `cpmInitProgress`, `last_stage`, расширение (`#3727` плюс метки). Вне PR: записи об удалённых подфичах в `privacy-configuration`. Не измерено: эффект P3, `stateRestorationGate`, pinned-tab по версиям; доля потерянных отчётов; время жизни страниц с молчащим расширением. + +**Решения по данным (ClickHouse, 8–9 ноября, счёт `count`).** P2 убран: пикселя результата нет (115 тысяч повторов в день на iOS), при оставшемся view повтор не завершается (фон это service worker). Restart 9 ноября: iOS 7.245 118 перезапусков, 81% ответов страницы; macOS 1.215 54 перезапуска, 65%, выборка маленькая, контроля нет. Network recovery оставлен: iOS 388 тысяч срабатываний в день, 59% числа эпизодов, эффект не измерен (`network_restarted` убрали из отчёта в том же релизе), измерять выключением удалённого флага. Таймер 4 с: на iOS 7.244 6,0% эпизодов закрылись поздним ответом на ту же страницу, 42% из них позже 30 с, 19,4% без ответа за 5 минут. Доступа к статусу расширения из приложения нет (в SDK нет доступа к миру расширения, `evaluateJavaScript` на фоне не достаёт до воркера); порт или heartbeat как проверка здоровья не годятся (открытый порт откладывает выгрузку фона). + +**Данные из сессии.** `~/Developer/grafana-data-tools/` и запуск SQL через Grafana с SSO через системный Chrome (`grafana-auth --channel chrome`). Счёт пикселей: `metrics.pixels_aggregation` (`pixel_id = 'web'`); параметры: `metrics._pixels_new` только с `pixel_id = 'web'` и одним днём.