diff --git a/work/projects/cpm-readiness-telemetry-tech-design-2026-10-15.md b/work/projects/cpm-readiness-telemetry-tech-design-2026-10-15.md index 5a54a750..b5cb8fc1 100755 --- a/work/projects/cpm-readiness-telemetry-tech-design-2026-10-15.md +++ b/work/projects/cpm-readiness-telemetry-tech-design-2026-10-15.md @@ -1,3 +1,5 @@ +> **Изолированная ветка фиксов — 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]]. + > **Final local P1/P2 validation — 16 Oct, 12:30 UTC.** Current background-only candidate: 22/22 unique app methods PASS across 2+19+1+1 runs (P2 repeated); both disabled-fix controls fail functionally. P2 restores native dashboard **and page initResp on the same failed document without navigation or context replacement**, with recovered_without_extension_reload / failed_navigation. The full-context-reload prototype was rejected after repeated page-delivery loss. Package: 806 tests, 14 skips, 0 failures; strict lint: 0 violations. No commits, PR mutations or telemetry schema changes. P1's 5 s bound, macOS injected-fault scope, unresolved natural iOS/P3/P5 limits and nonfatal owned-cache SQLite cleanup warning remain explicit in [[cpm-status-2026-10-15]]. Earlier pending/20-method statements are dated history. > **Interpretation clarification — 16 Oct.** The 20 passing app methods do **not** mean all production-data cases except P3 were reproduced. P1/P2 use injected delay/SIGSTOP; scoped message/native/dashboard loss tests are diagnostic fault injections absent from the shipping bundle. P5/P6 and Network tests exercise browser/WebKit lifecycle paths, under instrumented app-test conditions; occurrence of those exact triggers in affected production sessions remains a separate question. Even with no active scoped fault, the extracted extension carries runtime/DOM observation wrappers. Natural listener metadata loss, P5/tab=true, actual iOS lifecycle/device chains and P3 remain unresolved. The original longer app P5 did not pass and was narrowed to one failed navigation; its limit remains explicit. diff --git a/work/projects/cpm-status-2026-10-15.md b/work/projects/cpm-status-2026-10-15.md index bafc3f23..98ed4268 100755 --- a/work/projects/cpm-status-2026-10-15.md +++ b/work/projects/cpm-status-2026-10-15.md @@ -6,6 +6,8 @@ tags: - cpm - status --- +> **Отдельная ветка 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 не изменён; подробности и артефакты — в конце документа. + # CPM Web Extension: единый статус, обновление 16 октября 2026 @@ -844,3 +846,32 @@ P2 first pass **85.234 s**, повтор **84.776 s**. Фактический re `enabled.xcresult`: 1 PASS / 1 FAIL. P1 PASS (49.389 с). P2 функциональные assertions прошли: реальная error 6, first-failure snapshot, восстановление native dashboard и page initResp исходного документа, `web_extension_cpm_episode(outcome=failed_measurement_response,reload_state=none)`, healthy existing tab/new tab/new window. Итоговый P2 FAIL (84.990 с) вызван штатным `TestRunHelper.swift:453` deallocation guard: оставшиеся AppKit window-chrome views. Это не зелёный app-прогон и не считается PASS. Для исправления fixture добавлены локальные autoreleasepool вокруг проксируемого `collectDiagnostics` и синхронного unload/configuration teardown; deallocation guard не отключён, исключения не добавлены. `build-cleanup.log`: TEST BUILD SUCCEEDED. Повтор обоих app-тестов выполняется в `enabled-cleanup.xcresult`; результат cleanup ещё проверяется. Исходный scratch сверён с сохранёнными hash предыдущего 22/22 прогона: ни один из его файлов не изменён. + +### Повтор app-прогона: оба положительных сценария PASS + +`enabled-cleanup.xcresult`: **2/2 PASS, 0 skips, 0 failures**, exit 0. P2 84.950 с; P1 49.376 с. Штатные deallocation checks включены и прошли после локальных autoreleasepool в fixture. Production-код с момента успешных 165 unit-тестов не менялся. P2 evidence содержит actualBackgroundLoadError `[6]`, failed first probe, healthy existing/new-window/new-tab probes, terminal `failed_measurement_response` / `reload_state=none`; отдельные assertions проверяют доставку page initResp тому же исходному документу до следующей навигации и тот же context object. P1 evidence: healthy baseline и первый document после idle wake, no failures/episodes. Strict verification финальных app debug dylib и загружаемого XCTest bundle также PASS. + +SwiftPM автоматически обновил только package-local content-scope-scripts pin 17.27→17.29 (текущий base `BrowserServicesKit/Package.swift` уже требует exact 17.29 и workspace lock уже имеет 17.29). Этот побочный diff сохранён как `swiftpm-generated-pins.diff` и отменён только в новом worktree; зависимостей в итоговом изменении нет. Baseline ZIP и все исходники финальной сборки сверены по `cleanup-source-hashes.json`: drift отсутствует. + +Отрицательный контроль на тех же бинарниках выполняется в `disabled.xcresult`, с единственной дополнительной test-env переменной `CPM_APP_INTEGRATION_DISABLE_P1_P2_FIXES=1`. Финальный итог контроля будет записан отдельно. + +### Финальный итог отдельной ветки P1/P2 — 16 октября 2026, 13:33 UTC + +**Готово без коммитов:** `/Users/admin/DuckDuckGo/apple-browsers.git/alex/cpm-fix-p1-p2`, branch `alex/cpm-fix-p1-p2`, HEAD/base `01d4a0ec22b4702ca9f9ea37757e060772ec7fa9` из `alex/cpm-messaging-readiness-telemetry`. Шесть новых методов: **2 app + 4 lifecycle unit**, не 22; остальные 20 исследовательских app-кейсов оставлены в исходном worktree. + +| Проверка этой ветки | Результат | Артефакт | +|---|---|---| +| Signed app: P2 same-document recovery | PASS, 84.950 с | `enabled-cleanup.xcresult` | +| Signed app: P1 first document after slow wake | PASS, 49.376 с | `enabled-cleanup.xcresult` | +| Lifecycle (включая 4 новых и существующие navigation-gate проверки) | 31 PASS, 0 skips | `unit.log` | +| Существующие manager / background-load / health-monitor tests | 134 PASS, 0 skips | `unit-related.log` | +| Те же бинарники, P2 recovery flag OFF | Ожидаемый functional FAIL, 104.468 с: timeout same-document recovery после реальной error 6 | `disabled.xcresult` | +| Те же бинарники, P1 gate flag OFF | Ожидаемый functional FAIL, 49.933 с: нет своевременных native dashboard/page initResp, есть first failure | `disabled.xcresult` | +| Strict SwiftLint | 14 Swift-файлов, 0 violations | `lint-final.log` | +| Project registration | plutil PASS; 5 файлов по одному разу в каждом из двух Integration Tests targets | `project.pbxproj` | + +Итог положительного app-прогона **2/2 PASS**, unit **165/165 PASS**. Отрицательные контроли намеренно обычные красные XCTest runs, `expectedFailures=0`: это проверка чувствительности функциональных assertions, а не инфраструктурное падение. Deallocation checks в финальном положительном прогоне прошли; первая ошибка cleanup сохранена выше как история. Проверки выполнены на текущей базовой episode-телеметрии, без переноса старых pixel cases или более поздних baseline/init-progress слоёв. + +Все артефакты: `/private/tmp/cpm-p1-p2-clean-20261016/`; машинная сводка `validation-summary.json`, source hashes `cleanup-source-hashes.json`, JSON evidence в `enabled-cleanup-evidence/` и `disabled-evidence/`. Все 18 зафиксированных файлов (включая unchanged ZIP) неизменны во время финальных прогонов. Исходный scratch также сверён с hash прежнего 22/22 прогона: изменений нет. HEAD не сдвинут, commitsCreated=0, generated package pin diff убран из новой ветки. + +Границы доказательства сохранены: P1 проверяет imposed 8 s worker start при gate cap 5 s; P2 — реальную error 6 на macOS с одним начальным window/tab и остановкой только своего PID. Естественный триггер в затронутых production-сессиях и поведение iOS suspension/resume этим не доказаны; отдельный resume recovery не добавлен. P3/P5 и другие research-сценарии не включены в чистую ветку и их прежние ограничения не сняты. 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 54fe10ea..ea6964a1 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 @@ -243,3 +243,17 @@ Worktree `cpm-e2e-init`, HEAD всё ещё `46f25175c7c42766cab23ea39f447f075c7 **Финальная сверка P1/P2, 16 октября 12:30 UTC:** работа завершена без commits. `validation-summary.json`: **22/22 уникальных app methods PASS**, positive groups 2+19+1+1 (P2 повторён), 0 failures/skips/expected failures; оба disabled-fix controls functional FAIL. `unit-package-background-retry.log`: 806 / 14 skipped / 0 failures; strict lint 6 файлов — 0 violations. Source hashes после сборки не менялись, прежние dirty files/ZIP сохранены. Окончательный P2 — background-only retry и same-document native+page recovery, **не context replacement**. Предыдущая full-reset реализация отвергнута после повторной потери page initResp. Current patch — `/private/tmp/cpm-p1-p2-fixes-20261016/point-fixes.diff`; P5 ожидает дополнительный view от P1, P3 остаётся отрицательным на 20,000 resources. Cache assertions прошли, но teardown снова имеет известный SQLite vnode warning для owned UUID. Подробная проверенная матрица/ограничения и весь red-history — [[cpm-status-2026-10-15]]. + + +## Отдельный worktree P1/P2 — 16 октября 2026 + +`/Users/admin/DuckDuckGo/apple-browsers.git/alex/cpm-fix-p1-p2`, branch `alex/cpm-fix-p1-p2`, от `alex/cpm-messaging-readiness-telemetry` (`01d4a0ec22`), без коммитов. Отличается от полного scratch research-набора: + +- `WebExtensionLifecycleCoordinator.initialLoadWaiter`: после launch открывает ограниченное 5 s ожидание background wake; cancellation-safe AsyncStream, существующий gate flag. +- `WebExtensionManager.prepareEmbeddedBackgroundForNavigation` / `loadEmbeddedExtensionBackgroundContent`: один startup job на конкретный context object, public WK callback, release pending callers при error/reload. +- Observer `WKWebExtensionContext.errorsDidUpdateNotification` / `recoverEmbeddedBackgroundLoadFailure`: error 6 только своего embedded context, существующий recovery flag, current background guard, throttle 60 s; повтор background load без context replacement. M4 reload остаётся fallback. +- Recorder `isApplicationInBackground`: читает уже существующий appSession lifecycle provider, не добавляет telemetry dimension. +- `macOS/IntegrationTests/CPM/`: пять Swift-файлов, ровно два app-теста `CPMBackgroundRecoveryIntegrationTests`, сокращённая инфраструктура; схема `CPM Integration Tests`. Реальные app windows/tabs/native handlers/WebKit, неизменный bundled ZIP, extracted startup-delay и page initResp observation, SIGSTOP только своего background PID. Scoped drop/cache/Network/P3/P5 сценарии остались в research worktree. +- Четыре новых метода `WebExtensionLifecycleCoordinatorTests`: wake после launch, bounded non-cancellable callback, cancellation, disabled flag. Всего 6 новых test methods; 22 — весь прежний app-набор. + +Текущая база уже перешла на episode contract. Test-only diagnostics proxy фиксирует реальный first-failure вызов, не синтезируя monitor events. P2 требует terminal `failed_measurement_response` / `reload_state=none` плюс page initResp исходного документа до другой навигации и ту же context identity. Signed app 2/2 PASS; unit 31+134=165 PASS; strict lint 14 files / 0 violations. Оба disabled-flag контроля на той же сборке функционально FAIL. Test autorelease pools исправили deallocation guard без отключения проверок. Source hashes и исходный scratch неизменны; schemas/ZIP/dependencies в diff не менялись. Артефакты и полная история: `/private/tmp/cpm-p1-p2-clean-20261016/validation-summary.json`, [[cpm-status-2026-10-15]]. Границы P1 cap / macOS injection / неустановленного natural iOS trigger сохраняются.