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

This commit is contained in:
Alexey Martemyanov committed 2026-10-16 01:08:02 +06:00
1 parent 0ff32c89a7
commit 63bcf84756
1 file changed
+6
+6
View File
@@ -577,3 +577,9 @@ Known-failures suite начат с включённым expensive flag. Перв
Найден штатный 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.
### P5 interrupt: LLDB дал точный объект
Первая попытка attach до idle изменила условия: idle-helper не дождался выгрузки за 45 с; этот debugger run — отдельный infrastructure failure, не результат P5. Attach перенесён только после двух idle cycles и window close.
`pinned-lldb-after-idle.log`: breakpoint в `Common.breakByRaisingSigInt`, stack `NSObject.DeallocationCheckAction.interrupt → ensureObjectDeallocated`, parameter description = **MainWindow has not been deallocated**, line NSObjectExtension.swift:80. Это уточняет прежнюю гипотезу: controller уже прошёл deinit, сработала следующая 8-секундная проверка его окна. Исправления только harness: создание NSWindow/MainWindowController целиком в отдельном autoreleasepool (как в существующих DeallocationTests), lookup/selection не держит controllers через await, closing window немедленно удаляется из owned list. Guards приложения и production window-close path не отключаются. Нужен повтор без debugger; прежние app-level P5 результаты пока red/incomplete, хотя actual first failure/tab-not-found уже получены.