diff options
Diffstat (limited to 'docs/superpowers/plans/2026-08-03-post-0.1.0-usability-closed.md')
| -rw-r--r-- | docs/superpowers/plans/2026-08-03-post-0.1.0-usability-closed.md | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/docs/superpowers/plans/2026-08-03-post-0.1.0-usability-closed.md b/docs/superpowers/plans/2026-08-03-post-0.1.0-usability-closed.md index 33bba8b..26f90fa 100644 --- a/docs/superpowers/plans/2026-08-03-post-0.1.0-usability-closed.md +++ b/docs/superpowers/plans/2026-08-03-post-0.1.0-usability-closed.md @@ -9742,3 +9742,68 @@ scoping and its trash-aware visibility all stay exactly as they are. **Closed 2026-08-29**, unreleased, the two built together. See the status table in the open file for what shipped. +## 189. The message bar carries only Reply, Forward and Delete + +**Observed.** The user asks for more of the standard message actions on the +pane's own bar, now that items 185 and 186 established it as where actions on +the displayed message live: + +- **Star (Important)**, per message or selection +- **Archive**, per message or selection, possibly moved off the main toolbar + the way Delete was +- **Mark all read**, raised as a question rather than a request + +**Cause.** Nothing is broken. The bar was filled with the reply pair when it +was built (items 139 to 141) and has gained a branch at a time since: Edit +draft for a draft (157), the trash trio and Delete (185, 186). Its rule has +never been written down, which is why the third of these does not obviously +fit. + +**The rule the bar has actually followed, stated.** An action belongs on the +bar when it acts on **what the pane is displaying**. That is why Compose is on +the main toolbar and Reply is not (item 140), and it is what made Delete's move +correct in item 186. + +**So two of the three fit and one does not.** + +- **`flag`** is selection-scoped and is a toggle over the displayed message. + It fits with no decision needed. +- **`archive`** is selection-scoped and fits the same way. The open part is + only whether it LEAVES the main toolbar, as Delete did, or appears on both. + Delete left because a duplicate reads as two different controls when the + toolbar is icon-only; the same argument applies here. +- **`mark_all_read` does NOT fit.** It is the one action in the window that + deliberately ignores the selection (`markAllRead()`, "Every row, not the + selection"), and it is gated on the query being COMPLETE rather than on + anything being displayed. Putting a view-wide action on a bar whose every + other entry acts on one message is how a user marks a thousand threads read + meaning to mark one. This is the user's own `#discuss` and the answer from + here is: leave it on the main toolbar. + +**Approach.** Add `flag` and `archive` to the ordinary branch of +`refreshMessageBarActions()` beside Reply, Forward and Delete. Decide with the +user whether `archive` also comes off the main toolbar. Leave `mark_all_read` +where it is unless the user overrules the reasoning above. + +**Constraints.** + +- **The trash branch must not grow with it**, though the reason is narrower + than it first looks. Delete already strips `inbox` alongside `unread` (the + `sendMove()` call in `trashMessages()`, since 2026-08-26), so on mail THIS + application deleted, Archive is genuinely a no-op, as the user observed. + The gap is mail trashed by ANOTHER client: nothing rewrote its tags, so it + can sit in a trash folder still carrying `inbox`. That is the same reason + the trash view is path-based rather than `tag:deleted`. On such a message + Archive is a real write that strips `inbox`, counts an unsynced change and + rewrites the Maildir filename under `synchronize_flags`, all with no visible + effect, which is item 168's shape exactly. Star is harmless there but adds a + fifth button to a bar that is already three. Whatever is added goes on the + ORDINARY branch only. +- **Five buttons is the practical ceiling** on an icon-only bar next to the + view controls, so this is close to full. Anything after this needs the + overflow question answering rather than one more icon. +- **Every action added must carry a distinct icon**, which the existing test + enforces for anything reachable from a toolbar. `flag` and `archive` already + have their own. + +**Closed 2026-08-29**, unreleased. Star and Archive added to the ordinary branch; Archive left the main toolbar; `mark_all_read` stays there by the user's decision, and the assertion that it does is now in the suite. |
