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

This commit is contained in:
Alexey Martemyanov committed 2026-09-23 15:12:47 +06:00
1 parent 34f4731e72
commit b994c2479c
2 files changed
+36 -21

No files matched your search

@@ -1,6 +1,6 @@
# CPM Web Extension Breakage — статус и PR-план
> Актуально на 2026-09-22. Полная трассировка: [[cpm-web-extension-breakage-findings]].
> Актуально на 2026-09-23. Полная трассировка: [[cpm-web-extension-breakage-findings]].
> Experiment Definition: [[cpm-background-graveyard-experiment-definition]].
## Решение
@@ -33,7 +33,7 @@ M4 перезагружает Web Extensions при первом сигнале
|---|---|---|
| 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]]. |
| M3 attribution telemetry | `alex/cpm-failure-telemetry` — `/Users/admin/DuckDuckGo/apple-browsers.git/cpm-failure-telemetry` | **Merged 2026-09-23:** [PR #6844](https://github.com/duckduckgo/apple-browsers/pull/6844), CI green. Bucketed diagnostics, app launch/version attribution, `extension_updated`, `base_url_changed`, `recovery_from`, reload-error pixel; recorder и proxy имеют отдельные flags. [[cpm-m3-telemetry-privacy-triage]]. |
| M4 hung recovery | `codex/cpm-hung-recovery` — `/Users/admin/DuckDuckGo/apple-browsers.git/cpm-hung-recovery` | **In progress:** первый `messaging init failure` открывает diagnostic episode; первый последующий `hung` перезагружает Web Extensions. |
| 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. |
@@ -42,11 +42,9 @@ All milestone diffs pass `git diff --check`; changed Swift lines are within 150
## Stack and Git state
Independent PRs:
M3 merged: [PR #6844](https://github.com/duckduckgo/apple-browsers/pull/6844), merge commit `2d58ad8cf4fae728a92e2aae0d3ec6073ddf49f2`.
1. M2 — stable base URL.
2. M3 — production telemetry.
3. M4 — reload on the first `hung`, after `messaging init failure`.
M2 — independent stable-base-URL fix. Вошедший в M3 `base_url_changed` только сообщает о смене URL между загрузками контекста с одинаковым identifier; URL и identifier не отправляются. Это не фикс M2.
Stacked PRs:
@@ -57,15 +55,9 @@ M3 telemetry
└── M6 A/B experiment
```
Current refs intentionally preserve the earlier no-commit workflow:
Следующий Git-шаг: обновить `origin/main`, сверить diff M2/M4/M5/M6 и перенести оставшиеся изменения на merged M3 в порядке выше. Старые локальные refs не подтверждают актуальный stack; готовность M2/M5/M6 в таблице относится к предыдущей локальной валидации, не к повторной проверке после merge M3. Rebase/commit этих веток ещё не выполнялись в рамках этого обновления.
- M3 and M5 branch refs: `814bce5d11`; their milestone changes are unstaged.
- M5 ghost commit used only as M6 base: `cefad244c5`.
- M6 branch ref: `cefad244c5`; M6 changes are unstaged above it.
- M5’s final combined pixel description has been pulled into M6.
- Local `origin/main` advanced from the M3 merge base by one unrelated pixel-definition commit (`67a2f2b7b2`); it does not overlap CPM files.
Before opening PRs: commit M2 and M3, update them onto current `origin/main`, recreate/rebase the M5 commit onto M3, then rebase M6 onto that M5 commit. Do not include generated `Package.resolved` churn; Cursor currently regenerates it in the open M3 workspace.
Не включать generated `Package.resolved` churn.
## Experiment contract
@@ -79,10 +71,10 @@ Full definition and config draft: [[cpm-background-graveyard-experiment-definiti
## Remaining gates
1. Build and validate M4, then open M2/M3/M4/M5/M6 PRs in the topology above.
1. Обновить оставшиеся ветки поверх merged M3; build/validate M4 и повторно проверить зависимые M5/M6. Открыть M2/M4/M5/M6 PRs в topology выше.
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.
5. Ship M3 first; enable M5/M6 only if production telemetry confirms the process-death hypothesis.
No Asana tasks, comments, or configuration were created during this review.
M3 merged, но ещё не подтверждён как shipped production release. Feature flag registry tasks созданы отдельно для iOS/macOS; ссылки — в [[cpm-m3-telemetry-privacy-triage]]. Это обновление затрагивает только Obsidian.