From ec56849012dc250429b1687ad02e362f422d0044 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Fri, 16 Oct 2026 17:34:36 +0600 Subject: [PATCH] [2026-10-16] eagle: work/projects/cpm-status-2026-10-15.md --- work/projects/cpm-status-2026-10-15.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/work/projects/cpm-status-2026-10-15.md b/work/projects/cpm-status-2026-10-15.md index 0088754f..46241450 100755 --- a/work/projects/cpm-status-2026-10-15.md +++ b/work/projects/cpm-status-2026-10-15.md @@ -736,3 +736,11 @@ Interpretation unchanged: this rerun demonstrates test repeatability in the inst Пользователь разрешил локальные фиксы и проверку регрессионными тестами, **без коммитов**. В последнем запросе написано `p0/1`; в существующей классификации P0 нет, поэтому работа относится к двум обсуждавшимся картинам **P1 (slow idle wake)** и **P2 (wake → error 6)**. Worktree `cpm-e2e-init`, исходный HEAD `46f25175c7c42766cab23ea39f447f075c7bdd24`; прежние dirty-изменения сохранены. Снимок исходников до работы: `/private/tmp/cpm-p1-p2-fixes-20261016/before-changes.tar.gz` и `before-source-hashes.json`. Добавлены app-регрессии `testSlowBackgroundWakeKeepsFirstNavigationHealthy` (первый документ после реального idle + 8 s startup должен получить page initResp и native dashboard без detector failure) и `testFrozenBackgroundRecoversAutomaticallyForNextNavigation` (реальный WebKit error 6 после SIGSTOP, затем SIGCONT; автоматическая замена контекста без второй сломанной навигации, существующие tabs в двух окнах и новая tab здоровы). Начинается прогон **до production-фикса**; результат ещё не получен. SIGSTOP/JS delay остаются принудительными условиями, не доказательством естественной iOS-причины. Старые 20 зелёных characterization methods не считаются проверкой этих новых исправлений. + +### Первый красный app-прогон и реализация кандидатов + +`/private/tmp/cpm-p1-p2-fixes-20261016/red.xcresult`: обе новые проверки красные на исходном production-коде. **P1 действительно дал detector timeout и отсутствие page/native ответа в момент проверки.** Дополнительно teardown попал в DEBUG deallocation deadline, поскольку тест завершался до позднего ответа; добавлено ожидание его завершения после функционального assertion. **P2 пока не считается чистым red-доказательством recovery:** тест ждал error 6, пока процесс был SIGSTOP; в этом запуске WebKit сообщил error 6 лишь после SIGCONT из defer. Исправлен порядок: держать процесс 32 s, отправить SIGCONT, наблюдать реальное error-notification (сохранённое до возможного unload), затем требовать автоматическую замену контекста. Исторический первый красный результат не удалён. + +Локально добавлен кандидат P1: перед каждой HTTP(S) main-frame navigation подготовка background через публичный `loadBackgroundContent`, совместная задача для параллельных навигаций одного context; ожидание ограничено прежними 5 s и отменяется независимо от WebKit. При этом прямой `withTimeout { await Task.value }` не годится для неотменяемого callback: task group ждёт завершения дочерней операции. Использован отменяемый AsyncStream, добавлены отдельные unit tests deadline/cancellation. Старый P1 characterization сохранён с `webExtensionStateRestorationGate=false`. + +Кандидат P2: текущий, а не уже заменённый context при настоящем `backgroundContentFailedToLoad` запускает штатный context reload через существующий recovery kill switch. Общий in-progress guard с M4 и 60 s cooldown для load-error recovery; после reload явно запускается background. При известном app_state=background восстановление не выполняется. Приватные process SPI в production-фикс не добавлены; SIGSTOP остаётся только способом воспроизведения. Оба кандидата ещё собираются/проверяются; зелёный результат пока не заявляется. Добавлен disabled-fix режим только новых app-tests для сравнения того же бинарника с явно заданными флагами.