diff options
| author | Danilo M. <danix@danix.xyz> | 2026-08-14 11:35:24 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-08-14 11:35:24 +0200 |
| commit | 1c3f86d5a8e62f8617bbf1b7b834c81701e8b5c4 (patch) | |
| tree | 1a02b0e10e2231176fd9b3b81f1974628c6630e9 /docs/superpowers/plans/2026-08-03-post-0.1.0-usability-closed.md | |
| parent | dda9fd9c918aa169eb01947e02d5b30ec13ee6eb (diff) | |
| download | qtmaildir-1c3f86d5a8e62f8617bbf1b7b834c81701e8b5c4.tar.gz qtmaildir-1c3f86d5a8e62f8617bbf1b7b834c81701e8b5c4.zip | |
docs: close item 81, saved query to tagging rule
Also records item 83's fix and the warning banner in the changelog,
which the earlier commit did not.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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 | 44 |
1 files changed, 44 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 c8ffb53..50dd8ee 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 @@ -4695,3 +4695,47 @@ sanitiser reverted, one on the field contents and one on the save being refused. 32 tests in `test_tagrules`, 20 of 20 suites green. The user's own rule was repaired in place to `justeat-orders` and verified to load through `mailrules.py`, 18 rules and no warnings. +## 81. No way to turn a saved query into a tagging rule + +**Observed (user, 2026-08-13):** raised while describing item 23. A query the +user has already run and can see the results of should be turnable into a rule +that tags it from then on. Item 77 shipped the opposite route, previewing a +rule's mail in the thread list; this is that journey backwards. + +**Specified 2026-08-14. Read `specs/2026-08-14-query-to-rule-design.md` +instead of planning from here.** + +The three things that decide whether it can be picked up: + +- **A context-menu action, not a checkbox in the Save query dialog.** The + original approach below was rejected: it would make one dialog write both + `queries.json` and the shared `rules.json`, and `SaveQueryDialog` is + deliberately pure UI that writes nothing. +- **It is a single-repo change after all.** The rule it creates is an ordinary + one, so nothing about the shared format changes and `mailrules.py` is + untouched. The earlier note that this item spans two repos was about the file + it lands in, not about the work. +- **Stored queries only.** A generated entry's query is composed from the + accounts at runtime, so a rule made from one would freeze a snapshot that goes + stale when an account is added. + +**Item 78 folds into the same path**, as a second caller with a different seed +rather than a second mechanism. + +**Done 2026-08-14.** A Create tagging rule action on the context menu of a +stored saved query, seeding `TagRulesDialog` with the query and a sanitised +id. Single repo after all: the rule it writes is an ordinary one. + +Two things the spec did not anticipate. The dialog is non-modal and +single-instance, so a second request arrives at a dialog already open and is +seeded into it rather than dropped. And the seeded id is uniqued against the +WORKING list rather than the file, since that list can hold unsaved rules +whose ids collide just as hard. + +A third surfaced while testing. A generated saved query that resolves to an +EMPTY query is skipped when the row is built (`src/mainwindow.cpp:1692`), so a +test asserting that Sent offers no rule action passed by finding no Sent button +at all. It needs a configured account with a sent folder to assert anything. +An account section missing `maildir` does not merely fail, it HANGS +`test_mainwindow` outright, which is how this was found: the suite ran past +its two-minute timeout with no output. |
