summaryrefslogtreecommitdiffstats
path: root/docs/superpowers
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-08-11 10:55:38 +0200
committerDanilo M. <danix@danix.xyz>2026-08-11 10:55:38 +0200
commita8844303aeb9295a6f94408cd809e521483a8b9a (patch)
tree2332cf0570bffd78e4558821f4330426f4e7fe90 /docs/superpowers
parent8f9994cddc100de76c3127f50a1fac7a296ec8f5 (diff)
downloadqtmaildir-a8844303aeb9295a6f94408cd809e521483a8b9a.tar.gz
qtmaildir-a8844303aeb9295a6f94408cd809e521483a8b9a.zip
feat(ui): give Sync the refresh icon
The Sync button used mail-receive, a mailbox glyph, which reads as "mail" rather than "fetch again". The toolbar follows the desktop's tool button style, so on an icon-only desktop the icon is the whole control and has to carry the meaning by itself. view-refresh is the standard freedesktop name for the action. The existing noTwoActionsShareAnIcon test covers the collision risk that the 0.12.0 Archive/Mark-all-read defect came from, and passes. Also records the backlog reconciliation this came from: items 64 and 65, appended from the user's notes with their causes verified in code. 65 is "full code review and optimization", which names no symptom or measurement and is filed unspecified rather than given a design. Backlog item 64.
Diffstat (limited to 'docs/superpowers')
-rw-r--r--docs/superpowers/plans/2026-08-03-post-0.1.0-usability.md64
1 files changed, 64 insertions, 0 deletions
diff --git a/docs/superpowers/plans/2026-08-03-post-0.1.0-usability.md b/docs/superpowers/plans/2026-08-03-post-0.1.0-usability.md
index dccea2d..ff6efc4 100644
--- a/docs/superpowers/plans/2026-08-03-post-0.1.0-usability.md
+++ b/docs/superpowers/plans/2026-08-03-post-0.1.0-usability.md
@@ -120,6 +120,8 @@ taking that too literally.
| 61 | `test_mainwindow` fails intermittently, about 1 run in 20 | testing | S | open; predates the card list, reproduced on f72dba9 |
| 62 | No config option for the date format on a card | presentation | XS | open |
| 63 | No way to see sent mail, and no filter for it | workflow | S | open |
+| 64 | The Sync button carries a mailbox icon, not a refresh one | presentation | XS | **done** 2026-08-11 |
+| 65 | No full code review and optimization pass | correctness | ? | open, unspecified |
Sizes are rough: XS under an hour, S a sitting, M a session.
@@ -4130,6 +4132,68 @@ filters, not something to design here.
**Size: S**, and XS if the answer is "it is a tag".
+## 64. The Sync button carries a mailbox icon, not a refresh one
+
+**Observed (user, from the notes):** "the sync button should show the 'refresh'
+icon".
+
+**Cause, verified in code.** The theme-icon table in `MainWindow` maps
+`sync` to `mail-receive` (`src/mainwindow.cpp:1000`), which is a mailbox glyph
+with an arrow into it. Every other entry in that table is a single line of the
+same shape, so this is one string.
+
+The neighbouring comment (`src/mainwindow.cpp:1001-1003`) records why `archive`
+was moved off `mail-mark-read` in 0.12.0: with the toolbar icon-only, the icon
+IS the control, and two buttons with different consequences must not look
+alike. That reasoning applies here in reverse. `view-refresh` is the standard
+freedesktop name and reads as "fetch again" at a glance.
+
+**Approach.** Change the one mapping to `view-refresh`. The lookup already
+guards on `QIcon::fromTheme` returning null (`:1034`), so a theme lacking the
+name leaves the action iconless rather than broken.
+
+**Constraints.**
+
+- **Check it does not now collide with another action's glyph.** No entry in
+ the table currently uses `view-refresh`, but the 0.12.0 defect was exactly a
+ collision, so confirm against the rendered toolbar rather than the table.
+- Icon-only is the desktop's choice, honoured through `SH_ToolButtonStyle`
+ (`:1073`), so the icon may be the only label the user ever sees.
+
+**Size: XS.** One string.
+
+### Outcome (done)
+
+One string: `mail-receive` became `view-refresh` (`src/mainwindow.cpp:1000`).
+
+The collision the constraint asked about is covered by a test that already
+existed, `noTwoActionsShareAnIcon`, which passes. That is a better check than
+looking at the toolbar, since it covers every action rather than the handful
+currently on it.
+
+## 65. No full code review and optimization pass
+
+**Observed (user, from the notes):** "full code review and optimization."
+
+**Cause:** not a defect. The codebase has grown from the 0.1.0 spec through
+sixty-odd backlog items, and nothing has gone back over it as a whole.
+
+**Why this cannot be planned from the backlog.** "Review and optimize" names no
+symptom, no measurement and no target. There is no reported slowness to chase,
+and the one performance property the design does commit to (threads emitted in
+batches of 200 so a 10k-thread query paints immediately) already holds. An
+optimization pass with no measurement behind it is the kind of work that
+produces a large diff and no change a user can notice.
+
+**What it needs before it can be sized.** The user saying which of these they
+meant: a correctness/security review of a named area, a specific operation that
+feels slow with the query that makes it slow, a dead-code and duplication sweep,
+or the translatability audit that is already item 22. The first three are
+different pieces of work with different sizes, and the fourth is already
+recorded.
+
+**Size: `?`, unspecified.** Do not propose a design for this; ask.
+
## Deferred, unsized, or split out
Items noted while triaging but not part of the original list. Same numbering