[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 19:45:16 +06:00
1 parent ca9e241603
commit 0fd495b288
3 files changed
+63 -6

No files matched your search

@@ -9,7 +9,7 @@ updated: '2026-10-20'
---
# CPM Web Extension — карта кода по worktree и строкам
> **#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.
> **#7379 — независимый P2 flag, 20 октября 2026:** production `55a42802a6`, harness `a6e6835a5f`; новый `webExtensions.cpmBackgroundLoadRecovery` **default ON на iOS/macOS** отделяет same-context error-6 retry от `cpmMessagingHangRecovery` (full-context restart). **271 selected unit PASS**, 47 новых shared regression methods; четыре новых independence regressions дают 4 FAIL с прежними связанными проверками и PASS с новым flag. Signed macOS harness build PASS, iOS local build и CI нового head ещё выполняются/в очереди. Late GET reload по-прежнему default OFF; P4 detection независим. Подробности — в последнем разделе про independent P2 flag.
**Проверено 20 октября 2026:** карта ниже отражает существующие worktree и опубликованные heads; старые line numbers и результаты в архивных разделах относятся к своим ревизиям. PR/CI — [[cpm-status-2026-10-15#2. PR и quality gates]]. Пользовательский dirty `Package.resolved` в telemetry worktree сохранён.
@@ -710,3 +710,22 @@ Checkpoint `8a27a69776` включил эти harness fixes. Первая лок
`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.
## #7379: independent P2 background-load recovery flag — 20 октября 2026
По запросу пользователя P2 same-context retry отделён от полной перезагрузки extension context. Production **`55a42802a6bf1210a51642c3ae59504078ad82d3`** опубликован в [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379). Review-only harness **`a6e6835a5f9eac783f6c64ec9467deb9302535b2`** содержит этот head и по-прежнему не предназначен для main.
- Новый remote subfeature — **`webExtensions.cpmBackgroundLoadRecovery`**, `Config(defaultValue: .enabled)` на **обеих платформах**, macOS category `.webExtensions`, local override разрешён стандартным default. Общий `WebExtensionsSubfeature` и обе production factories подключены к отдельному `isCPMBackgroundLoadRecoveryEnabled` closure.
- Новый flag проверяется при решении о retry и повторно перед deferred execution. Он управляет только retry фонового контента после error 6 в том же context; прежние rate limit, foreground checks и защита от конкурентного restart сохранены.
- `webExtensions.cpmMessagingHangRecovery` управляет full-context restart после подтверждённого messaging hang. Retry работает при restart OFF; restart работает при retry OFF.
- `stateRestorationGate`, late GET recovery default OFF и независимый P4 detection не менялись. Этот проход не исправляет известный повторный error 6 на P2 retry в macOS 27 и не объявляет полный app ON/OFF/ON зелёным.
- Remote override добавляется в **`duckduckgo/privacy-configuration`** под subfeature `cpmBackgroundLoadRecovery` родителя `webExtensions`. Пока subfeature отсутствует в remote config, применяется новый enabled default; если remote config явно задаёт состояние, он имеет приоритет. Generated embedded config здесь не редактировался; remote rollout не выполнялся. Для traceability использована существующая [задача самого P1/P2 fix](https://app.asana.com/0/0/1219531810004072).
**Регрессии:** обновлён existing runtime kill-switch test; добавлены 4 метода: actual background retry при hang recovery OFF, confirmed-hang restart при retry OFF, veto queued retry после runtime disable, и error-6 notification при retry OFF / restart ON. **271 selected CPM/lifecycle/manager PASS / 0 FAIL**; в production PR теперь **47** новых shared test methods относительно базы. Изолированный контроль с прежними `isCPMMessagingHangRecoveryEnabled()` в обоих retry guards дал **4 failed methods / 10 assertions**; исходники production для контроля не менялись.
**Платформы и CI:** strict production SwiftLint **7 files / 0 violations**, fixture lint **2 / 0**; signed macOS app + integration test build **PASS**, Apple Development / Team `HKE973VLUW`. Local iOS app build ещё выполняется. CI нового `55a42802a6` ещё выполняется/в очереди, без failures при последней проверке; прежние **43 SUCCESS / 17 SKIPPED** относятся к `9effd97877`, а не к новому flag head.
**Harness:** P2 метод переключает `.cpmBackgroundLoadRecovery`; `.cpmMessagingHangRecovery` остаётся false, так что P2 positive теперь отдельно проверяет retry без full restart. Negative scheme отключает новый P2 flag через прежний `CPM_APP_INTEGRATION_DISABLE_P1_P2_FIXES`; остальные controls и девять app methods сохранены. README (включая mapping P2 flag и 47 production regressions) обновлён; PR description дополнен одной строкой, существующие reviewer steps сохранены. Новый полный app ON/OFF/ON не запускался.
Артефакты: **`/private/tmp/cpm-pr7379-independent-retry-flag-20261020/`** — normal/red-control test logs, lint, signed harness build/signature, iOS build и CI watch, PR description before/after. Существовавшие до работы локальные Package.resolved изменения не включены в commits; production dependency diff SHA256 по-прежнему `66123735bfe51a00cb1775b5526cf6b9c0310aee79d23fc0e4e47b1b62cbdcdb`.