Map a provider's own folders onto the standard ones, wherever they sit

Fixkamo-internal
Shipped
September 5, 2026 at 7:34 AM UTC
Author
Kamo
Commit
e81f7ff

The last fix pinned a folder by the role the server gave it and still left a member on Google Workspace looking at "[Gmail]" among their own folders with their real Sent buried inside, and an empty "Sent" above it. Two reasons, and the second is why the tests did not catch the first. Roles were not arriving. Reading the folders endpoint against a live KamoMail mailbox answers separator:"." on every folder and role:null on Sent, Trash and Junk — that Dovecot sends no SPECIAL-USE attributes at all. EmailService now settles the roles itself, per provider, before anyone sees them. And a role could not have helped anyway: arrangeFolderTree is handed the tree's ROOTS, and every one of Gmail's standard folders is a child of [Gmail]. Pinning could not reach them however plainly they were named. It now walks the whole tree and lifts a folder out of wherever it sits, then renders through the container that is left — so what remains of [Gmail] comes up to the level it occupied and [Gmail] itself is not drawn. The tests missed it because both halves were exercised on a FLAT list of folders, and Gmail's tree is not flat. The shaping has moved out of the component into folderTree, where a Gmail listing can actually be run through it, and gmailSidebarShape runs the two halves in the order the sidebar runs them on the payload the reporting mailbox returns. KamoMail's arrangement is asserted row for row, unchanged. Also fixes the rename box, which seeded itself by splitting the path on a dot and so offered a Gmail folder's whole path as its new name.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing