[2026-10-16] eagle: personal/plans/balda-callee-prism-plan.md personal/projects/balda/execution-broker.md personal/projects/virfield.md 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-16 18:35:20 +06:00
1 parent 0743e59633
commit 2701c19997
6 files changed
+56 -6

No files matched your search

@@ -1,3 +1,5 @@
> **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.
> **Local app validation complete — 16 Oct 2026, 01:48 Bishkek / 15 Oct 19:48 UTC.** Twenty app-hosted methods passed with **0 failures, skips or expected failures** in three invocations of the same signed build: 18 together, P5 separately, persistent cache separately. This validates the requested slow-load, one-navigation/recovery, single-tab, several-tabs/one-window and all-windows diagnostics scenarios. Source-linked app P1/P2/P5/P6 and Network paths are covered; P3 was **not reproduced** with 20,000 cached resources, background SIGKILL self-healed, and app P5 proves one lost navigation plus controls. The earlier red joint run and long P5 attempts remain documented. See [[cpm-status-2026-10-15#Финальный app-hosted итог — 16 октября 2026]] for the full matrix, evidence and limits. No commits, PR changes or telemetry schema changes. PR/CI and production-data statements below retain their original dated provenance.
+39
View File
@@ -9,6 +9,8 @@ tags:
# CPM Web Extension: единый статус, обновление 16 октября 2026
> **Актуальный локальный итог P1/P2 — 16 октября, 12:30 UTC / 18:30 Бишкек.** В `cpm-e2e-init` добавлены точечные production-кандидаты и две app-регрессии: **22/22 текущих app methods PASS**, 0 failed/skipped/expected failures в positive runs; P2 same-document повторён дважды. С выключенными фиксами обе новые регрессии красные по функциональным причинам. Пакет: 806 tests, 14 skipped, 0 failures; strict SwiftLint — 0 нарушений. **P2 в окончательном варианте повторяет только background load и сохраняет context; full-context prototype отвергнут как нестабильный.** Подробный итог и ограничения — раздел «Окончательный итог точечных P1/P2-кандидатов». Это macOS с управляемыми fault conditions, не доказательство natural iOS production cause. Коммитов/PR изменений нет; прежние разделы и красные прогоны сохранены.
Внутренний документ. **Цифры из ClickHouse, в публичные PR, комментарии и issues не переносить** (репозитории `duckduckgo/apple-browsers` и `duckduckgo/duckduckgo-privacy-extension` публичные). Заменяет заметку `cpm-telemetry-data-requirements-2026-10-15` (теперь ссылка сюда). Исторические срезы с собственными датами и знаменателями: [[cpm-web-extension-public-attribution-2026-10-05]], [[cpm-web-extension-data-analysis-summary-2026-10-08]], [[cpm-web-extension-repro-and-fix-2026-10-08]]. Актуальная карта worktree и точек входа добавлена в [[cpm-web-extension-code-guide-2026-10-09]]; её прежние разделы сохранены как карта на 9 октября.
**Дополнение 16 октября: app-hosted integration tests.** Добавлены 20 методов в `cpm-e2e-init`, схема `CPM Integration Tests`, штатная Apple Development signing, без commits. Финальный тестовый результат — **20/20 PASS в группах 18+1+1**, 0 failed/skipped/expected failures. **Это не «все production-кейсы кроме P3 воспроизведены»: часть методов использует явные fault injections, а все app methods — тестовое окружение и инструментированный bundle.** Связь с production-причинами доказана не для всех групп. Все результаты, включая красные совместные прогоны, отрицательный P3 и ограничение app P5, находятся в §13 и [[#Финальный app-hosted итог — 16 октября 2026]]. Финальную сводку §13 считать текущей; ранние «пока нет результатов» — сохранённая хронология. PR/CI и ClickHouse в рамках app-тестов заново не запрашивались.
@@ -782,3 +784,40 @@ P2 реализация уточнена: manager наблюдает публи
`background-retry-points.xcresult`: **2/2 PASS**, 0 failed/skipped/expected failures. **P1 49.734 s**, **P2 85.234 s**. Для P2 теперь проверено: реальный error 6 → публичный повторный `loadBackgroundContent` → **исходный failed document получает native dashboard и page initResp до любой следующей навигации**, context object остаётся тем же. Затем существующая tab, новое окно и новая tab здоровы. Доставку не имитировали и не переинициализировали документ из теста.
Фактический pixel в `background-retry-points-evidence/A7C288DA-DCCE-42DC-BC30-6E8D6865526D.json`: `debug_web_extension_cpm_messaging_recovered_without_extension_reload`, `recovery_from=initialization_failed`, `recovery_document=failed_navigation`, `recovery_after=30s_to_2m`. Это **новый кандидат**, прежний once-green full-context prototype не входит в его подтверждение. Пакет: 806 tests / 14 skips / 0 failures (`unit-package-background-retry.log`), strict lint — 0 violations. Идёт общий app-run с повтором P2, затем новые negative controls и P5/cache на этой же сборке. Окончательная source matrix пока не завершена.
## Окончательный итог точечных P1/P2-кандидатов — 16 октября 2026, 12:30 UTC
**Завершено локально, без commits и PR mutations.** Worktree `/Users/admin/DuckDuckGo/apple-browsers.git/cpm-e2e-init`, HEAD `46f25175c7c42766cab23ea39f447f075c7bdd24`. Сводка: `/private/tmp/cpm-p1-p2-fixes-20261016/validation-summary.json`; отдельная delta этой работы — `point-fixes.diff`, предыдущие dirty contents — `before-changes.tar.gz`. Предыдущие tracked/untracked harnesses и dirty embedded ZIP сохранены; ZIP SHA-256 по-прежнему `4254967bb447aa45deb371b26fea1dd93850a8e6a654f8ebecd70fccc3859936`. Проверены отсутствие неожиданных изменений прежних файлов, неизменность final source hashes после сборки, normal Apple Development signing app dylib/XCTest и `git diff --check`.
### Что реализовано
- **P1:** перед каждым HTTP(S) main-frame navigation production coordinator через manager готовит embedded background, включая повторный wake. Shared task привязана к объекту context; навигация ждёт максимум прежние **5 s** и освобождается при cancellation, даже если WebKit не завершает callback. Остальная lifecycle chain не блокируется. Управляет существующий `webExtensionStateRestorationGate`.
- **P2:** настоящий `WKWebExtensionContext.errorsDidUpdateNotification`, own/current/embedded context и domain/code 6 запускают **один повтор `loadBackgroundContent` без смены context/Tab/controller**. Старый pending startup завершается/очищается до retry, cooldown 60 s, существующий recovery kill switch и M4 in-progress guard. При known app_state=background retry не выполняется; отдельный resume handler не добавлен. M4 full reset остаётся fallback для confirmed stuck, и не держит guard бесконечным ожиданием readiness callback.
- **P2 full-context prototype отвергнут:** после once-green результата повтор опять терял page initResp в existing tab при native dashboard=true. Эти красные результаты сохранены, а не объявлены инфраструктурными. Финальный background-only кандидат требует действительного восстановления исходного документа.
- **Harness:** bounded polling реального page initResp вместо sleep 150 ms, без подделки response/monitor events. P5 с включённым P1 ожидает дополнительный view (bucket 3_to_5), но всё ещё требует actual tab_in_context=false, controller match, failed pinned navigation и healthy regular/new-tab controls. Raw P1/P3 и fault-фаза P2 явно отключают P1 gate там, где нужно сохранить исходные условия/таймер.
### Проверенная матрица окончательного исходника
| Run (`.xcresult` в общей папке) | Итог | Что доказывает |
|---|---|---|
| `background-retry-points` | **2/2 PASS**, 0 skips/expected failures | P1 first document после idle+8 s startup здоров; P2 error 6 → native+page ответ на том же failed document до новой navigation и без context replacement |
| `background-retry-regression` | **19/19 PASS**, 0 skips/expected failures | Все 10 core diagnostics/scopes, известные lifecycle/flag/Network/background paths; P2 same-document повторно PASS **84.776 s** |
| `background-retry-pinned` | **1/1 PASS, 75.409 s** | Реальный P5 browser→WebKit tab-registration failure с актуальным bg-view bucket; one failed navigation + healthy controls |
| `background-retry-cache` | **1/1 PASS, 61.906 s** | 20,000 actual cache responses/records; fill **55.918 s**, reload→probe **2.149 s**, `p3NoBackgroundFailure=false` |
| `background-retry-disabled` | **0/2 PASS, 2 FAIL — ожидаемый negative control** | Тот же signed binary, P1 gate/P2 retry выключены только в новых test methods: P1 снова timeout; P2 error 6 есть, same-document recovery отсутствует (timeout), а не просто «context не заменился» |
Итого **22 уникальных app methods PASS**, 0 failed/skipped/expected failures в положительных прогонах. Это **2 + 19 + 1 + 1 = 23 положительных выполнения**, поскольку P2 повторён в двух runs; **не один combined run из 22 methods**. Две deliberate-red проверки не скрыты в этом счёте. Их официальный XCTest expectedFailures=0 — красный результат ожидается самим экспериментом, это не XCTExpectFailure.
P2 first pass **85.234 s**, повтор **84.776 s**. Фактический recovered pixel: `recovered_without_extension_reload`, `recovery_from=initialization_failed`, `recovery_document=failed_navigation`, `recovery_after=30s_to_2m`. Test также проверяет DOM initResp и тот же объект WKWebExtensionContext; новый документ из теста не создаётся до этих assertions. Исходный fault: реальная idle-выгрузка, owned SIGSTOP 45 s, WebKit error 6 около 30 s. SIGCONT/teardown ограничены owned PID.
**Unit/package:** `unit-package-background-retry.log` — **806 XCTest, 14 skipped, 0 failures**. Новые lifecycle unit tests проверяют bounded/cancellable ожидание при callback, игнорирующем cancellation. `lint-background-retry.log` — strict SwiftLint 6 файлов, **0 violations**. Временные resolver-изменения CSS/privacy-dashboard сохранены в artifact diff и исключены из repo diff. Final hashes — `background-retry-source-hashes.json`.
### Практические границы
- P1 проверен при injected 8 s startup. Ожидание 5 s не ускоряет worker и не доказывает устранение всех более долгих P1 delays; 4 s detector threshold не изменялся.
- P2 проверен в **одном исходном окне/tab** с controlled SIGSTOP. Новый window/tab и existing-tab subsequent navigation здоровы; вариант с двумя baseline окнами **не воспроизвёл error 6** и остался отрицательным экспериментом. Natural iOS suspend/resume, deferred foreground recovery и причины основных iOS production rows не доказаны. Старый standalone P2 уже мог сам восстановиться на следующем wake; текущая регрессия строже — восстановление того же документа до следующего wake/navigation.
- Все app methods работают в test environment с instrumented extracted bundle. Это реальные AppDelegate/Tab/window/provider/monitor/WebKit пути, но не unchanged shipping environment и не исчерпывающее causal attribution production cohorts.
- P3 по-прежнему **не воспроизведён**; app P5 всё ещё ограничен одной потерянной navigation, прежний long app P5 red сохранён. Отдельные SPM P5/P6 эксперименты и исторические цифры не подменяются новой app-матрицей.
- Cache cleanup снова вывел **nonfatal libsqlite3 `vnode unlinked while in use`** для только тестового UUID store `3ac0b3e6-8945-43dc-aad4-864b08bcc469` (EnhancedSecuritySites.db/-wal/-shm). XCTest assertions и публичное UUID removal завершились; целостность этой удаляемой SQLite базы этим не подтверждается. Warning не исправлялся и не скрыт.
- CI/PR/ClickHouse в рамках финальной локальной проверки не обновлялись; численные production-срезы выше сохраняют свои даты. #7379 и остальные PR не менялись, никаких commits/push не было.
@@ -240,3 +240,6 @@ Worktree `cpm-e2e-init`, HEAD всё ещё `46f25175c7c42766cab23ea39f447f075c7
- Raw P1 и P3 characterization отключают navigation gate; P5 остаётся с gate включённым и ожидает bucket bg_view_creations=3_to_5: подготовка P1 создаёт дополнительный background перед rejected unknown-tab message. P5 tab-registration loss и healthy controls по-прежнему проверяются.
Артефакты и snapshots: `/private/tmp/cpm-p1-p2-fixes-20261016/`. `before-changes.tar.gz` сохраняет прежние dirty changes; `point-fixes.diff` предназначен для delta этой работы. Начальный background-only result — 2/2 PASS, пакет 806/14 skipped/0 failures. Общий run/negative controls/P5/cache ещё выполняются; окончательный исход — в [[cpm-status-2026-10-15]]. Зелёный случай относится к macOS с imposed timing/process faults; natural iOS cause по-прежнему не доказан.
**Финальная сверка 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]].