[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 21:03:05 +06:00
1 parent e4b1607d24
commit a7f1b3587a
6 files changed
+91 -10

No files matched your search

+3 -3
View File
@@ -1,6 +1,6 @@
# Balda / Execution Broker — план приёмки
Проверено: **2026-10-16**. Приёмка закрыта в согласованном проверенном объёме; Датированные доказательства принятого контура сохранены; текущая сверка обновления и её macOS gate описаны ниже. Точные работающие версии и доказательства: [[personal/projects/balda/execution-broker]]. Запуск двух Balda: [[personal/projects/balda/setup]].
Проверено: **2026-10-16**. Приёмка закрыта в согласованном проверенном объёме. Сверка main/production и публикация Virfield v2.1.1 завершены; датированные доказательства и ограничения сохранены ниже. Точные работающие версии и доказательства: [[personal/projects/balda/execution-broker]]. Запуск двух Balda: [[personal/projects/balda/setup]].
## Контур
@@ -33,13 +33,13 @@ Broker/Prism/gateway и native issuers обновлены до `rc34` из за
В Broker локально и на origin только `main`. Завершённые ветки удалены по явному разрешению владельца после проверки содержимого; отсутствовавшие installer/workspace настройки перенесены до удаления. Git bundle не создавались. Планы и личные журналы убраны из tracked source и перенесены с обратным чтением в [[personal/projects/archive/execution-broker-repo-cleanup-2026-10-16/index|архив 11 документов]].
Опубликованный Virfield `v2.1.0` установлен и выявил два fresh macOS preparation failures, оба leases released. Исправление `launchctl bootstrap` собственного GUI-agent уже в запушенном Virfield `main 2c64888`. Точный неопубликованный кандидат `v2.1.1` прошёл source/package gates и отдельную fresh VM с native GUI/Keychain/SSH; эта VM released. Полный Broker → macOS XCTest на новом комплекте завершился успешно: `run-3b679ccc08ae5aafb94643d60f0410dd`, 1/1 XCTest, настоящий xcresult, все скачанные артефакты сверены, Story closed, cleanup=done/lease released. Установленный MCP2.1.1 и нулевой active pool проверены. GitHub CI Virfield `2c64888` зелёный на macOS/Linux. Публикация готового v2.1.1 пока ожидает подтверждения; его нельзя называть опубликованным релизом.
При установке опубликованного Virfield `v2.1.0` выявлены два fresh macOS preparation failures, оба leases released. Исправление `launchctl bootstrap` собственного GUI-agent уже в запушенном Virfield `main 2c64888`. Точный пакет `v2.1.1` перед публикацией прошёл source/package gates и отдельную fresh VM с native GUI/Keychain/SSH; эта VM released. Полный Broker → macOS XCTest на новом комплекте завершился успешно: `run-3b679ccc08ae5aafb94643d60f0410dd`, 1/1 XCTest, настоящий xcresult, все скачанные артефакты сверены, Story closed, cleanup=done/lease released. Установленный MCP2.1.1 и нулевой active pool проверены. GitHub CI Virfield `2c64888` зелёный на macOS/Linux. После явного подтверждения владельца [v2.1.1 опубликован как stable Latest](https://github.com/mallexxx/virfield/releases/tag/v2.1.1), tag указывает на `2c64888`. Archive/SHA256SUMS скачаны с публичных URLs без авторизации и побайтно совпадают с проверенным пакетом; installed binaries/browser повторно сверены с подписанным stage. Все четыре upstream main и пять production services сверены после публикации.
GitHub Actions Broker main не стартовал из-за account billing/spending limit; это не ошибка workflow. Локальный `make check` прошёл, удалённый CI не объявляется зелёным. Точные версии и результаты — [[personal/projects/balda/execution-broker]] и [[personal/projects/virfield]]. Приватные receipts текущей сверки: `state/main-production-sync-20261016/`.
## Принятый объём и ограничения
2026-10-16 владелец явно согласовал закрытие в проверенном режиме: **«Да, закрыть в проверенном режиме»**. Это изменение границ приёмки. Корневая Story `eb-71b7971ac3fdd03b8ff6b198`, `.6` и `.6.6` закрыты после проверки результатов; все дочерние задачи закрыты. Блокирующих пунктов в согласованном объёме нет. Публикация релиза не выполнялась.
2026-10-16 владелец явно согласовал закрытие в проверенном режиме: **«Да, закрыть в проверенном режиме»**. Это изменение границ приёмки. Корневая Story `eb-71b7971ac3fdd03b8ff6b198`, `.6` и `.6.6` закрыты после проверки результатов; все дочерние задачи закрыты. Блокирующих пунктов в согласованном объёме нет. Публичный релиз Broker не создавался; публикация Virfield v2.1.1 описана выше.
| Область | Принято / ограничение |
| --- | --- |
+4 -3
View File
@@ -15,7 +15,7 @@
| Оба Balda | Чистый upstream `3a58254bb05747fdeecde070b1828e770ed589a4`, image `sha256:ee0567594b8f8422d71b3bb37aa47ef1222b089af6b24e17d50ac9c63a4ef22f`, без локальных патчей; [[personal/projects/balda/setup]] |
| Linux images | Smoke `sha256:2b82611cb0f35b1be006faadcad05eed558e675576cc00ecccaeb9d43cac2f81`; OpenCode/DeepSeek `sha256:526ee8382465e8f5fe3e9c55d78b3b62dff83cc8e1085c8b6f7935d2aba7848c`; Codex `sha256:cdce756babb910ac141ad926b2297d25784532d069ec774a8321a23d4e4ecd92`; dynamic Claude `sha256:a785411160b4384887654c2179cb19d92bf9ff91e1c5f5d60ccccf8ad1c1ba87`. Во всех четырёх фактические Runner/Callee bytes сверены с latest builds |
| macOS bootstrap | Все четыре profiles указывают на новые `*-rc34-13c29ac.tar.gz`; Runner/Callee hashes проверены. Provider runtimes и согласованные workflow policies сохранены |
| Virfield | Опубликованный latest — `v2.1.0`, source `9658646`. После двух fresh-VM preparation failures временно установлен исправленный **кандидат v2.1.1**, source `2c64888`, для native проверки. Прямой native цикл и полный Broker/XCTest завершились успешно; публикация точного пакета ожидает подтверждения владельца. Он пока не опубликован; [[personal/projects/virfield]] |
| Virfield | Опубликованный stable Latest и установленная версия — [v2.1.1](https://github.com/mallexxx/virfield/releases/tag/v2.1.1), source `2c64888`. Точный пакет прошёл direct native VM и полный Broker/XCTest; публичные archive/SHA256SUMS скачаны без авторизации и сверены побайтно; [[personal/projects/virfield]] |
| Release archives Broker | Исторически принятые `rc33` из `ae92c15` сохранены в `dist/`, четыре native targets проверены. Текущий production `rc34/13c29ac` новее; GitHub Release Broker не публиковался |
Broker, gateway и workers имеют согласованные immutable pins. macOS profiles используют `macos27`; роли Codex — pack `b09f2be2`, Claude/OpenCode — собственный `1b8b5ded`. Нельзя подставлять workflow Codex в OpenCode image.
@@ -31,15 +31,16 @@ Broker, gateway и workers имеют согласованные immutable pins.
- Новый macOS run `run-aadbbadcbb508f6473a3574ae700eef3` завершился до bootstrap/workload: `guest_keychain_failed`, затем `cleanup=done`; lease released. Повторная прямая диагностика локализовала `launchctl bootstrap` собственного GUI-agent, exit5. Её private logs сохранены, диагностическая VM released. Исправленный кандидат прошёл отдельную fresh VM и новый полный Broker/XCTest run `run-3b679ccc08ae5aafb94643d60f0410dd`: 1/1 XCTest, настоящий xcresult, все заново скачанные артефакты сверены по SHA256, Story closed, cleanup=done и lease released. Исходный failed run сохранён как отказ; его тестовая Story закрыта с причиной архивирования.
- Virfield `main 2c64888` прошёл GitHub CI на macOS/Linux: race/make check/build, Staticcheck, module verify, Govulncheck и Linux gitleaks. Установленный свежий MCP сообщает 2.1.1: 20 tools/4 resources, authenticated status, девять исходных образов, ноль workers/jobs. Уже запущенные адаптеры других чатов принудительно не перезапускались.
- Финальная проверка пяти production services: точные новые image IDs и binary hashes, health200, ноль Broker runs с незавершённым cleanup; issuer generations568/172/217 сохранены.
- После публикации повторно сверены последние upstream heads Balda/Callee/Broker/Virfield и работающие images/binaries пяти сервисов. Установленные Virfield binaries/browser совпадают с проверенным подписанным stage; опубликован исходный пакет с тем же SHA256. Планы и личные журналы остаются в Obsidian, source checkout чистый.
- GitHub Actions для Broker main не запустил ни одного шага: account billing/spending-limit rejection. Локальные gates прошли; удалённый CI не объявляется зелёным.
Доказательства текущего обновления: `state/main-production-sync-20261016/`: `production-deployment.json`, `prepared-deployment.json`, `all-linux-runtime-provenance.json`, `linux-worker-integration.json`, `live-baldda-mcp.json`, `virfield-candidate-upgrade.json`, `macos-readiness-diagnostic/finding.json`, `macos-candidate-production-verification.json`, `virfield-installed-mcp-2.1.1.json`, `virfield-fix-github-ci.json`, `live-final-health.json`.
Доказательства текущего обновления: `state/main-production-sync-20261016/`: `production-deployment.json`, `prepared-deployment.json`, `all-linux-runtime-provenance.json`, `linux-worker-integration.json`, `live-baldda-mcp.json`, `virfield-candidate-upgrade.json`, `macos-readiness-diagnostic/finding.json`, `macos-candidate-production-verification.json`, `virfield-installed-mcp-2.1.1.json`, `virfield-fix-github-ci.json`, `live-final-health.json`, `virfield-v2.1.1-publication-verification.json`, `post-publication-runtime-verification.json`, `upstream-heads-after-publication.json`.
## Границы приёмки
Предыдущая приёмка закрыта в явном согласованном режиме **«Да, закрыть в проверенном режиме»**. Beads Story `eb-71b7971ac3fdd03b8ff6b198` и все дочерние задачи closed. Производственные Story, отмена, restart, sandbox/write denial, артефакты, controlled provider refusals и protected working-account recovery приняты в своих dated receipts.
Реальный upstream revoke рабочих авторизаций и последующий browser login исключены владельцем и остаются непроверенными. Linux provider-failure checks не доказывают macOS failure lifecycle. Post-upgrade macOS preparation failure и успешный новый XCTest на исправленном кандидате учитываются отдельно выше; исторические результаты не подменяют свежую проверку.
Реальный upstream revoke рабочих авторизаций и последующий browser login исключены владельцем и остаются непроверенными. Linux provider-failure checks не доказывают macOS failure lifecycle. Post-upgrade macOS preparation failure и успешный новый XCTest на пакете опубликованного v2.1.1 учитываются отдельно выше; исторические результаты не подменяют свежую проверку.
План и решение о границах: [[personal/plans/balda-callee-prism-plan]]. Старые подробные результаты: [[personal/projects/archive/broker-before-main-deployment-2026-10-16]]. Удалённые из Git планы/журналы сохранены и сверены здесь: [[personal/projects/archive/execution-broker-repo-cleanup-2026-10-16/index]]. В product repo остаются контракты и инструкции.
+5 -4
View File
@@ -1,12 +1,12 @@
# Virfield
Проверено: **2026-10-16**. Последний опубликованный релиз — [v2.1.0](https://github.com/mallexxx/virfield/releases/tag/v2.1.0), source `9658646da0431c994805c5de2b919e0fb8f1afc1`. Архив и SHA256SUMS проверены обратным скачиванием. Его первоначальная публикация не меняла production; в ходе последующей сверки Broker релиз был установлен штатным system LaunchDaemon с сохранением signing identity, Full Disk Access и всех девяти исходных образов. [[personal/projects/virfield-release-v2.1.0|Протокол первоначальной публикации]].
Проверено: **2026-10-16**. Последний опубликованный stable Latest и установленная версия — [v2.1.1](https://github.com/mallexxx/virfield/releases/tag/v2.1.1), source `2c64888abed617722e79d618dd4911efa0c4b126`. Релиз опубликован после явного подтверждения владельца. Архив macOS ARM64 и SHA256SUMS скачаны с публичных URLs без авторизации; содержимое побайтно совпадает с проверенным установленным пакетом. Предыдущая публикация: [[personal/projects/virfield-release-v2.1.0]].
Текущий local/GitHub `main`: **`2c64888abed617722e79d618dd4911efa0c4b126`**, checkout чистый, локально и на origin только `main`. Изменение исправляет обработку ошибки `launchctl bootstrap` уже зарегистрированного собственного guest Keychain agent: recovery разрешён только после проверки точного launchd job, затем остаются все прежние native readiness gates. Добавлены закрытый bootstrap diagnostic и regression с настоящим shell-блоком; контрфактический тест на старом коде воспроизвёл отказ. Make check/race, Staticcheck, module verify, Govulncheck и make check из распакованного точного кандидата прошли.
## Установленная версия и проверка обновления
Сейчас временно установлен **неопубликованный кандидат v2.1.1**, source `2c64888`, для native validation. Опубликованный v2.1.0 сохранён для отката в `~/.virfield-v2/upgrades/20261016-v2.1.1-before`. Ни tag, ни GitHub Release v2.1.1 пока не созданы. Пакет собран из чистого committed source; установленная копия повторно подписана прежней локальной identity без изменения исходного release archive.
Установлен опубликованный **v2.1.1**, source `2c64888`. Перед публикацией этот же пакет прошёл проверку как кандидат; повторная установка не требовалась. Tag `v2.1.1` указывает на проверенный commit. v2.1.0 сохранён для отката в `~/.virfield-v2/upgrades/20261016-v2.1.1-before`. Пакет собран из чистого committed source; установленная копия подписана прежней локальной identity без изменения исходного release archive. Сохранены system LaunchDaemon, Full Disk Access и девять исходных образов.
Stock v2.1.0 дважды не завершил fresh macOS lease preparation: `guest_keychain_failed`, в закрытой диагностике `launchctl bootstrap` exit5. Оба leases released. Это не потерянный source fix: встроенный keychain.sh в прежнем принятом binary и v2.1.0 совпадает побайтно; используется тот же golden `image-f11d9a1ee2991eada08c4f734c33df6d`.
@@ -16,11 +16,11 @@ Stock v2.1.0 дважды не завершил fresh macOS lease preparation: `
GitHub CI точного `2c64888` [успешен на macOS и Linux](https://github.com/mallexxx/virfield/actions/runs/38899141941): make check/race/build, Staticcheck, module verify, Govulncheck и Linux gitleaks. Свежий установленный MCP сообщает `2.1.1`, 20 tools/4 resources; authenticated status подтверждает девять прежних images и ноль active workers/jobs. Существующие MCP processes других чатов принудительно не переподключались. Receipts: `macos-candidate-production-verification.json`, `virfield-installed-mcp-2.1.1.json`, `virfield-fix-github-ci.json`.
Точный пакет `virfield-v2.1.1-darwin-arm64.tar.gz` готов; SHA256 `dbafeea705241286622e773c4576baa3a623cbc143398aa7bbdddac63cb782fd`. Публикация tag/release ожидает отдельного подтверждения владельца по AGENTS.md; подготовка и все проверки завершены.
Опубликованный пакет `virfield-v2.1.1-darwin-arm64.tar.gz`: SHA256 `dbafeea705241286622e773c4576baa3a623cbc143398aa7bbdddac63cb782fd`. Release ID `415082470`, published `2026-10-16T14:59:56Z`, stable Latest, draft=false/prerelease=false. Manifest и все binary hashes проверены. Приватные доказательства: `state/main-production-sync-20261016/virfield-v2.1.1-publication-verification.json`, `upstream-heads-after-publication.json`, `post-publication-runtime-verification.json`. Источник, tag, публичный пакет и production согласованы.
## Историческая принятая версия
Исходная приёмка VM/MCP/Broker выполнена на `0.0.0-acceptance-runbooks`, source `8bfff9f59cab918877d060437a1ad190905a5040`, schema10. Следующие результаты относятся к тому датированному контуру; они не заменяют проверку текущего кандидата.
Исходная приёмка VM/MCP/Broker выполнена на `0.0.0-acceptance-runbooks`, source `8bfff9f59cab918877d060437a1ad190905a5040`, schema10. Следующие результаты относятся к тому датированному контуру; они не заменяют проверку нового релиза.
Пройдены Tart/native GUI и отдельный SSH, реальные перезагрузки, ключевая изоляция, Xcode/Swift, экспорт артефактов, SSH/desktop и подтверждённый release/revocation. HTPC Sonoma/Sequoia прошли полные циклы. Проверены factory/private GHCR roundtrip, sparse golden transfer, revalidation существующей VM, durable diagnostics, admission/wait/resume и однобайтовая граница node image cache. Legacy iOS профиль прошёл свежую factory/worker квалификацию с armv7 compile/link.
@@ -54,6 +54,7 @@ macOS make check/build/Staticcheck прошли; настоящий read-only vo
- Реализовать signed node-agent, WoL relay/power intents, grants/connectors и physical-host/browser desktop при отдельном приоритете.
- Развивать /api/v3 capability selection, Target/EnvironmentProfile/ConnectionGrant, short-lived access, VS Code extension и linked Console/Broker flows.
- Расширить crash/host-loss/partition/full-disk matrix, metrics/alerts, signed promotion/revocation.
Broker reviewer исправление уже входит в запушенный Broker main `13c29ac`. Завершённые локальные и remote ветки Broker удалены после содержательной сверки, reviewer worktree сохранён detached. Архив исходного patch: [[personal/projects/archive/virfield-release-cleanup-2026-10-16/docs/acceptance/broker-reviewer-readonly]].
Детальные прежние планы сохранены в [[personal/projects/archive/virfield-release-cleanup-2026-10-16/docs/VIRFIELD-3-PLAN]] и архиве superpowers. Их старые pending-статусы не заменяют результаты выше. Автоматизация остаётся на паузе по указанию пользователя.
@@ -195,3 +195,18 @@ Contract regression default — **4500 ms** worker delay при прежнем *
Пять новых dailyAndCount pixels различают install readiness, upgrade readiness, idle background wake, error-6 background retry и late document reload. `background_ready` — факт успешного WK callback после использованного navigation wait (для error-6 retry — любого успешного retry), не доказательство initResp; `reload_started` — принятый WK reload; `response_received` — однозначно атрибутированный dashboard response после reload, не ACK content script. App tests отдельно требуют настоящий page initResp. macOS names заканчиваются `_macos`, iOS — стандартные platform/form-factor suffixes. Только outcome, appVersion и стандартные platform parameters, без URL/tab ID/form values/raw error.
На данном этапе: targeted unit suite **178 PASS**, strict lint **17 Swift / 0 violations**, pixel definitions + wide-event consistency/immutability validators обеих платформ PASS. Подписанная app-сборка и реальные install/upgrade 8000 ms regression runs ещё не завершены; over-budget failure пока НЕ объявлен исправленным. Новые артефакты: `/private/tmp/cpm-late-recovery-20261016/`.
## Итог late background recovery и fix instrumentation — 16 октября 2026
Актуальный стейт: checkpoint **`dff29dfb1e`** сохранён до новых изменений; новый код/tests/pixels в `alex/cpm-fix-p1-p2` остаются **незакоммиченными**. Новый flag **`webExtensions.cpmLateBackgroundDocumentRecovery` default disabled**, динамически проверяется до попытки и после async safety check; remote config не менялась. Navigation cap по-прежнему **5 s**.
Новый `CPMBackgroundReadinessRecovery.swift` в shared Autoconsent получает startup UUID manager, commit/failure/response/navigation events monitor и зарегистрированный GET WKWebView от platform tabs. Документ должен commit во время известного unfinished startup; только genuine missing-response timeout вместе с successful public background callback допускают одну GET-перезагрузку в пределах 30 s startup. Изменённый/loading/closed/failed document, main-document form edits/contenteditable, background app state, flag OFF и context replacement запрещают reload. Идентичность проверяется после async JS. Результат — replacement document на том же URL, сохранённый extension context; P2 background-only recovery исходного документа остаётся отдельным механизмом. Safety check использует настоящий async WK API label `contentWorld:`; ранние красные app runs поймали ошибочный callback overload с Void, и вся история сохранена.
Пять отдельных dailyAndCount pixels с prefix `web_extension_cpm_`: `install_readiness`, `upgrade_readiness`, `background_wake`, `background_load_retry`, `late_document_reload`. macOS suffix `_macos`, iOS standard suffixes. Первые четыре: `background_ready` после использованного slow navigation wait (для P2 любого successful retry), без page-ACK claim; последний: `reload_started` и однозначный dashboard `response_received` после replacement navigation. Ответ исходного документа во время safety check не получает credit. Только outcome и стандартные параметры, без URL/tab IDs/field values/raw errors. Injection + PixelKitMock adapter test, definitions/validators обеих платформ PASS. Existing episode contract сохранён; document reload даёт `failed_tab_response`, extension `reload_state=none`.
**Проверено на одной финальной подписанной сборке:** общий набор **8/8 PASS** (7 app/WebKit scenarios + adapter test); новые 8-second install/upgrade **2/2 PASS**, затем **10/10 repetitions PASS**; новый flag OFF **2/2 функционально FAIL**, 0 skips/expected failures/teardown errors. Во всех 14 positive over-budget executions первая загрузка **5.085–5.328 s**, затем ровно один reload, настоящий page initResp + native dashboard, URL/context сохранены. Edit-veto app test PASS; прежние P1/P2/install/upgrade PASS. Targeted units **179 PASS** (9 новых recovery; всего 18 новых unit methods в ветке), lint **17 files / 0 violations**, новый recovery без compiler warnings. Shared iOS Simulator и FeatureFlags-iOS builds PASS; полный iOS app/runtime не запускался.
Code entry points: manager background startup callback/typed fix marker; monitor `backgroundReadinessRecovery` и `registerReadinessRecoveryDocument`; macOS PrivacyDashboardTabExtension weak view + real initiating request method; iOS TabViewController main-frame GET tracking; platform factories dedicated provider; PixelFiring adapters + platform JSON5 definitions. Все 8 app methods остаются в существующем CPM file/scheme; SharedPackages files подхватывает SwiftPM без pbxproj изменений.
Все facts/history/guards/pixel semantics: [[cpm-status-2026-10-15]], `/private/tmp/cpm-late-recovery-20261016/validation-summary.json`. Source/app/test binary hashes стабильны; bundled ZIP равен checkpoint; package pin side effect убран; scratch/#7379 не менялись. Это opt-in bounded GET recovery, не универсальное исправление permanent background failures/unsafe documents. Прежние P3/P5 и natural-production/iOS suspension ограничения не сняты; 22 historical research methods отдельно.
+49
View File
@@ -962,3 +962,52 @@ Negative controls конкретно: P2 — timeout ожидания восст
Первый кандидат дал **0/2 PASS / 2 functional FAIL** (`late-smoke.xcresult`); диагностический повтор install — **0/1 PASS** (`late-trace.xcresult`). Документ действительно оставался без native dashboard/page initResp после 5 s release и WK callback 8.1–8.5 s. Это не infrastructure failure: reload не начинался. Логи подтвердили armed candidate, GET/history identity и включённый flag, но safety check всегда false. Установлена конкретная ошибка Swift overload: `evaluateJavaScript(..., in: nil, in: .defaultClient)` выбирал synchronous callback overload, возвращающий Void; cast к Bool всегда false. SDK async overload имеет label `contentWorld:`. Вызов исправлен; аналогичный вызов edit-veto app test тоже переведён на настоящий async API. Локальные decision logs оставлены на debug level, без URL/field values.
На исправленном исходнике **2/2 app PASS** (`late-fixed.xcresult`): 8000 ms worker delay; первая загрузка install **5.230188 s**, upgrade **5.141589 s**, каждая до готовности background; ровно **2 document finishes** (первый + один automatic reload), тот же URL/context, настоящий native dashboard и page initResp. Pixels: соответствующий install/upgrade `background_ready`, затем late-document `reload_started` и `response_received`. Episode закрывается `failed_tab_response` / `reload_state=none`: reload здесь относится к документу, не extension context. Targeted unit **179 PASS**, 0 failures/skips; strict lint **17 files / 0 violations**; shared iOS Simulator + iOS FeatureFlags builds PASS. Полный app run из 8 методов, repeated runs и disabled-new-flag controls ещё выполняются/ожидают очереди. Предыдущие красные artifacts сохранены, assertions не ослаблены.
## Итог: opt-in recovery первого документа за пределами 5 s + fix pixels — 16 октября 2026
Это актуальный результат поверх предыдущих progress-записей. Checkpoint прежнего проверенного состояния — **`dff29dfb1ec7240ee4e2694191a7385dc32dd782`** (`Fix CPM background wake and installation readiness`). HEAD остался на нём; **новые recovery/pixels/tests НЕ закоммичены**. Ветка/worktree: `alex/cpm-fix-p1-p2`, `/Users/admin/DuckDuckGo/apple-browsers.git/alex/cpm-fix-p1-p2`. #7379 не изменялся и не закрывался.
**Новый независимый remote flag:** `webExtensions.cpmLateBackgroundDocumentRecovery`, **default disabled** на macOS и iOS; remote configuration не менялась. Tests явно включают его. Старые gate/recovery flags и **navigation timeout 5 s** сохранены. Восстановление работает независимо от diagnostics flag.
`CPMBackgroundReadinessRecovery` получает точный startup UUID от manager и события реального health monitor. Документ привязывается к startup, только если commit произошёл до успешной готовности background. Нужны оба факта: реальный missing-dashboard timeout и успешный public WK background callback. Затем допускается одна GET-перезагрузка в пределах 30 s от начала startup. Проверяются тот же navigation/document и history item, отсутствие загрузки/изменённых main-document form fields/contenteditable, foreground app state и runtime flag; флаг/идентичность проверяются повторно после async JS safety check. Смена/закрытие/ошибка навигации и context replacement отменяют candidate. Healthy late response отменяет reload; ответ исходного документа во время safety check не получает recovery credit. Повторные callbacks не создают цикл.
Это **новый документ на том же URL после одного reload**, с сохранённым WKWebExtensionContext. Исходный потерянный init не пересылается. P2 по-прежнему восстанавливает именно исходный документ background-only retry; его механизм не заменён этим reload.
| Финальная проверка | Проверенный результат |
|---|---|
| Signed общий app-набор | **8/8 PASS**, 0 skips/expected failures, 0 teardown/deallocation errors — `enabled-all.xcresult` |
| Новые over-budget install + upgrade, первый зелёный прогон | **2/2 PASS** — `late-fixed.xcresult` |
| Те же два over-budget метода, по 5 повторов | **10/10 executions PASS**, 2 уникальных метода — `late-repeat.xcresult` |
| Только новый flag OFF, те же binaries | **0/2 PASS, 2 functional FAIL**, expectedFailures=0, exit 65, без teardown errors — `late-disabled.xcresult` |
| Targeted shared unit suites | **179 PASS**, 0 failures/skips: manager 48, lifecycle 31, background-load diagnostics 13, health monitor 78, новый recovery 9 |
| Strict SwiftLint | **17 Swift files, 0 violations**; compiler warnings нового recovery отсутствуют после исправления async API |
| Pixel definitions, formatting, wide-event consistency + immutability | **PASS macOS + iOS**; generated schemas не менялись |
| Shared WebExtensions + FeatureFlags-iOS для iOS Simulator | **BUILD SUCCEEDED**; полный iOS app/runtime не запускался |
| Подписи | Apple Development: Alexey Martemyanov (9SAT8X9S84); strict verify app debug dylib и загружаемого Integration Tests.xctest PASS |
Восемь методов — **7 реальных app/WebKit scenarios + 1 PixelKitMock adapter test**: прежние P1, P2, install, upgrade; два новых 8000 ms install/upgrade; запрет reload изменённой формы; проверка пяти имён/prefix/frequency/parameters через production adapter. Новые 9 unit methods проверяют success/failure prerequisites, once-only, healthy late reply, stale/closed/failed/replaced navigation, runtime flag/background checks, flag OFF→ON, expiry/unsafe veto, ответ во время safety check и отдельные pixel metadata. От checkpoint добавлены 4 app methods и 9 unit methods; всего в чистой ветке 8 app methods и 18 новых unit methods относительно исходной telemetry branch. Исторические 22 research methods не подменяются этим счётом.
Во всех **14 положительных over-budget executions** (2 initial + 2 combined + 10 repeat) worker delay **8000 ms**, первый document finish **5.085–5.328 s**, раньше ответа фона; finish count строго **2** (первая загрузка + один reload), URL/context те же, настоящий native dashboard и page `initResp` получены. Test допускает 6.5 s на 5 s gate + loopback document load. Новый флаг OFF оставляет обе страницы без ответа после public background readiness; оба fail именно на ожидании автоматического recovery. Это проверяет чувствительность регрессий. P1 остаётся healthy без failure episode; P2 получает настоящую error 6, сохраняет context и доставляет исходному документу `initResp` без навигации. Проверка изменённого поля сохраняет один finish и отсутствие reload pixels; последующая ручная навигация healthy.
### Пиксели пойманных fix cases
Общий prefix `web_extension_cpm_`; **macOS добавляет `_macos`**, iOS использует стандартные platform/form-factor suffixes. Каждый case — отдельный pixel, frequency **dailyAndCount**:
| Case | outcome и точный смысл |
|---|---|
| `install_readiness` | `background_ready`: успешный медленный WK callback после использования navigation wait при install |
| `upgrade_readiness` | `background_ready`: такой же callback именно replacement context при upgrade |
| `background_wake` | `background_ready`: медленный shared wake после использования navigation wait (P1) |
| `background_load_retry` | `background_ready`: успешный public background retry после настоящей error 6 (P2), включая быстрый callback |
| `late_document_reload` | `reload_started`: WK принял reload; `response_received`: monitor однозначно атрибутировал dashboard response после начала replacement navigation |
`background_ready` не означает page ACK. `response_received` — dashboard evidence, без доказательства причинности reload или initResp/all-tab recovery; настоящий page ACK отдельно проверяет app harness. Daily считает affected devices по имени, count/stage позволяет различать фактические операции; daily dedup не разделён по outcome. Параметры: outcome + стандартные appVersion/pixelSource/(macOS channel), без URL/tab ID/form values/raw errors. Пять definitions присутствуют на обеих платформах; adapters используют injected PixelKit sink. Существующий episode pixel/schema сохранён: для document reload observed `failed_tab_response` / `reload_state=none`, поскольку reload_state относится к extension context.
### Артефакты и границы
`/private/tmp/cpm-late-recovery-20261016/validation-summary.json` содержит группы прогонов, timings, source/binary SHA256 и ограничения; рядом все `.xcresult`, summaries, JSON attachments, build/unit/lint/pixel/signing logs и `summarize.py`. Красные `late-smoke` (2 fail) и `late-trace` (1 fail) сохранены: они выявили неверно выбранный Void callback overload; async label исправлен на `contentWorld:`. Assertions не ослаблялись. Финальные source hashes и app/XCTest binary hashes стабильны во всех зелёных/повторных/disabled runs.
Bundled ZIP равен checkpoint, SHA256 `ff98a2b0c07819b2ee5ee6de67d6dd8d28696363c08c9fbc2c32255e9d9efa94`; задержка/DOM observation добавляются только в extracted test copy. Реальные AppDelegate, tabs/windows, lifecycle coordinator, handler, health monitor и системный WebKit; нет искусственного отвязывания табов, фиктивных ответов или scoped drops. P2 останавливает только свой background PID и гарантированно возобновляет его. Побочный SwiftPM package pin diff сохранён в artifacts и убран; зависимости не изменены. Исходный research scratch не редактировался.
Старое ограничение «over-budget first response loss не исправлен» снято **для этого opt-in GET recovery в описанных условиях**. Постоянный/неответивший background, unsafe/edited/POST documents и startup за пределами recovery window этим механизмом не исправляются. Натуральные причины всех production cohorts, P3, старые P5-ограничения и реальный iOS suspension/resume этой новой проверкой не установлены и не закрыты.
@@ -283,3 +283,18 @@ Worktree `cpm-e2e-init`, HEAD всё ещё `46f25175c7c42766cab23ea39f447f075c7
Пять новых dailyAndCount pixels различают install readiness, upgrade readiness, idle background wake, error-6 background retry и late document reload. `background_ready` — факт успешного WK callback после использованного navigation wait (для error-6 retry — любого успешного retry), не доказательство initResp; `reload_started` — принятый WK reload; `response_received` — однозначно атрибутированный dashboard response после reload, не ACK content script. App tests отдельно требуют настоящий page initResp. macOS names заканчиваются `_macos`, iOS — стандартные platform/form-factor suffixes. Только outcome, appVersion и стандартные platform parameters, без URL/tab ID/form values/raw error.
На данном этапе: targeted unit suite **178 PASS**, strict lint **17 Swift / 0 violations**, pixel definitions + wide-event consistency/immutability validators обеих платформ PASS. Подписанная app-сборка и реальные install/upgrade 8000 ms regression runs ещё не завершены; over-budget failure пока НЕ объявлен исправленным. Новые артефакты: `/private/tmp/cpm-late-recovery-20261016/`.
## Итог late background recovery и fix instrumentation — 16 октября 2026
Актуальный стейт: checkpoint **`dff29dfb1e`** сохранён до новых изменений; новый код/tests/pixels в `alex/cpm-fix-p1-p2` остаются **незакоммиченными**. Новый flag **`webExtensions.cpmLateBackgroundDocumentRecovery` default disabled**, динамически проверяется до попытки и после async safety check; remote config не менялась. Navigation cap по-прежнему **5 s**.
Новый `CPMBackgroundReadinessRecovery.swift` в shared Autoconsent получает startup UUID manager, commit/failure/response/navigation events monitor и зарегистрированный GET WKWebView от platform tabs. Документ должен commit во время известного unfinished startup; только genuine missing-response timeout вместе с successful public background callback допускают одну GET-перезагрузку в пределах 30 s startup. Изменённый/loading/closed/failed document, main-document form edits/contenteditable, background app state, flag OFF и context replacement запрещают reload. Идентичность проверяется после async JS. Результат — replacement document на том же URL, сохранённый extension context; P2 background-only recovery исходного документа остаётся отдельным механизмом. Safety check использует настоящий async WK API label `contentWorld:`; ранние красные app runs поймали ошибочный callback overload с Void, и вся история сохранена.
Пять отдельных dailyAndCount pixels с prefix `web_extension_cpm_`: `install_readiness`, `upgrade_readiness`, `background_wake`, `background_load_retry`, `late_document_reload`. macOS suffix `_macos`, iOS standard suffixes. Первые четыре: `background_ready` после использованного slow navigation wait (для P2 любого successful retry), без page-ACK claim; последний: `reload_started` и однозначный dashboard `response_received` после replacement navigation. Ответ исходного документа во время safety check не получает credit. Только outcome и стандартные параметры, без URL/tab IDs/field values/raw errors. Injection + PixelKitMock adapter test, definitions/validators обеих платформ PASS. Existing episode contract сохранён; document reload даёт `failed_tab_response`, extension `reload_state=none`.
**Проверено на одной финальной подписанной сборке:** общий набор **8/8 PASS** (7 app/WebKit scenarios + adapter test); новые 8-second install/upgrade **2/2 PASS**, затем **10/10 repetitions PASS**; новый flag OFF **2/2 функционально FAIL**, 0 skips/expected failures/teardown errors. Во всех 14 positive over-budget executions первая загрузка **5.085–5.328 s**, затем ровно один reload, настоящий page initResp + native dashboard, URL/context сохранены. Edit-veto app test PASS; прежние P1/P2/install/upgrade PASS. Targeted units **179 PASS** (9 новых recovery; всего 18 новых unit methods в ветке), lint **17 files / 0 violations**, новый recovery без compiler warnings. Shared iOS Simulator и FeatureFlags-iOS builds PASS; полный iOS app/runtime не запускался.
Code entry points: manager background startup callback/typed fix marker; monitor `backgroundReadinessRecovery` и `registerReadinessRecoveryDocument`; macOS PrivacyDashboardTabExtension weak view + real initiating request method; iOS TabViewController main-frame GET tracking; platform factories dedicated provider; PixelFiring adapters + platform JSON5 definitions. Все 8 app methods остаются в существующем CPM file/scheme; SharedPackages files подхватывает SwiftPM без pbxproj изменений.
Все facts/history/guards/pixel semantics: [[cpm-status-2026-10-15]], `/private/tmp/cpm-late-recovery-20261016/validation-summary.json`. Source/app/test binary hashes стабильны; bundled ZIP равен checkpoint; package pin side effect убран; scratch/#7379 не менялись. Это opt-in bounded GET recovery, не универсальное исправление permanent background failures/unsafe documents. Прежние P3/P5 и natural-production/iOS suspension ограничения не сняты; 22 historical research methods отдельно.