[2026-10-16] eagle: work/projects/cpm-metrics-causes-and-mitigations-2026-10-16.md work/projects/cpm-status-2026-10-15.md

This commit is contained in:
Alexey Martemyanov committed 2026-10-16 20:21:41 +06:00
1 parent db62bd40e4
commit 06d2adc04d
2 files changed
+13 -1

No files matched your search

@@ -47,7 +47,7 @@ Percentages below are shares of all initial-failure / stuck daily reports in the
- **P2, error 6:** error-6 cohort — **iOS init 6.1%, stuck 21.5%; macOS init 1.0%, stuck 1.9%**. controlled macOS suspension reproduces WebKit's roughly 30-second background-load timeout. The main iOS chains remain unproven. Local mitigation retries `loadBackgroundContent` once on the current context, with cooldown and recovery guards. Same-document dashboard **and page initResp** recovery passed twice. Full-context replacement was rejected after repeat page-response loss. Foreground-resume recovery remains untested.
- **P3, loaded context without view:** no-view cohort — **iOS init 48.1%, stuck 10.9%; macOS init 3.3%, stuck 1.8%**. startup dominates on iOS. Base-URL cleanup can delay startup, but the full P3 failure remains unreproduced, including the 20,000-resource cache test. Stable extension base URL is an unfinished candidate.
- **P4, first mid-session load:** Fix A signature — **iOS init 3.9%, stuck 0.9%**. Broader recent-load cohort: **iOS init 15.7%, stuck 6.0%; macOS init 20.0%, stuck 6.4%**. early init loss is reproduced; Fix A waits for first background readiness. The narrower signature is 129k → 4.6k iOS reports and can include reloads.
- **P5, background fails to wake:** **14 October stuck: iOS 1.15% (1,953 / 169,115); macOS 3.57% (499 / 13,992)**. P5 init was not counted in that analysis. Closing a window with a shared pinned tab reproduces lost tab registration on macOS; fix window/tab lifecycle reporting. That signature appears in **13.6% of macOS P5** (68 / 499), or **0.49% of all macOS stuck**. Missing listener registration also reproduces P5 in controlled tests; its natural trigger remains unknown. The earlier 494-report selection used different filters.
- **P5, background fails to wake:** **5 October, after each platform's release tag: iOS init 1.40% (93 / 6,624) → stuck 2.08% (30 / 1,440); macOS init 6.83% (94 / 1,377) → stuck 4.52% (22 / 487)**. Recounted from the saved `cpm-public-attribution-2026-10-06/initialization_daily.tsv` and `events_daily.tsv`: last five `bg_events` names `proxy_on>dealloc>view>proxy_on>dealloc`, excluding error 6, Network replacement and scripts=false. This is the earlier 5 October cut, not 12–14 October. **14 October stuck: iOS 1.15% (1,953 / 169,115); macOS 3.57% (499 / 13,992)**; init for that newer cut has not been recounted. Closing a window with a shared pinned tab reproduces lost tab registration on macOS; fix window/tab lifecycle reporting. That signature appears in **13.6% of macOS P5** (68 / 499), or **0.49% of all macOS stuck**. Missing listener registration also reproduces P5 in controlled tests; its natural trigger remains unknown. The earlier 494-report selection used different filters.
- **P6, controller mismatch:** broader detached-tab cohort — **iOS init 0.03%, stuck 0.05%; macOS init 6.2%, stuck 8.9%**. P6-only init/stuck shares are unavailable. a main `webExtensions` flag cycle creates a new manager while existing web views retain the old controller. Recreate/rebind affected views when replacing the manager; context reload alone cannot repair this. The conditional mechanism is reproduced, but its occurrence in production is unconfirmed. Selected macOS tails: **627 + 235** reports.
- **Other:** **iOS init 5.3%, stuck 12.5%; macOS init 23.4%, stuck 22.2%**. Tests reproduce slow settings replies, lost messages, and missing dashboard confirmation even when the page receives its answer. Some iOS reports also resemble slow wake-up (P1). Their individual shares are unknown. Mitigations depend on which step fails: wait for background readiness, reduce settings delays, or fix message/confirmation delivery.
+12
View File
@@ -908,3 +908,15 @@ Targeted unit suites: **170 PASS**, включая 5 новых manager tests (`
Для install/upgrade regression в пределах контракта выбран busy-loop **4500 ms** (временной запас на WK startup), с теми же требованиями native dashboard + page initResp без first failure. `CPM_APP_INTEGRATION_INSTALL_DELAY_MS=5000` сохраняет возможность повторить граничный/выходящий за бюджет эксперимент на той же сборке. Предел записан и в README: новая реализация, как #7379, не гарантирует первый документ, если startup не помещается в 5 s. Артефакты всех красных прогонов сохранены; нельзя представлять их как успешно исправленный режим.
Финальный общий app-прогон и 10× повторы будут выполнены после пересборки с этим явным разделением contract regression и over-budget эксперимента. 170 unit-тестов с актуальной shared logic снова PASS (`unit-final-visible.log`), 16 Swift lint 0.
### Финальная положительная валидация replacement-кандидата
С default install/upgrade fixture **4500 ms**, прежним production gate **5 s** и неизменными строгими assertions:
- `install-upgrade-final-repeat.xcresult`: **20/20 успешных method executions**, по 10 install и 10 upgrade, без skips/failures. Это два уникальных метода, не 20 разных кейсов.
- `enabled-final.xcresult`: **4/4 уникальных app methods PASS** в одном общем прогоне: P2 84.923 s, install 5.163 s, P1 49.352 s, upgrade 5.434 s. Во всех требуемых точках проверяется и настоящий native dashboard, и page initResp; P2 восстанавливается до другой навигации в том же context, upgrade меняет identifier и подтверждает coexistence.
- `unit-final-visible.log`: **170 PASS**, 0 failures/skips; в ветке 9 новых unit methods (4 lifecycle + 5 manager).
- `ios-module-final-visible.log`: **BUILD SUCCEEDED** для общего WebExtensions на generic iOS Simulator SDK. Полное iOS app/lifecycle тестирование не запускалось.
- `lint-final.log`: strict lint 16 Swift files, 0 violations. Подписи Apple Development и strict проверка фактически загружаемого XCTest и app debug dylib успешны.
Финальные source hashes записаны в `final-source-hashes.json` перед повторами/общим прогоном и сверены: drift отсутствует, включая README и unchanged ZIP. Побочный SwiftPM pin diff сохранён и удалён из worktree. Начат `disabled-final.xcresult` на **тех же бинарниках**, выключающий gate для P1/install/upgrade и recovery flag для P2. Его результат ещё ожидается. Случай 5000 ms + WK overhead выше остаётся красным известным выходом за бюджет; он не был исправлен и не выдаётся за PASS.