Changes
The owner can now see which mail TypeSafe put in Spam, filter to it, and move a wrong one back with Not spam.
- An AI-filed row shows a quiet
AI 0.86label after the sender. AllandAI-filedchips sit above the Spam list.- On Spam rows, Not spam replaces the Imbox pill. The reader shows it too.
Main has no TypeSafe stub in dev, so the two seeded scams land in the Imbox (badge 8) and Spam holds only the rules-filed parcel notice. On the PR the stub files them as AI spam (badge 6).
Desktop, 1440 px
Spam list
AI 0.86, Prize Desk AI 0.97, CH Post has no label.Hovered row
Imbox.Not spam. On the hover fill the AI label loses its visible chip background.AI-filed filter, reader, and undo
Not spam sits next to the star.Undo on Z. Captured at 1x.Mobile, 390 px
Spam list
Hovered row
A.AI-filed filter and reader
Facts
| Topic | What the PR does |
|---|---|
| Record | Ingest writes x-imbox-classification, for example {"folder":"spam","source":"ai","score":0.86}. It uses the existing synthetic-header mechanism, so there is no schema change. Ingest strips inbound copies, so a sender cannot forge one. Spam stored before this change has no record and gets no AI label. |
| Not spam | Row pill, reader button, palette, and s in Spam. It moves the conversation to the Imbox with the shared undo on Z. |
| Correction log | MailboxDO.moveEmail logs spam_correction with messageId, source, score, and corrected. An undo logs corrected: false. No subject, body, or address; no call to the vendor. |
| Filter scope | AI-filed filters the loaded Spam list: the newest 50 conversations, the same set the Spam view shows. |