Follow-up to #167 (see #168): an event made from a message now opens with its guest list filled in.
What it does
Guests — the sender plus everyone in To and Cc, deduplicated, in that order.
Not the reader — their own identity addresses come out, matched case-insensitively. They are the organiser; an organiser among their own guests is an invitation to their own appointment.
Never a Bcc — on a message the reader sent, a blind copy is still a recipient, but a guest list is visible to every guest. Promoting a Bcc would tell the room about a copy the sender chose to hide.
Send invitation emails to guests now starts off when the guest list was inherited rather than typed, and stays on everywhere else. This is the case the issue opened with: a reminder made out of a bill carries the biller and everyone else on the mail, and with the switch on the primary button reads Send invites — the first press would mail all of them an invitation to what was meant as a note to self. The switch is right under the list and says what it does, so inviting them is one deliberate click; un-sending is not.
Verified
npm run typecheck, npm test (486 web + 109 server; 5 new cases covering self-exclusion, dedupe across headers, Bcc, and a message with no addresses at all). Driven by hand against the mock: the sender lands in Guests, the signed-in user does not, the switch is off and the button reads Create. The mock's messages have no Cc, so that half is covered by the unit tests rather than by hand.
Follow-up to #167 (see #168): an event made from a message now opens with its guest list filled in.
### What it does
- **Guests** — the sender plus everyone in To and Cc, deduplicated, in that order.
- **Not the reader** — their own identity addresses come out, matched case-insensitively. They are the organiser; an organiser among their own guests is an invitation to their own appointment.
- **Never a Bcc** — on a message the reader sent, a blind copy is still a recipient, but a guest list is visible to every guest. Promoting a Bcc would tell the room about a copy the sender chose to hide.
- **Send invitation emails to guests now starts off** when the guest list was inherited rather than typed, and stays on everywhere else. This is the case the issue opened with: a reminder made out of a bill carries the biller and everyone else on the mail, and with the switch on the primary button reads *Send invites* — the first press would mail all of them an invitation to what was meant as a note to self. The switch is right under the list and says what it does, so inviting them is one deliberate click; un-sending is not.
### Verified
`npm run typecheck`, `npm test` (486 web + 109 server; 5 new cases covering self-exclusion, dedupe across headers, Bcc, and a message with no addresses at all). Driven by hand against the mock: the sender lands in Guests, the signed-in user does not, the switch is off and the button reads *Create*. The mock's messages have no Cc, so that half is covered by the unit tests rather than by hand.
**Merged** 2026-08-31 as coffey-labs/ihasmail@2dd0203ae117
<sub>Rebuilt from: git history, session transcript.</sub>
This repo is archived. You cannot comment on issues.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Follow-up to #167 (see #168): an event made from a message now opens with its guest list filled in.
What it does
Verified
npm run typecheck,npm test(486 web + 109 server; 5 new cases covering self-exclusion, dedupe across headers, Bcc, and a message with no addresses at all). Driven by hand against the mock: the sender lands in Guests, the signed-in user does not, the switch is off and the button reads Create. The mock's messages have no Cc, so that half is covered by the unit tests rather than by hand.Merged 2026-08-31 as coffey-labs/ihasmail@2dd0203ae1
Rebuilt from: git history, session transcript.