[2026-09-23] eagle: work/projects/cpm-web-extension-breakage-validation.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-23 13:26:16 +06:00
1 parent ae27c7f001
commit a2615c02a4
1 file changed
+8 -5
@@ -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.