aboutsummaryrefslogtreecommitdiffstats
path: root/docs/superpowers/plans/2026-08-03-post-0.1.0-usability-closed.md
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-08-14 11:35:24 +0200
committerDanilo M. <danix@danix.xyz>2026-08-14 11:35:24 +0200
commit1c3f86d5a8e62f8617bbf1b7b834c81701e8b5c4 (patch)
tree1a02b0e10e2231176fd9b3b81f1974628c6630e9 /docs/superpowers/plans/2026-08-03-post-0.1.0-usability-closed.md
parentdda9fd9c918aa169eb01947e02d5b30ec13ee6eb (diff)
downloadqtmaildir-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.md44
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.