Issue Description
When an organiser sends a rescheduling UPDATE for an existing meeting (same UID, SEQUENCE incremented, new DTSTART, METHOD:REQUEST), Stalwart does not process it. The attendee’s existing calendar copy keeps the old DTSTART and its PARTSTAT=ACCEPTED; the update is neither applied to the event nor placed in the scheduling inbox for the client. This occurs even though the organiser is fully authenticated (SPF+DKIM+DMARC pass) and present in the recipient’s CardDAV address book.
Expected Behavior
A REQUEST with an incremented SEQUENCE supersedes the prior version of the same UID. For a meeting already on the attendee’s calendar:
the attendee’s copy should be updated to the new DTSTART, and
because the meeting materially changed, the attendee’s PARTSTAT should reset to NEEDS-ACTION so re-acceptance is required.
This should happen regardless of autoAddInvitations — the meeting already exists, so this is an update, not a first-time add. (With autoAddInvitations=true it should auto-apply; with the default it should at least be reflected/surfaced for re-confirmation rather than silently discarded.)
Actual Behavior
Stored event keeps the SEQUENCE:1 DTSTART (old time).
PARTSTAT stays ACCEPTED (never reset to NEEDS-ACTION).
The update .ics is not in /dav/itip//inbox/ (which contains only unrelated METHOD:REPLY items).
Net effect: the reschedule is silently lost.
Reproduction Steps
- Receive and accept an iTIP REQUEST (SEQUENCE:1) from an authenticated, in-address-book organiser. The event appears with PARTSTAT=ACCEPTED.
- The organiser sends a reschedule: same UID, SEQUENCE:2, new DTSTART, METHOD:REQUEST.
- Inspect the stored calendar object — it still shows the SEQUENCE:1 time and PARTSTAT=ACCEPTED.
Stalwart Version
v0.16.x
Installation Method
Docker
Database Backend
PostgreSQL
Blob Storage
PostgreSQL
Search Engine
Internal
Directory Backend
SQL
Additional Context
- Attendee REPLYs to meetings the user organises also accumulate unprocessed in /dav/itip//inbox/ over weeks (the JMAP webmail client never drains them).
- An outbox POST of a METHOD:REPLY to /dav/itip//outbox/ is rejected with 400 .
- See #2700 and #2734 — may share an underlying scheduling-processing gap.
I have reviewed the documentation and FAQ and confirm that my issue is NOT addressed there.
on
I have searched this support forum (open and closed topics) and confirm this is not a duplicate.
on
I understand that topics in this category are triaged by a bot first but a human reply will follow up. If I’d prefer a human-only reply, I’ll add the no-ai tag to my topic.
on