[2026-10-16] 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:
1 parent
7ef01c27c3
commit
d9da627a00
3 files changed
+174
-1
No files matched your search
@@ -1,3 +1,5 @@
|
||||
> **Актуальный итог — 16 октября 2026, после force push.** [PR #7379](https://github.com/duckduckgo/apple-browsers/pull/7379) теперь поверх **#7376** (`alex/cpm-messaging-readiness-telemetry`), head **`aec5be9a83`**, ровно **3 коммита / 32 файла**. Старый worktree `cpm-fix-init-loss` удалён; текущая директория `alex/cpm-fix-p1-p2` теперь на ветке `alex/cpm-fix-init-loss`. Checkpoint **`367759cbc1`** и backup старой истории сохранены. Проверка через production feature flags **без создания/переключения коммитов**: signed app **8/8 PASS ON**, **6/6 функциональных FAIL OFF**, unit **179 PASS**, strict lint **27 / 0**, pixel validators обеих платформ PASS. Новый late-reload flag **default disabled**. Описание PR/шаги и local-only `to-be-disabled before merge` annotations обновлены; GitHub CI ещё не объявляется green. Подробная финальная сверка — в конце документа. **Ниже сохранена датированная история: прежние «не закоммичено», старые head/base и over-budget limitation не являются текущим статусом.**
|
||||
|
||||
> **Итог замены #7379 — 16 октября 2026 (Бишкек).** В `alex/cpm-fix-p1-p2` исправлены оба замечания: ожидание конкретного нового context при install/upgrade и background guard независимо от diagnostics flag. Финальный signed app-набор **4/4 PASS**, install/upgrade **10+10 PASS**, targeted unit **170 PASS**, strict lint **16 files / 0 violations**, общий WebExtensions module для iOS Simulator **BUILD SUCCEEDED**. На тех же бинарниках с выключенными flags **4/4 функциональных negative controls FAIL**, без deallocation/infrastructure errors. Коммитов нет, scratch не изменён, ZIP/schema/dependencies не менялись. Сохраняется исходный cap **5 s**: startup fixture 5000 ms с WK overhead даёт callback после cap и может потерять первый ответ; этот режим остаётся воспроизводимым известным пределом. Подробности, история красных прогонов и machine summary — в конце [[cpm-status-2026-10-15]].
|
||||
|
||||
> **Изолированная ветка фиксов — 16 Oct, 13:33 UTC.** `alex/cpm-fix-p1-p2` (`/Users/admin/DuckDuckGo/apple-browsers.git/alex/cpm-fix-p1-p2`) создана от текущего `alex/cpm-messaging-readiness-telemetry` / `01d4a0ec22`. Выделены P1 navigation wake wait (cap 5 s) и P2 same-context background retry по реальной error 6, с существующими gate/recovery flags и ограничением частоты. Только **2 app-регрессии + 4 новых lifecycle unit-теста**; прежние 22 — весь research-набор. Signed app **2/2 PASS**, unit **165 PASS**, strict lint 0. На тех же бинарниках оба disabled-flag контроля функционально FAIL; deallocation guard в финальном positive run PASS после test-only autorelease fix. База уже использует `cpmMessagingEpisode`: P2 outcome `failed_measurement_response`, reload_state `none`; доставка page initResp и неизменность context проверяются отдельно. Добавлен только read-only recorder `isApplicationInBackground` для guard, без изменения telemetry schema/ZIP/dependencies. Более поздние baseline/init-progress PR не перенесены. Нет коммитов, исходный scratch сохранён. Артефакты `/private/tmp/cpm-p1-p2-clean-20261016/validation-summary.json`; история и границы macOS injected-fault доказательства в [[cpm-status-2026-10-15]].
|
||||
@@ -210,3 +212,58 @@ Contract regression default — **4500 ms** worker delay при прежнем *
|
||||
Code entry points: manager background startup callback/typed fix marker; monitor `backgroundReadinessRecovery` и `registerReadinessRecoveryDocument`; macOS PrivacyDashboardTabExtension weak view + real initiating request method; iOS TabViewController main-frame GET tracking; platform factories dedicated provider; PixelFiring adapters + platform JSON5 definitions. Все 8 app methods остаются в существующем CPM file/scheme; SharedPackages files подхватывает SwiftPM без pbxproj изменений.
|
||||
|
||||
Все facts/history/guards/pixel semantics: [[cpm-status-2026-10-15]], `/private/tmp/cpm-late-recovery-20261016/validation-summary.json`. Source/app/test binary hashes стабильны; bundled ZIP равен checkpoint; package pin side effect убран; scratch/#7379 не менялись. Это opt-in bounded GET recovery, не универсальное исправление permanent background failures/unsafe documents. Прежние P3/P5 и natural-production/iOS suspension ограничения не сняты; 22 historical research methods отдельно.
|
||||
|
||||
|
||||
## Перенос в PR #7379 поверх #7376 — 16 октября 2026
|
||||
|
||||
### Git и состав PR
|
||||
|
||||
По запросу до переноса сохранён checkpoint `367759cbc17d717b05e53ab30792c077ff103a8b` в `alex/cpm-fix-p1-p2` (предыдущий checkpoint `dff29dfb1e` также сохранён). Старый чистый worktree `/Users/admin/DuckDuckGo/apple-browsers.git/cpm-fix-init-loss` удалён штатно; локальные ignored settings сохранены в `/private/tmp/cpm-pr7379-port-20261016/retired-worktree-local-settings.tar.gz`. Research worktree `cpm-e2e-init` и его незакоммиченные данные не менялись.
|
||||
|
||||
Рабочая директория остаётся `/Users/admin/DuckDuckGo/apple-browsers.git/alex/cpm-fix-p1-p2`, но её текущая ветка теперь **`alex/cpm-fix-init-loss`**. Финальный HEAD **`aec5be9a834e97984d4cbbee01a207548222427c`**, ровно **3 коммита / 32 изменённых файла** поверх **#7376**, base branch `alex/cpm-messaging-readiness-telemetry`, base SHA `713d67419a776b235b66210b1c594ce39da6fe03`:
|
||||
|
||||
1. `05b499e355` — P1/P2, ожидание нового install/upgrade context и необходимые app/unit tests.
|
||||
2. `c661f805b1` — late GET document recovery, независимый flag, пять fix pixels, регрессии.
|
||||
3. `aec5be9a83` — маркировка local-only fault-injection suite/scheme/README как `to-be-disabled before merge`.
|
||||
|
||||
[PR #7379](https://github.com/duckduckgo/apple-browsers/pull/7379) обновлён разрешённым `force-with-lease` с точным ожидаемым старым head `7ad771e227bbd68348ed7b719684783575dd7c9f`; новый head/base проверены через GitHub. Старый head и промежуточная история сохранены в backup branch `alex/cpm-fix-init-loss-before-force-20261016` (`70869f5c69`). Зависимость от #7378/research SPM harness убрана из diff; episode contract #7376 сохранён. Промежуточный перенос на прежнюю базу с 167 unit tests — историческая попытка, окончательный результат относится к новой базе и 179 tests.
|
||||
|
||||
PR title/description/Testing Steps переписаны под окончательный код. **Коммитить или переключать test-only/fix commits для проверки не требуется.** Удалены старые инструкции и placeholder `GREEN_RUN_URL`; используется одна подписанная сборка с переключением production flags в test fixture.
|
||||
|
||||
### Feature flags
|
||||
|
||||
| Механизм | Remote flag | Default |
|
||||
|---|---|---|
|
||||
| Install/upgrade readiness + P1 navigation wake wait | `webExtensions.stateRestorationGate` | Enabled, существующий |
|
||||
| P2 background-only error-6 retry | `webExtensions.cpmMessagingHangRecovery` | Enabled, существующий |
|
||||
| Late first-document GET reload | `webExtensions.cpmLateBackgroundDocumentRecovery` | **Disabled**, новый независимый |
|
||||
|
||||
Флаги явно задаются fixture; ENV `CPM_APP_INTEGRATION_DISABLE_P1_P2_FIXES=1` и `CPM_APP_INTEGRATION_DISABLE_LATE_RECOVERY=1` выбирают соответствующие negative controls без изменения исходников или binary. В двух over-budget controls отключается late recovery при сохранённом 5 s navigation gate, чтобы изолировать новый механизм. Remote configuration не изменялась.
|
||||
|
||||
|
||||
### Финальная проверка запушенного head `aec5be9a83`
|
||||
|
||||
Новый прогон на базе #7376, macOS **26.7.1**, Xcode **27.1**, нормальная подпись **Apple Development: Alexey Martemyanov (9SAT8X9S84)** / team `HKE973VLUW`. Проверены identity подписи app и strict signatures app debug dylib / XCTest bundle; это не заявление о distribution signing/notarization или полной deep-проверке вложенных продуктов.
|
||||
|
||||
| Проверка | Результат |
|
||||
|---|---|
|
||||
| Все восемь методов dedicated app suite, соответствующие flags ON | **8/8 PASS**, 0 failures/skips/expected failures |
|
||||
| Шесть recovery controls, соответствующие flags OFF, те же бинарники | **0/6 PASS, 6 функциональных FAIL**, 0 skips/expected failures, без teardown/deallocation errors |
|
||||
| Targeted shared suites | **179 PASS**, 0 failures/skips (13 diagnostics + 9 recovery + 78 monitor + 31 lifecycle + 48 manager) |
|
||||
| Strict lint относительно новой PR base | **27 Swift files**, 0 violations |
|
||||
| Pixel schemas/formatting + wide-event consistency/immutability | **macOS и iOS PASS** |
|
||||
| Source/binary integrity | Все **32 source hashes и 2 app/test binary hashes** неизменны; git status чистый |
|
||||
|
||||
Положительный набор: P1 slow idle wake, P2 реальная WK error 6 с background-only retry и ответом исходному документу без навигации, install, upgrade при coexistence contexts, late install, late upgrade, edited-document veto и PixelKitMock adapter. При 8000 ms startup в новых late install/upgrade runs первый документ завершился за **5.159 / 5.093 s**, затем ровно один automatic reload (итого два finish), настоящий page `initResp` и native dashboard, URL/context сохранены. Navigation cap остаётся **5 s**. Отдельные десять stress repetitions и более ранние iOS module/flags builds относятся к предыдущему checkpoint/проверке, не объявляются новым stress/iOS runtime run на этом head.
|
||||
|
||||
Красные controls на той же сборке: install/upgrade теряют первый native/page ответ; P1 получает response timeout; P2 достигает реальной error 6, но без flag не получает same-document recovery; оба over-budget случая не получают automatic document recovery. Это намеренные функциональные FAIL, не инфраструктурные crashes и не `XCTExpectFailure`. У controls и positive runs отдельные `.xcresult` / summaries / JSON attachments.
|
||||
|
||||
Local app suite, setup и dedicated scheme/README помечены **`to-be-disabled before merge`**. Они уже требуют `CPM_APP_INTEGRATION=1` и пропускаются обычным CI без opt-in. Сценарии используют GUI-host и 45 s SIGSTOP только собственного background PID; deterministic unit regressions оставлены включёнными. General macOS UI Tests scheme локально не запускалась из-за её profile-clearing preaction.
|
||||
|
||||
Артефакты нового прогона: **`/private/tmp/cpm-pr7379-final-20261016/validation-summary.json`**, рядом `enabled.xcresult`, `disabled.xcresult`, JSON evidence, logs, signature/hash snapshots, `pr-after.json`, финальный PR body и CI snapshots. Bundled extension ZIP неизменён относительно base/checkpoint: SHA256 **`ff98a2b0c07819b2ee5ee6de67d6dd8d28696363c08c9fbc2c32255e9d9efa94`**; package pin side effect убран. Прежние red runs и расследовательские данные сохранены.
|
||||
|
||||
Новый remote CI после push запущен; локальный PASS не выдаётся за завершённый зелёный GitHub CI. Контракт fix pixels остаётся прежним: `background_ready` — callback readiness, `response_received` — dashboard correlation после reload; page ACK проверяет app assertion отдельно. Default-disabled late flag не включался в remote config. Natural production attribution, unreproduced P3, прежние P5 app ограничения и реальный iOS suspension/resume этой работой не закрыты.
|
||||
|
||||
### GitHub checks после push
|
||||
|
||||
Финальная сверка CI для `aec5be9a83`: основные jobs ещё IN_PROGRESS/QUEUED; **Danger — FAILURE**, точная причина — новые pixels требуют label **`privacy review required`**, который создаёт privacy-review task в Asana. Label в этой работе не менялся. Дополнительно Danger предупреждает об отсутствующем Asana Feature Flags project task link для `cpmLateBackgroundDocumentRecovery` в macOS/iOS enum comments и размере PR; это warnings, не причина функциональных app failures. Значения flags и локальные ON/OFF результаты выше подтверждены независимо. Evidence: `/private/tmp/cpm-pr7379-final-20261016/danger-comment.md`, `ci-final.json`.
|
||||
@@ -6,6 +6,8 @@ tags:
|
||||
- cpm
|
||||
- status
|
||||
---
|
||||
> **Актуальный итог — 16 октября 2026, после force push.** [PR #7379](https://github.com/duckduckgo/apple-browsers/pull/7379) теперь поверх **#7376** (`alex/cpm-messaging-readiness-telemetry`), head **`aec5be9a83`**, ровно **3 коммита / 32 файла**. Старый worktree `cpm-fix-init-loss` удалён; текущая директория `alex/cpm-fix-p1-p2` теперь на ветке `alex/cpm-fix-init-loss`. Checkpoint **`367759cbc1`** и backup старой истории сохранены. Проверка через production feature flags **без создания/переключения коммитов**: signed app **8/8 PASS ON**, **6/6 функциональных FAIL OFF**, unit **179 PASS**, strict lint **27 / 0**, pixel validators обеих платформ PASS. Новый late-reload flag **default disabled**. Описание PR/шаги и local-only `to-be-disabled before merge` annotations обновлены; GitHub CI ещё не объявляется green. Подробная финальная сверка — в конце документа. **Ниже сохранена датированная история: прежние «не закоммичено», старые head/base и over-budget limitation не являются текущим статусом.**
|
||||
|
||||
> **Итог замены #7379 — 16 октября 2026 (Бишкек).** В `alex/cpm-fix-p1-p2` исправлены оба замечания: ожидание конкретного нового context при install/upgrade и background guard независимо от diagnostics flag. Финальный signed app-набор **4/4 PASS**, install/upgrade **10+10 PASS**, targeted unit **170 PASS**, strict lint **16 files / 0 violations**, общий WebExtensions module для iOS Simulator **BUILD SUCCEEDED**. На тех же бинарниках с выключенными flags **4/4 функциональных negative controls FAIL**, без deallocation/infrastructure errors. Коммитов нет, scratch не изменён, ZIP/schema/dependencies не менялись. Сохраняется исходный cap **5 s**: startup fixture 5000 ms с WK overhead даёт callback после cap и может потерять первый ответ; этот режим остаётся воспроизводимым известным пределом. Подробности, история красных прогонов и machine summary — в конце [[cpm-status-2026-10-15]].
|
||||
|
||||
> **Отдельная ветка P1/P2 — финал 16 Oct, 13:33 UTC.** Новый worktree `alex/cpm-fix-p1-p2` от текущего `alex/cpm-messaging-readiness-telemetry` (`01d4a0ec22`): только P1/P2-кандидаты и необходимые тесты. Новых методов **2 app + 4 unit**; **22 — полный старый research app-набор**. На новой signed app-сборке **2/2 PASS**, unit **165 PASS**, strict lint 0; те же два app-теста при выключенных flags дают ожидаемые функциональные FAIL. Текущая база использует episode contract: P2 `failed_measurement_response`, `reload_state=none`, плюс реальная доставка initResp в тот же документ без навигации. История исправленного test teardown сохранена. Коммитов нет; scratch не изменён; подробности и артефакты — в конце документа.
|
||||
@@ -52,6 +54,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** | install/upgrade + P1/P2 + opt-in late GET recovery, 5 fix pixels; local app tests | OPEN, head `aec5be9a83`; 3 commits / 32 files; signed app 8/8 PASS, unit 179 PASS; новый CI ещё выполняется; historical row выше относится к прежнему head |
|
||||
| [#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 |
|
||||
|
||||
@@ -1011,3 +1014,58 @@ Negative controls конкретно: P2 — timeout ожидания восст
|
||||
Bundled ZIP равен checkpoint, SHA256 `ff98a2b0c07819b2ee5ee6de67d6dd8d28696363c08c9fbc2c32255e9d9efa94`; задержка/DOM observation добавляются только в extracted test copy. Реальные AppDelegate, tabs/windows, lifecycle coordinator, handler, health monitor и системный WebKit; нет искусственного отвязывания табов, фиктивных ответов или scoped drops. P2 останавливает только свой background PID и гарантированно возобновляет его. Побочный SwiftPM package pin diff сохранён в artifacts и убран; зависимости не изменены. Исходный research scratch не редактировался.
|
||||
|
||||
Старое ограничение «over-budget first response loss не исправлен» снято **для этого opt-in GET recovery в описанных условиях**. Постоянный/неответивший background, unsafe/edited/POST documents и startup за пределами recovery window этим механизмом не исправляются. Натуральные причины всех production cohorts, P3, старые P5-ограничения и реальный iOS suspension/resume этой новой проверкой не установлены и не закрыты.
|
||||
|
||||
|
||||
## Перенос в PR #7379 поверх #7376 — 16 октября 2026
|
||||
|
||||
### Git и состав PR
|
||||
|
||||
По запросу до переноса сохранён checkpoint `367759cbc17d717b05e53ab30792c077ff103a8b` в `alex/cpm-fix-p1-p2` (предыдущий checkpoint `dff29dfb1e` также сохранён). Старый чистый worktree `/Users/admin/DuckDuckGo/apple-browsers.git/cpm-fix-init-loss` удалён штатно; локальные ignored settings сохранены в `/private/tmp/cpm-pr7379-port-20261016/retired-worktree-local-settings.tar.gz`. Research worktree `cpm-e2e-init` и его незакоммиченные данные не менялись.
|
||||
|
||||
Рабочая директория остаётся `/Users/admin/DuckDuckGo/apple-browsers.git/alex/cpm-fix-p1-p2`, но её текущая ветка теперь **`alex/cpm-fix-init-loss`**. Финальный HEAD **`aec5be9a834e97984d4cbbee01a207548222427c`**, ровно **3 коммита / 32 изменённых файла** поверх **#7376**, base branch `alex/cpm-messaging-readiness-telemetry`, base SHA `713d67419a776b235b66210b1c594ce39da6fe03`:
|
||||
|
||||
1. `05b499e355` — P1/P2, ожидание нового install/upgrade context и необходимые app/unit tests.
|
||||
2. `c661f805b1` — late GET document recovery, независимый flag, пять fix pixels, регрессии.
|
||||
3. `aec5be9a83` — маркировка local-only fault-injection suite/scheme/README как `to-be-disabled before merge`.
|
||||
|
||||
[PR #7379](https://github.com/duckduckgo/apple-browsers/pull/7379) обновлён разрешённым `force-with-lease` с точным ожидаемым старым head `7ad771e227bbd68348ed7b719684783575dd7c9f`; новый head/base проверены через GitHub. Старый head и промежуточная история сохранены в backup branch `alex/cpm-fix-init-loss-before-force-20261016` (`70869f5c69`). Зависимость от #7378/research SPM harness убрана из diff; episode contract #7376 сохранён. Промежуточный перенос на прежнюю базу с 167 unit tests — историческая попытка, окончательный результат относится к новой базе и 179 tests.
|
||||
|
||||
PR title/description/Testing Steps переписаны под окончательный код. **Коммитить или переключать test-only/fix commits для проверки не требуется.** Удалены старые инструкции и placeholder `GREEN_RUN_URL`; используется одна подписанная сборка с переключением production flags в test fixture.
|
||||
|
||||
### Feature flags
|
||||
|
||||
| Механизм | Remote flag | Default |
|
||||
|---|---|---|
|
||||
| Install/upgrade readiness + P1 navigation wake wait | `webExtensions.stateRestorationGate` | Enabled, существующий |
|
||||
| P2 background-only error-6 retry | `webExtensions.cpmMessagingHangRecovery` | Enabled, существующий |
|
||||
| Late first-document GET reload | `webExtensions.cpmLateBackgroundDocumentRecovery` | **Disabled**, новый независимый |
|
||||
|
||||
Флаги явно задаются fixture; ENV `CPM_APP_INTEGRATION_DISABLE_P1_P2_FIXES=1` и `CPM_APP_INTEGRATION_DISABLE_LATE_RECOVERY=1` выбирают соответствующие negative controls без изменения исходников или binary. В двух over-budget controls отключается late recovery при сохранённом 5 s navigation gate, чтобы изолировать новый механизм. Remote configuration не изменялась.
|
||||
|
||||
|
||||
### Финальная проверка запушенного head `aec5be9a83`
|
||||
|
||||
Новый прогон на базе #7376, macOS **26.7.1**, Xcode **27.1**, нормальная подпись **Apple Development: Alexey Martemyanov (9SAT8X9S84)** / team `HKE973VLUW`. Проверены identity подписи app и strict signatures app debug dylib / XCTest bundle; это не заявление о distribution signing/notarization или полной deep-проверке вложенных продуктов.
|
||||
|
||||
| Проверка | Результат |
|
||||
|---|---|
|
||||
| Все восемь методов dedicated app suite, соответствующие flags ON | **8/8 PASS**, 0 failures/skips/expected failures |
|
||||
| Шесть recovery controls, соответствующие flags OFF, те же бинарники | **0/6 PASS, 6 функциональных FAIL**, 0 skips/expected failures, без teardown/deallocation errors |
|
||||
| Targeted shared suites | **179 PASS**, 0 failures/skips (13 diagnostics + 9 recovery + 78 monitor + 31 lifecycle + 48 manager) |
|
||||
| Strict lint относительно новой PR base | **27 Swift files**, 0 violations |
|
||||
| Pixel schemas/formatting + wide-event consistency/immutability | **macOS и iOS PASS** |
|
||||
| Source/binary integrity | Все **32 source hashes и 2 app/test binary hashes** неизменны; git status чистый |
|
||||
|
||||
Положительный набор: P1 slow idle wake, P2 реальная WK error 6 с background-only retry и ответом исходному документу без навигации, install, upgrade при coexistence contexts, late install, late upgrade, edited-document veto и PixelKitMock adapter. При 8000 ms startup в новых late install/upgrade runs первый документ завершился за **5.159 / 5.093 s**, затем ровно один automatic reload (итого два finish), настоящий page `initResp` и native dashboard, URL/context сохранены. Navigation cap остаётся **5 s**. Отдельные десять stress repetitions и более ранние iOS module/flags builds относятся к предыдущему checkpoint/проверке, не объявляются новым stress/iOS runtime run на этом head.
|
||||
|
||||
Красные controls на той же сборке: install/upgrade теряют первый native/page ответ; P1 получает response timeout; P2 достигает реальной error 6, но без flag не получает same-document recovery; оба over-budget случая не получают automatic document recovery. Это намеренные функциональные FAIL, не инфраструктурные crashes и не `XCTExpectFailure`. У controls и positive runs отдельные `.xcresult` / summaries / JSON attachments.
|
||||
|
||||
Local app suite, setup и dedicated scheme/README помечены **`to-be-disabled before merge`**. Они уже требуют `CPM_APP_INTEGRATION=1` и пропускаются обычным CI без opt-in. Сценарии используют GUI-host и 45 s SIGSTOP только собственного background PID; deterministic unit regressions оставлены включёнными. General macOS UI Tests scheme локально не запускалась из-за её profile-clearing preaction.
|
||||
|
||||
Артефакты нового прогона: **`/private/tmp/cpm-pr7379-final-20261016/validation-summary.json`**, рядом `enabled.xcresult`, `disabled.xcresult`, JSON evidence, logs, signature/hash snapshots, `pr-after.json`, финальный PR body и CI snapshots. Bundled extension ZIP неизменён относительно base/checkpoint: SHA256 **`ff98a2b0c07819b2ee5ee6de67d6dd8d28696363c08c9fbc2c32255e9d9efa94`**; package pin side effect убран. Прежние red runs и расследовательские данные сохранены.
|
||||
|
||||
Новый remote CI после push запущен; локальный PASS не выдаётся за завершённый зелёный GitHub CI. Контракт fix pixels остаётся прежним: `background_ready` — callback readiness, `response_received` — dashboard correlation после reload; page ACK проверяет app assertion отдельно. Default-disabled late flag не включался в remote config. Natural production attribution, unreproduced P3, прежние P5 app ограничения и реальный iOS suspension/resume этой работой не закрыты.
|
||||
|
||||
### GitHub checks после push
|
||||
|
||||
Финальная сверка CI для `aec5be9a83`: основные jobs ещё IN_PROGRESS/QUEUED; **Danger — FAILURE**, точная причина — новые pixels требуют label **`privacy review required`**, который создаёт privacy-review task в Asana. Label в этой работе не менялся. Дополнительно Danger предупреждает об отсутствующем Asana Feature Flags project task link для `cpmLateBackgroundDocumentRecovery` в macOS/iOS enum comments и размере PR; это warnings, не причина функциональных app failures. Значения flags и локальные ON/OFF результаты выше подтверждены независимо. Evidence: `/private/tmp/cpm-pr7379-final-20261016/danger-comment.md`, `ci-final.json`.
|
||||
@@ -6,6 +6,8 @@ tags:
|
||||
- cpm
|
||||
- webkit
|
||||
---
|
||||
> **Актуальный итог — 16 октября 2026, после force push.** [PR #7379](https://github.com/duckduckgo/apple-browsers/pull/7379) теперь поверх **#7376** (`alex/cpm-messaging-readiness-telemetry`), head **`aec5be9a83`**, ровно **3 коммита / 32 файла**. Старый worktree `cpm-fix-init-loss` удалён; текущая директория `alex/cpm-fix-p1-p2` теперь на ветке `alex/cpm-fix-init-loss`. Checkpoint **`367759cbc1`** и backup старой истории сохранены. Проверка через production feature flags **без создания/переключения коммитов**: signed app **8/8 PASS ON**, **6/6 функциональных FAIL OFF**, unit **179 PASS**, strict lint **27 / 0**, pixel validators обеих платформ PASS. Новый late-reload flag **default disabled**. Описание PR/шаги и local-only `to-be-disabled before merge` annotations обновлены; GitHub CI ещё не объявляется green. Подробная финальная сверка — в конце документа. **Ниже сохранена датированная история: прежние «не закоммичено», старые head/base и over-budget limitation не являются текущим статусом.**
|
||||
|
||||
> **App integration update — 16 октября 2026, 01:48 Бишкек.** В `cpm-e2e-init` добавлены 20 методов настоящего app-hosted CPM suite: финальные **20/20 PASS, 0 failures/skips/expected failures**, группы 18+1+1 на одной signed build. Схема `CPM Integration Tests`; файлы/guards/запуск/ограничения — §5 ниже, полный реестр и история — [[cpm-status-2026-10-15#Финальный app-hosted итог — 16 октября 2026]]. Без commits. Карта остальных worktree/PR ниже сохраняет свою датированную сверку 15 октября.
|
||||
|
||||
|
||||
@@ -21,7 +23,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` | `alex/cpm-fix-init-loss`; `7ad771e227bb` | PR #7379: A, первые init при install/upgrade mid-session; красное/зелёное доказательство отдельно от remaining-failures |
|
||||
| `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`; `aec5be9a83`** | PR #7379 после force-with-lease; база #7376 / `713d67419a`; install/upgrade, P1/P2, late GET recovery + pixels; 8 app methods, 18 новых unit methods; прежний #7378 harness исключён |
|
||||
| `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 |
|
||||
@@ -298,3 +301,58 @@ Worktree `cpm-e2e-init`, HEAD всё ещё `46f25175c7c42766cab23ea39f447f075c7
|
||||
Code entry points: manager background startup callback/typed fix marker; monitor `backgroundReadinessRecovery` и `registerReadinessRecoveryDocument`; macOS PrivacyDashboardTabExtension weak view + real initiating request method; iOS TabViewController main-frame GET tracking; platform factories dedicated provider; PixelFiring adapters + platform JSON5 definitions. Все 8 app methods остаются в существующем CPM file/scheme; SharedPackages files подхватывает SwiftPM без pbxproj изменений.
|
||||
|
||||
Все facts/history/guards/pixel semantics: [[cpm-status-2026-10-15]], `/private/tmp/cpm-late-recovery-20261016/validation-summary.json`. Source/app/test binary hashes стабильны; bundled ZIP равен checkpoint; package pin side effect убран; scratch/#7379 не менялись. Это opt-in bounded GET recovery, не универсальное исправление permanent background failures/unsafe documents. Прежние P3/P5 и natural-production/iOS suspension ограничения не сняты; 22 historical research methods отдельно.
|
||||
|
||||
|
||||
## Перенос в PR #7379 поверх #7376 — 16 октября 2026
|
||||
|
||||
### Git и состав PR
|
||||
|
||||
По запросу до переноса сохранён checkpoint `367759cbc17d717b05e53ab30792c077ff103a8b` в `alex/cpm-fix-p1-p2` (предыдущий checkpoint `dff29dfb1e` также сохранён). Старый чистый worktree `/Users/admin/DuckDuckGo/apple-browsers.git/cpm-fix-init-loss` удалён штатно; локальные ignored settings сохранены в `/private/tmp/cpm-pr7379-port-20261016/retired-worktree-local-settings.tar.gz`. Research worktree `cpm-e2e-init` и его незакоммиченные данные не менялись.
|
||||
|
||||
Рабочая директория остаётся `/Users/admin/DuckDuckGo/apple-browsers.git/alex/cpm-fix-p1-p2`, но её текущая ветка теперь **`alex/cpm-fix-init-loss`**. Финальный HEAD **`aec5be9a834e97984d4cbbee01a207548222427c`**, ровно **3 коммита / 32 изменённых файла** поверх **#7376**, base branch `alex/cpm-messaging-readiness-telemetry`, base SHA `713d67419a776b235b66210b1c594ce39da6fe03`:
|
||||
|
||||
1. `05b499e355` — P1/P2, ожидание нового install/upgrade context и необходимые app/unit tests.
|
||||
2. `c661f805b1` — late GET document recovery, независимый flag, пять fix pixels, регрессии.
|
||||
3. `aec5be9a83` — маркировка local-only fault-injection suite/scheme/README как `to-be-disabled before merge`.
|
||||
|
||||
[PR #7379](https://github.com/duckduckgo/apple-browsers/pull/7379) обновлён разрешённым `force-with-lease` с точным ожидаемым старым head `7ad771e227bbd68348ed7b719684783575dd7c9f`; новый head/base проверены через GitHub. Старый head и промежуточная история сохранены в backup branch `alex/cpm-fix-init-loss-before-force-20261016` (`70869f5c69`). Зависимость от #7378/research SPM harness убрана из diff; episode contract #7376 сохранён. Промежуточный перенос на прежнюю базу с 167 unit tests — историческая попытка, окончательный результат относится к новой базе и 179 tests.
|
||||
|
||||
PR title/description/Testing Steps переписаны под окончательный код. **Коммитить или переключать test-only/fix commits для проверки не требуется.** Удалены старые инструкции и placeholder `GREEN_RUN_URL`; используется одна подписанная сборка с переключением production flags в test fixture.
|
||||
|
||||
### Feature flags
|
||||
|
||||
| Механизм | Remote flag | Default |
|
||||
|---|---|---|
|
||||
| Install/upgrade readiness + P1 navigation wake wait | `webExtensions.stateRestorationGate` | Enabled, существующий |
|
||||
| P2 background-only error-6 retry | `webExtensions.cpmMessagingHangRecovery` | Enabled, существующий |
|
||||
| Late first-document GET reload | `webExtensions.cpmLateBackgroundDocumentRecovery` | **Disabled**, новый независимый |
|
||||
|
||||
Флаги явно задаются fixture; ENV `CPM_APP_INTEGRATION_DISABLE_P1_P2_FIXES=1` и `CPM_APP_INTEGRATION_DISABLE_LATE_RECOVERY=1` выбирают соответствующие negative controls без изменения исходников или binary. В двух over-budget controls отключается late recovery при сохранённом 5 s navigation gate, чтобы изолировать новый механизм. Remote configuration не изменялась.
|
||||
|
||||
|
||||
### Финальная проверка запушенного head `aec5be9a83`
|
||||
|
||||
Новый прогон на базе #7376, macOS **26.7.1**, Xcode **27.1**, нормальная подпись **Apple Development: Alexey Martemyanov (9SAT8X9S84)** / team `HKE973VLUW`. Проверены identity подписи app и strict signatures app debug dylib / XCTest bundle; это не заявление о distribution signing/notarization или полной deep-проверке вложенных продуктов.
|
||||
|
||||
| Проверка | Результат |
|
||||
|---|---|
|
||||
| Все восемь методов dedicated app suite, соответствующие flags ON | **8/8 PASS**, 0 failures/skips/expected failures |
|
||||
| Шесть recovery controls, соответствующие flags OFF, те же бинарники | **0/6 PASS, 6 функциональных FAIL**, 0 skips/expected failures, без teardown/deallocation errors |
|
||||
| Targeted shared suites | **179 PASS**, 0 failures/skips (13 diagnostics + 9 recovery + 78 monitor + 31 lifecycle + 48 manager) |
|
||||
| Strict lint относительно новой PR base | **27 Swift files**, 0 violations |
|
||||
| Pixel schemas/formatting + wide-event consistency/immutability | **macOS и iOS PASS** |
|
||||
| Source/binary integrity | Все **32 source hashes и 2 app/test binary hashes** неизменны; git status чистый |
|
||||
|
||||
Положительный набор: P1 slow idle wake, P2 реальная WK error 6 с background-only retry и ответом исходному документу без навигации, install, upgrade при coexistence contexts, late install, late upgrade, edited-document veto и PixelKitMock adapter. При 8000 ms startup в новых late install/upgrade runs первый документ завершился за **5.159 / 5.093 s**, затем ровно один automatic reload (итого два finish), настоящий page `initResp` и native dashboard, URL/context сохранены. Navigation cap остаётся **5 s**. Отдельные десять stress repetitions и более ранние iOS module/flags builds относятся к предыдущему checkpoint/проверке, не объявляются новым stress/iOS runtime run на этом head.
|
||||
|
||||
Красные controls на той же сборке: install/upgrade теряют первый native/page ответ; P1 получает response timeout; P2 достигает реальной error 6, но без flag не получает same-document recovery; оба over-budget случая не получают automatic document recovery. Это намеренные функциональные FAIL, не инфраструктурные crashes и не `XCTExpectFailure`. У controls и positive runs отдельные `.xcresult` / summaries / JSON attachments.
|
||||
|
||||
Local app suite, setup и dedicated scheme/README помечены **`to-be-disabled before merge`**. Они уже требуют `CPM_APP_INTEGRATION=1` и пропускаются обычным CI без opt-in. Сценарии используют GUI-host и 45 s SIGSTOP только собственного background PID; deterministic unit regressions оставлены включёнными. General macOS UI Tests scheme локально не запускалась из-за её profile-clearing preaction.
|
||||
|
||||
Артефакты нового прогона: **`/private/tmp/cpm-pr7379-final-20261016/validation-summary.json`**, рядом `enabled.xcresult`, `disabled.xcresult`, JSON evidence, logs, signature/hash snapshots, `pr-after.json`, финальный PR body и CI snapshots. Bundled extension ZIP неизменён относительно base/checkpoint: SHA256 **`ff98a2b0c07819b2ee5ee6de67d6dd8d28696363c08c9fbc2c32255e9d9efa94`**; package pin side effect убран. Прежние red runs и расследовательские данные сохранены.
|
||||
|
||||
Новый remote CI после push запущен; локальный PASS не выдаётся за завершённый зелёный GitHub CI. Контракт fix pixels остаётся прежним: `background_ready` — callback readiness, `response_received` — dashboard correlation после reload; page ACK проверяет app assertion отдельно. Default-disabled late flag не включался в remote config. Natural production attribution, unreproduced P3, прежние P5 app ограничения и реальный iOS suspension/resume этой работой не закрыты.
|
||||
|
||||
### GitHub checks после push
|
||||
|
||||
Финальная сверка CI для `aec5be9a83`: основные jobs ещё IN_PROGRESS/QUEUED; **Danger — FAILURE**, точная причина — новые pixels требуют label **`privacy review required`**, который создаёт privacy-review task в Asana. Label в этой работе не менялся. Дополнительно Danger предупреждает об отсутствующем Asana Feature Flags project task link для `cpmLateBackgroundDocumentRecovery` в macOS/iOS enum comments и размере PR; это warnings, не причина функциональных app failures. Значения flags и локальные ON/OFF результаты выше подтверждены независимо. Evidence: `/private/tmp/cpm-pr7379-final-20261016/danger-comment.md`, `ci-final.json`.
|
||||
Reference in new issue
Block a user