- Shipped
- August 11, 2026 at 6:00 PM UTC
- Author
- Kamo
- Commit
- 1b3553f
IMAP flags are independent, so "mark this read" must say nothing about the star. EmailImapService.setFlags has always taken nullable Booleans and skipped the nulls, but FolderManager exposed three primitives and every caller above it flattened absent to false — turning each of these into a full three-flag overwrite: - opening an unread message sends {"seen": true}, which cleared its star and its answered flag (both the personal and the shared-mailbox endpoint) - marking a conversation read passed (true, false, false), doing the same to every message in the thread - starring a conversation passed (false, starred, false), marking its newest message unread again FolderManager.setFlags now takes Boolean and the three call sites pass what the caller actually named. Graph gets the same contract for free by leaving unnamed properties out of the PATCH body, and skips the call when nothing is left to send. The batch endpoint already did this correctly and is unchanged; the frontend already sent partial flag objects, so it needs no change either. Tests: opening a message leaves the star alone, an explicit false still clears, and neither conversation action touches the flag it was not asked about.