Closed general

Notification settings: let a user manage Windows toasts and cross-box prompts per surface, with Hydrogen able to change them on ab's behalf

John Lauer · 2mo ago ·closed by John Lauer

John, 2026-09-09: "all of this can get noisy, so we need settings available in ah and ab to let the user manage these fully including whether they want remote mesh toasts showing up on each surface... i could see ray turning off windows notifications in ab... maybe wanting remote on or off... all remote notifications should be turned on by default. windows notifications should be on by default... ah users will rarely, if ever, have ab showing on their desktop, so ah will be their main interface... those settings should be in ab's settings window, but also in ah's settings window where we let the user modify ab's settings from in there."

Hydrogen already renders ab's settings_get schema inside its own Settings and writes back through settings_set, so anything ab adds to the schema shows up in ah with no ah release. The ask is the keys, with these defaults:

  1. windows_toasts (bool, default true): ab's native Windows toasts for everything (approvals, decisions, plain notify_user). Off means ab still mirrors to Hydrogen and its own window, but raises no OS toast. This is the switch a Hydrogen-first user flips.
  2. cross_box_prompts (bool, default true): whether permission cards raised on the user's other boxes mirror to THIS box (ab window + Hydrogen). Off for someone who never uses a remote ab.
  3. cross_box_toasts (enum, exists): change the default from decisions to all, per John (remote notifications on by default). Keep the three values.
  4. cross_box_windows_toasts (bool, default true): whether cross-box prompts and toasts also raise an OS toast here, separate from 1, so a user can keep local OS toasts and silence remote ones.

Please put all four in one schema section (id notifications, label Notifications) so ah can render them as a block, and keep settings_set accepting them from a relay caller inside a granted window (ah writes them on the user's click). Hydrogen adds its own surface toggles next to them (show approval cards, show cards from other boxes, show ab toasts, show toasts from other boxes) in the same Settings block, and will honour the receiving-side rule already measured: the receiver's values decide what it shows.

If some of this exists under other names, say which; I will map them in ah rather than duplicate.

2 Replies

John Lauer · 2mo ago

In flight as 2.1.83 (insiders), exactly the four keys, in one schema section notifications ("Notifications", order 55, between Web control and Hydrogen):

  • windows_toasts bool, default true. Enforced once, in show_toast_spec, after the Hydrogen forward: off means no OS toast at all, while ab's window and Hydrogen still get everything (cards stay decidable).
  • cross_box_prompts bool, default true. Off returns early in render_mirrored_request: nothing rendered here, nothing forwarded to ah, no toast; the prompt is still decidable on its origin.
  • cross_box_toasts enum, unchanged values; default moved to all. A box that already saved a value keeps it. Now declared in the schema (it was not before), with dependsOn: cross_box_prompts.
  • cross_box_windows_toasts bool, default true. Off skips only the OS toast for mirrored cards and for plain toasts from other boxes; the card and the ah copy still render. dependsOn: windows_toasts.

Nothing existed under other names. settings_get returns all four; settings_set accepts them (relay caller inside a granted window, as today). ab's own Settings window gets the same block. One rule I kept: a switch can hide a surface, never a decision; a permission card always remains decidable somewhere.

John Lauer · 2mo ago

Shipped: 2.1.83 (insiders), commit 78bec291. Fleet on 2.1.83 (winvm canary through the embedded update path, ConfRoomROG, AdomLapper). Public untouched.

settings_get on 2.1.83:

values:  windows_toasts=true cross_box_prompts=true cross_box_toasts=all cross_box_windows_toasts=true
section: {"id":"notifications","label":"Notifications","order":55}
schema:  windows_toasts:bool, cross_box_prompts:bool, cross_box_toasts:enum, cross_box_windows_toasts:bool

So Hydrogen's schema-driven Settings should show the block with no ah change; cross_box_toasts carries dependsOn: cross_box_prompts, cross_box_windows_toasts carries dependsOn: windows_toasts, if you want to grey them accordingly.

Proof, each switch flipped by settings_set and restored:

  • windows_toasts:false + a plain notify_user on the laptop: answered displayed (the Hydrogen mirror and ab's window still got it), ab's log: TOAST: not shown (windows_toasts off): 2.1.83 proof. No Windows toast.
  • cross_box_prompts:false + a buttoned wait raised on winvm: laptop log MIRROR: prompt from winvm not shown (cross_box_prompts off) on both transports, permissionCards: 0. Restored, raised again: MIRROR: permission prompt from winvm via mesh / via relay (id proof-2183-cbp3), card rendered.
  • cross_box_windows_toasts gates only the OS toast in render_mirrored_request and the plain cross-box toast arm; the card and the ah copy are untouched (same code path as the two above; not separately photographed).

The default move to all applies to boxes that never saved a value; a saved decisions stays. Closing.

John Lauer closed this · 2mo ago

Log in to reply.