Originally created by: kristofferR
A real Messenger message arrived (2026-07-10 ~06:05, official v1.2.3, notarized, running since ~02:13): the unread badge updated, but no notification was delivered at all — nothing presented, and nothing in Notification Center. Carrier.log showed notification authorization granted at launch and no errors.
mute_notifications / hide_notification_preview — both off.LSRegisterURL wins the lookup.Notification constructor (new dev-only __carrier_mcp_notify_test__ command in mcp-bridge.js) was delivered and presented:usernoted: Delivering <NotificationRecord app:"io.github.kristofferr.carrier" ...> to [ .alert .lockScreen .notificationCenter ]
usernoted: Presenting <NotificationRecord ...> as banner (["badge", "sound", "alert"])Installing an ad-hoc-signed debug build over /Applications/Carrier.app immediately broke notifications: both requestAuthorization and addNotificationRequest fail with UNErrorDomain error 1 (notificationsNotAllowed). Rebuilding the same code signed with the Developer ID identity restored the grant. Official builds are unaffected, but local debug builds used for notification work must be signed with APPLE_SIGNING_IDENTITY.
The badge rides document.title — a separate path — so it only proves Facebook's JS saw the message. The one unverified link is Facebook's page code never constructing a Notification for the real message (most plausibly gated on page visibility, or an FB-side notification setting for this browser/session).
Content-free breadcrumbs now cover every hop, so the next real-message failure pinpoints itself in Carrier.log:
notify.fired diag when Facebook constructs a Notification (includes document.visibilityState)carrier:notify received (id N) receipt + payload parse failuresaddNotificationRequest completion errors are logged (previously swallowed)Reproduce with a real incoming message (window visible vs. hidden) on the instrumented build and read the breadcrumbs:
notify.fired → Facebook never fired; investigate FB-side gatingnotify.fired but no carrier:notify received → emit/IPC hop broken
Tickets: #110
Tickets: #111
Tickets: #135
Tickets: #76
Tickets: #77
Tickets: #79
Tickets: #84
Tickets: #86
Ticket changed by: kristofferR
Originally posted by: kristofferR
Resolved in [#137] (merged to
main). The root cause identified in this investigation — Facebook's page code not constructing aNotificationfor a real incoming message (the badge updates viadocument.title, but no Web Notification ever fires) — is now covered by the row-driven fallback delivery path: the injected bridge watches the conversation list and fires a native notification when an unread conversation's preview changes, independent of whether Facebook constructs aNotification. So "badge updates but no banner" for a genuinely new message now delivers.The two concrete failure modes filed off this issue were also fixed (#109 pairing, [#110] the auto-refresh swallow race), and the content-free
Carrier.logbreadcrumbs from the [#79] instrumentation shipped, so any residual gap still pinpoints itself.Related
Tickets:
#110Tickets:
#137Tickets:
#79