aboutsummaryrefslogtreecommitdiffstats
path: root/docs/superpowers/specs/2026-08-26-card-avatars-design.md
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-09-10 12:31:08 +0200
committerDanilo M. <danix@danix.xyz>2026-09-10 12:31:08 +0200
commit93a3959a1ebf630bfb0ade6f82b2d86e4f17b4a6 (patch)
tree799fbb25a62fe9b29c55425ad80bd3ba79cc5762 /docs/superpowers/specs/2026-08-26-card-avatars-design.md
parent79d30c128157937056dc2abf63f1f74728ca1a92 (diff)
downloadqtmaildir-93a3959a1ebf630bfb0ade6f82b2d86e4f17b4a6.tar.gz
qtmaildir-93a3959a1ebf630bfb0ade6f82b2d86e4f17b4a6.zip
docs: specify the Spam view, the spam move and Empty Spam
Items 187, 190 and 195, settled with the user and specified together in docs/superpowers/specs/2026-09-10-spam-view-design.md. Nothing is built yet; implementation follows on a branch. Mark spam becomes a move into the account's spam folder, following item 103's Delete-to-trash design rather than inventing a second mechanism: a mandatory per-account `spam` key, a path-based threaded Spam filter, and a repeatable cleanup pass for the mail the tag-only action stranded. `unread` is stripped by the move (item 195, verified in the code: the call names `spam` and `inbox` and nothing else). The message-bar button carries `bug` with `mail-mark-junk` as its fallback, measured against the user's icon theme, where the standard name draws a warning octagon and `bug` draws the beetle the notes asked for; a bare `bug` was rejected because it resolves in 0 of the 24 system themes and would leave a blank button. Two changes came from the user after the first draft and both improved it. The origin tag is renamed `deleted-from:` -> `moved-from:`, which the first pass had rejected on a migration cost that turned out to be 8 messages carrying one distinct value; and Empty Spam moves mail to the trash per account, which needs no new grouping because trashMessages() already resolves each message's own account. A message can therefore leave two folders in turn, and the existing reader takes the first matching tag and breaks. Rather than encode ordering in the tag, which notmuch's unordered tag set cannot answer, a move overwrites the origin instead of appending: one tag ever, one hop back per Restore. Empty Spam inherits neither of empty_trash's safeguards, deliberately. It moves rather than destroys, so it has an inverse, and a confirmation on an undoable action is the defect AGENTS.md names. Item 197 is filed for a future "not spam": Restore already covers what this application moved, and reverting the provider's own filter needs a destination rule and possibly a sidecar, neither of which is decided. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LrqM5LJGAQEryvs5r7usM1
Diffstat (limited to 'docs/superpowers/specs/2026-08-26-card-avatars-design.md')
0 files changed, 0 insertions, 0 deletions