[2026-10-16] 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-16 20:26:45 +06:00
1 parent 06d2adc04d
commit e23f74ef2c
3 files changed
+50

No files matched your search

@@ -1,3 +1,5 @@
> **Итог замены #7379 — 16 октября 2026 (Бишкек).** В `alex/cpm-fix-p1-p2` исправлены оба замечания: ожидание конкретного нового context при install/upgrade и background guard независимо от diagnostics flag. Финальный signed app-набор **4/4 PASS**, install/upgrade **10+10 PASS**, targeted unit **170 PASS**, strict lint **16 files / 0 violations**, общий WebExtensions module для iOS Simulator **BUILD SUCCEEDED**. На тех же бинарниках с выключенными flags **4/4 функциональных negative controls FAIL**, без deallocation/infrastructure errors. Коммитов нет, scratch не изменён, ZIP/schema/dependencies не менялись. Сохраняется исходный cap **5 s**: startup fixture 5000 ms с WK overhead даёт callback после cap и может потерять первый ответ; этот режим остаётся воспроизводимым известным пределом. Подробности, история красных прогонов и machine summary — в конце [[cpm-status-2026-10-15]].
> **Изолированная ветка фиксов — 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.
@@ -173,3 +175,12 @@ Current versions of the formerly failed selections passed again: 18+1+1 methods,
The first P2 full-context-reload prototype was rejected: a repeated real error-6 test lost the existing page's initResp despite a successful native dashboard. The current local candidate preserves WKWebExtensionContext and retries the public background-load API after the actual load-error notification. Its app regression requires recovery of the **same failed document without navigation or context replacement**, with both native dashboard and page initResp; the observed pixel is recovered_without_extension_reload / recovery_document=failed_navigation / recovery_after=30s_to_2m. The existing confirmed-hang M4 remains the full-reset fallback.
P1 prepares background on each main-frame web navigation with a real 5 s bound/cancellation; the imposed 8 s startup now yields a healthy first document. This neither accelerates worker execution nor establishes a universal fix for longer delays. P1/P2 point cases initially passed 2/2; the package passed 806 tests with 14 opt-in skips, 0 failures. Full final app matrix, disabled-fix controls and limits remain in [[cpm-status-2026-10-15]] and `/private/tmp/cpm-p1-p2-fixes-20261016/`. No telemetry schema change, commit, PR mutation or iOS production attribution is implied.
## Проверенный контракт замены #7379 — 16 октября 2026
`alex/cpm-fix-p1-p2` объединяет ID-specific install/upgrade wait, P1 idle wake и P2 background retry. Новый context фиксируется при install до удаления старого; навигация захватывает именно этот object. `isApplicationInBackground` теперь отдельный input менеджера, iOS factory читает `UIApplication` напрямую и не зависит от `cpmDiagnosticsRecorder`. Diagnostics getter прежнего кандидата удалён. Retry отвергает superseded context и повторно проверяет flag/background перед WK call.
Contract regression default — **4500 ms** worker delay при прежнем **5 s** cap, строгие native dashboard + page initResp assertions. **4/4 app PASS**, install/upgrade **10/10 + 10/10 PASS**, **170 PASS** unit, lint 16 files / 0 violations; iOS shared module SDK build PASS. На той же сборке gate/recovery OFF дают **4/4 ожидаемых функциональных FAIL**, без teardown errors. Это не новые unique cases: повторяются 2 метода; всего в ветке 4 app + 9 новых unit methods.
Граничная конфигурация **5000 ms** через `CPM_APP_INTEGRATION_INSTALL_DELAY_MS` сохраняет известный failure: реальные WK callbacks 5.150336/5.184716 s приходят после cap, upgrade ранее FAIL 6/10. Этот режим не исправлен, timeout не увеличен, assertions не ослаблены. Реальный iOS app suspension/resume не запускался. Все результаты, включая красную историю: `/private/tmp/cpm-p1-p2-replacement-20261016/validation-summary.json`, [[cpm-status-2026-10-15]]. Source hashes стабильны, ZIP/schema/dependencies и scratch не изменены, коммитов нет.
+24
View File
@@ -6,6 +6,8 @@ tags:
- cpm
- status
---
> **Итог замены #7379 — 16 октября 2026 (Бишкек).** В `alex/cpm-fix-p1-p2` исправлены оба замечания: ожидание конкретного нового context при install/upgrade и background guard независимо от diagnostics flag. Финальный signed app-набор **4/4 PASS**, install/upgrade **10+10 PASS**, targeted unit **170 PASS**, strict lint **16 files / 0 violations**, общий WebExtensions module для iOS Simulator **BUILD SUCCEEDED**. На тех же бинарниках с выключенными flags **4/4 функциональных negative controls FAIL**, без deallocation/infrastructure errors. Коммитов нет, scratch не изменён, ZIP/schema/dependencies не менялись. Сохраняется исходный cap **5 s**: startup fixture 5000 ms с WK overhead даёт callback после cap и может потерять первый ответ; этот режим остаётся воспроизводимым известным пределом. Подробности, история красных прогонов и machine summary — в конце [[cpm-status-2026-10-15]].
> **Отдельная ветка 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 не изменён; подробности и артефакты — в конце документа.
@@ -920,3 +922,25 @@ Targeted unit suites: **170 PASS**, включая 5 новых manager tests (`
- `lint-final.log`: strict lint 16 Swift files, 0 violations. Подписи Apple Development и strict проверка фактически загружаемого XCTest и app debug dylib успешны.
Финальные source hashes записаны в `final-source-hashes.json` перед повторами/общим прогоном и сверены: drift отсутствует, включая README и unchanged ZIP. Побочный SwiftPM pin diff сохранён и удалён из worktree. Начат `disabled-final.xcresult` на **тех же бинарниках**, выключающий gate для P1/install/upgrade и recovery flag для P2. Его результат ещё ожидается. Случай 5000 ms + WK overhead выше остаётся красным известным выходом за бюджет; он не был исправлен и не выдаётся за PASS.
### Завершение замены #7379 — финальный проверенный результат
Оба запрошенных изменения реализованы в прежнем новом worktree `alex/cpm-fix-p1-p2`, base/HEAD `01d4a0ec22b4702ca9f9ea37757e060772ec7fa9`. `trackEmbeddedBackgroundStartup(identifier:)` отслеживает новый context, waiter захватывает его; fallback учитывает порядок installation store, а retry игнорирует superseded context. iOS factory передаёт самостоятельный `isApplicationInBackground` provider из `UIApplication`; `cpmDiagnosticsRecorder=OFF` больше не выключает safety guard. Provider и recovery flag повторно проверяются перед queued retry. Прежний diagnostics getter удалён; telemetry schema не менялась.
Два сценария #7379 перенесены в app-hosted suite с исходными method names; worker delay default 4500 ms. Требования не ослаблены: первый документ должен получить native dashboard + page initResp без first failure. Upgrade показывает сосуществование old/new context sets `[0,1,2,1]` и новый identifier. Это семантическая замена production-фикса #7379 с тем же 5 s bound, плюс P1 idle wake и P2 same-context retry. Сам PR #7379 не менялся и не закрывался.
| Финальная проверка | Результат |
|---|---|
| Общий signed app run: install, upgrade, P1, P2 | **4/4 PASS**, 0 skips/failures (`enabled-final.xcresult`) |
| Повторы install/upgrade на той же сборке | **20/20 executions PASS**: install 10/10, upgrade 10/10; 2 уникальных метода (`install-upgrade-final-repeat.xcresult`) |
| Targeted unit suites | **170 PASS**, 0 skips/failures: lifecycle 31, manager 48, остальные связанные 91 |
| Общий WebExtensions для iOS Simulator | **BUILD SUCCEEDED** (`ios-module-final-visible.log`); это не полный iOS app/runtime run |
| Strict lint | **16 Swift files, 0 violations** |
| Gate/recovery OFF на тех же бинарниках | **0 PASS / 4 functional FAIL**, expectedFailures=0, exit 65 (`disabled-final.xcresult`) |
| Подписи / project structure | Apple Development + strict app debug dylib / загружаемый XCTest PASS; plutil PASS |
Negative controls конкретно: P2 — timeout ожидания восстановления того же документа после настоящей error 6; install/upgrade и P1 — отсутствующие своевременные native dashboard/page initResp и настоящий first-failure snapshot. Ошибок `TestRunHelper` deallocation в финальных positive/negative runs нет. Это намеренно красный контроль чувствительности, а не четыре нерешённых инфраструктурных падения.
**Сохранённое ограничение:** исходный gate cap не увеличен, 5 s. Искусственная 5000 ms startup-пауза вместе с overhead WebKit даёт callbacks 5.150336/5.184716 s уже после release; upgrade в этом режиме ранее потерял первый ответ в 6/10. Этот конкретный over-budget режим **не исправлен** и не считается PASS. Он воспроизводится через `CPM_APP_INTEGRATION_INSTALL_DELAY_MS=5000`; строгие contract regression cases используют 4500 ms, а bounded/cancellation unit cases отдельно требуют release без callback. Натуральный production trigger и реальный iOS suspension/resume не доказаны этими macOS тестами.
Артефакты: `/private/tmp/cpm-p1-p2-replacement-20261016/validation-summary.json`, `final-source-hashes.json`, `enabled-final-evidence/`, `disabled-final-evidence/`, `install-upgrade-final-repeat-evidence/`, все первоначальные failing/timing runs. Всего в ветке **4 новых app + 9 новых unit methods**; прежние 22 research app-кейса остаются отдельно. Хэши финальных исходников не изменились во время всех финальных прогонов; bundled ZIP равен HEAD; исходный scratch сверён с прежними hash и не изменён. Побочный generated package pin diff сохранён/убран. HEAD не сдвинут, commitsCreated=0.
@@ -257,3 +257,18 @@ Worktree `cpm-e2e-init`, HEAD всё ещё `46f25175c7c42766cab23ea39f447f075c7
- Четыре новых метода `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 сохраняются.
## Объединение #7379 с P1/P2 и независимый lifecycle guard — 16 октября 2026
Текущий `alex/cpm-fix-p1-p2` семантически заменяет #7379 в пределах прежнего navigation timeout 5 s:
- `WebExtensionManager+EmbeddedExtensions.installEmbeddedExtension` вызывает `trackEmbeddedBackgroundStartup(identifier:)` именно для вновь установленного embedded context.
- Manager сохраняет preferred context, а `prepareEmbeddedBackgroundForNavigation` захватывает конкретный context object. Fallback учитывает append-порядок installation store и не выбирает произвольный context при неизвестном порядке нескольких версий. `loadEmbeddedExtensionBackgroundContent(in:)` coalesces job на тот же object.
- `recoverEmbeddedBackgroundLoadFailure` игнорирует superseded context. Состояние background приходит через самостоятельный `isApplicationInBackground` provider; iOS factory читает `UIApplication.shared.applicationState` независимо от diagnostics flag. Старый diagnostics getter удалён. Перед queued retry повторно проверяются flag/background.
- Два install/upgrade-теста #7379 адаптированы в `CPMBackgroundRecoveryIntegrationTests` рядом с P1/P2. Реальный upgrade даёт context sets `[0,1,2,1]`; assertions требуют native dashboard + page initResp первого документа, а не просто загрузку context. Default delay 4500 ms.
- Пять новых manager unit tests проверяют coexistence/newest selection, fallback после удаления replacement, diagnostics=nil + background→foreground, runtime kill switch и отказ retry старого context. Вместе с четырьмя lifecycle tests в ветке 9 новых unit methods.
Финальная валидация: общий signed app **4/4 PASS**; install/upgrade **10/10 + 10/10 PASS** на той же сборке; targeted unit **170 PASS**, strict lint 16 files / 0 violations; WebExtensions generic iOS Simulator module **BUILD SUCCEEDED**. Все 4 disabled-flag controls функционально FAIL без teardown errors. Коммитов и изменений scratch/ZIP/schema/dependencies нет.
Локальные `[CPM Background]` logs показывают медленный WK callback (>=1 s) и release gate по deadline. Они подтвердили предел: fixture 5000 ms даёт фактическую готовность после 5 s cap и может потерять первый upgrade document (6/10 ранее). Этот over-budget режим не исправлен и сохраняется через `CPM_APP_INTEGRATION_INSTALL_DELAY_MS=5000`; здоровые contract regression cases проверяют 4500 ms. Это не доказательство всех natural production causes и не реальный iOS suspension/resume run. Артефакты и история: `/private/tmp/cpm-p1-p2-replacement-20261016/validation-summary.json`, [[cpm-status-2026-10-15]].