diff options
| author | Danilo M. <danix@danix.xyz> | 2026-08-28 12:38:08 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-08-28 12:38:08 +0200 |
| commit | ac9a0718d9f071b601cd678485a25b416cf5af44 (patch) | |
| tree | 91989f193158aeffadc2eef651bc577a80693c39 /docs | |
| parent | 978c9b51935f8597ce307166bfba29368bd4fc23 (diff) | |
| download | qtmaildir-ac9a0718d9f071b601cd678485a25b416cf5af44.tar.gz qtmaildir-ac9a0718d9f071b601cd678485a25b416cf5af44.zip | |
docs: settle the unread toggle on a mixed conversation
One key: mixed reads Mark thread read and marks every message read, a fully
read conversation reads Mark thread unread. Two presses reach either state,
which is item 112's requirement met with a label rule rather than a second
action.
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/superpowers/specs/2026-08-28-thread-row-identity-design.md | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/docs/superpowers/specs/2026-08-28-thread-row-identity-design.md b/docs/superpowers/specs/2026-08-28-thread-row-identity-design.md index c464de0..3d972cb 100644 --- a/docs/superpowers/specs/2026-08-28-thread-row-identity-design.md +++ b/docs/superpowers/specs/2026-08-28-thread-row-identity-design.md @@ -154,6 +154,22 @@ Reply without quote and Save all behave exactly as they do today. The dashboard also offers a route to any of them: clicking an entry under "Waiting for you" selects that message's row, where the full set applies. +**A mixed conversation's unread toggle is a catch-all, and that is item 112 +answered rather than lost.** Item 112 split the thread toggle into two +fixed-direction actions because a union is not a state: a conversation with +some messages read and some unread has no current state to toggle from. With +the submenu gone there is one key, so the rule is: + +- Any message unread (including a mixed conversation) reads **Mark thread + read**, and marks every message read. Mixed is not a special case; it is the + ordinary one. +- A fully read conversation reads **Mark thread unread**. + +Two presses therefore reach either state from anywhere, which is what makes one +key enough. The three-valued `selectionTagPresence()` item 112 introduced is +what answers the question; only the LABEL rule changes, from "hide when the +selection disagrees" to "a mixed selection is treated as unread". + `markAllRead` is untouched. It ignores the selection by design and is thread-scoped by nature (item 108 recorded this). |
