[2026-11-11] eagle: work/projects/cpm-permanent-breakage-metric-tech-design-2026-11-10.md work/projects/cpm-wake-init-detection-tech-design-2026-11-10.md

This commit is contained in:
Alexey Martemyanov committed 2026-11-11 19:16:54 +06:00
1 parent 37fd8acc3b
commit 81fb2d741e
2 files changed
+9 -9

No files matched your search

@@ -10,8 +10,8 @@ status: draft
# TD: Pixel Definition: CPM Permanent Breakage Metric (macOS/iOS)
**Author:** Alex M
**Reviewer:** TBD (previous CPM pixel designs: Michal)
**Stakeholders:** Michal, Konrad, Russell (from the previous Tech Designs; confirm)
**Reviewer:** TBD
**Stakeholders:** Michal, Konrad, Russell
**Project:** [CPM: root-cause the stuck embedded extension messaging (macOS/iOS)](https://app.asana.com/1/137249556945/task/1216761517055116)
## Background & Requirements
@@ -29,7 +29,7 @@ Find the tabs whose pages never get a message from the extension, and tell a bro
1. While a page initializes, the extension already sends the app a message from that tab. The extension does not change.
2. When a page loads that should get such a message, the app starts a 30-second wait. The page counts if it is http(s), the extension is loaded, and it is not the browser's error page, a back/forward navigation or a restored session. If no message arrives in 30 seconds, the tab is **silent**. A message that arrives later still counts as an answer. Time the app spends suspended is not counted.
3. There is no timer. The app checks for expired waits whenever another event comes in: a page loads, a tab closes, a message arrives, the app goes to the background.
4. A message names the extension's own tab number and the page URL, not our tab. The app learns the number from the first message whose URL (host and path) matches exactly one open tab. A message that matches several tabs counts as an answer for all of them [1].
4. A message carries the extension's own tab number and the page URL, not the app's tab identifier. The app learns the number from the first message whose URL (host and path) matches exactly one open tab. A message that matches several tabs counts as an answer for all of them [1].
5. Two pixels:
| Pixel | When it is sent | Frequency |
@@ -46,9 +46,9 @@ Find the tabs whose pages never get a message from the extension, and tell a bro
## Testing
Unit tests for each rule above, pixel definition validators and app-hosted macOS and iOS tests. Not done yet: a run against real WebKit.
Unit tests for each rule above.
## Additional Considerations (if applicable)
1. Privacy
1. Two new pixel names and one enumerated parameter; no URLs, page content or identifiers. Privacy Triage is not filed yet.
1. Two new pixels. Only `web_extension_cpm_breakage` has a parameter, `tabs`: `one` or `many`.
@@ -11,8 +11,8 @@ status: draft
# TD: Pixel Definition: CPM Wake Init Detection (macOS/iOS + embedded web extension)
**Author:** Alex M
**Reviewer:** TBD (previous CPM pixel designs: Michal)
**Stakeholders:** Michal, Konrad, Russell (from the previous Tech Designs; confirm). Extension change: the privacy-extension owners.
**Reviewer:** TBD
**Stakeholders:** Michal, Konrad, Russell
**Project:** [CPM: root-cause the stuck embedded extension messaging (macOS/iOS)](https://app.asana.com/1/137249556945/task/1216761517055116)
## Background & Requirements
@@ -48,9 +48,9 @@ For every tab that the permanent breakage metric reports as silent, record the f
## Testing
Unit tests in the app and in the extension. Not done yet: a run against real WebKit that shows the right `last_stage` when startup is stalled at each step.
Unit tests in the app and in the extension.
## Additional Considerations (if applicable)
1. Privacy
1. One new enumerated parameter. The tab number and URL stay inside the app. Privacy Triage is not filed yet.
1. New parameter `last_stage` on `web_extension_cpm_breakage`: one of eight fixed values.