Say in the quasi-notifs header that a kind is app-wide
A Kind is one switch for a whole app, so a notification answered per row of
something the app owns is the app's own switch. The header now states that,
and states what it costs: such a notification skips the outbox, so duplicate
suppression and CatchUp do not cover it.
Written to record where the line sits rather than to close the question. One
per-row toggle exists across the tree today, and a second would be worth
reopening this on.
Also fixes two broken intra-doc links in config.rs found by the same doc
build: is_key is private, and Reach::posture is behind the synckit feature.
- Co-Authored-By
- Claude Opus 5 (1M context) <noreply@anthropic.com>
- Claude-Session
- https://claude.ai/code/session_01DwpiantpUgohzML4xr6KeQ
2 files changed,
+22 insertions,
-2 deletions
| 10 |
10 |
|
//!
|
| 11 |
11 |
|
//! # The generated key is dotted, and that is what keeps it apart
|
| 12 |
12 |
|
//!
|
| 13 |
|
- |
//! `<kind>.enabled`, and `<kind>.<knob>` for each option. [`is_key`] refuses a
|
|
13 |
+ |
//! `<kind>.enabled`, and `<kind>.<knob>` for each option. `is_key` refuses a
|
| 14 |
14 |
|
//! dot in either id for exactly this reason: the dot is the separator, so it
|
| 15 |
15 |
|
//! cannot also be inside a name.
|
| 16 |
16 |
|
//!
|
| 39 |
39 |
|
///
|
| 40 |
40 |
|
/// [`synckit_config::Posture`] under another name, and the name is forced:
|
| 41 |
41 |
|
/// [`Posture`] here is already whether a kind ships on. The mapping is one to
|
| 42 |
|
- |
/// one and [`Reach::posture`] is it, so nothing chooses between two vocabularies
|
|
42 |
+ |
/// one and `Reach::posture` (under the `synckit` feature) is it, so nothing chooses between two vocabularies
|
| 43 |
43 |
|
/// -- this crate cannot depend on `synckit-config` unconditionally, because that
|
| 44 |
44 |
|
/// crate carries a bundled SQLite and an app that only declares kinds should not
|
| 45 |
45 |
|
/// link one.
|
| 14 |
14 |
|
//! and keeping them apart is what stops the declaration from growing a
|
| 15 |
15 |
|
//! dependency on a host.
|
| 16 |
16 |
|
//!
|
|
17 |
+ |
//! # A kind is app-wide, and a per-row switch is the app's
|
|
18 |
+ |
//!
|
|
19 |
+ |
//! A [`Kind`] is one switch for a whole app: its generated `<kind>.enabled`
|
|
20 |
+ |
//! key answers on or off once, for everybody using that install. A
|
|
21 |
+ |
//! notification whose on/off is answered per row of something the app owns,
|
|
22 |
+ |
//! per email account, per project, per calendar, is the app's own switch and
|
|
23 |
+ |
//! its own call to make. It is not declared here.
|
|
24 |
+ |
//!
|
|
25 |
+ |
//! What that costs, so the next reader does not take it for an oversight: a
|
|
26 |
+ |
//! notification the app fires itself goes out without the [`Outbox`], so
|
|
27 |
+ |
//! duplicate suppression and [`CatchUp`] do not cover it.
|
|
28 |
+ |
//!
|
|
29 |
+ |
//! This records where the line sits rather than closing the question.
|
|
30 |
+ |
//! Measured across the tree on 2026-08-30, exactly one per-row toggle exists,
|
|
31 |
+ |
//! goingson's `email_accounts.notify_new_emails`, and for that one the
|
|
32 |
+ |
//! suppression is not a loss: two sync cycles that both save mail are two
|
|
33 |
+ |
//! notifications a reader wants, and a restart syncs and produces fresh mail
|
|
34 |
+ |
//! anyway, so there is nothing for [`CatchUp`] to catch up. A second per-row
|
|
35 |
+ |
//! kind would change that count and be worth reopening this on.
|
|
36 |
+ |
//!
|
| 17 |
37 |
|
//! # Const-friendly on purpose
|
| 18 |
38 |
|
//!
|
| 19 |
39 |
|
//! Every type here is constructible in a `const`, so an app's notification set
|