From f2d4c4efd0eccc4d3fe7c33d423a56db7dc4b7b5 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Fri, 16 Oct 2026 01:48:32 +0600 Subject: [PATCH] [2026-10-16] eagle: work/projects/cpm-status-2026-10-15.md --- work/projects/cpm-status-2026-10-15.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/work/projects/cpm-status-2026-10-15.md b/work/projects/cpm-status-2026-10-15.md index 71dda48b..c330da1e 100755 --- a/work/projects/cpm-status-2026-10-15.md +++ b/work/projects/cpm-status-2026-10-15.md @@ -19,11 +19,11 @@ tags: - Фикс **B** (падение Network-процесса) проверен локально и красным прогоном на CI. **Основание в данных есть, но неполное:** обогащение в stuck есть, а доказать, что строки это именно мёртвый worker, нельзя (не хватает `network_replaced_since_view`). - Фикс **A** (первая загрузка посреди сессии) реален, но мелкий: около 1% stuck на iOS, на macOS почти не виден, чаще самоизлечивается. -- Три самые крупные группы сбоев фиксами A и B **не закрыты**: пробуждение после idle, error 6 (iOS), «нет background view» на запуске (iOS). Механизмы воспроизведены локально на macOS, но проверенного рычага в приложении нет. +- Три самые крупные production-группы фиксами A и B **не закрыты**: пробуждение после idle, error 6 (iOS), «нет background view» на запуске (iOS). В новых signed app integration tests macOS теперь проверены рычаги P1 (slow idle wake) и P2 (остановка worker → настоящий WebKit error 6 около 30 s). P3 на 20 000 cacheable ресурсов не воспроизведён. Это локальные macOS-механизмы, а не доказательство причин iOS production-групп (§13). - **P5/tab_in_context=false, macOS:** найден browser→WebKit путь — закрываемое окно по-прежнему возвращает общий pinned tab, а WebKit внутри `didCloseWindow` удаляет его регистрацию. На системном WebKit получены точная цепочка, два failure и actual stuck; прямой `didCloseTab` тест не вызывает. Это продолжает ручное наблюдение 10 сентября из [[cpm-web-extension-breakage-findings]], но теперь подтверждены текущий source contract и автоматический сценарий (§11–12). - **P6, macOS:** подтверждён условный путь через реальный `WebExtensionFeatureFlagHandler`: true → false → true главного `webExtensions` создаёт новый manager/controller, существующий WKWebView остаётся со старым controller. Реальность такого переключения в выбранных production-сессиях не доказана; обычное обновление config или только embedded flag не равны этому условию. - **Проверки P5/P6:** все 14 текущих методов имеют pass по последним соответствующим логам; единый финальный прогон всех 14 не выполнялся. Пакет: 478 XCTest, 28 opt-in skipped, 0 failures; strict SwiftLint восьми изменённых Swift-файлов — 0 нарушений. Зелёный characterization-тест подтверждает ожидаемый сбой/контроль, а не исправление CPM. -- **Осталось неизвестным:** естественная утрата runtime listener metadata, P5 при tab_in_context=true, реальный iOS suspend/resume и естественный P6 без доказанного main-flag transition. Полный AppKit/browser flow в новых SPM-тестах не выполнялся: app callbacks/delegates реализованы harness по исходникам; production shared code и системный WebKit выполнялись. +- **Осталось неизвестным:** естественная утрата runtime listener metadata, P5 при tab_in_context=true, реальный iOS suspend/resume и естественный P6 без доказанного main-flag transition. Ограничение прежних SPM-тестов сохранено: их app callbacks/delegates реализованы harness по исходникам. Новый app-hosted suite (§13) выполняет настоящие AppDelegate/WindowsManager/MainWindowController/Tab и macOS native providers; app P5 ограничен одной потерянной навигацией, persistent P5/stuck доказан отдельно SPM. - Телеметрия PR0 пока в виде, вызвавшем вопросы о склейке пикселей. Решение по правкам не принято (раздел 8). #7384/#7385 имеют красный Danger, #7381 — красный Non-Sandbox; текущие heads и ограничения — раздел 2. ## 2. Цепочки PR (все в `duckduckgo/apple-browsers`, задачи Asana в телах PR; не читать) @@ -641,3 +641,10 @@ The earlier longer attempts remain **red** and are not reclassified: this app me Source check: production `WebExtensionLoader.loadWebExtension` throws this error when `storageProvider.resolveInstalledExtension` returns nil, after the context unload. Harness resources used the **globally swizzled** `FileManager.temporaryDirectory/com.duckduckgo.macos.tests`; TestRunHelper initialization and test-bundle completion delete that shared root. The deleting actor for this run was **not identified**, so this is an isolation hazard, not yet a proven cause. Harness extraction is now placed under unswizzled `NSTemporaryDirectory()/cpm-app-UUID`, outside the helper's global cleanup folder; resolution still delegates to the production storage implementation and logs folder/root existence on failure. No browser reload/failure expectation is weakened. A new signed build/retest is required. `signed-large-cache-final.xcresult`: **PASS, 47.232 s** on the preceding final build, owned store `AFFE4DCD-59E5-4DFC-9D2C-6874C2FE498C` removed successfully. P3 remains negative. These cache and P5 passes do not make the red combined run green. + + +### Resource isolation recheck: 18/18 together + +`signed-isolated-regression.xcresult`: **TEST EXECUTE SUCCEEDED**, 18/18 methods passed, 0 failures, 0 skipped, on signed `build-signed-resource-isolation.log`. This repeats the same selection that previously went red, with extension files outside the helper's global cleanup root. There are **zero** `CPM APP STORAGE MISSING` messages. The Network method now completes its real 4-tab fault/reload recovery in **21.692 s**, and the next slow-wake method completes in **49.651 s**, without the earlier INT. Real WebKit load-timeout method passes in **68.303 s**. All ten core scope/diagnostics methods pass in the same invocation. + +This verifies the new isolation under the observed conditions; it does not identify the actor that deleted files in the previous run. The prior 16/18 red result remains part of the record. P5 and cache are being repeated separately against this exact build, and will be included in the final matrix rather than described as a single 20-method invocation.