[2026-10-20] 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

This commit is contained in:
Alexey Martemyanov committed 2026-10-20 13:34:06 +06:00
1 parent 6716d57d3b
commit 58712005d7
3 files changed
+72

No files matched your search

@@ -586,3 +586,27 @@ Checkpoint `8a27a69776` включил эти harness fixes. Первая лок
**Оставшийся P2: retry тоже иногда получает настоящий background-load error 6.** Два отдельных normal runs `0a6d90e4c0` дали **8 PASS / 1 P2 FAIL**, но тот же неизменный payload после disabled дал **9 PASS / 0 FAIL**. В первой failed попытке второй error 6 пришёл через 30 секунд после первого (16:36:14.455Z → 16:36:44.468Z, retry PID 3001); повтор дал 16:40:38.693Z → 16:41:08.707Z, PID 3265. Контроль единственного P2 на исходном published `d26a1c55d1` в той же VM также дал **0 PASS / 1 FAIL / 0 SKIP** с повторным error 6, поэтому явление воспроизводится и без новых late-startup fixes. Для baseline retry PID 3952 успешно сняты background/app stack samples: WebKit 22625.1.29.11.27, background footprint 11.3 MB, main thread в XPCServiceMain/xpc_main/NSRunLoop/Mach wait, 0% CPU; app main thread в XCTest/AppKit run loop. Эти стеки не показывают CPU busy-loop и совместимы с неустановившимся XPC/bootstrap connection, но точная root cause не доказана. Console VM была разблокирована/активна; crash/OOM report в собранных логах не найден. Failure не объявляется infrastructure-only и не игнорируется. Финальный normal после OFF снова поймал его; README явно считает это unexpected enabled-scheme failure, а не валидный отрицательный контроль. Production-изменений для второго error 6 в этой работе нет.
Все raw xcresults, logs, JSON attachments, generated .xctestrun/flag environment, app/test hashes, export manifests и samples сохранены в `/private/tmp/cpm-pr7379-three-late-failures-20261019/`: `vm-baseline/`, `vm-eight-second-intermediate/`, `vm-twelve-intermediate/`, `vm-verified-first/`, `vm-confirmation/` (включая baseline-p2.xcresult и samples), `vm-final/`. SHA-256 manifests экспортированных VM bundles совпали с оригиналами; финальный экспорт проверен по **3820 files**. Локальные failed/positive attempts также сохранены отдельно. Первая transfer попытка пересеклась с Xcode build и завершилась rsync exit 23 до test execution; stable copy затем успешно запустила baseline. Deep signature verification локального Debug build сообщал missing/invalid sealed resource во вложенном VPN helper PrivacyConfig.framework; это не засчитано как причина reported failures. Использовался Apple Development signed host app/test build, guest signing identities отсутствуют, private signing keys в VM не передавались. Virfield lease `lease-671a00b65fc4efdfc9b0df677a0ff51f`, expiry `2026-10-19T17:49:35Z`; VM не удалялась без отдельного разрешения.
## #7379: review fixes и CI — 20 октября 2026
Область этой сверки — только [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379); она не меняет статус merge/rollout других CPM PR. Production head **`9effd97877bbaf5918f59083b17a8c5e7d11492c`**, review fix **`f08aefe1b8`**, база **`alex/cpm-messaging-readiness-telemetry / da8e714b33`**. Все шесть human review threads получили ответы и **resolved**.
- Удалены `CPMRecoveryInstrumentation`, `WebExtensionCPMRecoveryInstrumentation` и manager wrapper. Recovery и тесты используют непосредственно `WebExtensionPixelFiring` / реальные `WebExtensionPixelEvent`.
- iOS/macOS adapters снова вызывают статический `PixelKit.fire`: shared instance определяется при отправке, не при создании struct. Имена, параметры и частоты CPM pixels сохранены.
- `MacOSCPMDiagnosticsFeatureFlags` снова **private** в production; доступ и pixel injection нужны только отдельному review harness.
- У `cpmLateBackgroundDocumentRecovery` собственный doc comment; описание hang recovery возвращено к `cpmMessagingHangRecovery`.
- По последнему явному указанию пользователя применён предложенный reviewer focus guard: допустим только отсутствующий focus или `document.body`; страницы с **любым iframe** консервативно исключены из автоматического reload. Это предотвращает проверенные focused Shadow DOM / iframe случаи, но не является журналом всех document edits: синхронизация mutable defaults и ранее изменённый, затем потерявший focus shadow content полностью не закрыты.
- Добавлены **5 обычных shared-package WKWebView регрессий**, остающихся в production PR: edited input; edited iframe после ухода focus; focused edited Shadow DOM input; non-GET veto; pristine GET с реальным завершившимся reload. Загружается локальный URL через WKURLSchemeHandler, затем вызывается реальный production `registerDocument(in:webView:isGET:)` и safety JavaScript. Отказ от reload не подавляет independent P4 detection.
**Проверки:** до обновления базы 260 selected PASS; после merge базы и окончательного выделения main-actor CPM setup — **267 PASS / 0 FAIL** (CPM, lifecycle, manager), strict SwiftLint **8 files / 0 violations**. В отдельной source copy с исходными guards оба новых iframe/Shadow DOM теста дают нежелательный реальный reload и **2 failed tests / 6 assertions**; с исправлением проходят. Это red controls, не проигнорированные CI failures. Pixel validators и formatting обеих платформ PASS; wide-event consistency/schema checks PASS после merge commit.
**CI:** прежний failed workflow [39272483366](https://github.com/duckduckgo/apple-browsers/actions/runs/39272483366) на `674bb809f2` падал crash процесса xctest в `ConfigurationFetcherTests.testFetchAllWhenAssetsAreModifiedThenAllFetchedConfigurationsAreReturned`. Извлечённый .ips: **SIGBUS / EXC_BAD_ACCESS**, triggered stack `swift_retain → Foundation Locale.preferredLanguages → APIRequest.Headers.acceptLanguage → ConfigurationFetcher.fetch(all:)`; второй thread тоже читает Locale. Это установленное место падения, не установленная причина corruption/race и не доказательство infrastructure-only. Код Configuration/Networking не менялся. **Attempt 2 SUCCESS** без изменения binaries/source этого head. На новом `9effd97877` shared-package tests и BSK macOS/iOS unit jobs уже SUCCESS; остальные CI jobs ещё выполняются.
После `f08aefe1b8` GitHub не запускал checks из-за **DIRTY merge state** с текущей базой. Merge `da8e714b33` разрешил два конфликта (manager и pixel enum), сохранив обе стороны; CPM setup вынесен в `@MainActor configureCPMMonitoring()`, чтобы соблюсти strict complexity lint. Force push не использовался. Ранее существовавшие локальные Package.resolved изменения не включены в commits.
**Harness:** `codex/cpm-fix-init-loss-integration-tests` обновляется до production `9effd97877`; служебные visibility/pixel seams остаются только там, live PixelKit lookup в harness тоже выполняется при fire. Signed build-for-testing проверяется с новым artifact cache. Новый полный app ON/OFF/ON пока не выполнялся: прежний macOS 27 результат **9 PASS → 6 expected FAIL → 8 PASS / 1 unexpected P2 FAIL** остаётся историческим фактом; повторный настоящий WebKit error 6 на P2 retry этим review fix не исправляется.
`webExtensions.cpmLateBackgroundDocumentRecovery` по-прежнему **default disabled на iOS и macOS**; P4 detection работает независимо и не требует reload или safety-script evaluation. Этот проход не включает rollout flag и не доказывает готовность включать late reload для всех документов.
Все промежуточные результаты сохранены в **`/private/tmp/cpm-pr7379-comments-ci-20261020/`**: CI .xcresult/.ips и raw log, replies/resolution JSON, normal/red-control test logs, lint/validators, merge logs и harness build logs. При подготовке WK fixture `loadHTMLString` сначала дал 9 assertions из-за отсутствия history item; заменён реальной navigation. Промежуточный synthetic `WKNavigation()` в reload spy вызвал локальный SIGTRAP (`CFRetain(NULL)` в WKNavigation dealloc); fixture теперь вызывает `super.reload()` и ждёт реальный finish. Первая harness build попытка использовала stale absolute artifact paths; повторная подготовлена со свежим locked package cache.
+24
View File
@@ -1466,3 +1466,27 @@ Checkpoint `8a27a69776` включил эти harness fixes. Первая лок
**Оставшийся P2: retry тоже иногда получает настоящий background-load error 6.** Два отдельных normal runs `0a6d90e4c0` дали **8 PASS / 1 P2 FAIL**, но тот же неизменный payload после disabled дал **9 PASS / 0 FAIL**. В первой failed попытке второй error 6 пришёл через 30 секунд после первого (16:36:14.455Z → 16:36:44.468Z, retry PID 3001); повтор дал 16:40:38.693Z → 16:41:08.707Z, PID 3265. Контроль единственного P2 на исходном published `d26a1c55d1` в той же VM также дал **0 PASS / 1 FAIL / 0 SKIP** с повторным error 6, поэтому явление воспроизводится и без новых late-startup fixes. Для baseline retry PID 3952 успешно сняты background/app stack samples: WebKit 22625.1.29.11.27, background footprint 11.3 MB, main thread в XPCServiceMain/xpc_main/NSRunLoop/Mach wait, 0% CPU; app main thread в XCTest/AppKit run loop. Эти стеки не показывают CPU busy-loop и совместимы с неустановившимся XPC/bootstrap connection, но точная root cause не доказана. Console VM была разблокирована/активна; crash/OOM report в собранных логах не найден. Failure не объявляется infrastructure-only и не игнорируется. Финальный normal после OFF снова поймал его; README явно считает это unexpected enabled-scheme failure, а не валидный отрицательный контроль. Production-изменений для второго error 6 в этой работе нет.
Все raw xcresults, logs, JSON attachments, generated .xctestrun/flag environment, app/test hashes, export manifests и samples сохранены в `/private/tmp/cpm-pr7379-three-late-failures-20261019/`: `vm-baseline/`, `vm-eight-second-intermediate/`, `vm-twelve-intermediate/`, `vm-verified-first/`, `vm-confirmation/` (включая baseline-p2.xcresult и samples), `vm-final/`. SHA-256 manifests экспортированных VM bundles совпали с оригиналами; финальный экспорт проверен по **3820 files**. Локальные failed/positive attempts также сохранены отдельно. Первая transfer попытка пересеклась с Xcode build и завершилась rsync exit 23 до test execution; stable copy затем успешно запустила baseline. Deep signature verification локального Debug build сообщал missing/invalid sealed resource во вложенном VPN helper PrivacyConfig.framework; это не засчитано как причина reported failures. Использовался Apple Development signed host app/test build, guest signing identities отсутствуют, private signing keys в VM не передавались. Virfield lease `lease-671a00b65fc4efdfc9b0df677a0ff51f`, expiry `2026-10-19T17:49:35Z`; VM не удалялась без отдельного разрешения.
## #7379: review fixes и CI — 20 октября 2026
Область этой сверки — только [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379); она не меняет статус merge/rollout других CPM PR. Production head **`9effd97877bbaf5918f59083b17a8c5e7d11492c`**, review fix **`f08aefe1b8`**, база **`alex/cpm-messaging-readiness-telemetry / da8e714b33`**. Все шесть human review threads получили ответы и **resolved**.
- Удалены `CPMRecoveryInstrumentation`, `WebExtensionCPMRecoveryInstrumentation` и manager wrapper. Recovery и тесты используют непосредственно `WebExtensionPixelFiring` / реальные `WebExtensionPixelEvent`.
- iOS/macOS adapters снова вызывают статический `PixelKit.fire`: shared instance определяется при отправке, не при создании struct. Имена, параметры и частоты CPM pixels сохранены.
- `MacOSCPMDiagnosticsFeatureFlags` снова **private** в production; доступ и pixel injection нужны только отдельному review harness.
- У `cpmLateBackgroundDocumentRecovery` собственный doc comment; описание hang recovery возвращено к `cpmMessagingHangRecovery`.
- По последнему явному указанию пользователя применён предложенный reviewer focus guard: допустим только отсутствующий focus или `document.body`; страницы с **любым iframe** консервативно исключены из автоматического reload. Это предотвращает проверенные focused Shadow DOM / iframe случаи, но не является журналом всех document edits: синхронизация mutable defaults и ранее изменённый, затем потерявший focus shadow content полностью не закрыты.
- Добавлены **5 обычных shared-package WKWebView регрессий**, остающихся в production PR: edited input; edited iframe после ухода focus; focused edited Shadow DOM input; non-GET veto; pristine GET с реальным завершившимся reload. Загружается локальный URL через WKURLSchemeHandler, затем вызывается реальный production `registerDocument(in:webView:isGET:)` и safety JavaScript. Отказ от reload не подавляет independent P4 detection.
**Проверки:** до обновления базы 260 selected PASS; после merge базы и окончательного выделения main-actor CPM setup — **267 PASS / 0 FAIL** (CPM, lifecycle, manager), strict SwiftLint **8 files / 0 violations**. В отдельной source copy с исходными guards оба новых iframe/Shadow DOM теста дают нежелательный реальный reload и **2 failed tests / 6 assertions**; с исправлением проходят. Это red controls, не проигнорированные CI failures. Pixel validators и formatting обеих платформ PASS; wide-event consistency/schema checks PASS после merge commit.
**CI:** прежний failed workflow [39272483366](https://github.com/duckduckgo/apple-browsers/actions/runs/39272483366) на `674bb809f2` падал crash процесса xctest в `ConfigurationFetcherTests.testFetchAllWhenAssetsAreModifiedThenAllFetchedConfigurationsAreReturned`. Извлечённый .ips: **SIGBUS / EXC_BAD_ACCESS**, triggered stack `swift_retain → Foundation Locale.preferredLanguages → APIRequest.Headers.acceptLanguage → ConfigurationFetcher.fetch(all:)`; второй thread тоже читает Locale. Это установленное место падения, не установленная причина corruption/race и не доказательство infrastructure-only. Код Configuration/Networking не менялся. **Attempt 2 SUCCESS** без изменения binaries/source этого head. На новом `9effd97877` shared-package tests и BSK macOS/iOS unit jobs уже SUCCESS; остальные CI jobs ещё выполняются.
После `f08aefe1b8` GitHub не запускал checks из-за **DIRTY merge state** с текущей базой. Merge `da8e714b33` разрешил два конфликта (manager и pixel enum), сохранив обе стороны; CPM setup вынесен в `@MainActor configureCPMMonitoring()`, чтобы соблюсти strict complexity lint. Force push не использовался. Ранее существовавшие локальные Package.resolved изменения не включены в commits.
**Harness:** `codex/cpm-fix-init-loss-integration-tests` обновляется до production `9effd97877`; служебные visibility/pixel seams остаются только там, live PixelKit lookup в harness тоже выполняется при fire. Signed build-for-testing проверяется с новым artifact cache. Новый полный app ON/OFF/ON пока не выполнялся: прежний macOS 27 результат **9 PASS → 6 expected FAIL → 8 PASS / 1 unexpected P2 FAIL** остаётся историческим фактом; повторный настоящий WebKit error 6 на P2 retry этим review fix не исправляется.
`webExtensions.cpmLateBackgroundDocumentRecovery` по-прежнему **default disabled на iOS и macOS**; P4 detection работает независимо и не требует reload или safety-script evaluation. Этот проход не включает rollout flag и не доказывает готовность включать late reload для всех документов.
Все промежуточные результаты сохранены в **`/private/tmp/cpm-pr7379-comments-ci-20261020/`**: CI .xcresult/.ips и raw log, replies/resolution JSON, normal/red-control test logs, lint/validators, merge logs и harness build logs. При подготовке WK fixture `loadHTMLString` сначала дал 9 assertions из-за отсутствия history item; заменён реальной navigation. Промежуточный synthetic `WKNavigation()` в reload spy вызвал локальный SIGTRAP (`CFRetain(NULL)` в WKNavigation dealloc); fixture теперь вызывает `super.reload()` и ждёт реальный finish. Первая harness build попытка использовала stale absolute artifact paths; повторная подготовлена со свежим locked package cache.
@@ -673,3 +673,27 @@ Checkpoint `8a27a69776` включил эти harness fixes. Первая лок
**Оставшийся P2: retry тоже иногда получает настоящий background-load error 6.** Два отдельных normal runs `0a6d90e4c0` дали **8 PASS / 1 P2 FAIL**, но тот же неизменный payload после disabled дал **9 PASS / 0 FAIL**. В первой failed попытке второй error 6 пришёл через 30 секунд после первого (16:36:14.455Z → 16:36:44.468Z, retry PID 3001); повтор дал 16:40:38.693Z → 16:41:08.707Z, PID 3265. Контроль единственного P2 на исходном published `d26a1c55d1` в той же VM также дал **0 PASS / 1 FAIL / 0 SKIP** с повторным error 6, поэтому явление воспроизводится и без новых late-startup fixes. Для baseline retry PID 3952 успешно сняты background/app stack samples: WebKit 22625.1.29.11.27, background footprint 11.3 MB, main thread в XPCServiceMain/xpc_main/NSRunLoop/Mach wait, 0% CPU; app main thread в XCTest/AppKit run loop. Эти стеки не показывают CPU busy-loop и совместимы с неустановившимся XPC/bootstrap connection, но точная root cause не доказана. Console VM была разблокирована/активна; crash/OOM report в собранных логах не найден. Failure не объявляется infrastructure-only и не игнорируется. Финальный normal после OFF снова поймал его; README явно считает это unexpected enabled-scheme failure, а не валидный отрицательный контроль. Production-изменений для второго error 6 в этой работе нет.
Все raw xcresults, logs, JSON attachments, generated .xctestrun/flag environment, app/test hashes, export manifests и samples сохранены в `/private/tmp/cpm-pr7379-three-late-failures-20261019/`: `vm-baseline/`, `vm-eight-second-intermediate/`, `vm-twelve-intermediate/`, `vm-verified-first/`, `vm-confirmation/` (включая baseline-p2.xcresult и samples), `vm-final/`. SHA-256 manifests экспортированных VM bundles совпали с оригиналами; финальный экспорт проверен по **3820 files**. Локальные failed/positive attempts также сохранены отдельно. Первая transfer попытка пересеклась с Xcode build и завершилась rsync exit 23 до test execution; stable copy затем успешно запустила baseline. Deep signature verification локального Debug build сообщал missing/invalid sealed resource во вложенном VPN helper PrivacyConfig.framework; это не засчитано как причина reported failures. Использовался Apple Development signed host app/test build, guest signing identities отсутствуют, private signing keys в VM не передавались. Virfield lease `lease-671a00b65fc4efdfc9b0df677a0ff51f`, expiry `2026-10-19T17:49:35Z`; VM не удалялась без отдельного разрешения.
## #7379: review fixes и CI — 20 октября 2026
Область этой сверки — только [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379); она не меняет статус merge/rollout других CPM PR. Production head **`9effd97877bbaf5918f59083b17a8c5e7d11492c`**, review fix **`f08aefe1b8`**, база **`alex/cpm-messaging-readiness-telemetry / da8e714b33`**. Все шесть human review threads получили ответы и **resolved**.
- Удалены `CPMRecoveryInstrumentation`, `WebExtensionCPMRecoveryInstrumentation` и manager wrapper. Recovery и тесты используют непосредственно `WebExtensionPixelFiring` / реальные `WebExtensionPixelEvent`.
- iOS/macOS adapters снова вызывают статический `PixelKit.fire`: shared instance определяется при отправке, не при создании struct. Имена, параметры и частоты CPM pixels сохранены.
- `MacOSCPMDiagnosticsFeatureFlags` снова **private** в production; доступ и pixel injection нужны только отдельному review harness.
- У `cpmLateBackgroundDocumentRecovery` собственный doc comment; описание hang recovery возвращено к `cpmMessagingHangRecovery`.
- По последнему явному указанию пользователя применён предложенный reviewer focus guard: допустим только отсутствующий focus или `document.body`; страницы с **любым iframe** консервативно исключены из автоматического reload. Это предотвращает проверенные focused Shadow DOM / iframe случаи, но не является журналом всех document edits: синхронизация mutable defaults и ранее изменённый, затем потерявший focus shadow content полностью не закрыты.
- Добавлены **5 обычных shared-package WKWebView регрессий**, остающихся в production PR: edited input; edited iframe после ухода focus; focused edited Shadow DOM input; non-GET veto; pristine GET с реальным завершившимся reload. Загружается локальный URL через WKURLSchemeHandler, затем вызывается реальный production `registerDocument(in:webView:isGET:)` и safety JavaScript. Отказ от reload не подавляет independent P4 detection.
**Проверки:** до обновления базы 260 selected PASS; после merge базы и окончательного выделения main-actor CPM setup — **267 PASS / 0 FAIL** (CPM, lifecycle, manager), strict SwiftLint **8 files / 0 violations**. В отдельной source copy с исходными guards оба новых iframe/Shadow DOM теста дают нежелательный реальный reload и **2 failed tests / 6 assertions**; с исправлением проходят. Это red controls, не проигнорированные CI failures. Pixel validators и formatting обеих платформ PASS; wide-event consistency/schema checks PASS после merge commit.
**CI:** прежний failed workflow [39272483366](https://github.com/duckduckgo/apple-browsers/actions/runs/39272483366) на `674bb809f2` падал crash процесса xctest в `ConfigurationFetcherTests.testFetchAllWhenAssetsAreModifiedThenAllFetchedConfigurationsAreReturned`. Извлечённый .ips: **SIGBUS / EXC_BAD_ACCESS**, triggered stack `swift_retain → Foundation Locale.preferredLanguages → APIRequest.Headers.acceptLanguage → ConfigurationFetcher.fetch(all:)`; второй thread тоже читает Locale. Это установленное место падения, не установленная причина corruption/race и не доказательство infrastructure-only. Код Configuration/Networking не менялся. **Attempt 2 SUCCESS** без изменения binaries/source этого head. На новом `9effd97877` shared-package tests и BSK macOS/iOS unit jobs уже SUCCESS; остальные CI jobs ещё выполняются.
После `f08aefe1b8` GitHub не запускал checks из-за **DIRTY merge state** с текущей базой. Merge `da8e714b33` разрешил два конфликта (manager и pixel enum), сохранив обе стороны; CPM setup вынесен в `@MainActor configureCPMMonitoring()`, чтобы соблюсти strict complexity lint. Force push не использовался. Ранее существовавшие локальные Package.resolved изменения не включены в commits.
**Harness:** `codex/cpm-fix-init-loss-integration-tests` обновляется до production `9effd97877`; служебные visibility/pixel seams остаются только там, live PixelKit lookup в harness тоже выполняется при fire. Signed build-for-testing проверяется с новым artifact cache. Новый полный app ON/OFF/ON пока не выполнялся: прежний macOS 27 результат **9 PASS → 6 expected FAIL → 8 PASS / 1 unexpected P2 FAIL** остаётся историческим фактом; повторный настоящий WebKit error 6 на P2 retry этим review fix не исправляется.
`webExtensions.cpmLateBackgroundDocumentRecovery` по-прежнему **default disabled на iOS и macOS**; P4 detection работает независимо и не требует reload или safety-script evaluation. Этот проход не включает rollout flag и не доказывает готовность включать late reload для всех документов.
Все промежуточные результаты сохранены в **`/private/tmp/cpm-pr7379-comments-ci-20261020/`**: CI .xcresult/.ips и raw log, replies/resolution JSON, normal/red-control test logs, lint/validators, merge logs и harness build logs. При подготовке WK fixture `loadHTMLString` сначала дал 9 assertions из-за отсутствия history item; заменён реальной navigation. Промежуточный synthetic `WKNavigation()` в reload spy вызвал локальный SIGTRAP (`CFRetain(NULL)` в WKNavigation dealloc); fixture теперь вызывает `super.reload()` и ждёт реальный finish. Первая harness build попытка использовала stale absolute artifact paths; повторная подготовлена со свежим locked package cache.