diff options
| author | Danilo M. <danix@danix.xyz> | 2026-08-28 11:54:41 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-08-28 11:54:41 +0200 |
| commit | a3fe97ae8751f6600cdec31c828800d0aa651aa1 (patch) | |
| tree | 79bd274208184448f2daa2a818826bc077647b5c /docs | |
| parent | 26699b720c4135b57de6cfc84b35ab632de1c500 (diff) | |
| download | qtmaildir-a3fe97ae8751f6600cdec31c828800d0aa651aa1.tar.gz qtmaildir-a3fe97ae8751f6600cdec31c828800d0aa651aa1.zip | |
docs: settle reply, forward and save on a conversation row
Forward and Save need a message and disappear; Reply becomes one lean
'Reply to this thread', quoting nothing, reply-all, threaded off the newest
message. composeReply already supports it, so no new compose machinery.
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/superpowers/specs/2026-08-28-thread-row-identity-design.md | 24 |
1 files changed, 24 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 6bc0d9c..13a27a3 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 @@ -128,6 +128,30 @@ reason about, while reversible per-message things (tags, flags, read state, reply, forward, save) work wherever they are. It also dissolves the "delete one reply of five" membership question, which can no longer arise. +**Reply, Forward and Save on a conversation row.** A conversation row shows no +message, so the three actions that need one cannot mean what they usually do. +`composeReply()`'s own comment already stated the principle before item 177: +"Replying to a thread is meaningless; a reply answers a message." + +The user's decision: **Forward and Save disappear** on a conversation row, and +one action replaces Reply, **Reply to this thread**: + +- It quotes NOTHING. "We just add an answer to the thread." +- It is `Kind::ReplyAll` with `quote == false`, which `composeReply()` already + supports (the existing `reply_no_quote` action uses the same path), so no new + compose machinery is needed. Reply-all rather than reply-to-sender because a + conversation is multi-party by definition; answering one participant of a + four-person discussion is the unusual case, and it stays available on an + individual message. +- Its threading headers come from the thread's **newest** message, so + `In-Reply-To` and `References` land the answer at the end of the conversation + and the recipients are the current ones. + +On a message row — a thread of one, or a reply — Reply, Reply-all, Forward, +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. + `markAllRead` is untouched. It ignores the selection by design and is thread-scoped by nature (item 108 recorded this). |
