Skip to main content

max / goingson

Point send_notification's doc at the settled quasi-notifs rule The doc said the question was filed against quasi. It is answered: a per-row switch is the app's own, and the quasi-notifs header carries the rule. Records the cost that follows for this one caller, which is not a loss for "New Mail".
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session
https://claude.ai/code/session_01DwpiantpUgohzML4xr6KeQ
Author: Max Johnson <me@maxj.phd> · 2026-08-30 17:16 UTC
Signed with PGP, not checked
Commit: e5873beaa58e9ef91e241f9cba831d4335b82328
Parent: ea3bd6f
1 file changed, +8 insertions, -1 deletion
@@ -503,7 +503,14 @@
503 503 /// preference. A [`Kind`](quasi_notifs::Kind) carries one
504 504 /// [`Posture`](quasi_notifs::Posture) for the whole app, so declaring it would
505 505 /// put a second, global switch over four accounts' worth of per-account
506 - /// answers. Filed against quasi rather than worked around here.
506 + /// answers.
507 + ///
508 + /// That is settled rather than pending: a per-row switch is the app's own, and
509 + /// the `quasi_notifs` crate header carries the rule and what it costs. The cost
510 + /// here is that this path skips the outbox, so duplicate suppression and
511 + /// catch-up do not cover it. For "New Mail" neither is a loss: two sync cycles
512 + /// that both save mail are two notifications a reader wants, and a restart
513 + /// syncs and produces fresh mail anyway.
507 514 pub fn send_notification(app: &tauri::AppHandle, title: &str, body: &str) {
508 515 debug!(title, body, "Sending notification");
509 516 if let Err(e) = app.notification().builder().title(title).body(body).show() {