diff options
Diffstat (limited to 'docs/superpowers/plans/2026-08-03-post-0.1.0-usability.md')
| -rw-r--r-- | docs/superpowers/plans/2026-08-03-post-0.1.0-usability.md | 60 |
1 files changed, 45 insertions, 15 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 844217e..534dc6e 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 @@ -119,7 +119,7 @@ taking that too literally. | 60 | Next thread dead-ends on the last reply of an expanded thread | defect | XS | **done**; already fixed by 5487d58, see below | | 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 | **done** 2026-08-11 | -| 63 | No way to see sent mail, and no filter for it | workflow | S | open | +| 63 | No way to see sent mail, and no filter for it | workflow | M | open; specified 2026-08-11 in `specs/2026-08-11-sent-mail-design.md` | | 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 | @@ -4141,20 +4141,33 @@ defaults change and it is XS. If it is a path, `Account` needs a `sent` key beside `drafts`, and the query has to be composed per account, which is where the S comes from. -**Approach, pending that decision.** Ask the user first which their setup -already produces. Their mail is filtered outside qtmaildir (`assets/mailsync.sh` -is `mbsync` plus `notmuch new`), so the answer is a property of their existing -filters, not something to design here. - -**Constraints.** - -- **Do not invent a tag qtmaildir applies itself.** v1 is read-and-organize; - nothing here sends mail, so nothing here can know a message was sent except by - where it landed or what tagged it. -- If it becomes a per-account key, it composes with `scopedQuery()` and must not - bypass it, or a Sent view in one account shows another account's mail. - -**Size: S**, and XS if the answer is "it is a tag". +### Answered and specified 2026-08-11 + +**It is a PATH, not a tag**, so the XS branch above is dead. Measured against +the user's own database: no `sent` tag exists at all, every account keeps sent +mail in a folder, and the folders disagree across three shapes, with one +account having no sent folder whatsoever. That is what forces a per-account key +rather than a `<maildir>/Sent` convention. + +The design is at `docs/superpowers/specs/2026-08-11-sent-mail-design.md`; read +that rather than this entry, which records only the finding. It carries the +measured folder table, the user's four decisions, and the constraints, of which +three are worth knowing before opening it: the bracketed provider paths contain `[` and `]` +and are Xapian syntax, so quoting is load-bearing; notmuch has no recipients +call at any level, so the To summary is folded per message in the worker under +the thread-ownership rule; and GMime's address parser returns NULL for an empty +string. + +One thing settled there that reverses nothing: item 2 refused a `To:` line on a +thread header and that ruling stands. It was scoped to a MIXED conversation, +where the union of recipients misdescribes itself as "To:". A Sent view is +one-directional, so the ambiguity it avoided is absent and recipients on the +card are well posed. + +**Size: M**, revised up from S. The query half is the S scoped here; the +recipients half is a new `ThreadSummary` field, a worker-side per-message walk, +the first GMime address parsing in this codebase, and a card that has to know +which view it is in. ## 64. The Sync button carries a mailbox icon, not a refresh one @@ -4234,3 +4247,20 @@ the same shape: **Observed** (what the user saw), **Cause** (the code, with file and line, verified not assumed), **Approach**, **Constraints**, and **Verification** where it is not obvious. Do not renumber. Do not delete: mark `dropped` with a reason. + +**A fully specified item goes in its own file under `docs/superpowers/specs/`, +not inline here.** This document is a backlog: its job is to say what is open, +how big it is, and what decides whether it can be picked up. A design that runs +to a hundred lines buries that under itself, and this file is already past four +thousand. + +The split is by depth, not by size on the day. An entry stays here while it +records an observation, a cause and an approach. It moves out once it carries +decisions the user made, measured evidence, and constraints that have to be read +before writing code. Items 53 and 63 are the pattern: the entry keeps the +finding and the size, and points at the spec with one line saying to read that +instead. Carry the two or three constraints a reader needs in order to decide +whether to open the spec at all, and leave the rest there. + +Name the spec `<date>-<name>-design.md`, and state in its header which backlog +items it resolves, so the numbering stays traceable in both directions. |
