From ce8c30494db093010c7f88bdebe94d2bf0fad847 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Mon, 19 Oct 2026 17:04:08 +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 | 18 +++++++++++++++ work/projects/cpm-status-2026-10-15.md | 20 ++++++++++++++++- ...cpm-web-extension-code-guide-2026-10-09.md | 22 +++++++++++++++++-- 3 files changed, 57 insertions(+), 3 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 c7978d50..3f61de3e 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,3 +1,5 @@ +> **Актуально — 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 ниже относятся к истории. + > **Актуально — 16 октября 2026, PR review fixes.** В [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379) проверены оба inline замечания: cancellation уже покрыта, повторные 5 секунд на каждую navigation исправлены общим deadline на startup. Production **`08866c7eda`**, 3 commits / 21 paths; review-only harness **`3f4d755511`**, 12 test-only paths, вне main. Проверки: red-before-fix **2 FAIL**, после исправления **182 unit PASS**, signed macOS build и iOS shared-module build PASS, strict lint **8 / 0**; на одних app/XCTest binaries **ON 8 PASS → OFF 6 ожидаемых functional FAIL → ON 8 PASS**, без skips. Оба review threads resolved; Danger 0 failures, только PR-size advisory; flag tracking links добавлены, defaults не менялись. Пользовательские правки и reviewer steps сохранены. Подробности этого review — в конце. Более ранние heads/results ниже сохранены как история. > **Актуально — 16 октября 2026, reviewer ON → OFF → ON.** В [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379) восстановлена проверка выключенных production flags. Review-only branch **`codex/cpm-fix-init-loss-integration-tests` / `543e37164b`** содержит два schemes: **CPM Integration Tests** → 8 PASS; **CPM Integration Tests - Fixes Disabled** → ровно 6 functional FAIL; затем normal scheme → снова 8 PASS. Проверено на одних подписанных app/XCTest binaries, без пересборки и изменения Swift code. Production PR **`da126120a9`**, 2 commits / 21 files, не менялся; harness остаётся вне main (2 test-only commits / 12 paths). Пользовательские правки PR сохранены. Подробные результаты и artifacts — в конце; прежние односхемные steps и harness head `6e4e39e67c` относятся к истории. @@ -376,3 +378,19 @@ CI snapshot `08866c7eda` на 16:19 UTC: 31 SUCCESS, 12 SKIPPED, 3 QUEUED, 5 IN_ Артефакты этого прогона: **`/private/tmp/cpm-pr7379-review-fixes-20261016/`**. `red-tests.log` — red-before-fix; `unit-final.log`, `lint-final.log`, `production-build-final.log`, `ios-module.log` — final validation. Отдельные `app-on*`, `app-off*`, `app-on-restored*` содержат xcresult summaries и exported evidence. SHA256 app/XCTest сохранены до OFF и после каждого последующего run; review/PR/Danger/CI snapshots и `validation-summary.json` находятся там же. Это не новая декларация воспроизведения всех production причин. Ограничения прежнего исследования P3/P5 и iOS runtime сохраняются. Точные два новых navigation/cancellation failures сначала воспроизведены deterministic shared tests; восемь app methods проверяют реальные WebKit/app пути существующих install/upgrade, P1/P2 и late recovery сценариев. В ON evidence P2 снова записан фактический **`WKWebExtensionContextErrorDomain:6`**; late install/upgrade завершили первый navigation примерно за **5.18 / 5.10 секунды**, затем получили отдельный recovery reload, без увеличения navigation timeout. + +## 19 октября 2026 — полный повторный review после точечных правок + +**Объём.** Повторно прочитан весь production diff: локальный `alex/cpm-fix-init-loss / 57081973629e1ad43b9312fee479d27e34232abf` против `alex/cpm-messaging-readiness-telemetry / 713d67419a` (#7376), 5 commits / 22 changed paths; manager/lifecycle, native callers обеих платформ, recovery/health monitor, flags, pixel adapters/definitions и shared tests. Опубликованный #7379 пока остаётся на `08866c7eda`: 3 commits / 21 files; его CI snapshot — 48 SUCCESS, 21 SKIPPED, без failures. Это не CI непушенных исправлений. + +**Сохранённые исправления предыдущего review.** Launch gate переносит уже израсходованный deadline на тот же pending startup; следующий navigation не платит ещё пять секунд. Safety preflight отделён от синхронного reload; attribution вооружается после проверок и сопоставляется с конкретной WKNavigation из принятого automatic reload, включая синхронный didStart. После await повторно проверяются flag, app state, document identity и 30-секундный срок. Пять новых regression methods увеличили выбранные suites со 182 до 187 PASS (13 diagnostics + 13 readiness recovery + 78 monitor + 35 lifecycle + 48 manager). Оба production builds macOS/iOS Simulator и strict lint десяти изменённых Swift files прошли на этом коде; logs сохранены в `/private/tmp/cpm-pr7379-review-selected-fixes-20261016/`. + +**Формы — явно отложено пользователем.** После сообщения «пока не парься на счёт форм, оставить как есть оно за фича флагом» document-start tracker, новые conservative veto и четыре form-safety tests убраны отдельным коммитом `5708197362`. Исходный JavaScript predicate побайтно совпадает с `08866c7eda`; новая instrumentation не установлена ни на macOS, ни на iOS. Известное ограничение для controlled inputs с изменяемым defaultValue и Shadow DOM остаётся нерешённым; результаты предыдущего реального WKWebView воспроизведения не отменены. Независимый `webExtensions.cpmLateBackgroundDocumentRecovery` по-прежнему default disabled на обеих платформах. Форма не заявляется исправленной. + +**Новый P2 — удаление extension не инвалидирует поздний reload.** `WebExtensionManager.uninstallExtension` после реальной выгрузки вызывает `clearEmbeddedBackgroundStartup(identifier:)`, но не инвалидирует document recovery. Если успешный startup уже запустил async safety preflight и в это время отключить/удалить активный embedded context, late-recovery flag может остаться включённым. Document identity сохранена; после завершения preflight вызывается reload closure для уже отключённого CPM. Изолированный `testFreshReviewUninstallInvalidatesPendingLateRecovery` использовал production manager и default loader: context действительно исчез из controller, installation record удалён, затем reload callback вызван **1 раз вместо 0**. Следует инвалидировать recovery удаляемого активного context; удаление старой версии при upgrade не должно отменять recovery её замены. Production-код в ходе повторного review не исправлялся. + +**Проверка finding.** Production sources скопированы побайтно (96 файлов) в изолированный package; добавлен только временный probe. Финальный запуск: **188 методов выполнены, 187 PASS / 1 assertion FAIL**, без падения host. Первый запуск временного probe упал в WebKit dealloc искусственно созданной WKNavigation (CFRetain NULL); этот тестовый setup исправлен, и затем получен именно функциональный failure callback count. Артефакты: `/private/tmp/cpm-pr7379-full-review-20261019/selected-tests-final.log`, `review-results.json`, `source-copy.json`. В production tests этот probe не добавлен. + +**Harness и публикация.** Локальный `codex/cpm-fix-init-loss-integration-tests / 4308751d593bcc63abfb4baaced83e35bd19255f` обычным merge синхронизирован с `5708197362`; README исправлен на 26 новых shared regressions и прежнюю защиту форм. Над production по-прежнему ровно 12 harness-only paths, 8 app methods и два ON/OFF schemes; они не идут в main. Удалён только собственный generated Package.resolved diff от предыдущего test run. Рабочая production branch чистая. Production и harness commits пока не push; PR body не перезаписан. Старый ON 8 PASS → OFF 6 functional FAIL → ON 8 PASS относится к опубликованному `08866c7eda` / test branch `3f4d755511`; на новом локальном head этот app cycle ещё не повторён. + +**Замечание о стиле URL check.** Для HTTP(S) подходит `URL.NavigationalScheme.hypertextSchemes` из Common; initializer сохраняет регистр, поэтому lowercased необходимо сохранить. Это ответ на вопрос, source replacement не выполнялся. diff --git a/work/projects/cpm-status-2026-10-15.md b/work/projects/cpm-status-2026-10-15.md index 5d25e344..b2647699 100755 --- a/work/projects/cpm-status-2026-10-15.md +++ b/work/projects/cpm-status-2026-10-15.md @@ -6,6 +6,8 @@ tags: - cpm - status --- +> **Актуально — 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 ниже относятся к истории. + > **Актуально — 16 октября 2026, PR review fixes.** В [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379) проверены оба inline замечания: cancellation уже покрыта, повторные 5 секунд на каждую navigation исправлены общим deadline на startup. Production **`08866c7eda`**, 3 commits / 21 paths; review-only harness **`3f4d755511`**, 12 test-only paths, вне main. Проверки: red-before-fix **2 FAIL**, после исправления **182 unit PASS**, signed macOS build и iOS shared-module build PASS, strict lint **8 / 0**; на одних app/XCTest binaries **ON 8 PASS → OFF 6 ожидаемых functional FAIL → ON 8 PASS**, без skips. Оба review threads resolved; Danger 0 failures, только PR-size advisory; flag tracking links добавлены, defaults не менялись. Пользовательские правки и reviewer steps сохранены. Подробности этого review — в конце. Более ранние heads/results ниже сохранены как история. > **Актуально — 16 октября 2026, reviewer ON → OFF → ON.** В [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379) восстановлена проверка выключенных production flags. Review-only branch **`codex/cpm-fix-init-loss-integration-tests` / `543e37164b`** содержит два schemes: **CPM Integration Tests** → 8 PASS; **CPM Integration Tests - Fixes Disabled** → ровно 6 functional FAIL; затем normal scheme → снова 8 PASS. Проверено на одних подписанных app/XCTest binaries, без пересборки и изменения Swift code. Production PR **`da126120a9`**, 2 commits / 21 files, не менялся; harness остаётся вне main (2 test-only commits / 12 paths). Пользовательские правки PR сохранены. Подробные результаты и artifacts — в конце; прежние односхемные steps и harness head `6e4e39e67c` относятся к истории. @@ -60,7 +62,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 — актуально 16 Oct](https://github.com/duckduckgo/apple-browsers/pull/7379) | `alex/cpm-fix-init-loss`, worktree `alex/cpm-fix-p1-p2` | **#7376 / telemetry** | production install/upgrade + P1/P2 + late GET recovery, 5 fix pixels, 21 новых shared unit regressions; один navigation deadline на startup; весь app harness вне PR | OPEN, head `08866c7eda`; **3 commits / 21 files**; shared unit **182 PASS**, signed app build PASS; review-only `codex/cpm-fix-init-loss-integration-tests` / `3f4d755511`, 2 harness commits + sync merge + README correction, 12 paths; ON/OFF schemes и reviewer ON → OFF → ON steps | +| [#7379 — актуально 19 Oct](https://github.com/duckduckgo/apple-browsers/pull/7379) | `alex/cpm-fix-init-loss`, worktree `alex/cpm-fix-p1-p2`; локальный `5708197362` | **#7376 / telemetry** | production install/upgrade + P1/P2 + late GET recovery, 5 fix pixels; 26 новых shared regressions, 187 PASS; общий launch/navigation deadline и точная WKNavigation attribution; формы отложены | GitHub `08866c7eda` (3 commits / 21 files), CI 48 SUCCESS / 21 SKIPPED. Локально 5 commits / 22 paths, новый uninstall/preflight probe FAIL; push не выполнен. Локальный review-only harness `4308751d59`, 12 paths вне main; новый app ON/OFF/ON пока не повторён | | [#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 | @@ -1182,3 +1184,19 @@ CI snapshot `08866c7eda` на 16:19 UTC: 31 SUCCESS, 12 SKIPPED, 3 QUEUED, 5 IN_ Артефакты этого прогона: **`/private/tmp/cpm-pr7379-review-fixes-20261016/`**. `red-tests.log` — red-before-fix; `unit-final.log`, `lint-final.log`, `production-build-final.log`, `ios-module.log` — final validation. Отдельные `app-on*`, `app-off*`, `app-on-restored*` содержат xcresult summaries и exported evidence. SHA256 app/XCTest сохранены до OFF и после каждого последующего run; review/PR/Danger/CI snapshots и `validation-summary.json` находятся там же. Это не новая декларация воспроизведения всех production причин. Ограничения прежнего исследования P3/P5 и iOS runtime сохраняются. Точные два новых navigation/cancellation failures сначала воспроизведены deterministic shared tests; восемь app methods проверяют реальные WebKit/app пути существующих install/upgrade, P1/P2 и late recovery сценариев. В ON evidence P2 снова записан фактический **`WKWebExtensionContextErrorDomain:6`**; late install/upgrade завершили первый navigation примерно за **5.18 / 5.10 секунды**, затем получили отдельный recovery reload, без увеличения navigation timeout. + +## 19 октября 2026 — полный повторный review после точечных правок + +**Объём.** Повторно прочитан весь production diff: локальный `alex/cpm-fix-init-loss / 57081973629e1ad43b9312fee479d27e34232abf` против `alex/cpm-messaging-readiness-telemetry / 713d67419a` (#7376), 5 commits / 22 changed paths; manager/lifecycle, native callers обеих платформ, recovery/health monitor, flags, pixel adapters/definitions и shared tests. Опубликованный #7379 пока остаётся на `08866c7eda`: 3 commits / 21 files; его CI snapshot — 48 SUCCESS, 21 SKIPPED, без failures. Это не CI непушенных исправлений. + +**Сохранённые исправления предыдущего review.** Launch gate переносит уже израсходованный deadline на тот же pending startup; следующий navigation не платит ещё пять секунд. Safety preflight отделён от синхронного reload; attribution вооружается после проверок и сопоставляется с конкретной WKNavigation из принятого automatic reload, включая синхронный didStart. После await повторно проверяются flag, app state, document identity и 30-секундный срок. Пять новых regression methods увеличили выбранные suites со 182 до 187 PASS (13 diagnostics + 13 readiness recovery + 78 monitor + 35 lifecycle + 48 manager). Оба production builds macOS/iOS Simulator и strict lint десяти изменённых Swift files прошли на этом коде; logs сохранены в `/private/tmp/cpm-pr7379-review-selected-fixes-20261016/`. + +**Формы — явно отложено пользователем.** После сообщения «пока не парься на счёт форм, оставить как есть оно за фича флагом» document-start tracker, новые conservative veto и четыре form-safety tests убраны отдельным коммитом `5708197362`. Исходный JavaScript predicate побайтно совпадает с `08866c7eda`; новая instrumentation не установлена ни на macOS, ни на iOS. Известное ограничение для controlled inputs с изменяемым defaultValue и Shadow DOM остаётся нерешённым; результаты предыдущего реального WKWebView воспроизведения не отменены. Независимый `webExtensions.cpmLateBackgroundDocumentRecovery` по-прежнему default disabled на обеих платформах. Форма не заявляется исправленной. + +**Новый P2 — удаление extension не инвалидирует поздний reload.** `WebExtensionManager.uninstallExtension` после реальной выгрузки вызывает `clearEmbeddedBackgroundStartup(identifier:)`, но не инвалидирует document recovery. Если успешный startup уже запустил async safety preflight и в это время отключить/удалить активный embedded context, late-recovery flag может остаться включённым. Document identity сохранена; после завершения preflight вызывается reload closure для уже отключённого CPM. Изолированный `testFreshReviewUninstallInvalidatesPendingLateRecovery` использовал production manager и default loader: context действительно исчез из controller, installation record удалён, затем reload callback вызван **1 раз вместо 0**. Следует инвалидировать recovery удаляемого активного context; удаление старой версии при upgrade не должно отменять recovery её замены. Production-код в ходе повторного review не исправлялся. + +**Проверка finding.** Production sources скопированы побайтно (96 файлов) в изолированный package; добавлен только временный probe. Финальный запуск: **188 методов выполнены, 187 PASS / 1 assertion FAIL**, без падения host. Первый запуск временного probe упал в WebKit dealloc искусственно созданной WKNavigation (CFRetain NULL); этот тестовый setup исправлен, и затем получен именно функциональный failure callback count. Артефакты: `/private/tmp/cpm-pr7379-full-review-20261019/selected-tests-final.log`, `review-results.json`, `source-copy.json`. В production tests этот probe не добавлен. + +**Harness и публикация.** Локальный `codex/cpm-fix-init-loss-integration-tests / 4308751d593bcc63abfb4baaced83e35bd19255f` обычным merge синхронизирован с `5708197362`; README исправлен на 26 новых shared regressions и прежнюю защиту форм. Над production по-прежнему ровно 12 harness-only paths, 8 app methods и два ON/OFF schemes; они не идут в main. Удалён только собственный generated Package.resolved diff от предыдущего test run. Рабочая production branch чистая. Production и harness commits пока не push; PR body не перезаписан. Старый ON 8 PASS → OFF 6 functional FAIL → ON 8 PASS относится к опубликованному `08866c7eda` / test branch `3f4d755511`; на новом локальном head этот app cycle ещё не повторён. + +**Замечание о стиле URL check.** Для HTTP(S) подходит `URL.NavigationalScheme.hypertextSchemes` из Common; initializer сохраняет регистр, поэтому lowercased необходимо сохранить. Это ответ на вопрос, source replacement не выполнялся. 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 830d9cdc..5fd3186b 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,6 +6,8 @@ tags: - cpm - webkit --- +> **Актуально — 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 ниже относятся к истории. + > **Актуально — 16 октября 2026, PR review fixes.** В [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379) проверены оба inline замечания: cancellation уже покрыта, повторные 5 секунд на каждую navigation исправлены общим deadline на startup. Production **`08866c7eda`**, 3 commits / 21 paths; review-only harness **`3f4d755511`**, 12 test-only paths, вне main. Проверки: red-before-fix **2 FAIL**, после исправления **182 unit PASS**, signed macOS build и iOS shared-module build PASS, strict lint **8 / 0**; на одних app/XCTest binaries **ON 8 PASS → OFF 6 ожидаемых functional FAIL → ON 8 PASS**, без skips. Оба review threads resolved; Danger 0 failures, только PR-size advisory; flag tracking links добавлены, defaults не менялись. Пользовательские правки и reviewer steps сохранены. Подробности этого review — в конце. Более ранние heads/results ниже сохранены как история. > **Актуально — 16 октября 2026, reviewer ON → OFF → ON.** В [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379) восстановлена проверка выключенных production flags. Review-only branch **`codex/cpm-fix-init-loss-integration-tests` / `543e37164b`** содержит два schemes: **CPM Integration Tests** → 8 PASS; **CPM Integration Tests - Fixes Disabled** → ровно 6 functional FAIL; затем normal scheme → снова 8 PASS. Проверено на одних подписанных app/XCTest binaries, без пересборки и изменения Swift code. Production PR **`da126120a9`**, 2 commits / 21 files, не менялся; harness остаётся вне main (2 test-only commits / 12 paths). Пользовательские правки PR сохранены. Подробные результаты и artifacts — в конце; прежние односхемные steps и harness head `6e4e39e67c` относятся к истории. @@ -30,8 +32,8 @@ tags: | `alex/cpm-web-extension-remaining-failures` | та же; `a0717cf098cd` | Основное расследование без A/B watchdog: P1 (3 wake), P2 (9 load failure), P3 (2 cache/cleanup), новые P5/P6 (12 lifecycle + 2 flag). Все 28 repro opt-in; `CPMRepro/` untracked. Production dirty telemetry — прежняя копия, не переносить вместе с тестами | | `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` — актуально 16 Oct** | **`alex/cpm-fix-init-loss`; `08866c7eda`** | PR #7379: база #7376 / `713d67419a`; 3 commits / 21 files, production fixes/pixels + 21 новый shared unit method; один navigation deadline на startup; local-only app harness и hooks исключены | -| — (отдельная ветка, без своего worktree) | **`codex/cpm-fix-init-loss-integration-tests`; `3f4d755511`** | Два harness commits + sync merge нового production head `08866c7eda` + README correction: 8 app methods, ON/OFF schemes, PBX + 3 DEBUG app hooks; 12 paths, не идут в main; reviewer steps включают ON → OFF → ON | +| **`alex/cpm-fix-p1-p2` — актуально 19 Oct** | **`alex/cpm-fix-init-loss`; local `5708197362`, remote `08866c7eda`** | PR #7379 / база #7376: локально 5 commits / 22 paths, 26 новых shared tests, 187 PASS. Launch deadline и WKNavigation attribution исправлены; новый uninstall/preflight probe FAIL. Формы отложены, late reload flag default disabled; локальные commits ещё не опубликованы | +| — (отдельная ветка, без своего worktree) | **`codex/cpm-fix-init-loss-integration-tests`; local `4308751d59`, remote `3f4d755511`** | Локально синхронизирована с production `5708197362`, README без отложенной защиты форм; 8 app methods, ON/OFF schemes, PBX + 3 DEBUG app hooks; 12 paths вне main. Новый app cycle пока не повторён; прежний ON → OFF → ON подтверждён только для старого опубликованного head | | `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 | @@ -466,3 +468,19 @@ CI snapshot `08866c7eda` на 16:19 UTC: 31 SUCCESS, 12 SKIPPED, 3 QUEUED, 5 IN_ Артефакты этого прогона: **`/private/tmp/cpm-pr7379-review-fixes-20261016/`**. `red-tests.log` — red-before-fix; `unit-final.log`, `lint-final.log`, `production-build-final.log`, `ios-module.log` — final validation. Отдельные `app-on*`, `app-off*`, `app-on-restored*` содержат xcresult summaries и exported evidence. SHA256 app/XCTest сохранены до OFF и после каждого последующего run; review/PR/Danger/CI snapshots и `validation-summary.json` находятся там же. Это не новая декларация воспроизведения всех production причин. Ограничения прежнего исследования P3/P5 и iOS runtime сохраняются. Точные два новых navigation/cancellation failures сначала воспроизведены deterministic shared tests; восемь app methods проверяют реальные WebKit/app пути существующих install/upgrade, P1/P2 и late recovery сценариев. В ON evidence P2 снова записан фактический **`WKWebExtensionContextErrorDomain:6`**; late install/upgrade завершили первый navigation примерно за **5.18 / 5.10 секунды**, затем получили отдельный recovery reload, без увеличения navigation timeout. + +## 19 октября 2026 — полный повторный review после точечных правок + +**Объём.** Повторно прочитан весь production diff: локальный `alex/cpm-fix-init-loss / 57081973629e1ad43b9312fee479d27e34232abf` против `alex/cpm-messaging-readiness-telemetry / 713d67419a` (#7376), 5 commits / 22 changed paths; manager/lifecycle, native callers обеих платформ, recovery/health monitor, flags, pixel adapters/definitions и shared tests. Опубликованный #7379 пока остаётся на `08866c7eda`: 3 commits / 21 files; его CI snapshot — 48 SUCCESS, 21 SKIPPED, без failures. Это не CI непушенных исправлений. + +**Сохранённые исправления предыдущего review.** Launch gate переносит уже израсходованный deadline на тот же pending startup; следующий navigation не платит ещё пять секунд. Safety preflight отделён от синхронного reload; attribution вооружается после проверок и сопоставляется с конкретной WKNavigation из принятого automatic reload, включая синхронный didStart. После await повторно проверяются flag, app state, document identity и 30-секундный срок. Пять новых regression methods увеличили выбранные suites со 182 до 187 PASS (13 diagnostics + 13 readiness recovery + 78 monitor + 35 lifecycle + 48 manager). Оба production builds macOS/iOS Simulator и strict lint десяти изменённых Swift files прошли на этом коде; logs сохранены в `/private/tmp/cpm-pr7379-review-selected-fixes-20261016/`. + +**Формы — явно отложено пользователем.** После сообщения «пока не парься на счёт форм, оставить как есть оно за фича флагом» document-start tracker, новые conservative veto и четыре form-safety tests убраны отдельным коммитом `5708197362`. Исходный JavaScript predicate побайтно совпадает с `08866c7eda`; новая instrumentation не установлена ни на macOS, ни на iOS. Известное ограничение для controlled inputs с изменяемым defaultValue и Shadow DOM остаётся нерешённым; результаты предыдущего реального WKWebView воспроизведения не отменены. Независимый `webExtensions.cpmLateBackgroundDocumentRecovery` по-прежнему default disabled на обеих платформах. Форма не заявляется исправленной. + +**Новый P2 — удаление extension не инвалидирует поздний reload.** `WebExtensionManager.uninstallExtension` после реальной выгрузки вызывает `clearEmbeddedBackgroundStartup(identifier:)`, но не инвалидирует document recovery. Если успешный startup уже запустил async safety preflight и в это время отключить/удалить активный embedded context, late-recovery flag может остаться включённым. Document identity сохранена; после завершения preflight вызывается reload closure для уже отключённого CPM. Изолированный `testFreshReviewUninstallInvalidatesPendingLateRecovery` использовал production manager и default loader: context действительно исчез из controller, installation record удалён, затем reload callback вызван **1 раз вместо 0**. Следует инвалидировать recovery удаляемого активного context; удаление старой версии при upgrade не должно отменять recovery её замены. Production-код в ходе повторного review не исправлялся. + +**Проверка finding.** Production sources скопированы побайтно (96 файлов) в изолированный package; добавлен только временный probe. Финальный запуск: **188 методов выполнены, 187 PASS / 1 assertion FAIL**, без падения host. Первый запуск временного probe упал в WebKit dealloc искусственно созданной WKNavigation (CFRetain NULL); этот тестовый setup исправлен, и затем получен именно функциональный failure callback count. Артефакты: `/private/tmp/cpm-pr7379-full-review-20261019/selected-tests-final.log`, `review-results.json`, `source-copy.json`. В production tests этот probe не добавлен. + +**Harness и публикация.** Локальный `codex/cpm-fix-init-loss-integration-tests / 4308751d593bcc63abfb4baaced83e35bd19255f` обычным merge синхронизирован с `5708197362`; README исправлен на 26 новых shared regressions и прежнюю защиту форм. Над production по-прежнему ровно 12 harness-only paths, 8 app methods и два ON/OFF schemes; они не идут в main. Удалён только собственный generated Package.resolved diff от предыдущего test run. Рабочая production branch чистая. Production и harness commits пока не push; PR body не перезаписан. Старый ON 8 PASS → OFF 6 functional FAIL → ON 8 PASS относится к опубликованному `08866c7eda` / test branch `3f4d755511`; на новом локальном head этот app cycle ещё не повторён. + +**Замечание о стиле URL check.** Для HTTP(S) подходит `URL.NavigationalScheme.hypertextSchemes` из Common; initializer сохраняет регистр, поэтому lowercased необходимо сохранить. Это ответ на вопрос, source replacement не выполнялся.