aboutsummaryrefslogtreecommitdiffstats
path: root/docs/superpowers/plans/2026-08-28-thread-row-identity.md
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-08-28 20:15:15 +0200
committerDanilo M. <danix@danix.xyz>2026-08-28 20:15:15 +0200
commitae2ae2df75ed780a88423b77af3b31fbe2b26389 (patch)
tree4550fbf6856ff03eb80487475514a979798c6641 /docs/superpowers/plans/2026-08-28-thread-row-identity.md
parentdb38ca136c45f34f5fa2d342ee180f068073be37 (diff)
downloadqtmaildir-ae2ae2df75ed780a88423b77af3b31fbe2b26389.tar.gz
qtmaildir-ae2ae2df75ed780a88423b77af3b31fbe2b26389.zip
fix: list a conversation's first message under its row
setThreadMessages() dropped nodes.first(), which was correct while a thread row MEANT its first message: listing that message under itself would have shown it twice. Item 177 made the row stand for the conversation and render a dashboard instead, so the drop left the first message with no row anywhere: the user reported the list starting at the second message with the first unreachable. A conversation row now keeps every message, including the first; a thread of one keeps the old rule, since there it IS its message and must not be listed beneath itself. The choice reads what actually ARRIVED rather than summary.totalCount, which counts duplicates and can lie about whether a thread really is a conversation. Reply-scoped tests pointed at child 0, which was the first reply and is now the first message; they read child 1 instead, and two asserted a child count that grew by one. Two new model tests pin both halves, and both directions are mutation-checked.
Diffstat (limited to 'docs/superpowers/plans/2026-08-28-thread-row-identity.md')
0 files changed, 0 insertions, 0 deletions