From a3fe97ae8751f6600cdec31c828800d0aa651aa1 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Fri, 28 Aug 2026 11:54:41 +0200 Subject: 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. --- .../specs/2026-08-28-thread-row-identity-design.md | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'docs') 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). -- cgit v1.2.3