aboutsummaryrefslogtreecommitdiffstats
path: root/docs/superpowers/plans
diff options
context:
space:
mode:
Diffstat (limited to 'docs/superpowers/plans')
-rw-r--r--docs/superpowers/plans/2026-08-03-post-0.1.0-usability.md40
1 files changed, 39 insertions, 1 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 ac830fa..f562e97 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
@@ -142,13 +142,14 @@ taking that too literally.
| 75 | The tagging rules window forgets its size and its column widths | persistence | S | **done** 2026-08-13, shipped in 0.17.0. The window-kind question is left open, see the closed-items file |
| 76 | Every field in the rules dialog is free text, so a rule is easy to get wrong | workflow | M | **done** 2026-08-13, shipped in 0.17.0. See `specs/2026-08-13-rule-builder-design.md` |
| 77 | No way to see what a rule would collect, in the thread list | workflow | S | **done** 2026-08-13, shipped in 0.17.0 |
-| 78 | No way to build a rule from something visible in a message | workflow | M | open; wants 76 first, so the created rule lands in a form that can hold it |
+| 78 | No way to build a rule from something visible in a message | workflow | M | open, narrowed 2026-08-14; the search half split out as item 85, which is the road a rule is made from. Revisit once 85 has been used |
| 80 | A rule with many conditions squeezes the rule list to one visible row | defect | XS | **done** 2026-08-13, shipped in 0.17.0. Follows item 76 |
| 79 | Opening the rules dialog and saving destroys the first rule | defect | XS | **fixed on `rule-builder`** 2026-08-13, unreleased. Shipped in 0.16.0; damaged one real rule, repaired by hand |
| 81 | No way to turn a saved query into a tagging rule | workflow | S | **done** 2026-08-14, unreleased; see `specs/2026-08-14-query-to-rule-design.md` |
| 82 | A saved query cannot be edited, unpinned or deleted from the UI | defect | S | **done** 2026-08-13, shipped in 0.18.0. Right-click offers Edit, Pin/Unpin and Delete |
| 83 | A rule named with spaces is written to the file and dropped by every reader | defect | S | **done** 2026-08-14, unreleased. The name is sanitised into an id, save validates, a bad id loads for repair |
| 84 | A config problem blocks `test_mainwindow` on a modal nobody can dismiss | testing | S | open; measured 2026-08-14, `showWarnings()` calls `QMessageBox::warning` from the constructor |
+| 85 | Nothing on screen can be searched for by right-clicking it | workflow | M | open; designed 2026-08-14, see `specs/2026-08-14-search-from-message-design.md`. Split from 78; rebuilds the details dialog as rows |
Sizes are rough: XS under an hour, S a sitting, M a session.
@@ -557,6 +558,43 @@ here.
**Size: S.** The diagnosis is the expensive part and it is already done.
+## 85. Nothing on screen can be searched for by right-clicking it
+
+**Observed (2026-08-14).** The user asked, while discussing item 78, to be able
+to right-click a sender, a subject, a date, a tag chip or a piece of selected
+body text and be offered a search built from it, both replacing the query bar
+and narrowing what is already in it. The narrowing case is the one that decides
+the shape: a query returning a thousand threads is refined by adding a second
+condition, and today that means retyping a query the user never typed.
+
+**Cause.** Not a defect, unbuilt. `MessageView` has no context menu on any
+surface, and `TagStrip` paints chips with no hit test and no signals.
+
+**Approach.** Designed 2026-08-14. **Read
+`specs/2026-08-14-search-from-message-design.md` rather than planning from this
+entry.**
+
+Three constraints decide whether to open the spec. **This is search only, and
+that is the point**: item 78's rule shortcut is deliberately left out, because a
+saved query can already be promoted to a rule and searching is the missing step
+on that road, as well as the safe one. **The details dialog is rebuilt as rows**,
+which the user wanted anyway, and its value labels must stay explicitly
+`Qt::PlainText`: the current `QPlainTextEdit` is a deliberate protection against
+markup in header values that come from strangers. And **Add to search
+parenthesises both sides**, because the bar may hold a hand-written `or` and
+`a or b AND c` binds the wrong way, silently widening a search meant to narrow.
+
+**Constraints.** The thread list is out of scope and the reason is worth
+keeping: a row's `authors` comes from `notmuch_thread_get_authors` and is a
+display summary reading `Alice, Bob`, so a `from:` built from it matches
+nothing. Item 78's own approach line assumed otherwise.
+
+A mis-quoted query is not an error to notmuch, it matches zero, so the quoting
+helper is tested against the constructed string rather than against a provoked
+failure.
+
+**Size: M.**
+
## Deferred, unsized, or split out
Items noted while triaging but not part of the original list. Same numbering