[2026-10-15] eagle: personal/projects/virfield.md work/projects/cpm-status-2026-10-15.md

This commit is contained in:
Alexey Martemyanov committed 2026-10-15 22:51:04 +06:00
1 parent a807c4189c
commit 9067cb8097
2 files changed
+42 -2

No files matched your search

+32 -2
View File
@@ -82,7 +82,7 @@ tags:
| **P3. Контекст загружен, view нет** | `load` / `load>base_url_changed` | 17.1k + 0.9k / 162 + 81 | задержка очистки при смене `baseURL` воспроизведена на macOS при большом кэше (около 10 минут заполнения); iOS-гонка запуска (`bg_view_creations=0`, восстановление сессии, первые 30 с) не воспроизведена: холодный старт в harness'е отвечает за миллисекунды | кандидат: стабильный `baseURL` (ветка `cpm-stable-base-url`: не доведён, меняет URL всем расширениям, не прогнан через harness, старая база). Фикс WebKit 318756@main, номер сборки ОС не проверен |
| **P4. Первая загрузка** | `load>view>proxy_on` | 6.8k + 2.3k / 570 | да (фикс A) | фикс A |
| **P5. Фон выгружен в момент сбоя** | `proxy_on>dealloc>view>proxy_on>dealloc` | 1.9k / 494 | да: test-only потеря регистрации живой вкладки и пустые runtime listener metadata с первого старта; долгий документ и пауза main actor P5 не дали (§10) | кандидаты: корректный tab lifecycle; при пустых metadata explicit loadBackgroundContent после восстановления listener. Естественный вход не найден |
| **P6. macOS: вкладка без расширения** | `load>view>proxy_on>dealloc` / `load>view>proxy_on`; варианты с `extension_updated` отдельно | iOS ≈0 / 627 + 235 | до idle воспроизведено отсутствием controller; полный прогон см. §10 | гипотеза: view создана без текущего controller или сохраняет controller прежнего менеджера; естественный вход не найден |
| **P6. macOS: вкладка без расширения** | `load>view>proxy_on>dealloc` / `load>view>proxy_on`; варианты с `extension_updated` отдельно | iOS ≈0 / 627 + 235 | да: test-only отсутствие controller до/после idle и сохранение controller прежнего менеджера (§10) | корректно подключать current controller при создании view; reload контекста неверно подключённую view не чинит. Естественный вход не найден |
| **Network заменён** | | см. раздел 4 | да (краш, worker мёртв при том же view) | фикс B |
| **«Здоровый» остаток, other** | | iOS 12.5%, macOS 22% | нет | нет гипотезы |
@@ -143,7 +143,7 @@ tags:
4. **Судьба фикса A:** слабое основание в данных, не совпадает с названием задачи; решить, сливать ли без зелёного измерения эффекта через `first_load_wait`.
5. **P3:** довести стабильный `baseURL` (ограничить встроенными расширениями без `web_accessible_resources`, прогнать harness, перенести на свежий `main`), проверить номер сборки ОС с фиксом 318756@main.
6. **Локальные repro для P1–P3** отдельным PR без фиксов (по образцу harness'а, `requireLocalRun`), чтобы гонять после релизов WebKit.
7. **iOS:** воспроизведение error 6 на реальном устройстве; сценарий «вкладка без расширения» на macOS.
7. **iOS:** воспроизведение error 6 на реальном устройстве. P5/P6 на macOS воспроизведены контролируемыми условиями (§10); остаётся найти естественные входы в потерю регистрации/listener metadata и отсутствующий/прежний controller.
8. Блокеры по ревью: #7376 и #7378 ждут ревью; #7384/#7385 стоят на #7376.
## 9. Методика и инструменты
@@ -286,3 +286,33 @@ Watcher больше не удерживает WKWebView через await, а id
**Ограничения:** все положительные воспроизведения требуют test-only условия; естественные production-триггеры отсутствующего controller/утраты listener metadata не найдены. Настоящая iOS suspension не проверена. Фиксы поведения приложения этим исследованием не добавлялись.
Запущен обычный пакетный прогон `swift test --disable-automatic-resolution --skip-build` без repro-флагов; результат будет записан ниже. Финальный strict SwiftLint семи изменённых файлов: 0 нарушений (`--no-cache`). SHA-1 существующего dirty Package.resolved не изменился: `7ccce20acd452656c9bf2d2fa186d044e4a8185f`.
### Финальная проверка пакета и файлы
**Обычный пакетный прогон завершён успешно:** `swift test --disable-automatic-resolution --skip-build`, 474 XCTest, из них 24 opt-in repro пропущены, **0 failures**, 11.344 с. Лог: `/private/tmp/cpm-p5-p6-20261015/package-tests.log`. Отдельный Swift Testing runner: 0 тестов. Длительные эксперименты запускались отдельно с обоими repro-флагами; все 10 текущих методов имеют зелёный результат в сводке.
**Изменены только тестовые файлы этой работы** внутри выбранного worktree:
- добавлены `CPMRepro/CPMReproLifecycleHypothesisTests.swift` (10 тестов) и `CPMRepro/CPMReproDelayedResource.swift`;
- расширены `CPMReproHarness.swift`, `CPMReproTabs.swift`, `CPMReproSupport.swift`, `CPMReproPrelude.swift`, `CPMReproTestCase.swift`;
- existing dirty production/telemetry changes не включались в эту работу, Package.resolved сохранил первоначальную контрольную сумму. Commit/PR/push не делались.
Команда полного повторения новых экспериментов из `SharedPackages/WebExtensions`:
```sh
CPM_REPRO=1 CPM_REPRO_P5_P6=1 swift test --disable-automatic-resolution --filter CPMReproLifecycleHypothesisTests
```
Эта полная команда приведена для повторения: в текущей сессии десять методов проверены раздельными группами, а не одним финальным запуском всех десяти.
| Текущий тест | Последний результат, с | Лог |
|---|---:|---|
| CurrentControllerBeforeContextLoadRemainsHealthy | pass, 1.190 | p5-refined-and-controls.log |
| TabWithoutControllerMatchesP6BeforeIdleUnload | pass, 8.569 | p5-p6-final-regressions-and-stall.log |
| TabWithoutControllerMatchesP6AfterIdleUnload | pass, 38.543 | p5-p6-final-regressions-and-stall.log |
| ExistingTabKeepsPreviousManagerController | pass, 9.167 | p5-p6-final-regressions-and-stall.log |
| ForgottenLiveTabDoesNotWakeBackgroundAndMatchesP5 | pass, 72.737 | p5-p6-final-regressions-and-stall.log |
| MissingRuntimeListenerOnOneWakeRecoversAfterNextIdle | pass, 62.633 | p5-p6-final-regressions-and-stall.log |
| NoRuntimeListenerMetadataFromFirstStartupMatchesP5 | pass, 70.149 | p5-refined-and-controls.log |
| SlowHealthyDocumentsWakeBackgroundAgainAtFinishWithoutFailure | pass, 70.683 | p5-refined-and-controls.log |
| SlowDocumentsWithLostDashboardDoNotMatchP5 | pass, 80.181 | p5-refined-and-controls.log |
| MainActorStallDelaysActualFailureSnapshots | pass, 71.027; matchesP5=false | p5-p6-final-regressions-and-stall.log |
Зелёный результат characterization-теста означает, что проверенное условие и ожидаемый исход подтверждены. Он не означает исправление CPM или доказательство естественного production-триггера.