Found by reading the source; not yet reproduced with two live accounts.
What happens
EventInstance (web/src/store/calendar.ts:13-21) carries no account id.
createEvent, updateEvent, destroyEvent and rsvp all use get().accountId, the reader's own account (store/calendar.ts around lines 710-781).
EventPopover.tsx:26 still shows Edit and Delete when the share grants mayWriteAll / mayWriteOwn.
So an edit or delete of a shared event is sent as CalendarEvent/set to the reader's account with the owner's event id. JMAP ids are per account, so the result is notFound, or, if the reader happens to own an event with the same id, a change to the reader's own unrelated event.
EventEditor.tsx:110 only lists the reader's own calendars as a save target, so a new event can't be created in a shared calendar even with write rights.
Expected
Writes to a shared calendar go to the owner's account (the accountId the shared calendar was loaded from), and writable shared calendars appear in the editor's calendar picker.
Suggested fix
Add accountId to EventInstance (shared events already have it via sharedKey), pass it to the four store calls instead of get().accountId, and include writable SharedCalendars in the editor's picker.
Environment
ihasmail 2026.10.5+g20c32ed / main 2649c00, Stalwart 0.16.23 with calendar shares (shareWith) between accounts.
Found by reading the source; not yet reproduced with two live accounts.
**What happens**
- EventInstance (web/src/store/calendar.ts:13-21) carries no account id.
- createEvent, updateEvent, destroyEvent and rsvp all use get().accountId, the reader's own account (store/calendar.ts around lines 710-781).
- EventPopover.tsx:26 still shows Edit and Delete when the share grants mayWriteAll / mayWriteOwn.
- So an edit or delete of a shared event is sent as CalendarEvent/set to the reader's account with the owner's event id. JMAP ids are per account, so the result is notFound, or, if the reader happens to own an event with the same id, a change to the reader's own unrelated event.
- EventEditor.tsx:110 only lists the reader's own calendars as a save target, so a new event can't be created in a shared calendar even with write rights.
**Expected**
Writes to a shared calendar go to the owner's account (the accountId the shared calendar was loaded from), and writable shared calendars appear in the editor's calendar picker.
**Suggested fix**
Add accountId to EventInstance (shared events already have it via sharedKey), pass it to the four store calls instead of get().accountId, and include writable SharedCalendars in the editor's picker.
**Environment**
ihasmail 2026.10.5+g20c32ed / main 2649c00, Stalwart 0.16.23 with calendar shares (shareWith) between accounts.
Thanks @dwofford, this was a great catch and your write-up made it easy. Fixed in #50: changes to a shared event now go to the owner's account, and you can add events to a calendar shared with you for writing. It'll be in Monday's release.
Thanks @dwofford, this was a great catch and your write-up made it easy. Fixed in #50: changes to a shared event now go to the owner's account, and you can add events to a calendar shared with you for writing. It'll be in Monday's release.
Thanks John, that was fast! Really appreciate it. I'll update as soon as Monday's release is out and let you know if anything looks off with a real share between two accounts.
Thanks John, that was fast! Really appreciate it. I'll update as soon as Monday's release is out and let you know if anything looks off with a real share between two accounts.
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.
Found by reading the source; not yet reproduced with two live accounts.
What happens
Expected
Writes to a shared calendar go to the owner's account (the accountId the shared calendar was loaded from), and writable shared calendars appear in the editor's calendar picker.
Suggested fix
Add accountId to EventInstance (shared events already have it via sharedKey), pass it to the four store calls instead of get().accountId, and include writable SharedCalendars in the editor's picker.
Environment
ihasmail 2026.10.5+g20c32ed / main
2649c00, Stalwart 0.16.23 with calendar shares (shareWith) between accounts.Thanks @dwofford, this was a great catch and your write-up made it easy. Fixed in #50: changes to a shared event now go to the owner's account, and you can add events to a calendar shared with you for writing. It'll be in Monday's release.
Thanks John, that was fast! Really appreciate it. I'll update as soon as Monday's release is out and let you know if anything looks off with a real share between two accounts.
This is live on ihasmail.com now too. Self-hosted gets it in Monday's release.