From b7898925d69a9b38aecd30a00594cc94b4b6b979 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Mon, 19 Oct 2026 17:40:15 +0600 Subject: [PATCH] [2026-10-19] eagle: work/projects/cpm-readiness-telemetry-tech-design-2026-10-15.md work/projects/cpm-status-2026-10-15.md work/projects/cpm-web-extension-code-guide-2026-10-09.md --- ...diness-telemetry-tech-design-2026-10-15.md | 22 +++++++++++++++-- work/projects/cpm-status-2026-10-15.md | 24 ++++++++++++++++--- ...cpm-web-extension-code-guide-2026-10-09.md | 24 ++++++++++++++++--- 3 files changed, 62 insertions(+), 8 deletions(-) diff --git a/work/projects/cpm-readiness-telemetry-tech-design-2026-10-15.md b/work/projects/cpm-readiness-telemetry-tech-design-2026-10-15.md index 5b1c2edc..f7f4b997 100755 --- a/work/projects/cpm-readiness-telemetry-tech-design-2026-10-15.md +++ b/work/projects/cpm-readiness-telemetry-tech-design-2026-10-15.md @@ -1,4 +1,4 @@ -> **Актуально — 19 октября 2026, uninstall fix опубликован.** [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379): production **`e970e8c90e`**, 6 commits / 22 paths; отдельный review-only harness **`e380cf98f7`**, 12 paths вне main. Удаление активного CPM context отменяет pending late-document recovery; удаление старой upgrade-версии и ошибка unload сохраняют recovery. **190 unit PASS**, red-before-fix 2 PASS / 1 FAIL, signed macOS и iOS Simulator builds PASS, strict lint 11 / 0. На новом app head подтверждены ON 8 PASS → OFF ровно 6 functional FAIL, без skips/expected failures; app/XCTest SHA256 совпали. Заключительный ON ещё выполняется. PR description и reviewer flag steps актуализированы с сохранением ручных правок. Формы оставлены в прежнем виде; late reload flag default disabled. Предыдущие heads/results ниже — история. +> **Актуально — 19 октября 2026, uninstall fix опубликован.** [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379): production **`e970e8c90e`**, 6 commits / 22 paths; отдельный review-only harness **`e380cf98f7`**, 12 paths вне main. Удаление активного CPM context отменяет pending late-document recovery; удаление старой upgrade-версии и ошибка unload сохраняют recovery. **190 unit PASS**, red-before-fix 2 PASS / 1 FAIL, signed macOS и iOS Simulator builds PASS, strict lint 11 / 0. На новом app head проверено на одних подписанных бинарниках: **ON 8 PASS → OFF 6 ожидаемых functional FAIL → ON 8 PASS**, без skips/expected failures; все app/XCTest SHA256 совпали. CI `e970e8c90e`: **48 SUCCESS / 21 SKIPPED**, pending/failures нет. PR description и reviewer flag steps актуализированы с сохранением ручных правок. Формы оставлены в прежнем виде; late reload flag default disabled. Предыдущие heads/results ниже — история. > **Актуально — 19 октября 2026, полный повторный review #7379.** Проверен локальный `5708197362` против #7376: 22 changed paths, **187 существующих тестов PASS + 1 новый probe FAIL**. Новый P2: uninstall активного CPM context не отменяет pending late-document recovery. Общий launch→navigation deadline и привязка recovery pixel к точной WKNavigation исправлены локально и прошли повторные регрессии; усиление защиты форм явно отложено пользователем, исходная проверка сохранена за default-disabled флагом. В GitHub пока `08866c7eda` (CI: 48 SUCCESS / 21 SKIPPED), новые production commits не опубликованы. Локальный review-only harness `4308751d59` синхронизирован; его новый ON/OFF/ON ещё не запускался. Подробности — в конце; прежние heads/results ниже относятся к истории. @@ -407,6 +407,24 @@ Production **`e970e8c90eca76e55217f75c13122735a72664c5`**, branch `alex/cpm-fix- **Формы и flags.** По явному указанию пользователя новая защита форм не возвращена. Original JavaScript predicate побайтно совпадает с `08866c7eda`; known limitation controlled/defaultValue и Shadow DOM остаётся. Независимый `webExtensions.cpmLateBackgroundDocumentRecovery` всё ещё default disabled на обеих платформах. Deadline launch→navigation и attribution по конкретной WKNavigation сохранены из предыдущих локальных исправлений и теперь опубликованы. -**Документация и app validation.** PR body точечно уточняет общий launch/navigation deadline, invalidation при удалении активного context и точную WKNavigation attribution. Пользовательские правки, testing branch link и ON 8 PASS → OFF 6 functional FAIL → ON 8 PASS instructions сохранены. README harness обновлён: 8 новых manager regressions / 29 новых shared methods. На новом head первый ON: 8 PASS; OFF: ровно 6 functional FAIL, 0 PASS/skips/expected failures. Проверены реальные причины отказа: install/upgrade/slow-wake first response, P2 same-document recovery timeout и late install/upgrade automatic-reload timeout. App/XCTest SHA256 до и после OFF совпали. Повторный ON ещё выполняется. Старые app результаты не перенесены на новый head. +**Документация и app validation.** PR body точечно уточняет общий launch/navigation deadline, invalidation при удалении активного context и точную WKNavigation attribution. Пользовательские правки, testing branch link и ON 8 PASS → OFF 6 functional FAIL → ON 8 PASS instructions сохранены. README harness обновлён: 8 новых manager regressions / 29 новых shared methods. На новом head первый ON: 8 PASS; OFF: ровно 6 functional FAIL, 0 PASS/skips/expected failures. Проверены реальные причины отказа: install/upgrade/slow-wake first response, P2 same-document recovery timeout и late install/upgrade automatic-reload timeout. App/XCTest SHA256 до и после OFF совпали. Повторный ON завершился 8 PASS; SHA256 до OFF, после OFF и после повторного ON совпали. CI опубликованного e970e8c90e: 48 SUCCESS / 21 SKIPPED, failures/pending нет. Старые app результаты не перенесены на новый head. Артефакты: `/private/tmp/cpm-pr7379-uninstall-fix-20261019/` (`unit-green.log`, `unit-evidence.json`, `lint.log`, `mac-build.log`, `ios-build.log`, signature logs, `heads.json`, PR snapshots); red control — `/private/tmp/cpm-pr7379-full-review-20261019/uninstall-red.log`. + +### Итог app validation и CI на опубликованном head + +Production `e970e8c90e`, review-only harness `e380cf98f7`. Все три запуска выполнены на одних Apple Development-signed app/XCTest binaries; OFF и повторный ON — `test-without-building`. + +| Запуск | Passed | Failed | Skipped | Expected failures | +|---|---:|---:|---:|---:| +| CPM Integration Tests — первый ON | 8 | 0 | 0 | 0 | +| CPM Integration Tests - Fixes Disabled | 0 | 6 | 0 | 0 | +| CPM Integration Tests — повторный ON | 8 | 0 | 0 | 0 | + +OFF failure reasons проверены по xcresult: install/upgrade/slow-wake потеряли первый ответ; P2 дождался реального WebKit error 6, но не получил same-document recovery; late install/upgrade не дождались automatic first-document reload. Это шесть намеренно красных функциональных контролей, без host crashes/setup failures/skips. Все 8 ON assertions восстановились после включения flags. SHA256 app debug dylib и XCTest executable совпали до OFF, после OFF и после повторного ON. + +Из exported ON evidence: P2 записал **actualBackgroundLoadError=[6]** и затем прошёл проверки ответа оригинальному document без context replacement или ручной навигации; последующие existing-tab/new-tab/new-window assertions также PASS. При 8-секундном startup первая navigation завершилась за **5.167 s (install)** / **5.089 s (upgrade)**, затем был ровно один automatic GET reload (finishCount=2), реальный page initResp и оба этапа pixel `reload_started` / `response_received`. Эти измерения включают локальную загрузку документа после прежнего 5-секундного gate; его лимит не увеличен. + +CI опубликованного **`e970e8c90e` завершён: 48 SUCCESS / 21 SKIPPED**, failures/pending нет. GitHub readback подтвердил оба remote heads, прежнюю базу #7376 / `713d67419a` и точное сохранённое PR body. Production worktree возвращён на `alex/cpm-fix-init-loss`, tracked/untracked diff пуст; обе ветки up to date. Новых production изменений после validation нет. Формы оставлены как согласовано; independent late-recovery flag default disabled. + +Артефакты `/private/tmp/cpm-pr7379-uninstall-fix-20261019/`: `validation-summary.json`, три `app-*-summary.json` и `.xcresult`, exported attachment folders, `app-on-evidence-summary.json`, три `hashes-*.json`, `pr-final.json`, `remote-heads.txt`. Прежние промежуточные snapshots выше сохранены как история. diff --git a/work/projects/cpm-status-2026-10-15.md b/work/projects/cpm-status-2026-10-15.md index 6ff4244e..97e05884 100755 --- a/work/projects/cpm-status-2026-10-15.md +++ b/work/projects/cpm-status-2026-10-15.md @@ -6,7 +6,7 @@ tags: - cpm - status --- -> **Актуально — 19 октября 2026, uninstall fix опубликован.** [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379): production **`e970e8c90e`**, 6 commits / 22 paths; отдельный review-only harness **`e380cf98f7`**, 12 paths вне main. Удаление активного CPM context отменяет pending late-document recovery; удаление старой upgrade-версии и ошибка unload сохраняют recovery. **190 unit PASS**, red-before-fix 2 PASS / 1 FAIL, signed macOS и iOS Simulator builds PASS, strict lint 11 / 0. На новом app head подтверждены ON 8 PASS → OFF ровно 6 functional FAIL, без skips/expected failures; app/XCTest SHA256 совпали. Заключительный ON ещё выполняется. PR description и reviewer flag steps актуализированы с сохранением ручных правок. Формы оставлены в прежнем виде; late reload flag default disabled. Предыдущие heads/results ниже — история. +> **Актуально — 19 октября 2026, uninstall fix опубликован.** [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379): production **`e970e8c90e`**, 6 commits / 22 paths; отдельный review-only harness **`e380cf98f7`**, 12 paths вне main. Удаление активного CPM context отменяет pending late-document recovery; удаление старой upgrade-версии и ошибка unload сохраняют recovery. **190 unit PASS**, red-before-fix 2 PASS / 1 FAIL, signed macOS и iOS Simulator builds PASS, strict lint 11 / 0. На новом app head проверено на одних подписанных бинарниках: **ON 8 PASS → OFF 6 ожидаемых functional FAIL → ON 8 PASS**, без skips/expected failures; все app/XCTest SHA256 совпали. CI `e970e8c90e`: **48 SUCCESS / 21 SKIPPED**, pending/failures нет. PR description и reviewer flag steps актуализированы с сохранением ручных правок. Формы оставлены в прежнем виде; late reload flag default disabled. Предыдущие heads/results ниже — история. > **Актуально — 19 октября 2026, полный повторный review #7379.** Проверен локальный `5708197362` против #7376: 22 changed paths, **187 существующих тестов PASS + 1 новый probe FAIL**. Новый P2: uninstall активного CPM context не отменяет pending late-document recovery. Общий launch→navigation deadline и привязка recovery pixel к точной WKNavigation исправлены локально и прошли повторные регрессии; усиление защиты форм явно отложено пользователем, исходная проверка сохранена за default-disabled флагом. В GitHub пока `08866c7eda` (CI: 48 SUCCESS / 21 SKIPPED), новые production commits не опубликованы. Локальный review-only harness `4308751d59` синхронизирован; его новый ON/OFF/ON ещё не запускался. Подробности — в конце; прежние heads/results ниже относятся к истории. @@ -64,7 +64,7 @@ tags: |---|---|---|---|---| | [#7378](https://github.com/duckduckgo/apple-browsers/pull/7378) | `alex/cpm-repro-harness` | main | harness (только тесты); 4 быстрых теста в CI около 3 с, остальное локально через `CPM_REPRO=1` | OPEN, head `dfb96279196d`; 37 success / 18 skipped, без failure/pending; REVIEW_REQUIRED. Предыдущее Danger-предупреждение о 1570 строках сохранено как историческое; в ветке есть коммит другой сессии «Require initResp in the page…» | | [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379) | `alex/cpm-fix-init-loss` | harness | фикс A: ожидание первой загрузки background после установки/апгрейда посреди сессии | OPEN, head `7ad771e227bb`; 35 success / 20 skipped, без failure/pending; прежние красный и зелёный прогоны сохраняются | -| [#7379 — актуально 19 Oct](https://github.com/duckduckgo/apple-browsers/pull/7379) | `alex/cpm-fix-init-loss`, worktree `alex/cpm-fix-p1-p2`; local/remote `e970e8c90e` | **#7376 / telemetry** | install/upgrade + P1/P2 + late GET recovery, 5 fix pixels; 29 новых shared regressions, 190 PASS; общий launch/navigation deadline, точная WKNavigation attribution и отмена pending reload при active-context uninstall; формы отложены | OPEN, 6 commits / 22 files; normal push выполнен, macOS/iOS builds и lint PASS. Review-only harness local/remote `e380cf98f7`, 12 paths вне main; текущий app ON/OFF/ON в процессе, CI нового head запущен | +| [#7379 — актуально 19 Oct](https://github.com/duckduckgo/apple-browsers/pull/7379) | `alex/cpm-fix-init-loss`, worktree `alex/cpm-fix-p1-p2`; local/remote `e970e8c90e` | **#7376 / telemetry** | install/upgrade + P1/P2 + late GET recovery, 5 fix pixels; 29 новых shared regressions, 190 PASS; общий launch/navigation deadline, точная WKNavigation attribution и отмена pending reload при active-context uninstall; формы отложены | OPEN, 6 commits / 22 files; normal push выполнен, macOS/iOS builds и lint PASS. Review-only harness local/remote `e380cf98f7`, 12 paths вне main; на одних signed binaries ON 8 PASS → OFF 6 functional FAIL → ON 8 PASS; CI 48 SUCCESS / 21 SKIPPED, завершён | | [#7381](https://github.com/duckduckgo/apple-browsers/pull/7381) | `alex/cpm-fix-network-crash` | фикс A | фикс B: перезапуск background при замене Network-процесса и мёртвом worker'е | OPEN, remote head `39f94e12eaa4`; 28 success / 24 skipped / 6 failure, включая **Test (Non-Sandbox)** и итоговые отчёты. Прежний красный repro `testNetworkProcessCrashKeepsEveryTabWorking` с 3 ретраями подтверждён. Исправление `f1085846e7ff` — единственный локальный commit поверх remote head; в PR его нет, зелёного CI для него нет | | (нет PR) | `alex/cpm-fix-pixels` | фикс B + PR0 | пиксели `background_restart` и `first_load_wait` для измерения эффекта | держим до слияния PR0, A, B | @@ -1213,6 +1213,24 @@ Production **`e970e8c90eca76e55217f75c13122735a72664c5`**, branch `alex/cpm-fix- **Формы и flags.** По явному указанию пользователя новая защита форм не возвращена. Original JavaScript predicate побайтно совпадает с `08866c7eda`; known limitation controlled/defaultValue и Shadow DOM остаётся. Независимый `webExtensions.cpmLateBackgroundDocumentRecovery` всё ещё default disabled на обеих платформах. Deadline launch→navigation и attribution по конкретной WKNavigation сохранены из предыдущих локальных исправлений и теперь опубликованы. -**Документация и app validation.** PR body точечно уточняет общий launch/navigation deadline, invalidation при удалении активного context и точную WKNavigation attribution. Пользовательские правки, testing branch link и ON 8 PASS → OFF 6 functional FAIL → ON 8 PASS instructions сохранены. README harness обновлён: 8 новых manager regressions / 29 новых shared methods. На новом head первый ON: 8 PASS; OFF: ровно 6 functional FAIL, 0 PASS/skips/expected failures. Проверены реальные причины отказа: install/upgrade/slow-wake first response, P2 same-document recovery timeout и late install/upgrade automatic-reload timeout. App/XCTest SHA256 до и после OFF совпали. Повторный ON ещё выполняется. Старые app результаты не перенесены на новый head. +**Документация и app validation.** PR body точечно уточняет общий launch/navigation deadline, invalidation при удалении активного context и точную WKNavigation attribution. Пользовательские правки, testing branch link и ON 8 PASS → OFF 6 functional FAIL → ON 8 PASS instructions сохранены. README harness обновлён: 8 новых manager regressions / 29 новых shared methods. На новом head первый ON: 8 PASS; OFF: ровно 6 functional FAIL, 0 PASS/skips/expected failures. Проверены реальные причины отказа: install/upgrade/slow-wake first response, P2 same-document recovery timeout и late install/upgrade automatic-reload timeout. App/XCTest SHA256 до и после OFF совпали. Повторный ON завершился 8 PASS; SHA256 до OFF, после OFF и после повторного ON совпали. CI опубликованного e970e8c90e: 48 SUCCESS / 21 SKIPPED, failures/pending нет. Старые app результаты не перенесены на новый head. Артефакты: `/private/tmp/cpm-pr7379-uninstall-fix-20261019/` (`unit-green.log`, `unit-evidence.json`, `lint.log`, `mac-build.log`, `ios-build.log`, signature logs, `heads.json`, PR snapshots); red control — `/private/tmp/cpm-pr7379-full-review-20261019/uninstall-red.log`. + +### Итог app validation и CI на опубликованном head + +Production `e970e8c90e`, review-only harness `e380cf98f7`. Все три запуска выполнены на одних Apple Development-signed app/XCTest binaries; OFF и повторный ON — `test-without-building`. + +| Запуск | Passed | Failed | Skipped | Expected failures | +|---|---:|---:|---:|---:| +| CPM Integration Tests — первый ON | 8 | 0 | 0 | 0 | +| CPM Integration Tests - Fixes Disabled | 0 | 6 | 0 | 0 | +| CPM Integration Tests — повторный ON | 8 | 0 | 0 | 0 | + +OFF failure reasons проверены по xcresult: install/upgrade/slow-wake потеряли первый ответ; P2 дождался реального WebKit error 6, но не получил same-document recovery; late install/upgrade не дождались automatic first-document reload. Это шесть намеренно красных функциональных контролей, без host crashes/setup failures/skips. Все 8 ON assertions восстановились после включения flags. SHA256 app debug dylib и XCTest executable совпали до OFF, после OFF и после повторного ON. + +Из exported ON evidence: P2 записал **actualBackgroundLoadError=[6]** и затем прошёл проверки ответа оригинальному document без context replacement или ручной навигации; последующие existing-tab/new-tab/new-window assertions также PASS. При 8-секундном startup первая navigation завершилась за **5.167 s (install)** / **5.089 s (upgrade)**, затем был ровно один automatic GET reload (finishCount=2), реальный page initResp и оба этапа pixel `reload_started` / `response_received`. Эти измерения включают локальную загрузку документа после прежнего 5-секундного gate; его лимит не увеличен. + +CI опубликованного **`e970e8c90e` завершён: 48 SUCCESS / 21 SKIPPED**, failures/pending нет. GitHub readback подтвердил оба remote heads, прежнюю базу #7376 / `713d67419a` и точное сохранённое PR body. Production worktree возвращён на `alex/cpm-fix-init-loss`, tracked/untracked diff пуст; обе ветки up to date. Новых production изменений после validation нет. Формы оставлены как согласовано; independent late-recovery flag default disabled. + +Артефакты `/private/tmp/cpm-pr7379-uninstall-fix-20261019/`: `validation-summary.json`, три `app-*-summary.json` и `.xcresult`, exported attachment folders, `app-on-evidence-summary.json`, три `hashes-*.json`, `pr-final.json`, `remote-heads.txt`. Прежние промежуточные snapshots выше сохранены как история. diff --git a/work/projects/cpm-web-extension-code-guide-2026-10-09.md b/work/projects/cpm-web-extension-code-guide-2026-10-09.md index 8b7195e5..b368560e 100755 --- a/work/projects/cpm-web-extension-code-guide-2026-10-09.md +++ b/work/projects/cpm-web-extension-code-guide-2026-10-09.md @@ -6,7 +6,7 @@ tags: - cpm - webkit --- -> **Актуально — 19 октября 2026, uninstall fix опубликован.** [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379): production **`e970e8c90e`**, 6 commits / 22 paths; отдельный review-only harness **`e380cf98f7`**, 12 paths вне main. Удаление активного CPM context отменяет pending late-document recovery; удаление старой upgrade-версии и ошибка unload сохраняют recovery. **190 unit PASS**, red-before-fix 2 PASS / 1 FAIL, signed macOS и iOS Simulator builds PASS, strict lint 11 / 0. На новом app head подтверждены ON 8 PASS → OFF ровно 6 functional FAIL, без skips/expected failures; app/XCTest SHA256 совпали. Заключительный ON ещё выполняется. PR description и reviewer flag steps актуализированы с сохранением ручных правок. Формы оставлены в прежнем виде; late reload flag default disabled. Предыдущие heads/results ниже — история. +> **Актуально — 19 октября 2026, uninstall fix опубликован.** [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379): production **`e970e8c90e`**, 6 commits / 22 paths; отдельный review-only harness **`e380cf98f7`**, 12 paths вне main. Удаление активного CPM context отменяет pending late-document recovery; удаление старой upgrade-версии и ошибка unload сохраняют recovery. **190 unit PASS**, red-before-fix 2 PASS / 1 FAIL, signed macOS и iOS Simulator builds PASS, strict lint 11 / 0. На новом app head проверено на одних подписанных бинарниках: **ON 8 PASS → OFF 6 ожидаемых functional FAIL → ON 8 PASS**, без skips/expected failures; все app/XCTest SHA256 совпали. CI `e970e8c90e`: **48 SUCCESS / 21 SKIPPED**, pending/failures нет. PR description и reviewer flag steps актуализированы с сохранением ручных правок. Формы оставлены в прежнем виде; late reload flag default disabled. Предыдущие heads/results ниже — история. > **Актуально — 19 октября 2026, полный повторный review #7379.** Проверен локальный `5708197362` против #7376: 22 changed paths, **187 существующих тестов PASS + 1 новый probe FAIL**. Новый P2: uninstall активного CPM context не отменяет pending late-document recovery. Общий launch→navigation deadline и привязка recovery pixel к точной WKNavigation исправлены локально и прошли повторные регрессии; усиление защиты форм явно отложено пользователем, исходная проверка сохранена за default-disabled флагом. В GitHub пока `08866c7eda` (CI: 48 SUCCESS / 21 SKIPPED), новые production commits не опубликованы. Локальный review-only harness `4308751d59` синхронизирован; его новый ON/OFF/ON ещё не запускался. Подробности — в конце; прежние heads/results ниже относятся к истории. @@ -35,7 +35,7 @@ tags: | `cpm-repro-harness` | `alex/cpm-repro-harness`; `dfb96279196d` | PR #7378: базовый harness, быстрые CI-контроли, медленные сценарии и raw WebKit characterization; без новых P5/P6 | | `cpm-fix-init-loss` — историческая строка; worktree удалён 16 Oct | `alex/cpm-fix-init-loss`; `7ad771e227bb` | PR #7379: A, первые init при install/upgrade mid-session; красное/зелёное доказательство отдельно от remaining-failures | | **`alex/cpm-fix-p1-p2` — актуально 19 Oct** | **`alex/cpm-fix-init-loss`; local/remote `e970e8c90e`** | PR #7379 / база #7376: 6 commits / 22 paths, 29 новых shared tests, 190 PASS. Launch deadline, WKNavigation attribution и uninstall/preflight race исправлены и опубликованы; формы отложены, late reload flag default disabled; builds/lint PASS | -| — (отдельная ветка, без своего worktree) | **`codex/cpm-fix-init-loss-integration-tests`; local/remote `e380cf98f7`** | Синхронизирована с production `e970e8c90e`, README: 29 новых shared tests; 8 app methods, ON/OFF schemes, PBX + 3 DEBUG app hooks; 12 paths вне main. Новый signed app ON → OFF → ON выполняется | +| — (отдельная ветка, без своего worktree) | **`codex/cpm-fix-init-loss-integration-tests`; local/remote `e380cf98f7`** | Синхронизирована с production `e970e8c90e`, README: 29 новых shared tests; 8 app methods, ON/OFF schemes, PBX + 3 DEBUG app hooks; 12 paths вне main. На одних signed binaries ON 8 PASS → OFF 6 functional FAIL → ON 8 PASS; SHA256 совпали | | `cpm-fix-network-crash` | `alex/cpm-fix-network-crash`; local `f1085846e7ff` | B поверх A; 5 network/termination сценариев в FullFailure + 11 watchdog unit tests. Remote PR #7381 остаётся на `39f94e12eaa4`, красный Non-Sandbox; локальный fix не запушен | | `cpm-fix-pixels` | `alex/cpm-fix-pixels`; `d6d800846d1f` | A/B + PR0, измерение `first_load_wait`/`background_restart`; отдельный PR не зарегистрирован в текущем статусе | | `alex/cpm-messaging-readiness-telemetry` | та же; `619869ee84c6` | PR0 #7376: readiness/failure/recovery параметры, CI без failure/pending, review required | @@ -497,6 +497,24 @@ Production **`e970e8c90eca76e55217f75c13122735a72664c5`**, branch `alex/cpm-fix- **Формы и flags.** По явному указанию пользователя новая защита форм не возвращена. Original JavaScript predicate побайтно совпадает с `08866c7eda`; known limitation controlled/defaultValue и Shadow DOM остаётся. Независимый `webExtensions.cpmLateBackgroundDocumentRecovery` всё ещё default disabled на обеих платформах. Deadline launch→navigation и attribution по конкретной WKNavigation сохранены из предыдущих локальных исправлений и теперь опубликованы. -**Документация и app validation.** PR body точечно уточняет общий launch/navigation deadline, invalidation при удалении активного context и точную WKNavigation attribution. Пользовательские правки, testing branch link и ON 8 PASS → OFF 6 functional FAIL → ON 8 PASS instructions сохранены. README harness обновлён: 8 новых manager regressions / 29 новых shared methods. На новом head первый ON: 8 PASS; OFF: ровно 6 functional FAIL, 0 PASS/skips/expected failures. Проверены реальные причины отказа: install/upgrade/slow-wake first response, P2 same-document recovery timeout и late install/upgrade automatic-reload timeout. App/XCTest SHA256 до и после OFF совпали. Повторный ON ещё выполняется. Старые app результаты не перенесены на новый head. +**Документация и app validation.** PR body точечно уточняет общий launch/navigation deadline, invalidation при удалении активного context и точную WKNavigation attribution. Пользовательские правки, testing branch link и ON 8 PASS → OFF 6 functional FAIL → ON 8 PASS instructions сохранены. README harness обновлён: 8 новых manager regressions / 29 новых shared methods. На новом head первый ON: 8 PASS; OFF: ровно 6 functional FAIL, 0 PASS/skips/expected failures. Проверены реальные причины отказа: install/upgrade/slow-wake first response, P2 same-document recovery timeout и late install/upgrade automatic-reload timeout. App/XCTest SHA256 до и после OFF совпали. Повторный ON завершился 8 PASS; SHA256 до OFF, после OFF и после повторного ON совпали. CI опубликованного e970e8c90e: 48 SUCCESS / 21 SKIPPED, failures/pending нет. Старые app результаты не перенесены на новый head. Артефакты: `/private/tmp/cpm-pr7379-uninstall-fix-20261019/` (`unit-green.log`, `unit-evidence.json`, `lint.log`, `mac-build.log`, `ios-build.log`, signature logs, `heads.json`, PR snapshots); red control — `/private/tmp/cpm-pr7379-full-review-20261019/uninstall-red.log`. + +### Итог app validation и CI на опубликованном head + +Production `e970e8c90e`, review-only harness `e380cf98f7`. Все три запуска выполнены на одних Apple Development-signed app/XCTest binaries; OFF и повторный ON — `test-without-building`. + +| Запуск | Passed | Failed | Skipped | Expected failures | +|---|---:|---:|---:|---:| +| CPM Integration Tests — первый ON | 8 | 0 | 0 | 0 | +| CPM Integration Tests - Fixes Disabled | 0 | 6 | 0 | 0 | +| CPM Integration Tests — повторный ON | 8 | 0 | 0 | 0 | + +OFF failure reasons проверены по xcresult: install/upgrade/slow-wake потеряли первый ответ; P2 дождался реального WebKit error 6, но не получил same-document recovery; late install/upgrade не дождались automatic first-document reload. Это шесть намеренно красных функциональных контролей, без host crashes/setup failures/skips. Все 8 ON assertions восстановились после включения flags. SHA256 app debug dylib и XCTest executable совпали до OFF, после OFF и после повторного ON. + +Из exported ON evidence: P2 записал **actualBackgroundLoadError=[6]** и затем прошёл проверки ответа оригинальному document без context replacement или ручной навигации; последующие existing-tab/new-tab/new-window assertions также PASS. При 8-секундном startup первая navigation завершилась за **5.167 s (install)** / **5.089 s (upgrade)**, затем был ровно один automatic GET reload (finishCount=2), реальный page initResp и оба этапа pixel `reload_started` / `response_received`. Эти измерения включают локальную загрузку документа после прежнего 5-секундного gate; его лимит не увеличен. + +CI опубликованного **`e970e8c90e` завершён: 48 SUCCESS / 21 SKIPPED**, failures/pending нет. GitHub readback подтвердил оба remote heads, прежнюю базу #7376 / `713d67419a` и точное сохранённое PR body. Production worktree возвращён на `alex/cpm-fix-init-loss`, tracked/untracked diff пуст; обе ветки up to date. Новых production изменений после validation нет. Формы оставлены как согласовано; independent late-recovery flag default disabled. + +Артефакты `/private/tmp/cpm-pr7379-uninstall-fix-20261019/`: `validation-summary.json`, три `app-*-summary.json` и `.xcresult`, exported attachment folders, `app-on-evidence-summary.json`, три `hashes-*.json`, `pr-final.json`, `remote-heads.txt`. Прежние промежуточные snapshots выше сохранены как история.