[2026-09-21] eagle: work/projects/cpm-web-extension-breakage-validation.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-21 14:17:42 +06:00
1 parent aea04a3e35
commit c12183543e
1 file changed
+16 -16
@@ -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