Hide identities from the compose picker #82

Closed
opened 2026-08-26 22:36:32 +00:00 by jcoffey-dev · 0 comments
Owner

Closes #73.

An account using a unique address per service, on a server with an alias domain, ends up with every local part twice over and a From picker nobody can use — while only ever sending from a handful.

Identities can now be hidden from that picker, from Identities & signatures. Hiding is presentation only: the identity still exists, still receives, and stays listed and editable — the way an unsubscribed folder is still a folder. That framing is mbunkus's own and it's the right one: this is a UI preference, not a change to the account.

Three things it refuses to do

A sender picker with nothing usable in it is worse than a cluttered one, so:

  • won't hide the identity a draft is already using — that would leave the select with no matching option and move the From line under the writer
  • won't hide the default, which is what a new draft starts on; the button is disabled there and the tooltip says why
  • if every identity is somehow hidden, they're all offered again. Only reachable via settings sync, since the UI won't do it — but a state that arrives from another device shouldn't produce an empty picker

The setting syncs, so the picker looks the same everywhere. That follows automatically from DEVICE_KEYS being a list of exceptions rather than a list of what travels.

Verified against the mock

Four identities, one hidden:

hidden    ["i1"]                      ([email protected])
offered   Demo (alias) <alias@…>
          Fourth <fourth@…>
          Third <third@…>

The hidden address is gone from composing, the default's hide button is disabled, and the row states the identity still receives mail. Eight new tests cover the refusals specifically — including an id left behind by a deleted identity, which must not silently hide something else.

287 web + 77 server tests, typecheck and build clean.

Merged 2026-08-26 as coffey-labs/ihasmail@96ec790d58

Rebuilt from: git history, session transcript.

Closes #73. An account using a unique address per service, on a server with an alias domain, ends up with **every local part twice over** and a From picker nobody can use — while only ever sending from a handful. Identities can now be hidden from that picker, from Identities & signatures. **Hiding is presentation only:** the identity still exists, still receives, and stays listed and editable — the way an unsubscribed folder is still a folder. That framing is mbunkus's own and it's the right one: this is a UI preference, not a change to the account. ## Three things it refuses to do A sender picker with nothing usable in it is worse than a cluttered one, so: - **won't hide the identity a draft is already using** — that would leave the select with no matching option and move the From line under the writer - **won't hide the default**, which is what a new draft starts on; the button is disabled there and the tooltip says why - **if every identity is somehow hidden**, they're all offered again. Only reachable via settings sync, since the UI won't do it — but a state that arrives from another device shouldn't produce an empty picker The setting syncs, so the picker looks the same everywhere. That follows automatically from `DEVICE_KEYS` being a list of exceptions rather than a list of what travels. ## Verified against the mock Four identities, one hidden: ``` hidden ["i1"] ([email protected]) offered Demo (alias) <alias@…> Fourth <fourth@…> Third <third@…> ``` The hidden address is gone from composing, the default's hide button is disabled, and the row states the identity still receives mail. Eight new tests cover the refusals specifically — including an id left behind by a deleted identity, which must not silently hide something else. 287 web + 77 server tests, typecheck and build clean. **Merged** 2026-08-26 as coffey-labs/ihasmail@96ec790d5894 <sub>Rebuilt from: git history, session transcript.</sub>
This repo is archived. You cannot comment on issues.