diff --git a/work/projects/cpm-web-extension-breakage-validation.md b/work/projects/cpm-web-extension-breakage-validation.md index 757e97d7..35461d53 100644 --- a/work/projects/cpm-web-extension-breakage-validation.md +++ b/work/projects/cpm-web-extension-breakage-validation.md @@ -11,22 +11,22 @@ ## Статус гипотез -| Проблема | Статус | Результат | -|---|---|---| -| Forced death background process → persistent all-tabs CPM outage | **Подтверждено воспроизведением** | Kill background PID ломает CPM; reload и новая вкладка не помогают, Fire восстанавливает. | -| Natural crash / memory / CPU termination в production | **Не проверено** | Механизм доказан, реальная частота и связь с outage требуют M3 и последующей production validation. | -| Close Other Tabs forget-ит retained tab | **Подтверждено и исправлено в M1** | Сохраняется тот же экземпляр Tab без ложного didCloseTab. | -| Duplicate Tab из popup переносит original | **Подтверждено и исправлено в M1** | В main window уходит копия, source остаётся отдельным объектом. | -| Pin/unpin/reorder/move/merge теряют lifecycle tab | **Подтверждено и исправлено в M1** | Tab сохраняет identity; WebKit получает `didMoveTab` с old index/window вместо ложных close/open. Pinned tabs имеют корректный flattened index. | -| Закрытие окна forget-ит shared pinned/other-owned tabs | **Подтверждено и исправлено в M1** | `didCloseTab` получают только реально закрытые tabs; shared pinned сохраняются и при закрытии последнего окна. | -| Нестабильный WebExtension base URL | **Исправлено и локально проверено в M2** | URL детерминирован по identifier и сохраняется между load/reload; production migration/storage validation остаётся rollout-задачей. | -| Startup/session-restore content-script miss | **Подтверждено как transient** | Не объясняет устойчивый all-tabs outage. | -| Failed background load навсегда застревает в m_backgroundWebView | **Исходный вывод отвергнут** | WebKit способен повторно загрузить background; устойчивый outage требует повторяемой причины/traffic. | -| Event starvation / JSC hang / native messaging stall | **Не проверено** | Оставлено в diagnostic buckets M3. | -| Critical memory pressure как конкретный trigger | **Не воспроизведено** | Не считать root cause без production correlation. | -| Network process restart как trigger | **Отвергнуто** | На проверенной сборке CPM восстановился. | -| removeAllUserScripts удаляет WebExtension scripts | **Отвергнуто** | WebKit использует RemoveWebExtensions::No. | -| Feature-flag transition / scriptlet reload / обычный page JS как all-tabs cause | **Отвергнуто** | Это другой context или tab-local execution. | +| Проблема | Статус | Результат | +| ------------------------------------------------------------------------------- | ---------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | +| Forced death background process → persistent all-tabs CPM outage | **Подтверждено воспроизведением** | Kill background PID ломает CPM; reload и новая вкладка не помогают, Fire восстанавливает. | +| Natural crash / memory / CPU termination в production | **Не проверено** | Механизм доказан, реальная частота и связь с outage требуют M3 и последующей production validation. | +| Close Other Tabs forget-ит retained tab | **Подтверждено и исправлено в M1** | Сохраняется тот же экземпляр Tab без ложного didCloseTab. | +| Duplicate Tab из popup переносит original | **Подтверждено и исправлено в M1** | В main window уходит копия, source остаётся отдельным объектом. | +| Pin/unpin/reorder/move/merge теряют lifecycle tab | **Подтверждено и исправлено в M1** | Tab сохраняет identity; WebKit получает `didMoveTab` с old index/window вместо ложных close/open. Pinned tabs имеют корректный flattened index. | +| Закрытие окна forget-ит shared pinned/other-owned tabs | **Подтверждено и исправлено в M1** | `didCloseTab` получают только реально закрытые tabs; shared pinned сохраняются и при закрытии последнего окна. | +| Нестабильный WebExtension base URL | **Исправлено и локально проверено в M2** | URL детерминирован по identifier и сохраняется между load/reload; production migration/storage validation остаётся rollout-задачей. | +| Startup/session-restore content-script miss | **Подтверждено как transient** | Не объясняет устойчивый all-tabs outage. | +| Failed background load навсегда застревает в m_backgroundWebView | **Исходный вывод отвергнут** | WebKit способен повторно загрузить background; устойчивый outage требует повторяемой причины/traffic. | +| Event starvation / JSC hang / native messaging stall | **Не проверено** | Оставлено в diagnostic buckets M3. | +| Critical memory pressure как конкретный trigger | **Не воспроизведено** | Не считать root cause без production correlation. | +| Network process restart как trigger | **Отвергнуто** | На проверенной сборке CPM восстановился. | +| removeAllUserScripts удаляет WebExtension scripts | **Отвергнуто** | WebKit использует RemoveWebExtensions::No. | +| Feature-flag transition / scriptlet reload / обычный page JS как all-tabs cause | **Отвергнуто** | Это другой context или tab-local execution. | ## Worktrees