From 28acad6865e9d0ace95df5550e7a3e636f960c1c Mon Sep 17 00:00:00 2001 From: John Coffey Date: Sun, 13 Sep 2026 17:49:08 -0700 Subject: [PATCH 1/2] Say 0.16.22 in the README, and what it changed for a client The live instance moved to Stalwart 0.16.22 on 2026-09-13. The badge and the requirements section now say so. The hand validation stays credited to 0.16.21, because 0.16.22 was read against its diff rather than re-run, and the four calendar and contacts JMAP changes it makes are listed, along with the fact that the mock does not follow them yet. --- README.md | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 719a7a5..ca2339c 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@

Licence: AGPL-3.0-or-later - Requires Stalwart 0.16 or newer; tested against 0.16.21 + Requires Stalwart 0.16 or newer; runs on 0.16.22 Documentation: docs.ihasmail.org by Coffey Labs

@@ -88,8 +88,18 @@ wrong guess had somewhere to fall back to, so it failed *quietly* — and that reached production. With one supported generation a wrong guess is a loud error on the first call. -**Validated against 0.16.21**, released 6 September 2026: the app was run -against a real instance of it and the mail, calendar and contacts paths were +**The live instance runs 0.16.22**, released 13 September 2026 and upgraded to +the same day. It was read against its diff rather than re-run, and four of its +JMAP changes are visible to a client, all in calendars and contacts: +`CalendarEvent/get` returns `baseEventId` only on a synthetic occurrence, so a +one-off event now carries `null` there; it returns `null` for `recurrenceRule` +and `recurrenceOverrides` asked for on an occurrence; `useDefaultAlerts` is +stored per user and reads `false` when never set; and `CalendarEvent/get` and +`ContactCard/get` return only `id` for an empty `properties` list, rather than +everything. The mock does not follow these yet. + +**Validated by hand against 0.16.21**, released 6 September 2026: the app was +run against a real instance of it and the mail, calendar and contacts paths were exercised by hand. Four of that release's JMAP changes are visible to a client — an occurrence of a recurring event is now identified by its recurrence id rather than by its position in the series, so an id held across a write no @@ -97,7 +107,7 @@ longer silently names a different date; `Calendar/get` and `AddressBook/get` return every property when none are named; EventSource advertises its ping interval in seconds rather than milliseconds; and a calendar write that asks for scheduling messages is refused when the account may not send them. The mock -reproduces all four. +reproduces those four. - Still on 0.15? The last release that runs on it is tagged [`stalwart-0.15-support`](https://github.com/Coffey-Labs/ihasmail/releases/tag/stalwart-0.15-support). - Upgrading? [stalwart-migrator](https://github.com/Coffey-Labs/stalwart-migrator) does it in place, checkpointing every phase and validating afterwards. The live instance moved 0.15.5 → 0.16.19 with eight seconds of downtime and nothing lost. From 64dbb30e7083bb23a513ba837e0deb4710eea2c8 Mon Sep 17 00:00:00 2001 From: John Coffey Date: Sun, 13 Sep 2026 17:50:43 -0700 Subject: [PATCH 2/2] Credit the testing to 0.16.22, where it was done The live instance was tested on 0.16.22, not only read against its diff. The badge says tested against it again, and 0.16.21 becomes the release before. --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index ca2339c..3a363e4 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@

Licence: AGPL-3.0-or-later - Requires Stalwart 0.16 or newer; runs on 0.16.22 + Requires Stalwart 0.16 or newer; tested against 0.16.22 Documentation: docs.ihasmail.org by Coffey Labs

@@ -88,9 +88,9 @@ wrong guess had somewhere to fall back to, so it failed *quietly* — and that reached production. With one supported generation a wrong guess is a loud error on the first call. -**The live instance runs 0.16.22**, released 13 September 2026 and upgraded to -the same day. It was read against its diff rather than re-run, and four of its -JMAP changes are visible to a client, all in calendars and contacts: +**Validated against 0.16.22**, released 13 September 2026: the live instance +runs it and the app has been tested against it. Four of its JMAP changes are +visible to a client, all in calendars and contacts: `CalendarEvent/get` returns `baseEventId` only on a synthetic occurrence, so a one-off event now carries `null` there; it returns `null` for `recurrenceRule` and `recurrenceOverrides` asked for on an occurrence; `useDefaultAlerts` is @@ -98,9 +98,9 @@ stored per user and reads `false` when never set; and `CalendarEvent/get` and `ContactCard/get` return only `id` for an empty `properties` list, rather than everything. The mock does not follow these yet. -**Validated by hand against 0.16.21**, released 6 September 2026: the app was -run against a real instance of it and the mail, calendar and contacts paths were -exercised by hand. Four of that release's JMAP changes are visible to a client +Before it, **0.16.21**, released 6 September 2026: the app was run against a +real instance of it and the mail, calendar and contacts paths were exercised by +hand. Four of that release's JMAP changes are visible to a client — an occurrence of a recurring event is now identified by its recurrence id rather than by its position in the series, so an id held across a write no longer silently names a different date; `Calendar/get` and `AddressBook/get`