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

This commit is contained in:
Alexey Martemyanov committed 2026-10-16 00:52:51 +06:00
1 parent 1d4730ab05
commit d333e88688
1 file changed
+8
+8
View File
@@ -569,3 +569,11 @@ Known-failures suite начат с включённым expensive flag. Перв
- Реальный shared-pinned-window close дошёл до WebKit `Tab not found` после двух здоровых idle cycles. Однако XCTest host завершился **signal INT** без финальных assertions/attachment; это пока не green app-level P5. Запущен отдельный повтор со stack sample, причина SIGINT ещё не установлена.
Добавлен 20-й метод P3 `testLargePersistentCacheRecordsContextReloadInjectionGap`: opt-in `CPM_APP_INTEGRATION_CACHE=1`, свежие собственные UUID website/controller stores, 20k loopback cache entries, настоящий baseURL-changing reload и проверка actual no-view failure. Сборка signed успешна, strict SwiftLint всех 11 текущих изменённых Swift — 0 violations. P3 ещё не исполнялся; normal suite остаётся nonpersistent. Persistent данные удаляются WebKit API только для UUID данного теста.
### Recovery controls исправлены; источник INT в P5 установлен по коду
`signed-known-retests.xcresult`: background crash/reload control **pass 3.328 с**, Network global crash/reload control **pass 21.972 с** после explicit production readiness wait. Никакой browser fix для этих проверок не добавлялся. Повтор P5 опять завершился INT спустя около 4 с после window close, до timeout assertion. Отложенный stack sample не успел: к моменту съёмки test host уже завершился.
Найден штатный DEBUG caller: `MainWindowController.windowWillClose` вызывает `self.ensureObjectDeallocated(after: 4.0, do: .interrupt)`; `NSObjectExtension` → `breakByRaisingSigInt` → `raise(SIGINT)`. Тест держал `let controller` в async-method scope и закрытое NSWindow в harness.windows; это тестовое удержание, не CPM-сигнатура. Исправлено: pinning в ограниченном autoreleasepool, close удаляет окно из owned collection немедленно, surviving window index скорректирован. Проверка приложения не отключается. Signed build успешна, запущен повтор только P5.
Уточнение P5 после освобождения явной ссылки: первый actual failure уже был получен, но второй вызов helper снова мог выбрать закрытое окно. `WindowControllersManager.windowController(for: Tab)` сначала возвращает controller из `tab.webView.window`, даже если тот уже unregister. Поэтому automation могла повторно открыть/удержать closed window вместо пользовательского действия в surviving window и попасть в DEBUG deallocation interrupt. Исправлено только в harness: выбор из registered mainWindowControllers; shared pinned tab заранее выбирается в surviving window через настоящий TabCollectionViewModel.select. Production lifecycle/registration не подделывается, guard приложения остаётся включён. Ещё один повтор P5 необходим, прежний SIGINT не объявляется доказательством app crash/CPM failure.