diff --git a/work/projects/cpm-project-summary-2026-11-03.md b/work/projects/cpm-project-summary-2026-11-03.md index ea010b87..7bb1d624 100644 --- a/work/projects/cpm-project-summary-2026-11-03.md +++ b/work/projects/cpm-project-summary-2026-11-03.md @@ -118,14 +118,14 @@ Open: ## 11 ноября: переделка стопки на детект по молчанию вкладки -**Решение.** Детект «страница оценивается по концу документа» (серия из 3, буфер ответов, `background`) заменён на «вкладка молчит»: после коммита подходящей http(s) страницы с загруженным расширением вкладка, от которой расширение не прислало сообщение 30 с времени приложения, считается молчащей и репортится один раз. Поздний ответ всё равно считается ответом, ответ за 2 с до коммита засчитывается, время приостановки приложения не считается, таймеров нет, проверка идёт на событиях. Сообщение привязывается к вкладке по идентификатору вкладки расширения, который приложение узнаёт один раз по единственной совпавшей странице (host + path); сообщение, которое не привязать, отвечает за все подходящие вкладки (лучше пропустить поломку, чем записать рабочую вкладку). Публичного и приватного API для id вкладки расширения нет (проверено по заголовкам SDK и исходникам WebKit). +**Решение.** Детект «страница оценивается по концу документа» (серия из 3, буфер ответов, `background`) заменён на «вкладка молчит»: после коммита подходящей http(s) страницы с загруженным расширением вкладка, от которой расширение не прислало сообщение 30 с времени приложения, считается молчащей и репортится один раз. Поздний ответ всё равно считается ответом, время приостановки приложения не считается, таймеров нет, проверка идёт на событиях. Сообщение привязывается к вкладке по идентификатору вкладки расширения, который приложение узнаёт один раз по единственной совпавшей странице (host + path); сообщение, которое не привязать, отвечает за все подходящие вкладки (лучше пропустить поломку, чем записать рабочую вкладку). Публичного и приватного API для id вкладки расширения нет (проверено по заголовкам SDK и исходникам WebKit). **Пиксели.** Остаются два: `web_extension_cpm_breakage` (параметр `tabs`: `one` или `many`, то есть была ли уже молчащая вкладка с последнего сообщения расширения) и `web_extension_cpm_breakage_persistent` (вторая молчащая вкладка в серии, один раз на серию, без параметров). Старые `web_extension_cpm_episode`, `web_extension_cpm_background_load_restart`, `web_extension_cpm_network_process_recovery_applied` удалены в PR 2, отдельного PR 5 нет. Метки `cpmInitProgress` и `last_stage` (PR 4) привязаны к молчащей вкладке; метка никогда не считается ответом. **Раскладка (локально, по одному коммиту на ворктри, не запушено, PR не создавались).** - PR 2 `alex/cpm-pixel-cleanup`: `fac1c98edc` на `6928847174`. Вся чистка, монитор урезан до сопоставления вкладок и сброса бюджета перезапусков; вкладки шлют одно событие коммита с видом навигации `CPMNavigationKind` (ordinary, error page, back/forward, restored session; iOS читает back/forward на старте навигации), а пригодность страницы (http(s) и вид `other`) решает монитор; события старта/финиша/ошибки навигации удалены. 1004 теста пакета. -- PR 3 `alex/cpm-breakage-metric`: `eea85b0812` на PR 2. Молчание по вкладкам, два пикселя, определения обеих платформ, адаптеры. После ревью: вкладки, замолчавшие в одной проверке, все `many`; сообщение до коммита отвечает и для ещё не выученной вкладки; монотонные часы; refresh без ответа (`config_unavailable`/`settings_missing`) не ответ, но сбрасывает бюджет перезапусков. 1050 тестов пакета. -- PR 4 `alex/cpm-init-marks`: `88a8cea7a7` на PR 3. Метки init по вкладкам и `last_stage`; метка учитывается только для текущей страницы вкладки, метки до коммита приписываются новой странице. 1073 теста пакета. Расширение `#3727` не менялось. +- PR 3 `alex/cpm-breakage-metric`: `7f73b25365` на PR 2. Молчание по вкладкам, два пикселя, определения обеих платформ, адаптеры. После ревью: вкладки, замолчавшие в одной проверке, все `many`; монотонные часы; refresh без ответа (`config_unavailable`/`settings_missing`) не ответ, но сбрасывает бюджет перезапусков. +- PR 4 `alex/cpm-init-marks`: `c04485ee0b` на PR 3. Метки init по вкладкам и `last_stage`; метка учитывается только для текущей страницы вкладки. Расширение `#3727` не менялось. Старые коммиты сохранены как `refs/backup/cpm-old-pr3` (`82d29f412a`) и `refs/backup/cpm-old-pr4` (`e8dc96dec2`) в репозитории `apple-browsers.git`. **Проверено:** `swift test` пакета на каждой ветке, мутационные проверки (ответ после проверки, нет сдвига на приостановку, persistent на одной вкладке, нет допуска, метка считается ответом, ранг понижается), валидаторы определений пикселей обеих платформ, SwiftLint strict на изменённых файлах, `xcodebuild build-for-testing` macOS. **Не запускалось:** app-hosted тесты macOS и iOS (кроме трёх тестов `NavigationPixelNavigationResponderTests`, запущенных до запрета), сборка iOS (падает на двух script phases, окружение), реальный WebKit.