Menu ▾ ▴

#111 Notification pipeline hardening: watchdog coverage, grid re-attach, characterData rows, click routing across reloads

closed
nobody
2026-07-18
2026-07-17
Anonymous
No

Originally created by: kristofferR

Four verified weaknesses in the notification pipeline (inject/src/messenger/features/notifications.ts, selector-health.ts):

  • The selector-health watchdog checks a looser chat-list selector than the '[role="navigation"] [role="grid"]' the scanner requires to start, so the scanner can be dead while the watchdog stays green — the silent "badge but no banner" mode. The aria-labels five other features key on are not watched at all.
  • waitForGrid disconnects after the first match and never re-attaches if React replaces the grid element; the MutationObserver then watches a detached node forever. A cheap grid.isConnected check in the poll would self-heal.
  • inspect() ignores characterData mutation targets (Text nodes — exactly how React applies in-place preview updates), starving the arrival tracker's row-change correlation.
  • Notification click routing lives in a per-load in-page handler map; after the ~15-minute auto-refresh reload a click only focuses the window instead of opening the thread. Carrying the serializable threadPath in the carrier:notify payload would let the native side route clicks after any reload.

Ref [#80].

Related

Tickets: #135
Tickets: #137
Tickets: #80

Discussion

  • Anonymous

    Anonymous - 2026-07-18

    Originally posted by: kristofferR

    Fixed in [#137]. The scanner re-attaches when React swaps out the conversation grid, observes childList/characterData mutations, keeps a backed-off safety poll as a watchdog, and routes notification clicks across reloads via the native route map.

     

    Related

    Tickets: #137

  • Anonymous

    Anonymous - 2026-07-18

    Ticket changed by: kristofferR

    • status: open --> closed
     

Log in to post a comment.