You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(threading): client-side JWZ threading with collapse/expand
Adds an internal/threading package implementing the Jamie Zawinski
threading algorithm (Message-ID + In-Reply-To + References) with
subject-fallback grouping for orphans. The inbox renders one row per
thread root with a count and last sender; pressing Enter toggles
expand/collapse; the per-folder flat-vs-threaded mode persists via
folder_cache.
The MessageID/InReplyTo/References metadata is now carried through
fetcher and the IMAP/JMAP/POP3 backends, the on-disk email cache, the
daemon RPC types, and the inbox model so threading works against
cached headers without server round-trips. Per the maintainer's spec
in #509 and #1130: client-side, provider-agnostic, JWZ rather than
X-GM-THRID, deterministic ordering.
- internal/threading/jwz.go: ThreadNode, Thread, Build()
- internal/threading/subject.go: canonicalSubject()
- internal/threading/jwz_test.go: chains, forks, missing parents,
subject-fallback grouping, deterministic ordering
- tui/inbox.go: threaded mode rendering + 'T' toggle + expand/collapse
- config/folder_cache.go: persist threaded toggle per folder
- backend/{imap,jmap,pop3}: emit MessageID/InReplyTo/References
- screenshots/cmd/threading_demo: VHS helper
Closes#509. Addresses #1130.
0 commit comments