[2026-10-19] 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:
1 parent
4271484220
commit
f8e22f8e48
3 files changed
+96
-18
No files matched your search
@@ -1,6 +1,6 @@
|
||||
> **Актуально — 19 октября 2026, error-6/P4 finding исправлен и опубликован.** Production [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379) **`8275bcce36`**, база #7376 **`39fe56af4c`**; содержит fix **`fc124938e0`** и 2 штатные регрессии. На обновлённой базе **201 shared tests PASS**, strict lint 4 / 0. Известный failed startup инвалидируется до освобождения wait; retained callback больше не вызывает P4 detection или late reload. Review-only harness **`6d04496882`** содержит текущий production head и ровно 12 дополнительных paths; README: 38 новых shared regressions. Первый signed app ON: 9 PASS на `fc124938e0`; финальный цикл ON 9 → OFF 6 → ON 9 на `8275bcce36` выполняется в чистом checkout. iOS app build PASS относится к `fc124938e0` до обновления базы. Параллельные незакоммиченные изменения исходного worktree не включены в проверку. Формы/default late flag не менялись. Прежние открытые findings сохранены как история.
|
||||
> **Актуально — 19 октября 2026, error-6/P4 finding закрыт в опубликованном PR.** [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379) **`8275bcce36`**, база #7376 **`39fe56af4c`**, содержит fix **`fc124938e0`** + 2 штатные регрессии. **201 shared PASS**, strict lint **4 files / 0 violations**. Signed app: **ON 9 PASS → OFF 6 ожидаемых functional FAIL → restored ON 9 PASS**, 0 SKIP, те же бинарники; первый restored attempt **7 PASS / 2 FAIL** (teardown timeout / SIGINT) сохранён, повтор выполнен без изменений и отключения проверок. CI завершён: **43 SUCCESS / 17 SKIPPED**, failures/pending нет. Harness **`6d04496882`** содержит production head и ровно **12 review-only paths**; 38 новых shared regressions относительно базы. Проверенный shipping scope: P1/P2 и независимый P4 detection; late reload остаётся default **OFF**, формы не менялись. Прежние открытые findings ниже — история до fix.
|
||||
|
||||
> **Актуально — 19 октября 2026, финальное ревью #7379 после P4 detection.** Проверен опубликованный после rebase **`a00dc4afeb`** / база #7376 **`c7adf28e12`**, 7 commits / 22 paths. Остаётся **1 P2: error-6 startup может ошибочно попасть в P4 detection после позднего callback успешного retry**. На текущем head: **196 существующих shared tests PASS + 2 дополнительных probes PASS / 1 новый probe FAIL**. Проверочная однострочная правка только в изолированной копии даёт **199 PASS**; в PR она не внесена. Pixel validators обеих платформ PASS. CI завершён: **53 SUCCESS / 25 SKIPPED**, failures и pending нет; повторный probe подтвердил тот же незакрытый дефект. Предыдущие 197 unit и app 9→6→9 относятся к `fc87237a47`; новая база убрала один retired-telemetry тест. Подробности и границы воспроизведения — в разделе «Полное ревью после P4 detection — error-6 attribution». История ниже сохранена.
|
||||
> **История ревью — 19 октября 2026, до исправления error-6/P4 в `fc124938e0`.** Проверен опубликованный после rebase **`a00dc4afeb`** / база #7376 **`c7adf28e12`**, 7 commits / 22 paths. Остаётся **1 P2: error-6 startup может ошибочно попасть в P4 detection после позднего callback успешного retry**. На текущем head: **196 существующих shared tests PASS + 2 дополнительных probes PASS / 1 новый probe FAIL**. Проверочная однострочная правка только в изолированной копии даёт **199 PASS**; в PR она не внесена. Pixel validators обеих платформ PASS. CI завершён: **53 SUCCESS / 25 SKIPPED**, failures и pending нет; повторный probe подтвердил тот же незакрытый дефект. Предыдущие 197 unit и app 9→6→9 относятся к `fc87237a47`; новая база убрала один retired-telemetry тест. Подробности и границы воспроизведения — в разделе «Полное ревью после P4 detection — error-6 attribution». История ниже сохранена.
|
||||
|
||||
> **Актуально — 19 октября 2026, P4 detection без reload опубликована и проверена.** [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379): production **`fc87237a47`**, 7 commits / 22 paths; review-only harness **`475095b335`**, 12 paths вне main. Новый dailyAndCount `web_extension_cpm_startup_response_missing` считает P4 candidates независимо от late recovery flag, без reload и safety JavaScript. **197 unit PASS**, signed macOS и iOS app builds PASS, pixel validators PASS, strict lint 6 production + 2 harness / 0. На одних подписанных app/XCTest binaries: **ON 9 PASS → OFF 6 ожидаемых functional FAIL → ON 9 PASS**, без skips/expected failures, SHA256 совпали. Новый detection-only case дважды подтвердил detection = 1 / finishCount = 1 / late recovery OFF / no late reload outcomes; оба late OFF controls также дали по detection = 1. CI нового head: **48 SUCCESS / 21 SKIPPED**, pending/failures нет. Формы не менялись, late reload flag default disabled. PR steps и все три документа актуализированы; worktree возвращён на чистую production branch. Более ранние heads/results сохранены как история.
|
||||
|
||||
@@ -499,6 +499,8 @@ CI актуального head завершён: **53 SUCCESS / 25 SKIPPED**, fa
|
||||
|
||||
## Исправление error-6/P4 finding в production PR — 19 октября 2026
|
||||
|
||||
### Первоначальная публикация `fc124938e0`
|
||||
|
||||
Опубликован `fc124938e040533e8ea9ef04df9d313d0e9d5dcb` в #7379, поверх `a00dc4afeb`: 2 изменённых файла, 8 commits / 22 paths относительно #7376. Observer принимает только background-load error 6 из `WKWebExtensionContextErrorDomain`. Для совпадающего pending context он инвалидирует startup/document recovery до `clearEmbeddedBackgroundStartup()`; retained successful callbacks после retry уже не могут объявить этот failed startup успешным P4 или запустить document preflight.
|
||||
|
||||
**Штатные тесты теперь в PR**, в `WebExtensionManagerTests.swift`:
|
||||
@@ -509,11 +511,35 @@ CI актуального head завершён: **53 SUCCESS / 25 SKIPPED**, fa
|
||||
|
||||
Harness обновлён `475095b335 → f4f135766a7fd67096ebc6a973919cb5a464d7ec` обычным merge/push, без переписывания истории. Конфликты в manager/shared tests разрешены точным production-кодом. Актуальный production head — предок harness; diff **ровно 12 harness-only paths**, старые telemetry/test deletions больше не возвращаются. README обновлён: 38 новых shared regressions, 10 manager regressions. Тестовые steps в PR остаются 9 PASS → OFF 6 functional FAIL → ON 9 PASS.
|
||||
|
||||
**Финальная app validation текущего head: выполняется.** Подписанный macOS build-for-testing и ON/OFF/ON ещё не объявляются завершёнными. Фикс уже в опубликованном production PR; предыдущая candidate-only правка больше не описывает актуальное состояние. Формы и default-disabled late recovery flag сохранены.
|
||||
**Первоначальный app этап:** первый build-for-testing выявил ссылки fixture на удалённые telemetry API. Исправлен только harness (`eb3865b594`): evidence строится через текущий public episode metadata adapter, добавляется локальный raw view count без отправки synthetic pixel. Затем signed ON дал 9 PASS на production `fc124938e0`. Фикс уже опубликован; предыдущая candidate-only правка больше не описывает актуальное состояние. Формы и default-disabled late recovery flag сохранены.
|
||||
|
||||
Artifacts: `/private/tmp/cpm-pr7379-error6-fix-20261019/`: `red-before-fix.log`, `shared-tests.log`, `lint.log`, `ios-build.log`, `heads-and-checks.json`, `app-build.log`/`app-build.xcresult`, `pr-progress.json`; последующие app bundles будут в этой же папке.
|
||||
Artifacts: `/private/tmp/cpm-pr7379-error6-fix-20261019/`: `red-before-fix.log`, `shared-tests.log`, `lint.log`, `ios-build.log`, `heads-and-checks.json`, `app-build.log`/`app-build.xcresult`, `pr-progress.json`; все последующие app bundles также сохранены в этой папке.
|
||||
|
||||
### Итог после обновления telemetry/main и WebKit error API
|
||||
|
||||
Пока выполнялась проверка, production обновлён обычными merge до **`8275bcce368ea63b3777b42b6007beb48d768409`**, база #7376 — **`39fe56af4c35bf034d570f04dd58f59bd41eb2b6`**. `fc124938e0` — предок опубликованного PR, его fix и обе штатные регрессии сохранены. Текущий diff: **10 commits / 23 paths**. Safe WebKit error copying и изменения base/main учтены; retired EventsListener mock удалён из изолированной package-копии.
|
||||
|
||||
На обновлённом production **201 selected shared tests PASS / 0 failures**: 14 diagnostics + 20 recovery + 77 health monitor + 35 lifecycle + 55 manager. Относительно текущей базы #7376 — **38 новых shared regressions**, включая обе новые error-6/P4 проверки; первая покрывает late recovery OFF и ON. Strict SwiftLint на 4 изменённых Swift files: **0 violations**. Первоначальный полный iOS Simulator app build PASS относится к `fc124938e0`; для текущего `8275bcce36` завершились зелёным iOS PR Checks и iOS UI Tests в CI.
|
||||
|
||||
Harness опубликован **`6d04496882ad25e05dceb622305a50c7e51aeb37`**, содержит актуальный production `8275bcce36`; diff **ровно 12 fixture-only paths**, вне main. История синхронизации сохранена: `f4f135766a` → `eb3865b594` → `6d04496882`, обычные merge/push. README отражает 38 новых shared regressions и 10 manager regressions. Параллельные незакоммиченные правки `alex/cpm-fix-p1-p2` и отдельного `alex/cpm-fix-init-loss-production` не трогались и не включались в validation; app запускался из чистого checkout `/private/tmp/cpm-pr7379-error6-fix-20261019/source`. После тестов он возвращён на detached production `8275bcce36`; production-ветка уже занята параллельным worktree, её повторный checkout был безопасно отклонён Git.
|
||||
|
||||
После смены базы app build сначала остановился на устаревшем локальном workspace lockfile; выполнено разрешение зависимостей. Затем выяснилось, что reused DerivedData импортирует старые standalone `.swiftmodule` вместо свежих PackageFrameworks (конкретно отсутствовал `DataClearingActionSkipping` из нового BrowserServicesKit). Сохранены 11 подтверждённых устаревших модулей в `stale-standalone-modules/` с manifest; исходники не менялись. После этого подписанная app-сборка прошла. Подпись: Apple Development, Team `HKE973VLUW`; host macOS 26.7.1 (25G241).
|
||||
|
||||
**Фактическая app-матрица на одном build:**
|
||||
- ON: `current-app-on-3.xcresult` — **9 PASS / 0 FAIL / 0 SKIP**.
|
||||
- OFF: `current-app-off.xcresult` — **0 PASS / 6 functional FAIL / 0 SKIP**; install, upgrade и slow wake теряют first response; error-6 recovery, late install и late upgrade завершаются ожидаемым recovery timeout. Host/setup failures отсутствуют; это отрицательный контроль, не успешный test run.
|
||||
- Первый restored ON: `current-app-restored.xcresult` — **7 PASS / 2 FAIL / 0 SKIP**: P2 functional recovery завершился, но views не освободились за teardown budget; следующий install host остановился с SIGINT. Этот результат сохранён как failed, retained root cause не установлен; подробности ниже.
|
||||
- Полный restored ON retry: `current-app-restored-retry.xcresult` — **9 PASS / 0 FAIL / 0 SKIP**. Выполнен `test-without-building`, проверки/assertions не ослаблялись. SHA256 app debug dylib и XCTest executable совпали до OFF, после OFF и после restored ON; compilation между фазами не было.
|
||||
|
||||
P4 detection-only method прошёл в обоих успешных ON runs: late flag **OFF**, `detections=1`, `finishCount=1`, нет late reload/recovery events. Это счётчик candidate signature, а не доказательство конкретного root cause каждого пользовательского инцидента. Новый shared regression отдельно исключает из P4 известный failed startup после retained successful callback.
|
||||
|
||||
**CI текущего head завершён: 43 SUCCESS / 17 SKIPPED, 0 failures / 0 pending**; macOS PR Checks, iOS PR/UI Checks, BSK, lint и pixel schema зелёные. Сохранены `final-pr.json` и `current-ci-runs.json`. Пользовательские title и лаконичное PR description сохранены: 10 точных однострочных steps, отдельный harness, ON → OFF → ON, без таблицы feature flags и служебных local-validation секций.
|
||||
|
||||
**Итог для rollout:** error-6/P4 review blocker закрыт в production PR; P1/P2 и независимый P4 detection проверены. Late document reload остаётся default **OFF**. Shadow DOM / controlled form hardening по просьбе пользователя отложен; включение late reload в production — отдельный scope. Flaky teardown/host failure review-only harness не скрыт и не считается функциональным PASS.
|
||||
|
||||
Полный evidence index: `/private/tmp/cpm-pr7379-error6-fix-20261019/validation-summary.json`; logs + `.xcresult` всех попыток, exported app attachments, `current-app-restored-first-diagnostics/`, `p4-detection-only-evidence.json`, три SHA256 manifests, `harness-only-paths.txt`, `final-pr.json`. Старые результаты и failed attempts сохранены.
|
||||
|
||||
|
||||
### Промежуточный app-run: teardown / SIGINT — 19 октября 2026
|
||||
|
||||
На чистом harness `6d04496882` (production `8275bcce36`) первый ON завершился **9 PASS**, OFF — **0 PASS / 6 ожидаемых functional FAIL / 0 SKIP**, SHA256 app/test modules совпали. Первый restored-ON (`current-app-restored.xcresult`) завершился **7 PASS / 2 FAIL / 0 SKIP**: `testBackgroundLoadFailureRecoversOriginalDocument` прошёл CPM assertions, но `TestRunHelper.swift:453` не дождался освобождения window views за 5 секунд; следующий `testInstallDuringSessionInitIsDelivered` остановился с **SIGINT**, runner перезапустил host. P2 evidence подтверждает native dashboard + page initResp после recovery для existing tab, new window и new tab; этот run всё равно считается неуспешным. В production DEBUG есть `ensureObjectDeallocated(..., .interrupt)` → `raise(SIGINT)`; связь с конкретным удерживающим reference пока не доказана, retained root cause не установлен. Функциональные ожидания и deallocation checks не отключались. Полные attachments, diagnostics, summary и логи сохранены в `/private/tmp/cpm-pr7379-error6-fix-20261019/current-app-restored-first-*`; начат полный restored-ON retry на тех же бинарниках (`current-app-restored-retry.xcresult`). Это не отрицательный контроль, failures не исключаются из истории.
|
||||
На чистом harness `6d04496882` (production `8275bcce36`) первый ON завершился **9 PASS**, OFF — **0 PASS / 6 ожидаемых functional FAIL / 0 SKIP**, SHA256 app/test modules совпали. Первый restored-ON (`current-app-restored.xcresult`) завершился **7 PASS / 2 FAIL / 0 SKIP**: `testBackgroundLoadFailureRecoversOriginalDocument` прошёл CPM assertions, но `TestRunHelper.swift:453` не дождался освобождения window views за 5 секунд; следующий `testInstallDuringSessionInitIsDelivered` остановился с **SIGINT**, runner перезапустил host. P2 evidence подтверждает native dashboard + page initResp после recovery для existing tab, new window и new tab; этот run всё равно считается неуспешным. В production DEBUG есть `ensureObjectDeallocated(..., .interrupt)` → `raise(SIGINT)`; связь с конкретным удерживающим reference пока не доказана, retained root cause не установлен. Функциональные ожидания и deallocation checks не отключались. Полные attachments, diagnostics, summary и логи сохранены в `/private/tmp/cpm-pr7379-error6-fix-20261019/current-app-restored-first-*`; начатый полный restored-ON retry на тех же бинарниках (`current-app-restored-retry.xcresult`) затем завершился **9 PASS / 0 FAIL / 0 SKIP**. SHA256 app/test modules совпали; source и assertions между попытками не менялись. Это не отрицательный контроль, failures не исключаются из истории.
|
||||
@@ -6,9 +6,9 @@ tags:
|
||||
- cpm
|
||||
- status
|
||||
---
|
||||
> **Актуально — 19 октября 2026, error-6/P4 finding исправлен и опубликован.** Production [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379) **`8275bcce36`**, база #7376 **`39fe56af4c`**; содержит fix **`fc124938e0`** и 2 штатные регрессии. На обновлённой базе **201 shared tests PASS**, strict lint 4 / 0. Известный failed startup инвалидируется до освобождения wait; retained callback больше не вызывает P4 detection или late reload. Review-only harness **`6d04496882`** содержит текущий production head и ровно 12 дополнительных paths; README: 38 новых shared regressions. Первый signed app ON: 9 PASS на `fc124938e0`; финальный цикл ON 9 → OFF 6 → ON 9 на `8275bcce36` выполняется в чистом checkout. iOS app build PASS относится к `fc124938e0` до обновления базы. Параллельные незакоммиченные изменения исходного worktree не включены в проверку. Формы/default late flag не менялись. Прежние открытые findings сохранены как история.
|
||||
> **Актуально — 19 октября 2026, error-6/P4 finding закрыт в опубликованном PR.** [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379) **`8275bcce36`**, база #7376 **`39fe56af4c`**, содержит fix **`fc124938e0`** + 2 штатные регрессии. **201 shared PASS**, strict lint **4 files / 0 violations**. Signed app: **ON 9 PASS → OFF 6 ожидаемых functional FAIL → restored ON 9 PASS**, 0 SKIP, те же бинарники; первый restored attempt **7 PASS / 2 FAIL** (teardown timeout / SIGINT) сохранён, повтор выполнен без изменений и отключения проверок. CI завершён: **43 SUCCESS / 17 SKIPPED**, failures/pending нет. Harness **`6d04496882`** содержит production head и ровно **12 review-only paths**; 38 новых shared regressions относительно базы. Проверенный shipping scope: P1/P2 и независимый P4 detection; late reload остаётся default **OFF**, формы не менялись. Прежние открытые findings ниже — история до fix.
|
||||
|
||||
> **Актуально — 19 октября 2026, финальное ревью #7379 после P4 detection.** Проверен опубликованный после rebase **`a00dc4afeb`** / база #7376 **`c7adf28e12`**, 7 commits / 22 paths. Остаётся **1 P2: error-6 startup может ошибочно попасть в P4 detection после позднего callback успешного retry**. На текущем head: **196 существующих shared tests PASS + 2 дополнительных probes PASS / 1 новый probe FAIL**. Проверочная однострочная правка только в изолированной копии даёт **199 PASS**; в PR она не внесена. Pixel validators обеих платформ PASS. CI завершён: **53 SUCCESS / 25 SKIPPED**, failures и pending нет; повторный probe подтвердил тот же незакрытый дефект. Предыдущие 197 unit и app 9→6→9 относятся к `fc87237a47`; новая база убрала один retired-telemetry тест. Подробности и границы воспроизведения — в разделе «Полное ревью после P4 detection — error-6 attribution». История ниже сохранена.
|
||||
> **История ревью — 19 октября 2026, до исправления error-6/P4 в `fc124938e0`.** Проверен опубликованный после rebase **`a00dc4afeb`** / база #7376 **`c7adf28e12`**, 7 commits / 22 paths. Остаётся **1 P2: error-6 startup может ошибочно попасть в P4 detection после позднего callback успешного retry**. На текущем head: **196 существующих shared tests PASS + 2 дополнительных probes PASS / 1 новый probe FAIL**. Проверочная однострочная правка только в изолированной копии даёт **199 PASS**; в PR она не внесена. Pixel validators обеих платформ PASS. CI завершён: **53 SUCCESS / 25 SKIPPED**, failures и pending нет; повторный probe подтвердил тот же незакрытый дефект. Предыдущие 197 unit и app 9→6→9 относятся к `fc87237a47`; новая база убрала один retired-telemetry тест. Подробности и границы воспроизведения — в разделе «Полное ревью после P4 detection — error-6 attribution». История ниже сохранена.
|
||||
|
||||
> **Актуально — 19 октября 2026, P4 detection без reload опубликована и проверена.** [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379): production **`fc87237a47`**, 7 commits / 22 paths; review-only harness **`475095b335`**, 12 paths вне main. Новый dailyAndCount `web_extension_cpm_startup_response_missing` считает P4 candidates независимо от late recovery flag, без reload и safety JavaScript. **197 unit PASS**, signed macOS и iOS app builds PASS, pixel validators PASS, strict lint 6 production + 2 harness / 0. На одних подписанных app/XCTest binaries: **ON 9 PASS → OFF 6 ожидаемых functional FAIL → ON 9 PASS**, без skips/expected failures, SHA256 совпали. Новый detection-only case дважды подтвердил detection = 1 / finishCount = 1 / late recovery OFF / no late reload outcomes; оба late OFF controls также дали по detection = 1. CI нового head: **48 SUCCESS / 21 SKIPPED**, pending/failures нет. Формы не менялись, late reload flag default disabled. PR steps и все три документа актуализированы; worktree возвращён на чистую production branch. Более ранние heads/results сохранены как история.
|
||||
|
||||
@@ -70,7 +70,7 @@ tags:
|
||||
|---|---|---|---|---|
|
||||
| [#7378](https://github.com/duckduckgo/apple-browsers/pull/7378) | `alex/cpm-repro-harness` | main | harness (только тесты); 4 быстрых теста в CI около 3 с, остальное локально через `CPM_REPRO=1` | OPEN, head `dfb96279196d`; 37 success / 18 skipped, без failure/pending; REVIEW_REQUIRED. Предыдущее Danger-предупреждение о 1570 строках сохранено как историческое; в ветке есть коммит другой сессии «Require initResp in the page…» |
|
||||
| [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379) | `alex/cpm-fix-init-loss` | harness | фикс A: ожидание первой загрузки background после установки/апгрейда посреди сессии | OPEN, head `7ad771e227bb`; 35 success / 20 skipped, без failure/pending; прежние красный и зелёный прогоны сохраняются |
|
||||
| [#7379 — актуально 19 Oct](https://github.com/duckduckgo/apple-browsers/pull/7379) | `alex/cpm-fix-init-loss`, remote `8275bcce36`; основной worktree `alex/cpm-fix-p1-p2` временно на harness с параллельными локальными изменениями; чистый validation checkout `/private/tmp/cpm-pr7379-error6-fix-20261019/source` | **#7376 / telemetry `39fe56af4c`** | install/upgrade + P1/P2 + late recovery + independent P4 detection; 38 новых shared regressions, 201 штатный PASS; error-6/P4 finding закрыт `fc124938e0` | OPEN, 10 commits / 23 paths. Harness `6d04496882` содержит production, ровно 12 fixture-only paths. Финальный signed app ON/OFF/ON выполняется; CI ещё идёт. Формы/default late flag сохранены |
|
||||
| [#7379 — актуально 19 Oct](https://github.com/duckduckgo/apple-browsers/pull/7379) | `alex/cpm-fix-init-loss`, published `8275bcce36`; production worktree `alex/cpm-fix-init-loss-production` содержит параллельные незакоммиченные правки вне validation; чистый validation checkout `/private/tmp/cpm-pr7379-error6-fix-20261019/source` возвращён на production head | **#7376 / telemetry `39fe56af4c`** | install/upgrade + P1/P2 + late recovery + independent P4 detection; 38 новых shared regressions, 201 штатный PASS; error-6/P4 finding закрыт `fc124938e0` | OPEN, 10 commits / 23 paths. CI 43 SUCCESS / 17 SKIPPED, без failures/pending. Harness `6d04496882`, 12 fixture-only paths; signed app ON 9 PASS → OFF 6 functional FAIL → restored ON 9 PASS (первый restored 7/2 teardown/SIGINT сохранён). Формы/default late OFF сохранены |
|
||||
| [#7381](https://github.com/duckduckgo/apple-browsers/pull/7381) | `alex/cpm-fix-network-crash` | фикс A | фикс B: перезапуск background при замене Network-процесса и мёртвом worker'е | OPEN, remote head `39f94e12eaa4`; 28 success / 24 skipped / 6 failure, включая **Test (Non-Sandbox)** и итоговые отчёты. Прежний красный repro `testNetworkProcessCrashKeepsEveryTabWorking` с 3 ретраями подтверждён. Исправление `f1085846e7ff` — единственный локальный commit поверх remote head; в PR его нет, зелёного CI для него нет |
|
||||
| (нет PR) | `alex/cpm-fix-pixels` | фикс B + PR0 | пиксели `background_restart` и `first_load_wait` для измерения эффекта | держим до слияния PR0, A, B |
|
||||
|
||||
@@ -1327,6 +1327,8 @@ CI актуального head завершён: **53 SUCCESS / 25 SKIPPED**, fa
|
||||
|
||||
## Исправление error-6/P4 finding в production PR — 19 октября 2026
|
||||
|
||||
### Первоначальная публикация `fc124938e0`
|
||||
|
||||
Опубликован `fc124938e040533e8ea9ef04df9d313d0e9d5dcb` в #7379, поверх `a00dc4afeb`: 2 изменённых файла, 8 commits / 22 paths относительно #7376. Observer принимает только background-load error 6 из `WKWebExtensionContextErrorDomain`. Для совпадающего pending context он инвалидирует startup/document recovery до `clearEmbeddedBackgroundStartup()`; retained successful callbacks после retry уже не могут объявить этот failed startup успешным P4 или запустить document preflight.
|
||||
|
||||
**Штатные тесты теперь в PR**, в `WebExtensionManagerTests.swift`:
|
||||
@@ -1337,11 +1339,35 @@ CI актуального head завершён: **53 SUCCESS / 25 SKIPPED**, fa
|
||||
|
||||
Harness обновлён `475095b335 → f4f135766a7fd67096ebc6a973919cb5a464d7ec` обычным merge/push, без переписывания истории. Конфликты в manager/shared tests разрешены точным production-кодом. Актуальный production head — предок harness; diff **ровно 12 harness-only paths**, старые telemetry/test deletions больше не возвращаются. README обновлён: 38 новых shared regressions, 10 manager regressions. Тестовые steps в PR остаются 9 PASS → OFF 6 functional FAIL → ON 9 PASS.
|
||||
|
||||
**Финальная app validation текущего head: выполняется.** Подписанный macOS build-for-testing и ON/OFF/ON ещё не объявляются завершёнными. Фикс уже в опубликованном production PR; предыдущая candidate-only правка больше не описывает актуальное состояние. Формы и default-disabled late recovery flag сохранены.
|
||||
**Первоначальный app этап:** первый build-for-testing выявил ссылки fixture на удалённые telemetry API. Исправлен только harness (`eb3865b594`): evidence строится через текущий public episode metadata adapter, добавляется локальный raw view count без отправки synthetic pixel. Затем signed ON дал 9 PASS на production `fc124938e0`. Фикс уже опубликован; предыдущая candidate-only правка больше не описывает актуальное состояние. Формы и default-disabled late recovery flag сохранены.
|
||||
|
||||
Artifacts: `/private/tmp/cpm-pr7379-error6-fix-20261019/`: `red-before-fix.log`, `shared-tests.log`, `lint.log`, `ios-build.log`, `heads-and-checks.json`, `app-build.log`/`app-build.xcresult`, `pr-progress.json`; последующие app bundles будут в этой же папке.
|
||||
Artifacts: `/private/tmp/cpm-pr7379-error6-fix-20261019/`: `red-before-fix.log`, `shared-tests.log`, `lint.log`, `ios-build.log`, `heads-and-checks.json`, `app-build.log`/`app-build.xcresult`, `pr-progress.json`; все последующие app bundles также сохранены в этой папке.
|
||||
|
||||
### Итог после обновления telemetry/main и WebKit error API
|
||||
|
||||
Пока выполнялась проверка, production обновлён обычными merge до **`8275bcce368ea63b3777b42b6007beb48d768409`**, база #7376 — **`39fe56af4c35bf034d570f04dd58f59bd41eb2b6`**. `fc124938e0` — предок опубликованного PR, его fix и обе штатные регрессии сохранены. Текущий diff: **10 commits / 23 paths**. Safe WebKit error copying и изменения base/main учтены; retired EventsListener mock удалён из изолированной package-копии.
|
||||
|
||||
На обновлённом production **201 selected shared tests PASS / 0 failures**: 14 diagnostics + 20 recovery + 77 health monitor + 35 lifecycle + 55 manager. Относительно текущей базы #7376 — **38 новых shared regressions**, включая обе новые error-6/P4 проверки; первая покрывает late recovery OFF и ON. Strict SwiftLint на 4 изменённых Swift files: **0 violations**. Первоначальный полный iOS Simulator app build PASS относится к `fc124938e0`; для текущего `8275bcce36` завершились зелёным iOS PR Checks и iOS UI Tests в CI.
|
||||
|
||||
Harness опубликован **`6d04496882ad25e05dceb622305a50c7e51aeb37`**, содержит актуальный production `8275bcce36`; diff **ровно 12 fixture-only paths**, вне main. История синхронизации сохранена: `f4f135766a` → `eb3865b594` → `6d04496882`, обычные merge/push. README отражает 38 новых shared regressions и 10 manager regressions. Параллельные незакоммиченные правки `alex/cpm-fix-p1-p2` и отдельного `alex/cpm-fix-init-loss-production` не трогались и не включались в validation; app запускался из чистого checkout `/private/tmp/cpm-pr7379-error6-fix-20261019/source`. После тестов он возвращён на detached production `8275bcce36`; production-ветка уже занята параллельным worktree, её повторный checkout был безопасно отклонён Git.
|
||||
|
||||
После смены базы app build сначала остановился на устаревшем локальном workspace lockfile; выполнено разрешение зависимостей. Затем выяснилось, что reused DerivedData импортирует старые standalone `.swiftmodule` вместо свежих PackageFrameworks (конкретно отсутствовал `DataClearingActionSkipping` из нового BrowserServicesKit). Сохранены 11 подтверждённых устаревших модулей в `stale-standalone-modules/` с manifest; исходники не менялись. После этого подписанная app-сборка прошла. Подпись: Apple Development, Team `HKE973VLUW`; host macOS 26.7.1 (25G241).
|
||||
|
||||
**Фактическая app-матрица на одном build:**
|
||||
- ON: `current-app-on-3.xcresult` — **9 PASS / 0 FAIL / 0 SKIP**.
|
||||
- OFF: `current-app-off.xcresult` — **0 PASS / 6 functional FAIL / 0 SKIP**; install, upgrade и slow wake теряют first response; error-6 recovery, late install и late upgrade завершаются ожидаемым recovery timeout. Host/setup failures отсутствуют; это отрицательный контроль, не успешный test run.
|
||||
- Первый restored ON: `current-app-restored.xcresult` — **7 PASS / 2 FAIL / 0 SKIP**: P2 functional recovery завершился, но views не освободились за teardown budget; следующий install host остановился с SIGINT. Этот результат сохранён как failed, retained root cause не установлен; подробности ниже.
|
||||
- Полный restored ON retry: `current-app-restored-retry.xcresult` — **9 PASS / 0 FAIL / 0 SKIP**. Выполнен `test-without-building`, проверки/assertions не ослаблялись. SHA256 app debug dylib и XCTest executable совпали до OFF, после OFF и после restored ON; compilation между фазами не было.
|
||||
|
||||
P4 detection-only method прошёл в обоих успешных ON runs: late flag **OFF**, `detections=1`, `finishCount=1`, нет late reload/recovery events. Это счётчик candidate signature, а не доказательство конкретного root cause каждого пользовательского инцидента. Новый shared regression отдельно исключает из P4 известный failed startup после retained successful callback.
|
||||
|
||||
**CI текущего head завершён: 43 SUCCESS / 17 SKIPPED, 0 failures / 0 pending**; macOS PR Checks, iOS PR/UI Checks, BSK, lint и pixel schema зелёные. Сохранены `final-pr.json` и `current-ci-runs.json`. Пользовательские title и лаконичное PR description сохранены: 10 точных однострочных steps, отдельный harness, ON → OFF → ON, без таблицы feature flags и служебных local-validation секций.
|
||||
|
||||
**Итог для rollout:** error-6/P4 review blocker закрыт в production PR; P1/P2 и независимый P4 detection проверены. Late document reload остаётся default **OFF**. Shadow DOM / controlled form hardening по просьбе пользователя отложен; включение late reload в production — отдельный scope. Flaky teardown/host failure review-only harness не скрыт и не считается функциональным PASS.
|
||||
|
||||
Полный evidence index: `/private/tmp/cpm-pr7379-error6-fix-20261019/validation-summary.json`; logs + `.xcresult` всех попыток, exported app attachments, `current-app-restored-first-diagnostics/`, `p4-detection-only-evidence.json`, три SHA256 manifests, `harness-only-paths.txt`, `final-pr.json`. Старые результаты и failed attempts сохранены.
|
||||
|
||||
|
||||
### Промежуточный app-run: teardown / SIGINT — 19 октября 2026
|
||||
|
||||
На чистом harness `6d04496882` (production `8275bcce36`) первый ON завершился **9 PASS**, OFF — **0 PASS / 6 ожидаемых functional FAIL / 0 SKIP**, SHA256 app/test modules совпали. Первый restored-ON (`current-app-restored.xcresult`) завершился **7 PASS / 2 FAIL / 0 SKIP**: `testBackgroundLoadFailureRecoversOriginalDocument` прошёл CPM assertions, но `TestRunHelper.swift:453` не дождался освобождения window views за 5 секунд; следующий `testInstallDuringSessionInitIsDelivered` остановился с **SIGINT**, runner перезапустил host. P2 evidence подтверждает native dashboard + page initResp после recovery для existing tab, new window и new tab; этот run всё равно считается неуспешным. В production DEBUG есть `ensureObjectDeallocated(..., .interrupt)` → `raise(SIGINT)`; связь с конкретным удерживающим reference пока не доказана, retained root cause не установлен. Функциональные ожидания и deallocation checks не отключались. Полные attachments, diagnostics, summary и логи сохранены в `/private/tmp/cpm-pr7379-error6-fix-20261019/current-app-restored-first-*`; начат полный restored-ON retry на тех же бинарниках (`current-app-restored-retry.xcresult`). Это не отрицательный контроль, failures не исключаются из истории.
|
||||
На чистом harness `6d04496882` (production `8275bcce36`) первый ON завершился **9 PASS**, OFF — **0 PASS / 6 ожидаемых functional FAIL / 0 SKIP**, SHA256 app/test modules совпали. Первый restored-ON (`current-app-restored.xcresult`) завершился **7 PASS / 2 FAIL / 0 SKIP**: `testBackgroundLoadFailureRecoversOriginalDocument` прошёл CPM assertions, но `TestRunHelper.swift:453` не дождался освобождения window views за 5 секунд; следующий `testInstallDuringSessionInitIsDelivered` остановился с **SIGINT**, runner перезапустил host. P2 evidence подтверждает native dashboard + page initResp после recovery для existing tab, new window и new tab; этот run всё равно считается неуспешным. В production DEBUG есть `ensureObjectDeallocated(..., .interrupt)` → `raise(SIGINT)`; связь с конкретным удерживающим reference пока не доказана, retained root cause не установлен. Функциональные ожидания и deallocation checks не отключались. Полные attachments, diagnostics, summary и логи сохранены в `/private/tmp/cpm-pr7379-error6-fix-20261019/current-app-restored-first-*`; начатый полный restored-ON retry на тех же бинарниках (`current-app-restored-retry.xcresult`) затем завершился **9 PASS / 0 FAIL / 0 SKIP**. SHA256 app/test modules совпали; source и assertions между попытками не менялись. Это не отрицательный контроль, failures не исключаются из истории.
|
||||
@@ -6,9 +6,9 @@ tags:
|
||||
- cpm
|
||||
- webkit
|
||||
---
|
||||
> **Актуально — 19 октября 2026, error-6/P4 finding исправлен и опубликован.** Production [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379) **`8275bcce36`**, база #7376 **`39fe56af4c`**; содержит fix **`fc124938e0`** и 2 штатные регрессии. На обновлённой базе **201 shared tests PASS**, strict lint 4 / 0. Известный failed startup инвалидируется до освобождения wait; retained callback больше не вызывает P4 detection или late reload. Review-only harness **`6d04496882`** содержит текущий production head и ровно 12 дополнительных paths; README: 38 новых shared regressions. Первый signed app ON: 9 PASS на `fc124938e0`; финальный цикл ON 9 → OFF 6 → ON 9 на `8275bcce36` выполняется в чистом checkout. iOS app build PASS относится к `fc124938e0` до обновления базы. Параллельные незакоммиченные изменения исходного worktree не включены в проверку. Формы/default late flag не менялись. Прежние открытые findings сохранены как история.
|
||||
> **Актуально — 19 октября 2026, error-6/P4 finding закрыт в опубликованном PR.** [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379) **`8275bcce36`**, база #7376 **`39fe56af4c`**, содержит fix **`fc124938e0`** + 2 штатные регрессии. **201 shared PASS**, strict lint **4 files / 0 violations**. Signed app: **ON 9 PASS → OFF 6 ожидаемых functional FAIL → restored ON 9 PASS**, 0 SKIP, те же бинарники; первый restored attempt **7 PASS / 2 FAIL** (teardown timeout / SIGINT) сохранён, повтор выполнен без изменений и отключения проверок. CI завершён: **43 SUCCESS / 17 SKIPPED**, failures/pending нет. Harness **`6d04496882`** содержит production head и ровно **12 review-only paths**; 38 новых shared regressions относительно базы. Проверенный shipping scope: P1/P2 и независимый P4 detection; late reload остаётся default **OFF**, формы не менялись. Прежние открытые findings ниже — история до fix.
|
||||
|
||||
> **Актуально — 19 октября 2026, финальное ревью #7379 после P4 detection.** Проверен опубликованный после rebase **`a00dc4afeb`** / база #7376 **`c7adf28e12`**, 7 commits / 22 paths. Остаётся **1 P2: error-6 startup может ошибочно попасть в P4 detection после позднего callback успешного retry**. На текущем head: **196 существующих shared tests PASS + 2 дополнительных probes PASS / 1 новый probe FAIL**. Проверочная однострочная правка только в изолированной копии даёт **199 PASS**; в PR она не внесена. Pixel validators обеих платформ PASS. CI завершён: **53 SUCCESS / 25 SKIPPED**, failures и pending нет; повторный probe подтвердил тот же незакрытый дефект. Предыдущие 197 unit и app 9→6→9 относятся к `fc87237a47`; новая база убрала один retired-telemetry тест. Подробности и границы воспроизведения — в разделе «Полное ревью после P4 detection — error-6 attribution». История ниже сохранена.
|
||||
> **История ревью — 19 октября 2026, до исправления error-6/P4 в `fc124938e0`.** Проверен опубликованный после rebase **`a00dc4afeb`** / база #7376 **`c7adf28e12`**, 7 commits / 22 paths. Остаётся **1 P2: error-6 startup может ошибочно попасть в P4 detection после позднего callback успешного retry**. На текущем head: **196 существующих shared tests PASS + 2 дополнительных probes PASS / 1 новый probe FAIL**. Проверочная однострочная правка только в изолированной копии даёт **199 PASS**; в PR она не внесена. Pixel validators обеих платформ PASS. CI завершён: **53 SUCCESS / 25 SKIPPED**, failures и pending нет; повторный probe подтвердил тот же незакрытый дефект. Предыдущие 197 unit и app 9→6→9 относятся к `fc87237a47`; новая база убрала один retired-telemetry тест. Подробности и границы воспроизведения — в разделе «Полное ревью после P4 detection — error-6 attribution». История ниже сохранена.
|
||||
|
||||
> **Актуально — 19 октября 2026, P4 detection без reload опубликована и проверена.** [#7379](https://github.com/duckduckgo/apple-browsers/pull/7379): production **`fc87237a47`**, 7 commits / 22 paths; review-only harness **`475095b335`**, 12 paths вне main. Новый dailyAndCount `web_extension_cpm_startup_response_missing` считает P4 candidates независимо от late recovery flag, без reload и safety JavaScript. **197 unit PASS**, signed macOS и iOS app builds PASS, pixel validators PASS, strict lint 6 production + 2 harness / 0. На одних подписанных app/XCTest binaries: **ON 9 PASS → OFF 6 ожидаемых functional FAIL → ON 9 PASS**, без skips/expected failures, SHA256 совпали. Новый detection-only case дважды подтвердил detection = 1 / finishCount = 1 / late recovery OFF / no late reload outcomes; оба late OFF controls также дали по detection = 1. CI нового head: **48 SUCCESS / 21 SKIPPED**, pending/failures нет. Формы не менялись, late reload flag default disabled. PR steps и все три документа актуализированы; worktree возвращён на чистую production branch. Более ранние heads/results сохранены как история.
|
||||
|
||||
@@ -40,8 +40,8 @@ tags:
|
||||
| `alex/cpm-web-extension-remaining-failures` | та же; `a0717cf098cd` | Основное расследование без A/B watchdog: P1 (3 wake), P2 (9 load failure), P3 (2 cache/cleanup), новые P5/P6 (12 lifecycle + 2 flag). Все 28 repro opt-in; `CPMRepro/` untracked. Production dirty telemetry — прежняя копия, не переносить вместе с тестами |
|
||||
| `cpm-repro-harness` | `alex/cpm-repro-harness`; `dfb96279196d` | PR #7378: базовый harness, быстрые CI-контроли, медленные сценарии и raw WebKit characterization; без новых P5/P6 |
|
||||
| `cpm-fix-init-loss` — историческая строка; worktree удалён 16 Oct | `alex/cpm-fix-init-loss`; `7ad771e227bb` | PR #7379: A, первые init при install/upgrade mid-session; красное/зелёное доказательство отдельно от remaining-failures |
|
||||
| **`alex/cpm-fix-p1-p2` — актуально 19 Oct** | **Production `alex/cpm-fix-init-loss`; remote `8275bcce36`** | PR #7379 / база #7376 `39fe56af4c`: 10 commits / 23 paths, 38 новых shared regressions, 201 штатный PASS. Error-6/P4 attribution исправлен `fc124938e0` + 2 штатные регрессии; late flag OFF/ON. Worktree временно на harness, содержит чужие параллельные незакоммиченные изменения; в validation они не включены. Флаги/формы не менялись |
|
||||
| Временно `alex/cpm-fix-p1-p2`; чистый validation checkout `/private/tmp/cpm-pr7379-error6-fix-20261019/source` | **`codex/cpm-fix-init-loss-integration-tests`; published `6d04496882`** | Harness содержит production `8275bcce36`; 9 app methods, ровно 12 paths вне main. README: 38 новых shared regressions. Первый signed app ON: 9 PASS на `fc124938e0`; финальный ON 9 → OFF 6 functional FAIL → ON 9 на новой базе выполняется, завершённым пока не объявлен |
|
||||
| **`alex/cpm-fix-init-loss-production` — актуально 19 Oct** | **Production `alex/cpm-fix-init-loss`; published `8275bcce36`** | PR #7379 / база #7376 `39fe56af4c`: 10 commits / 23 paths, 38 новых shared regressions, 201 штатный PASS. Error-6/P4 attribution исправлен `fc124938e0` + 2 штатные регрессии при late flag OFF/ON. CI 43 SUCCESS / 17 SKIPPED, без failures/pending. Незакоммиченные параллельные изменения worktree не включены в validation; чистый checkout `/private/tmp/cpm-pr7379-error6-fix-20261019/source` возвращён на production head. Формы/default late OFF не менялись |
|
||||
| Временно `alex/cpm-fix-p1-p2`; app validation выполнен в чистом `/private/tmp/cpm-pr7379-error6-fix-20261019/source` | **`codex/cpm-fix-init-loss-integration-tests`; published `6d04496882`** | Harness содержит production `8275bcce36`; 9 app methods, ровно 12 paths вне main, README: 38 новых shared regressions. Signed app ON 9 PASS → OFF 6 functional FAIL → restored ON 9 PASS; detection-only OFF без reload PASS дважды; SHA256 app/test modules совпали. Первый restored 7 PASS / 2 FAIL (teardown/SIGINT) сохранён, повтор без изменения binaries/assertions. Параллельные dirty edits исходного worktree не трогались |
|
||||
| `cpm-fix-network-crash` | `alex/cpm-fix-network-crash`; local `f1085846e7ff` | B поверх A; 5 network/termination сценариев в FullFailure + 11 watchdog unit tests. Remote PR #7381 остаётся на `39f94e12eaa4`, красный Non-Sandbox; локальный fix не запушен |
|
||||
| `cpm-fix-pixels` | `alex/cpm-fix-pixels`; `d6d800846d1f` | A/B + PR0, измерение `first_load_wait`/`background_restart`; отдельный PR не зарегистрирован в текущем статусе |
|
||||
| `alex/cpm-messaging-readiness-telemetry` | та же; `619869ee84c6` | PR0 #7376: readiness/failure/recovery параметры, CI без failure/pending, review required |
|
||||
@@ -589,6 +589,8 @@ CI актуального head завершён: **53 SUCCESS / 25 SKIPPED**, fa
|
||||
|
||||
## Исправление error-6/P4 finding в production PR — 19 октября 2026
|
||||
|
||||
### Первоначальная публикация `fc124938e0`
|
||||
|
||||
Опубликован `fc124938e040533e8ea9ef04df9d313d0e9d5dcb` в #7379, поверх `a00dc4afeb`: 2 изменённых файла, 8 commits / 22 paths относительно #7376. Observer принимает только background-load error 6 из `WKWebExtensionContextErrorDomain`. Для совпадающего pending context он инвалидирует startup/document recovery до `clearEmbeddedBackgroundStartup()`; retained successful callbacks после retry уже не могут объявить этот failed startup успешным P4 или запустить document preflight.
|
||||
|
||||
**Штатные тесты теперь в PR**, в `WebExtensionManagerTests.swift`:
|
||||
@@ -599,11 +601,35 @@ CI актуального head завершён: **53 SUCCESS / 25 SKIPPED**, fa
|
||||
|
||||
Harness обновлён `475095b335 → f4f135766a7fd67096ebc6a973919cb5a464d7ec` обычным merge/push, без переписывания истории. Конфликты в manager/shared tests разрешены точным production-кодом. Актуальный production head — предок harness; diff **ровно 12 harness-only paths**, старые telemetry/test deletions больше не возвращаются. README обновлён: 38 новых shared regressions, 10 manager regressions. Тестовые steps в PR остаются 9 PASS → OFF 6 functional FAIL → ON 9 PASS.
|
||||
|
||||
**Финальная app validation текущего head: выполняется.** Подписанный macOS build-for-testing и ON/OFF/ON ещё не объявляются завершёнными. Фикс уже в опубликованном production PR; предыдущая candidate-only правка больше не описывает актуальное состояние. Формы и default-disabled late recovery flag сохранены.
|
||||
**Первоначальный app этап:** первый build-for-testing выявил ссылки fixture на удалённые telemetry API. Исправлен только harness (`eb3865b594`): evidence строится через текущий public episode metadata adapter, добавляется локальный raw view count без отправки synthetic pixel. Затем signed ON дал 9 PASS на production `fc124938e0`. Фикс уже опубликован; предыдущая candidate-only правка больше не описывает актуальное состояние. Формы и default-disabled late recovery flag сохранены.
|
||||
|
||||
Artifacts: `/private/tmp/cpm-pr7379-error6-fix-20261019/`: `red-before-fix.log`, `shared-tests.log`, `lint.log`, `ios-build.log`, `heads-and-checks.json`, `app-build.log`/`app-build.xcresult`, `pr-progress.json`; последующие app bundles будут в этой же папке.
|
||||
Artifacts: `/private/tmp/cpm-pr7379-error6-fix-20261019/`: `red-before-fix.log`, `shared-tests.log`, `lint.log`, `ios-build.log`, `heads-and-checks.json`, `app-build.log`/`app-build.xcresult`, `pr-progress.json`; все последующие app bundles также сохранены в этой папке.
|
||||
|
||||
### Итог после обновления telemetry/main и WebKit error API
|
||||
|
||||
Пока выполнялась проверка, production обновлён обычными merge до **`8275bcce368ea63b3777b42b6007beb48d768409`**, база #7376 — **`39fe56af4c35bf034d570f04dd58f59bd41eb2b6`**. `fc124938e0` — предок опубликованного PR, его fix и обе штатные регрессии сохранены. Текущий diff: **10 commits / 23 paths**. Safe WebKit error copying и изменения base/main учтены; retired EventsListener mock удалён из изолированной package-копии.
|
||||
|
||||
На обновлённом production **201 selected shared tests PASS / 0 failures**: 14 diagnostics + 20 recovery + 77 health monitor + 35 lifecycle + 55 manager. Относительно текущей базы #7376 — **38 новых shared regressions**, включая обе новые error-6/P4 проверки; первая покрывает late recovery OFF и ON. Strict SwiftLint на 4 изменённых Swift files: **0 violations**. Первоначальный полный iOS Simulator app build PASS относится к `fc124938e0`; для текущего `8275bcce36` завершились зелёным iOS PR Checks и iOS UI Tests в CI.
|
||||
|
||||
Harness опубликован **`6d04496882ad25e05dceb622305a50c7e51aeb37`**, содержит актуальный production `8275bcce36`; diff **ровно 12 fixture-only paths**, вне main. История синхронизации сохранена: `f4f135766a` → `eb3865b594` → `6d04496882`, обычные merge/push. README отражает 38 новых shared regressions и 10 manager regressions. Параллельные незакоммиченные правки `alex/cpm-fix-p1-p2` и отдельного `alex/cpm-fix-init-loss-production` не трогались и не включались в validation; app запускался из чистого checkout `/private/tmp/cpm-pr7379-error6-fix-20261019/source`. После тестов он возвращён на detached production `8275bcce36`; production-ветка уже занята параллельным worktree, её повторный checkout был безопасно отклонён Git.
|
||||
|
||||
После смены базы app build сначала остановился на устаревшем локальном workspace lockfile; выполнено разрешение зависимостей. Затем выяснилось, что reused DerivedData импортирует старые standalone `.swiftmodule` вместо свежих PackageFrameworks (конкретно отсутствовал `DataClearingActionSkipping` из нового BrowserServicesKit). Сохранены 11 подтверждённых устаревших модулей в `stale-standalone-modules/` с manifest; исходники не менялись. После этого подписанная app-сборка прошла. Подпись: Apple Development, Team `HKE973VLUW`; host macOS 26.7.1 (25G241).
|
||||
|
||||
**Фактическая app-матрица на одном build:**
|
||||
- ON: `current-app-on-3.xcresult` — **9 PASS / 0 FAIL / 0 SKIP**.
|
||||
- OFF: `current-app-off.xcresult` — **0 PASS / 6 functional FAIL / 0 SKIP**; install, upgrade и slow wake теряют first response; error-6 recovery, late install и late upgrade завершаются ожидаемым recovery timeout. Host/setup failures отсутствуют; это отрицательный контроль, не успешный test run.
|
||||
- Первый restored ON: `current-app-restored.xcresult` — **7 PASS / 2 FAIL / 0 SKIP**: P2 functional recovery завершился, но views не освободились за teardown budget; следующий install host остановился с SIGINT. Этот результат сохранён как failed, retained root cause не установлен; подробности ниже.
|
||||
- Полный restored ON retry: `current-app-restored-retry.xcresult` — **9 PASS / 0 FAIL / 0 SKIP**. Выполнен `test-without-building`, проверки/assertions не ослаблялись. SHA256 app debug dylib и XCTest executable совпали до OFF, после OFF и после restored ON; compilation между фазами не было.
|
||||
|
||||
P4 detection-only method прошёл в обоих успешных ON runs: late flag **OFF**, `detections=1`, `finishCount=1`, нет late reload/recovery events. Это счётчик candidate signature, а не доказательство конкретного root cause каждого пользовательского инцидента. Новый shared regression отдельно исключает из P4 известный failed startup после retained successful callback.
|
||||
|
||||
**CI текущего head завершён: 43 SUCCESS / 17 SKIPPED, 0 failures / 0 pending**; macOS PR Checks, iOS PR/UI Checks, BSK, lint и pixel schema зелёные. Сохранены `final-pr.json` и `current-ci-runs.json`. Пользовательские title и лаконичное PR description сохранены: 10 точных однострочных steps, отдельный harness, ON → OFF → ON, без таблицы feature flags и служебных local-validation секций.
|
||||
|
||||
**Итог для rollout:** error-6/P4 review blocker закрыт в production PR; P1/P2 и независимый P4 detection проверены. Late document reload остаётся default **OFF**. Shadow DOM / controlled form hardening по просьбе пользователя отложен; включение late reload в production — отдельный scope. Flaky teardown/host failure review-only harness не скрыт и не считается функциональным PASS.
|
||||
|
||||
Полный evidence index: `/private/tmp/cpm-pr7379-error6-fix-20261019/validation-summary.json`; logs + `.xcresult` всех попыток, exported app attachments, `current-app-restored-first-diagnostics/`, `p4-detection-only-evidence.json`, три SHA256 manifests, `harness-only-paths.txt`, `final-pr.json`. Старые результаты и failed attempts сохранены.
|
||||
|
||||
|
||||
### Промежуточный app-run: teardown / SIGINT — 19 октября 2026
|
||||
|
||||
На чистом harness `6d04496882` (production `8275bcce36`) первый ON завершился **9 PASS**, OFF — **0 PASS / 6 ожидаемых functional FAIL / 0 SKIP**, SHA256 app/test modules совпали. Первый restored-ON (`current-app-restored.xcresult`) завершился **7 PASS / 2 FAIL / 0 SKIP**: `testBackgroundLoadFailureRecoversOriginalDocument` прошёл CPM assertions, но `TestRunHelper.swift:453` не дождался освобождения window views за 5 секунд; следующий `testInstallDuringSessionInitIsDelivered` остановился с **SIGINT**, runner перезапустил host. P2 evidence подтверждает native dashboard + page initResp после recovery для existing tab, new window и new tab; этот run всё равно считается неуспешным. В production DEBUG есть `ensureObjectDeallocated(..., .interrupt)` → `raise(SIGINT)`; связь с конкретным удерживающим reference пока не доказана, retained root cause не установлен. Функциональные ожидания и deallocation checks не отключались. Полные attachments, diagnostics, summary и логи сохранены в `/private/tmp/cpm-pr7379-error6-fix-20261019/current-app-restored-first-*`; начат полный restored-ON retry на тех же бинарниках (`current-app-restored-retry.xcresult`). Это не отрицательный контроль, failures не исключаются из истории.
|
||||
На чистом harness `6d04496882` (production `8275bcce36`) первый ON завершился **9 PASS**, OFF — **0 PASS / 6 ожидаемых functional FAIL / 0 SKIP**, SHA256 app/test modules совпали. Первый restored-ON (`current-app-restored.xcresult`) завершился **7 PASS / 2 FAIL / 0 SKIP**: `testBackgroundLoadFailureRecoversOriginalDocument` прошёл CPM assertions, но `TestRunHelper.swift:453` не дождался освобождения window views за 5 секунд; следующий `testInstallDuringSessionInitIsDelivered` остановился с **SIGINT**, runner перезапустил host. P2 evidence подтверждает native dashboard + page initResp после recovery для existing tab, new window и new tab; этот run всё равно считается неуспешным. В production DEBUG есть `ensureObjectDeallocated(..., .interrupt)` → `raise(SIGINT)`; связь с конкретным удерживающим reference пока не доказана, retained root cause не установлен. Функциональные ожидания и deallocation checks не отключались. Полные attachments, diagnostics, summary и логи сохранены в `/private/tmp/cpm-pr7379-error6-fix-20261019/current-app-restored-first-*`; начатый полный restored-ON retry на тех же бинарниках (`current-app-restored-retry.xcresult`) затем завершился **9 PASS / 0 FAIL / 0 SKIP**. SHA256 app/test modules совпали; source и assertions между попытками не менялись. Это не отрицательный контроль, failures не исключаются из истории.
|
||||
Reference in new issue
Block a user