Skip to content

fix(toasts): clicking a message notification opens its conversation - #136

Merged
nixfred merged 1 commit into
nixfred:mainfrom
ianswope:fix/notification-click
Oct 8, 2026
Merged

nixfred merged 1 commit into
nixfred:mainfrom
ianswope:fix/notification-click

Conversation

@ianswope

@ianswope ianswope commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

Problem

Clicking a Blip message notification only dismissed it. The toast's omarchy-exec-argv hint runs qs ipc call nixfred.blip goto <chat>, and goto is refused unless automation=on in bridge.conf. Omarchy's daemon runs the hint in preference to the live default action (Service.qml invokePopupDefault), so with the default automation=off nothing happened.

Fix

  • New ungated IPC notified <chat>, used by the toast hint.
  • It opens the conversation only when Blip toasted that chat this session (in-memory, newest 64) or the chat is still unread; otherwise it opens the list. A local process cannot use it to open (and so mark read) an arbitrary conversation, which is what the automation gate protects.
  • goto and the rest of the automation-gated IPC are unchanged. Code toasts are unchanged (transient, no hint, click copies).

Verified

  • bun test: 750 pass.
  • Deployed, shell restarted, no plugin errors in the qs log.
  • Posted a toast carrying the same hint and fired the daemon's click (notifications invokeLast): Blip opened (list, since that chat had not been toasted).

The toast's omarchy-exec-argv hint called `goto`, which is gated on
automation=on. With the default automation=off the click was refused and
the toast closed having done nothing; the daemon runs the hint instead of
the live default action, so that path never fired either.

The hint now calls a new ungated IPC, `notified`. It opens a conversation
only if Blip toasted that chat this session (memory, newest 64) or the
chat is still unread; anything else opens the list. Another local process
therefore cannot use it to open, and so read, an arbitrary conversation.
Code toasts are unchanged (transient, click copies).
@ianswope
ianswope requested a review from nixfred as a code owner October 8, 2026 00:21
@nixfred
nixfred merged commit 3e06926 into nixfred:main Oct 8, 2026
1 check passed
@nixfred

nixfred commented Oct 8, 2026

Copy link
Copy Markdown
Owner

Merged, thank you Ian. Every message toast was a dead click for anyone on the default automation=off, because the daemon prefers the hint over the live action and goto refused it. Scoping the new ungated door to chats Blip toasted or that are still unread is the right line, and it returns only "shown"/"opened", never content. Live on both my machines; a click on an unknown id opens the list as designed.

One small note for the record, not a change request: because the two answers differ, a same-user process can learn whether a chat id is unread or was just toasted by calling notified and reading the reply. Each probe visibly pops the panel open, so it is noisy and low risk. If you ever touch this again, returning one fixed string would close it.

nixfred added a commit that referenced this pull request Oct 8, 2026
LR-T: blip, change-log, weekly-notes, #136, toasts, ianswope
LR-D: blip

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BeRMdPWNC2myz9U8hEeeCi
@ianswope
ianswope deleted the fix/notification-click branch October 8, 2026 00:34
nixfred pushed a commit that referenced this pull request Oct 8, 2026
It returned "shown" for a toasted or unread chat and "opened" otherwise,
so a same-user process could learn whether a chat id was unread or had
just been toasted by calling it and reading the reply. It now always
returns "opened"; what it opens is unchanged. Raised in the #136 review.
nixfred added a commit that referenced this pull request Oct 8, 2026
WHAT: openNotified() always returns 'opened'; what a click opens is
unchanged (the toasted or still-unread chat, else the list). A ui test pins
exactly one return value. From Ian Swope (github.com/ianswope, X @ianfs),
answering the review note on #136.
WHY: 'shown' vs 'opened' let a same-user process learn whether a chat id was
unread or had just been toasted.
VERIFIED: merged with main, bun 750 pass; door two-way.

LR-T: blip, toasts, notified, ipc, oracle, ianswope
LR-D: blip
LR-R: #137

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BeRMdPWNC2myz9U8hEeeCi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants