From a2615c02a4fa8cddb2ad6a76b2db3208479e96e1 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Wed, 23 Sep 2026 13:26:16 +0600 Subject: [PATCH] [2026-09-23] eagle: work/projects/cpm-web-extension-breakage-validation.md --- .../cpm-web-extension-breakage-validation.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/work/projects/cpm-web-extension-breakage-validation.md b/work/projects/cpm-web-extension-breakage-validation.md index 5e3c7748..93b9ba32 100644 --- a/work/projects/cpm-web-extension-breakage-validation.md +++ b/work/projects/cpm-web-extension-breakage-validation.md @@ -8,9 +8,9 @@ Есть два независимых класса проблем: - **Per-tab lifecycle** исправлен в M1 и уже merged. -- **All-tabs CPM outage** идёт stack: M3 telemetry → M5 bounded graveyard → M6 A/B. +- **All-tabs CPM outage** идёт stack: M3 telemetry → M4 hung recovery → M5 bounded graveyard → M6 A/B. -M4 как отдельной ветки/PR нет: production validation — rollout gate после M3. Старый M4 worktree удалён и из topology исключён. +M4 перезагружает Web Extensions только после второго сигнала `hung`, когда монитор подтверждает global CPM outage. Первый сигнал остаётся диагностическим: он не меняет состояние расширений. ## Статус проблем @@ -34,6 +34,7 @@ M4 как отдельной ветки/PR нет: production validation — rol | M1 tab lifecycle | `codex/cpm-tab-lifecycle-fixes` | **Merged:** [PR #6827](https://github.com/duckduckgo/apple-browsers/pull/6827), CI green. | | M2 stable base URL | `alex/cpm-stable-base-url` — `/Users/admin/DuckDuckGo/apple-browsers.git/cpm-stable-base-url` | **Production-ready:** 2 files; 11/11 targeted tests. Добавлена safe URL construction и negative validation вместо force-unwrap. | | M3 attribution telemetry | `alex/cpm-failure-telemetry` — `/Users/admin/DuckDuckGo/apple-browsers.git/cpm-failure-telemetry` | **Production-ready code:** passive PII-free buckets, app-update/launch attribution, stable-base-URL transition fact, iOS/macOS schema validation green. Privacy triage: [[cpm-m3-telemetry-privacy-triage]]. | +| M4 hung recovery | `alex/fix-cpm-breakage` — `/Users/admin/DuckDuckGo/apple-browsers.git/cpm-breakage-pixel` | **In progress:** после второго сигнала `hung` перезагружает Web Extensions; первый сигнал только открывает диагностический episode. | | M5 graveyard mitigation | `alex/cpm-graveyard-mitigation` — `/Users/admin/DuckDuckGo/apple-browsers.git/cpm-graveyard-mitigation` | **Production-ready, default off:** one retained view maximum, 3-second bounded hold, stale release cancellation, unload/reload/runtime kill-switch cleanup. 24/24 targeted tests; earlier real forced-kill iOS E2E recovered with release at ≈3.15 s. | | M6 graveyard A/B | `alex/cpm-graveyard-ab` — `/Users/admin/DuckDuckGo/apple-browsers.git/cpm-graveyard-ab` | **Production-ready code:** lazy exposure enrollment, stable cohorts, control/treatment isolation, bounded pending queue, operational pixels and standard `experiment_metrics` outcome. 421/421 WebExtensions tests; iOS/macOS app builds; iOS/macOS pixel validators. | @@ -45,13 +46,15 @@ Independent PRs: 1. M2 — stable base URL. 2. M3 — production telemetry. +3. M4 — reload after confirmed `hung` (the second signal). Stacked PRs: ``` M3 telemetry -└── M5 graveyard mitigation - └── M6 A/B experiment +└── M4 hung recovery + └── M5 graveyard mitigation + └── M6 A/B experiment ``` Current refs intentionally preserve the earlier no-commit workflow: @@ -76,7 +79,7 @@ Full definition and config draft: [[cpm-background-graveyard-experiment-definiti ## Remaining gates -1. Open M2/M3/M5/M6 PRs in the topology above. +1. Build and validate M4, then open M2/M3/M4/M5/M6 PRs in the topology above. 2. Create separate iOS and macOS experiment-log tasks. 3. Create Privacy Configuration + privacy/schema review tasks. 4. Create Data Science sample-size/design and Native Apps Experiment Analysis task.