From 9f3dc16e6702c14c50a00713946daa4358c38908 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 20 Oct 2026 14:24:46 +0600 Subject: [PATCH] [2026-10-20] eagle: work/projects/cpm-metrics-causes-and-mitigations-2026-10-16.md work/projects/cpm-service-worker-architecture-and-diagnostics.md work/projects/cpm-status-2026-10-15.md work/projects/cpm-web-extension-breakage-findings.md work/projects/cpm-web-extension-breakage-validation.md work/projects/cpm-web-extension-code-guide-2026-10-09.md work/projects/cpm-web-extension-data-analysis-summary-2026-10-08.md work/projects/cpm-web-extension-public-attribution-2026-10-05.md work/projects/cpm-web-extension-repro-and-fix-2026-10-08.md work/projects/cpm-web-extension-repro-and-fixes-summary-2026-10-08.md --- ...trics-causes-and-mitigations-2026-10-16.md | 4 ++-- ...ice-worker-architecture-and-diagnostics.md | 2 +- work/projects/cpm-status-2026-10-15.md | 19 ++++++++++++++++--- .../cpm-web-extension-breakage-findings.md | 2 +- .../cpm-web-extension-breakage-validation.md | 2 +- ...cpm-web-extension-code-guide-2026-10-09.md | 13 ++++++++++++- ...ension-data-analysis-summary-2026-10-08.md | 2 +- ...extension-public-attribution-2026-10-05.md | 2 +- ...-web-extension-repro-and-fix-2026-10-08.md | 2 +- ...sion-repro-and-fixes-summary-2026-10-08.md | 2 +- 10 files changed, 37 insertions(+), 13 deletions(-) diff --git a/work/projects/cpm-metrics-causes-and-mitigations-2026-10-16.md b/work/projects/cpm-metrics-causes-and-mitigations-2026-10-16.md index c7f8249e..66e4ba71 100755 --- a/work/projects/cpm-metrics-causes-and-mitigations-2026-10-16.md +++ b/work/projects/cpm-metrics-causes-and-mitigations-2026-10-16.md @@ -54,7 +54,7 @@ Percentages below are shares of all initial-failure / stuck daily reports in the - **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. -## Open PRs and local validation +## PR status and local validation Verified from GitHub on 20 October 2026; exact heads and CI failure annotations are in [[cpm-status-2026-10-15#2. PR и quality gates]]. @@ -62,7 +62,7 @@ Verified from GitHub on 20 October 2026; exact heads and CI failure annotations - #7379 `674bb809f2`: open on the telemetry branch; **BSK CI failed** on a crashed ConfigurationFetcher XCTest. Earlier green results below belong to their tested revisions. - #7459 `f41c7b7047`: current Network recovery plus applied pixel; open, CI green. - #7493 `dd96018da9`: stable-origin P3 path; open, CI green, full P3 failure still unreproduced. -- #7473 `574e9288ae`: shared-pinned window-close P5 fix; open directly on macOS release, CI green. It fixes a subset, not all P5 signatures. +- [#7473](https://github.com/duckduckgo/apple-browsers/pull/7473) `574e9288ae`: shared-pinned window-close P5 fix **merged 20 October 2026 into `release/macos/1.213.0`**, commit `9bcce0264e`; CI green. Unit tests now assert WebKit `openTabs`; the real-window fixture remains local, with ON 9 → OFF 5 expected failures + 1 control → ON 27 PASS. It fixes one mechanism; release publication, rollout and production effect remain unverified. Details: [[cpm-status-2026-10-15#P5 — merged 20 октября 2026]]. - #7378 harness and #7384 baseline are closed without merge. #7385/native progress and extension #3727 remain open; #7385 still depends on the closed baseline branch. Old #7381 is still open but is not the current Network recovery implementation. Readiness timing does not establish message delivery. The episode report still lacks page ACK/last confirmed stage, a final result for initially pending loads, and network replacement relative to its current view. Late errors before stuck can now appear in the history continuation; non-stuck reports keep only their initial history. See [[cpm-status-2026-10-15#6. Телеметрия]]. diff --git a/work/projects/cpm-service-worker-architecture-and-diagnostics.md b/work/projects/cpm-service-worker-architecture-and-diagnostics.md index 39b93b4f..3d3ca838 100755 --- a/work/projects/cpm-service-worker-architecture-and-diagnostics.md +++ b/work/projects/cpm-service-worker-architecture-and-diagnostics.md @@ -5,7 +5,7 @@ updated: '2026-10-20' > **Current implementation context — 20 October 2026.** The architecture/source audit below remains dated September 25; its bundle versions, milestones and open-source bug shipping statements are historical. Current sources/worktrees: [[cpm-web-extension-code-guide-2026-10-09#0. Текущая карта worktree и точек входа]]. > -> #7376 now has one terminal episode report, daily+count, four-state `stuck` and two-phase bounded `bg_events`; it is published but closed without merge. #7459 adds an applied Network-recovery pixel, not a success ACK; #7493 implements the restricted stable-origin P3 policy and verifies migration controls without reproducing the full P3 failure. #7473 fixes the shared-pinned window-close mechanism. Older “no fix / not implemented” claims below describe earlier revisions. +> #7376 now has one terminal episode report, daily+count, four-state `stuck` and two-phase bounded `bg_events`; it is published but closed without merge. #7459 adds an applied Network-recovery pixel, not a success ACK; #7493 implements the restricted stable-origin P3 policy and verifies migration controls without reproducing the full P3 failure. #7473 fixes the shared-pinned window-close mechanism and **merged on 20 October into `release/macos/1.213.0` (`9bcce0264e`)**. Its default-ON remote failsafe remains; release publication/rollout and production effect are unverified. The real-window integration fixture remains outside the merge; verified implementation/tests: [[cpm-status-2026-10-15#P5 — merged 20 октября 2026]]. Older “no fix / not implemented” claims below describe earlier revisions. > > An answered native dashboard does not prove page `initResp` delivery; a responsive process/loaded background does not prove a working worker/message route. Page ACK/stage attribution, final pending-load outcome and per-view Network attribution remain missing. Updated telemetry and privacy limits: [[cpm-status-2026-10-15#6. Телеметрия]]. diff --git a/work/projects/cpm-status-2026-10-15.md b/work/projects/cpm-status-2026-10-15.md index 3ff107b2..f87b8c40 100755 --- a/work/projects/cpm-status-2026-10-15.md +++ b/work/projects/cpm-status-2026-10-15.md @@ -9,6 +9,8 @@ updated: '2026-10-20' --- # CPM Web Extension: единый статус +> **P5 #7473 — merged 20 октября 2026, 14:17:11 Бишкек (08:17:11 UTC):** [merge `9bcce0264e`](https://github.com/duckduckgo/apple-browsers/commit/9bcce0264e60ef79b98c1b8aeb23ef9f26c45bc0) в `release/macos/1.213.0`, финальный PR head `574e9288ae`. Фикс shared-pinned window close включён по умолчанию и имеет remote failsafe. Подробности реализации, review и проверок — [[cpm-status-2026-10-15#P5 — merged 20 октября 2026]]. Merge в release branch подтверждён; публикация сборки, rollout и production effect этим не установлены. Эта сверка касается #7473. + > **#7379 — дополнение 20 октября 2026:** production `9effd97877`, review fixes `f08aefe1b8`, все 6 threads resolved; **267 selected unit PASS**, 43 новых shared regression methods. Предложенный focus/iframe guard применён и проверен настоящим WKWebView; late reload default OFF, P4 detection независим. Старый BSK crash run повторён успешно; CI нового head завершён: **43 SUCCESS / 17 SKIPPED**, без failures/pending, merge state CLEAN. Harness `0b1d6771fe` наследует этот production head, signed build-for-testing PASS, 14 fixture-only paths. Подробности и ограничения — в последнем разделе «#7379: review fixes и CI». Эта сверка не переоценивает остальные CPM PR. **Сверено 20 октября 2026, 11:40–11:45 Бишкек (05:40–05:45 UTC): опубликованные heads, состояния PR, exact-head CI и исходники.** Актуальны §1–9; короткие прежние обновления перенесены в §9а, подробные журналы ниже сохраняют результаты своих дат и ревизий. @@ -24,7 +26,7 @@ updated: '2026-10-20' - **Телеметрия #7376 реализована и опубликована, но PR закрыт без мержа.** Один `web_extension_cpm_episode`, daily+count, вместо 11 отдельных failure/stuck/recovery/reload-failed пикселей. `stuck` различает подтверждённость повторного сбоя и одну/несколько наблюдавшихся failing tabs; `bg_events` для stuck содержит начальный снимок и продолжение до первого подтверждения. Все параметры, частота и удаления — в [[cpm-pr0-episode-telemetry-summary-2026-10-16]]. - **#7379**: head `9effd97877` содержит install/upgrade readiness, P1 wake, P2 retry и независимый P4 detection; late-document reload default OFF. Шесть review threads исправлены и resolved; предложенный focus/iframe guard и пять real-WKWebView тестов добавлены. 267 selected unit PASS / 43 новых shared regression methods. Старый BSK crash workflow повторён успешно; CI текущего head завершён: **43 SUCCESS / 17 SKIPPED, без failures/pending**. - **Network recovery #7459** опубликован с отдельным `web_extension_cpm_network_process_recovery_applied` daily+count без custom parameters. Это измерение выполненного restart, не доказательство восстановления и не замена network-атрибуции каждого failure report. -- **P3 #7493** реализует стабильный приватный origin, CI зелёный; полный production no-background failure не воспроизведён. **P5 #7473** исправляет shared-pinned window close, CI зелёный; это один доказанный механизм, не вся P5-когорта. +- **P3 #7493** реализует стабильный приватный origin, CI зелёный; полный production no-background failure не воспроизведён. **P5 #7473 merged** 20 октября в `release/macos/1.213.0` (`9bcce0264e`), CI зелёный на финальном head `574e9288ae`; это один доказанный механизм, не вся P5-когорта. Публикация/rollout ещё не подтверждены. - **Полная диагностика Others и отсечение всех ложных срабатываний ещё не обеспечены.** Нет page ACK/последнего подтверждённого этапа, конечного исхода изначально pending load и `network_replaced_since_view` в episode report (§6). `reason=other` — контекст навигации, не историческая причинная группа Others. - **Production `bg_events` действительно терял начало.** В срезе 14 октября исходный `load` отсутствует у 40.86% iOS и 61.62% macOS stuck.daily; это нижняя оценка, не точная частота всех обрезаний. Новый маркер показывает потерю, но общий бюджет может вытеснить весь initial snapshot (§6). - P1/P2, P5/tab=false и условный P6 подтверждены контролируемыми macOS tests. Это не устанавливает их долю среди реальных iOS failures. Естественные listener-metadata loss, P5/tab=true, iOS suspend/resume и occurrence main-flag transitions остаются открытыми. Все прежние отрицательные проверки и красные прогоны сохранены в журналах. @@ -38,12 +40,23 @@ updated: '2026-10-20' - [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379), `alex/cpm-fix-init-loss`, **`9effd97877`** → `alex/cpm-messaging-readiness-telemetry / da8e714b33`: OPEN, **CI GREEN: 43 SUCCESS / 17 SKIPPED, 0 failures/pending; merge state CLEAN**. BSK, iOS/macOS app builds/tests, shared packages, UI/PIR, validators и lint завершены. Сверены 6 resolved review threads, 267 selected unit PASS, 43 новых shared regression methods и validators. Исходный crash `674bb809f2` / run `39272483366` подробно сохранён в последнем разделе; attempt 2 SUCCESS не устанавливает его root cause. Production worktree `alex/cpm-fix-init-loss-production`; review-only harness `codex/cpm-fix-init-loss-integration-tests / 0b1d6771fe`, 14 paths, signed build-for-testing PASS. Новый app ON/OFF/ON не проводился; прежние результаты относятся к указанным heads. - [#7459](https://github.com/duckduckgo/apple-browsers/pull/7459), `alex/cpm-network-process-recovery`, **`f41c7b7047`** → `alex/cpm-messaging-readiness-telemetry`: OPEN, CI зелёный (59 entries). Network recovery default ON на обеих платформах, remote kill switch сохранён; добавлен applied pixel. Review-only harness — `codex/cpm-network-process-integration-tests`. - [#7493](https://github.com/duckduckgo/apple-browsers/pull/7493), `alex/cpm-p3-stable-base-url`, **`dd96018da9`** → `alex/cpm-messaging-readiness-telemetry`: OPEN, CI зелёный (60 entries). P3 stable-origin policy, default ON с remote kill switch; harness `codex/cpm-p3-integration-tests`. PR содержит результаты 784 package tests и signed ON 10/10 → OFF ровно 3 origin-continuity failures → ON 30/30 executions. Это проверка origin/migration и CPM controls на macOS, не воспроизведение полного P3 failure и не iOS runtime test. -- [#7473](https://github.com/duckduckgo/apple-browsers/pull/7473), `alex/cpm-p5-pinned-window-close`, **`574e9288ae`** → **`release/macos/1.213.0`**: OPEN, CI зелёный (61 entries), mergeable. Default-ON failsafe `webExtensionSharedPinnedTabWindowClose`; PR сообщает девять app integration scenarios. Он таргетит macOS release напрямую. +- [#7473](https://github.com/duckduckgo/apple-browsers/pull/7473), `alex/cpm-p5-pinned-window-close`, финальный head **`574e9288ae`** → **`release/macos/1.213.0`**: **MERGED 20 октября 2026, 08:17:11 UTC / 14:17:11 Бишкек**, [merge `9bcce0264e`](https://github.com/duckduckgo/apple-browsers/commit/9bcce0264e60ef79b98c1b8aeb23ef9f26c45bc0). На финальном PR head: **47 SUCCESS / 23 SKIPPED**, без failures/pending по сверке после merge; skipped entries не считаются выполненными тестами. Default-ON failsafe `webExtensionSharedPinnedTabWindowClose`. В merge только 5 production/unit-test paths; real-window fixture и его configuration hook остались локально. Подробности — [[cpm-status-2026-10-15#P5 — merged 20 октября 2026]]. - Старые ветки: [#7378 harness](https://github.com/duckduckgo/apple-browsers/pull/7378) **CLOSED, не merged** (`dfb9627919`); [#7384 baseline](https://github.com/duckduckgo/apple-browsers/pull/7384) **CLOSED, не merged** (`99ecf8b127`). [#7385 init progress](https://github.com/duckduckgo/apple-browsers/pull/7385) OPEN (`46f25175c7`), всё ещё на ветке закрытого #7384; [privacy-extension #3727](https://github.com/duckduckgo/duckduckgo-privacy-extension/pull/3727) OPEN (`b00cc22711`), не merged. Их старые Danger/review результаты не перепроверялись как текущие gates. - Старый [#7381](https://github.com/duckduckgo/apple-browsers/pull/7381) OPEN, `39f94e12ea` → `alex/cpm-fix-init-loss`; его прежнюю Network implementation не путать с актуальным #7459. Native GitHub stack удалён по решению пользователя; обычные base-branch зависимости сохранены. Таким образом, #7379/#7459/#7493 всё ещё ссылаются на ветку закрытого #7376. Закрытие PR не удалило эту ветку и не включило её изменения в release. Worktree большого telemetry rewrite `alex/cpm-episode-telemetry` — альтернативный prototype, не состав #7376. +### P5 — merged 20 октября 2026 + +- **Merge подтверждён через GitHub:** [#7473](https://github.com/duckduckgo/apple-browsers/pull/7473), [merge `9bcce0264e`](https://github.com/duckduckgo/apple-browsers/commit/9bcce0264e60ef79b98c1b8aeb23ef9f26c45bc0), `release/macos/1.213.0`; финальный reviewed/tested head `574e9288ae9611ea935fc2a66abfa8cc0d62fb6d`. [Задача P5](https://app.asana.com/1/137249556945/task/1219643712648486?focus=true). +- **Что исправлено:** после наших явных `didCloseTab` WebKit сам запрашивает `tabs(for:)` внутри `didCloseWindow` и раньше забывал выживший shared pinned tab. Теперь оба пути используют один ownership helper; окно сначала снимается с регистрации, затем отправляется `didCloseWindow`. Проверяется и app registry, и `openWindows` запрашивающего context, поэтому открывающиеся/ещё не известные context окна не теряют pins. Нового хранимого closing-state нет. `activeTab` выбирается только из closing list, для пустого списка — nil; реальный выбор пользователя не меняется. +- **Failsafe:** `webExtensionSharedPinnedTabWindowClose`, default **ON**; remote key `webExtensions.sharedPinnedTabWindowClose`. [Registry task](https://app.asana.com/1/137249556945/project/1211834678943996/task/1219660990760563). OFF возвращает прежние `tabs`/`activeTab` при последующих закрытиях; уже забытые WebKit вкладки сам по себе не восстанавливает. +- **Review и scope:** четыре замечания исправлены и threads resolved; Danger warning устранён. В merge 5 paths: shared subfeature, macOS controller/delegate/flag и unit tests. Не вошли `PR.md`, real-window app fixture, schemes/DEBUG hooks, ZIP/pin/telemetry changes. Неиспользуемый shared `WebExtensionManager.controllerConfiguration` API из production PR удалён. +- **Проверки финального head:** 209 selected unit PASS / 0 failed / 0 skipped. Десять close-state/flag регрессий теперь проверяют публичный `context.openTabs`, включая preconditions, register → didOpenWindow → unregister → didCloseWindow и реальную потерю shared-pin регистрации при OFF. Обычная macOS build, deep/strict signing и strict lint PASS. CI финального PR head зелёный; ручные шаги reviewer подтвердил в GitHub review. +- **Отдельный локальный app harness:** `alex/cpm-p5-integration-tests`, `codex/cpm-p5-release-integration-tests` @ `add6e514fe`; **13 review-only paths**, включая isolated controller-configuration hook. Проверены active pinned/regular, повторные закрытия, последнее окно → новое окно, move/merge, separate pins, реальный background idle, diagnostics OFF и runtime enable. На одинаковых бинарниках: **ON 9 PASS → OFF 5 ожидаемых registration-loss FAIL + 1 healthy merge control → ON 27 PASS**; 0 skipped, все **4 886** файлов app/XCTest byte-identical. Успешные фазы без active-tab contract errors и неожиданных host restarts; stale tabs дополнительно проверяются через `browser.tabs.get`. +- Исходные summaries, hashes, build/signature и CI evidence: `/private/tmp/cpm-p5-pr-comments-20261019/`, manifest `validation.json`. Точки входа и локальные worktree — [[cpm-web-extension-code-guide-2026-10-09#P5 после merge]]. +- **Границы:** это один доказанный macOS shared-pinned/tab=false механизм, а не устранение всей P5-когорты, iOS lifecycle или natural listener loss. Восстановление закрытого окна через History отдельно не проверялось; открытие нового окна после последнего закрытия проверено. Merge в release branch не доказывает публикацию сборки, rollout либо production recovery rate. + ### Исторический реестр PR — 15–19 октября Следующий реестр сохранён для истории heads, красных прогонов и прежних решений; его OPEN/CI/«локально не опубликовано» не являются текущим статусом. @@ -114,7 +127,7 @@ updated: '2026-10-20' | **P2. «Пробуждение → error 6»**, циклы | `proxy_on>dealloc>view>proxy_on>error_E:6` (23.6k), `error>dealloc>view>proxy_on>error` (5.7k), после `died_crash` (1.5k) | iOS; macOS 118 | macOS: заморозка нового процесса на ≥30 с даёт error 6, корзина 25–35 с. iPhone: 4 сценария безуспешно. Главный iOS-хвост **без** `unresponsive` (в воспроизведении он есть) | корень в WebKit (`wakeUpBackgroundContentIfNecessary` взводит 30-секундный таймер до загрузки worker'а). Гипотеза: перезагрузка расширения при возврате на передний план | | **P3. Контекст загружен, view нет** | `load` / `load>base_url_changed` | 17.1k + 0.9k / 162 + 81 | задержка очистки при смене `baseURL` воспроизведена на macOS при большом кэше (около 10 минут заполнения); iOS-гонка запуска (`bg_view_creations=0`, восстановление сессии, первые 30 с) не воспроизведена: холодный старт в harness'е отвечает за миллисекунды | кандидат: стабильный `baseURL` (ветка `cpm-stable-base-url`: не доведён, меняет URL всем расширениям, не прогнан через harness, старая база). Фикс WebKit 318756@main, номер сборки ОС не проверен | | **P4. Первая загрузка** | `load>view>proxy_on` | 6.8k + 2.3k / 570 | да (фикс A) | фикс A | -| **P5. Фон выгружен в момент сбоя** | `proxy_on>dealloc>view>proxy_on>dealloc` | 1.9k / 494 | да: закрытие окна с shared pinned tab через production listener → WebKit сам удаляет сохранённый tab; точная сигнатура с tab=false (§11). Пустые listener metadata пока только test-only (§10) | найден browser→WebKit путь для Mac/tab=false; фильтрации явных didCloseTab недостаточно — didCloseWindow закрывает tabs повторно. Для tab=true и iOS естественный вход не найден | +| **P5. Фон выгружен в момент сбоя** | `proxy_on>dealloc>view>proxy_on>dealloc` | 1.9k / 494 | да: закрытие окна с shared pinned tab через production listener → WebKit сам удаляет сохранённый tab; точная сигнатура с tab=false (§11). Пустые listener metadata пока только test-only (§10) | shared-pinned Mac/tab=false путь исправлен #7473, merged 20 октября в macOS release: delegate исключает выжившие tabs при didCloseWindow. Rollout/effect не измерены; для tab=true и iOS естественный вход не найден | | **P6. macOS: вкладка без расширения** | `load>view>proxy_on>dealloc` / `load>view>proxy_on`; варианты с `extension_updated` отдельно | iOS ≈0 / 627 + 235 | да: цикл главного webExtensions flag через production handler создаёт replacement manager, прежний WKWebView сохраняет старый controller и даёт точную сигнатуру (§11); nil controller до/после idle — test-only (§10) | условный production-путь найден; фактическое переключение главного flag в выборке не подтверждено. Embedded-only cycle сохраняет controller; reload контекста старую привязку не чинит | | **Network заменён** | | см. раздел 4 | да (краш, worker мёртв при том же view) | фикс B | | **«Здоровый» остаток, other** | | iOS 12.5%, macOS 22% | нет | нет гипотезы | diff --git a/work/projects/cpm-web-extension-breakage-findings.md b/work/projects/cpm-web-extension-breakage-findings.md index 1a699983..94d242b4 100755 --- a/work/projects/cpm-web-extension-breakage-findings.md +++ b/work/projects/cpm-web-extension-breakage-findings.md @@ -13,7 +13,7 @@ updated: '2026-10-20' > **Актуальный контекст — 20 октября 2026.** Это исторический журнал source audit, ручных repro и отозванных гипотез. Его «нет фикса», local-only, bundle/OS и CI states относятся к датам записей; текущие heads и gates — [[cpm-status-2026-10-15#2. PR и quality gates]]. > -> Опубликованы отдельные реализации P1/P2/P4 (#7379), Network recovery (#7459), P3 stable origin (#7493) и shared-pinned P5 (#7473); это не доказательство shipped effect или всей production causal share. #7376 с единым episode report закрыт без merge. Его `bg_events` теперь продолжается до первого stuck, имеет `;`/`...`, но общий budget может вытеснить initial history. Реальная потеря начала подтверждена агрегатами production (§6 основного статуса). +> Опубликованы отдельные реализации P1/P2/P4 (#7379), Network recovery (#7459), P3 stable origin (#7493) и shared-pinned P5 (#7473). **#7473 merged 20 октября в `release/macos/1.213.0` (`9bcce0264e`)**, с default-ON failsafe; детали и отдельные app tests — [[cpm-status-2026-10-15#P5 — merged 20 октября 2026]]. Merge не доказывает rollout, shipped effect или всю production causal share. #7376 с единым episode report закрыт без merge. Его `bg_events` теперь продолжается до первого stuck, имеет `;`/`...`, но общий budget может вытеснить initial history. Реальная потеря начала подтверждена агрегатами production (§6 основного статуса). > > Page ACK отсутствует; потеря native dashboard при работающей странице остаётся возможным false positive. P5/tab=true, natural listener metadata loss, iOS lifecycle и occurrence P6 transitions всё ещё не установлены. Исходные красные/положительные/отрицательные результаты ниже сохранены. diff --git a/work/projects/cpm-web-extension-breakage-validation.md b/work/projects/cpm-web-extension-breakage-validation.md index 045bb124..c6d5300f 100755 --- a/work/projects/cpm-web-extension-breakage-validation.md +++ b/work/projects/cpm-web-extension-breakage-validation.md @@ -5,7 +5,7 @@ updated: '2026-10-20' > **Сверено 20 октября 2026.** Актуальный реестр PR/CI — [[cpm-status-2026-10-15#2. PR и quality gates]], телеметрия/границы диагностики — §6, исходники — [[cpm-web-extension-code-guide-2026-10-09#0. Текущая карта worktree и точек входа]]. > -> #7376 `5d1cb4abd2` опубликован, CI зелёный, но закрыт без merge. #7484 — старый macOS payload с conflict. #7379 имеет failed BSK crash gate; #7459, #7493 и #7473 имеют зелёный exact-head CI. Новая телеметрия измеряет completed episodes, не совпадает со старой системой event totals. +> #7376 `5d1cb4abd2` опубликован, CI зелёный, но закрыт без merge. #7484 — старый macOS payload с conflict. #7379 имеет failed BSK crash gate; #7459 и #7493 имеют зелёный exact-head CI. **P5 #7473 merged 20 октября в `release/macos/1.213.0` (`9bcce0264e`)**, CI финального head `574e9288ae` зелёный; default-ON failsafe сохранён. Unit tests проверяют WebKit `openTabs`; real-window fixture остаётся вне merge. Проверенный ON/OFF/ON и границы — [[cpm-status-2026-10-15#P5 — merged 20 октября 2026]]. Публикация/rollout ещё не установлены. Новая телеметрия измеряет completed episodes, не совпадает со старой системой event totals. > > Таблицы M2/M5/M6, «Network restart отвергнут», «всё local» и старые OPEN/CI ниже — датированная история. P3 stable-origin policy теперь в #7493, Network fix — #7459 с отдельным applied pixel; это не полная causal attribution или доказанный production recovery rate. 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 29acdb01..e11fdcaf 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 @@ -23,12 +23,23 @@ updated: '2026-10-20' - **P1/P2/P4:** `alex/cpm-fix-init-loss-production`, `alex/cpm-fix-init-loss`, **`674bb809f2`**, #7379 на telemetry branch. Главные точки — `Manager/WebExtensionManager.swift`, `Autoconsent/CPMBackgroundReadinessRecovery.swift` и `Pixels/WebExtensionPixelFiring.swift` внутри WebExtensions Sources. Independent `startup_response_missing` не зависит от default-OFF late reload; recovery outcomes не являются page ACK. CI BSK красный. Отдельный app harness — `alex/cpm-fix-p1-p2`, `codex/cpm-fix-init-loss-integration-tests`. - **Network recovery:** `alex/cpm-network-process-recovery`, **`f41c7b7047`**, #7459 на telemetry branch; [watch/restart](/Users/admin/DuckDuckGo/apple-browsers.git/alex/cpm-network-process-recovery/SharedPackages/WebExtensions/Sources/WebExtensions/Lifecycle/CPMNetworkProcessRecovery.swift), manager wiring и `CPMNetworkProcessRecoveryTests.swift`. Applied pixel в metadata/обоих definitions: daily+count, no custom params, только после принятого restart. Нет доказательства recovery и нет `network_replaced_since_view` в episode. Harness: `alex/cpm-network-process-integration-tests`, `codex/cpm-network-process-integration-tests`. - **P3 stable origin:** `alex/cpm-p3-stable-base-url`, **`dd96018da9`**, #7493 на telemetry branch; production default ON, remote kill switch. Это уже опубликованный ограниченный CPM origin policy, не старый глобальный M2 prototype. Harness `alex/cpm-p3-integration-tests`, `codex/cpm-p3-integration-tests`; full P3 failure остаётся невоспроизведённым. -- **P5 shared pinned close:** `alex/cpm-p5-pinned-window-close`, **`574e9288ae`**, #7473 на `release/macos/1.213.0`, CI зелёный; harness `alex/cpm-p5-integration-tests`, `codex/cpm-p5-release-integration-tests`. Один доказанный tab-lifecycle mechanism. +- **P5 shared pinned close:** [#7473](https://github.com/duckduckgo/apple-browsers/pull/7473) **MERGED 20 октября 2026** в `release/macos/1.213.0`, [merge `9bcce0264e`](https://github.com/duckduckgo/apple-browsers/commit/9bcce0264e60ef79b98c1b8aeb23ef9f26c45bc0); финальный reviewed/tested head **`574e9288ae`**, worktree `alex/cpm-p5-pinned-window-close`. Default ON + remote failsafe, CI зелёный. Harness остаётся отдельно: `alex/cpm-p5-integration-tests`, `codex/cpm-p5-release-integration-tests` @ `add6e514fe`. Один доказанный tab-lifecycle mechanism; rollout не подтверждён. - **Большой rewrite:** `alex/cpm-episode-telemetry`, **`7e8128c94f`** — альтернативный prototype, **не** реализация #7376. Не читать `CPMEpisodeTelemetry.swift`/`CPMEpisodeSummary.swift` как текущий PR. - Старый самостоятельный harness #7378 и baseline #7384 закрыты без merge. Native progress #7385 и JS #3727 открыты и не встроены в #7376; end-to-end delivery требует обеих сторон и обновлённого extension bundle. Для ручной проверки именно terminal-report contract — [[CPM Breakage Testing Steps]]. Прежние commands/counts/line mappings ниже сохранены как история, а не инструкции для текущего head. +### P5 после merge + +Факты merge, результаты и ограничения — [[cpm-status-2026-10-15#P5 — merged 20 октября 2026]]. Merge commit `9bcce0264e`; локальный production worktree сохраняет финальный PR head `574e9288ae`. Ссылки/строки ниже относятся к этому локальному head. + +- [Window close и единый ownership helper](/Users/admin/DuckDuckGo/apple-browsers.git/alex/cpm-p5-pinned-window-close/macOS/DuckDuckGo/MainWindow/MainWindowController.swift:596): explicit tab closes → unregister → didCloseWindow; guard на app registry + requesting context находится на строке 639, helper — 655. Closing-state не хранится. +- [WebKit tabs/activeTab delegate](/Users/admin/DuckDuckGo/apple-browsers.git/alex/cpm-p5-pinned-window-close/macOS/DuckDuckGo/WebExtensions/MainWindowController+WKWebExtensionWindow.swift:31): исключает только выжившие tabs при закрытии; activeTab согласован с closing list, реальная selection не меняется. +- [Failsafe](/Users/admin/DuckDuckGo/apple-browsers.git/alex/cpm-p5-pinned-window-close/macOS/LocalPackages/FeatureFlags-macOS/Sources/FeatureFlags/FeatureFlag.swift:123): `webExtensionSharedPinnedTabWindowClose`, default ON, remote `webExtensions.sharedPinnedTabWindowClose`; [registry task](https://app.asana.com/1/137249556945/project/1211834678943996/task/1219660990760563). +- [Unit regression](/Users/admin/DuckDuckGo/apple-browsers.git/alex/cpm-p5-pinned-window-close/macOS/UnitTests/MainWindow/WindowsManagerPopupTests.swift:97) проверяет WebKit `openTabs` после настоящих context callbacks и app register/unregister; flag-OFF reproduction — строка 143. Эти unit tests вошли в PR. +- **Не вошли в merge:** реальные app-window tests, пять CPM fixture Swift files, dedicated schemes/DEBUG hooks и isolated controller configuration. Они только в `alex/cpm-p5-integration-tests`, branch `codex/cpm-p5-release-integration-tests` @ `add6e514fe`; README — `macOS/IntegrationTests/CPM/README.md`. Это 13 review-only paths относительно production head; public `WebExtensionManager` API в merged production diff не меняется. +- Evidence для `574e9288ae`: 209 unit PASS; app **ON 9 → OFF 5 expected failures + 1 healthy control → ON 27 PASS**, одинаковые 4 886 файлов bundle; build/signing/lint/CI PASS. Manifest: `/private/tmp/cpm-p5-pr-comments-20261019/validation.json`. Эти тесты не убивают процесс. History-based window restoration отдельно не проверялась; last-window close → new window проверен. + ## Архив кратких обновлений — 16–19 октября > **Актуально — 19 октября 2026, error-6/P4 finding закрыт в опубликованном PR.** [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379) **`8275bcce36`**, база #7376 **`39fe56af4c`**, содержит fix **`fc124938e0`** + 2 штатные регрессии. **201 shared PASS**, strict lint **4 files / 0 violations**. Signed app: **ON 9 PASS → OFF 6 ожидаемых functional FAIL → restored ON 9 PASS**, 0 SKIP, те же бинарники; первый restored attempt **7 PASS / 2 FAIL** (teardown timeout / SIGINT) сохранён, повтор выполнен без изменений и отключения проверок. CI завершён: **43 SUCCESS / 17 SKIPPED**, failures/pending нет. Harness **`6d04496882`** содержит production head и ровно **12 review-only paths**; 38 новых shared regressions относительно базы. Проверенный shipping scope: P1/P2 и независимый P4 detection; late reload остаётся default **OFF**, формы не менялись. Прежние открытые findings ниже — история до fix. diff --git a/work/projects/cpm-web-extension-data-analysis-summary-2026-10-08.md b/work/projects/cpm-web-extension-data-analysis-summary-2026-10-08.md index f744159c..643849d9 100755 --- a/work/projects/cpm-web-extension-data-analysis-summary-2026-10-08.md +++ b/work/projects/cpm-web-extension-data-analysis-summary-2026-10-08.md @@ -13,7 +13,7 @@ updated: '2026-10-20' > **Current context — checked 20 October 2026.** This analysis retains its October 5 production cut and October 8 conclusions; newer 12–14 October cohorts and truncation evidence have separate denominators in [[cpm-status-2026-10-15]]. They are not joined user transitions or causal shares. > -> The original phase-1 schema below has been superseded by one terminal `web_extension_cpm_episode`, daily+count, on #7376 `5d1cb4abd2`; that PR is closed without merge. Actual fields, removals and observation limits: [[cpm-pr0-episode-telemetry-summary-2026-10-16]]. P1/P2/P4, Network, stable-origin P3 and shared-pinned P5 implementations now have separate PRs; their gates are in the main status. +> The original phase-1 schema below has been superseded by one terminal `web_extension_cpm_episode`, daily+count, on #7376 `5d1cb4abd2`; that PR is closed without merge. Actual fields, removals and observation limits: [[cpm-pr0-episode-telemetry-summary-2026-10-16]]. P1/P2/P4, Network, stable-origin P3 and shared-pinned P5 implementations have separate PRs; their gates are in the main status. **P5 #7473 merged on 20 October into `release/macos/1.213.0` (`9bcce0264e`)**, with a default-ON remote failsafe; rollout and production effect remain unverified. Implementation and validation: [[cpm-status-2026-10-15#P5 — merged 20 октября 2026]]. > > Ready background + no native answer does not prove a lost init message. Page `initResp` may arrive while dashboard delivery fails, even in a detector-stuck episode. Neither timing fields nor `bg_events` provide end-to-end delivery proof. WebKit issue states and OS shipping statements below are the historical source audit, not freshly verified release information. diff --git a/work/projects/cpm-web-extension-public-attribution-2026-10-05.md b/work/projects/cpm-web-extension-public-attribution-2026-10-05.md index 09560fe7..3ff3c8b5 100755 --- a/work/projects/cpm-web-extension-public-attribution-2026-10-05.md +++ b/work/projects/cpm-web-extension-public-attribution-2026-10-05.md @@ -7,7 +7,7 @@ updated: '2026-10-20' > > #7376 заменяет раздельные события terminal episode report (daily+count), four-state `stuck` и `initial;pre-stuck` timeline с `...`; PR закрыт без merge. Старый parser и параметры этой заметки не являются текущим wire contract. См. [[cpm-pr0-episode-telemetry-summary-2026-10-16]]. Совпадающие `bg_events` и ratios независимо deduplicated daily events не доказывают пару одного пользователя или recovery success. > -> Shared-pinned window-close fix теперь в #7473; per-view Network recovery — #7459 с applied pixel, stable-origin P3 — #7493. Их наличие не превращает прежние snapshot cohorts в доказанные causal shares. +> Shared-pinned window-close fix #7473 **merged 20 октября в `release/macos/1.213.0` (`9bcce0264e`)**, default ON + remote failsafe; rollout/effect ещё не подтверждены (подробности — [[cpm-status-2026-10-15#P5 — merged 20 октября 2026]]); per-view Network recovery — #7459 с applied pixel, stable-origin P3 — #7493. Их наличие не превращает прежние snapshot cohorts в доказанные causal shares. ## Историческое дополнение — 15 октября 2026 diff --git a/work/projects/cpm-web-extension-repro-and-fix-2026-10-08.md b/work/projects/cpm-web-extension-repro-and-fix-2026-10-08.md index ecd6e43c..1ce417bc 100755 --- a/work/projects/cpm-web-extension-repro-and-fix-2026-10-08.md +++ b/work/projects/cpm-web-extension-repro-and-fix-2026-10-08.md @@ -13,7 +13,7 @@ updated: '2026-10-20' > **Актуализировано 20 октября 2026.** Этот документ сохраняет последовательность исследования и старый A/B/phase-1 design 8–9 октября. «Ничего не закоммичено», общая ready-handshake branch и line/test counts ниже относятся к своим датам. > -> Текущие implementations: #7379 P1/P2/P4; #7459 Network recovery с applied daily+count; #7493 ограниченный stable-origin P3 policy; #7473 shared-pinned window close. Heads, bases и CI — [[cpm-status-2026-10-15#2. PR и quality gates]], worktrees — [[cpm-web-extension-code-guide-2026-10-09#0. Текущая карта worktree и точек входа]]. +> Текущие implementations: #7379 P1/P2/P4; #7459 Network recovery с applied daily+count; #7493 ограниченный stable-origin P3 policy; #7473 shared-pinned window close **merged 20 октября в `release/macos/1.213.0` (`9bcce0264e`)**; rollout не подтверждён. Heads, bases и CI — [[cpm-status-2026-10-15#2. PR и quality gates]], worktrees — [[cpm-web-extension-code-guide-2026-10-09#0. Текущая карта worktree и точек входа]]. > > #7376 уже переработан в один terminal episode report: four-state `stuck`, двухфазный bounded `bg_events`, daily+count. Он закрыт без merge; macOS counterpart отстаёт. Полный контракт — [[cpm-pr0-episode-telemetry-summary-2026-10-16]]. Final pending-load outcome, page ACK и network attribution episode пока отсутствуют; весь production Others эти данные не объясняют. diff --git a/work/projects/cpm-web-extension-repro-and-fixes-summary-2026-10-08.md b/work/projects/cpm-web-extension-repro-and-fixes-summary-2026-10-08.md index 10879e6c..31965116 100755 --- a/work/projects/cpm-web-extension-repro-and-fixes-summary-2026-10-08.md +++ b/work/projects/cpm-web-extension-repro-and-fixes-summary-2026-10-08.md @@ -13,7 +13,7 @@ updated: '2026-10-20' > **Current context — checked 20 October 2026.** This is the historical October 8 reproduction summary. The “all code local / none in review” and original phase-1 sections below are superseded; historical results are retained. > -> Current implementations: #7379 P1/P2/P4, #7459 Network recovery with an applied daily+count pixel, #7493 restricted stable-origin P3 policy, and #7473 shared-pinned window close. Exact heads, bases, failure annotations and gates: [[cpm-status-2026-10-15#2. PR и quality gates]]; sources: [[cpm-web-extension-code-guide-2026-10-09#0. Текущая карта worktree и точек входа]]. +> Current implementations: #7379 P1/P2/P4, #7459 Network recovery with an applied daily+count pixel, #7493 restricted stable-origin P3 policy, and #7473 shared-pinned window close (**merged 20 October into `release/macos/1.213.0`, commit `9bcce0264e`**; rollout unverified). Exact heads, bases, failure annotations and gates: [[cpm-status-2026-10-15#2. PR и quality gates]]; sources: [[cpm-web-extension-code-guide-2026-10-09#0. Текущая карта worktree и точек входа]]. > > #7376 now contains one terminal episode report with four-value `stuck` and two-phase `bg_events`, daily+count; it is closed without merge. #7378/#7384 are also closed without merge, while #7385 and extension #3727 remain open. Full current telemetry contract: [[cpm-pr0-episode-telemetry-summary-2026-10-16]]. No page ACK or full explanation of production Others is provided.