The mock now reproduces the four client-visible JMAP changes in Stalwart 0.16.22, read from its source (crates/jmap/src/calendar_event/get.rs, contact/get.rs) and the tests added with them.
0.16.21
0.16.22 (and the mock now)
baseEventId on an event read by its stored id
its own id
null
baseEventId on a synthetic id (occurrence, or a one-off from an expanded query)
master's id
master's id, unchanged
recurrenceRule / recurrenceOverrides named on a synthetic id
absent
null
useDefaultAlerts never set
true
false
properties: [] on CalendarEvent/get / ContactCard/get
everything
id only
eventGetView in server/src/mock/recurrence.ts builds the named-properties response; CalendarEvent/get uses it for stored ids, synthetic ids and the no-ids path. With properties omitted the stored object comes back as before.
pick already returned only id for an empty list, so ContactCard/get only gains a comment.
The client already copes: it reads recurrenceRule and recurrenceOverrides with ??, and treats a null baseEventId as a base event.
README: fixes the sentence from #341 that said a one-off now carries a null base (only true when read by its stored id), and says the mock follows 0.16.22.
Checked: 7 new tests in recurrence.test.ts; server suite 200/200; typecheck clean. The mock was run and called over JMAP. An expanded occurrence returned baseEventId: "ev1" with null rule and overrides, an expanded one-off returned baseEventId: "ev2", ev1 by stored id returned baseEventId: null and useDefaultAlerts: false, and both methods returned id only for properties: [].
The mock now reproduces the four client-visible JMAP changes in Stalwart 0.16.22, read from its source (`crates/jmap/src/calendar_event/get.rs`, `contact/get.rs`) and the tests added with them.
| | 0.16.21 | 0.16.22 (and the mock now) |
|---|---|---|
| `baseEventId` on an event read by its stored id | its own id | `null` |
| `baseEventId` on a synthetic id (occurrence, or a one-off from an expanded query) | master's id | master's id, unchanged |
| `recurrenceRule` / `recurrenceOverrides` named on a synthetic id | absent | `null` |
| `useDefaultAlerts` never set | `true` | `false` |
| `properties: []` on `CalendarEvent/get` / `ContactCard/get` | everything | `id` only |
- `eventGetView` in `server/src/mock/recurrence.ts` builds the named-properties response; `CalendarEvent/get` uses it for stored ids, synthetic ids and the no-ids path. With `properties` omitted the stored object comes back as before.
- `pick` already returned only `id` for an empty list, so `ContactCard/get` only gains a comment.
- The client already copes: it reads `recurrenceRule` and `recurrenceOverrides` with `??`, and treats a null `baseEventId` as a base event.
- README: fixes the sentence from #341 that said a one-off now carries a null base (only true when read by its stored id), and says the mock follows 0.16.22.
**Checked:** 7 new tests in `recurrence.test.ts`; server suite 200/200; typecheck clean. The mock was run and called over JMAP. An expanded occurrence returned `baseEventId: "ev1"` with null rule and overrides, an expanded one-off returned `baseEventId: "ev2"`, `ev1` by stored id returned `baseEventId: null` and `useDefaultAlerts: false`, and both methods returned `id` only for `properties: []`.
No new UI strings.
**Merged** 2026-09-13 as coffey-labs/ihasmail@3dd8c7c2ddcc
<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.
The mock now reproduces the four client-visible JMAP changes in Stalwart 0.16.22, read from its source (
crates/jmap/src/calendar_event/get.rs,contact/get.rs) and the tests added with them.baseEventIdon an event read by its stored idnullbaseEventIdon a synthetic id (occurrence, or a one-off from an expanded query)recurrenceRule/recurrenceOverridesnamed on a synthetic idnulluseDefaultAlertsnever settruefalseproperties: []onCalendarEvent/get/ContactCard/getidonlyeventGetViewinserver/src/mock/recurrence.tsbuilds the named-properties response;CalendarEvent/getuses it for stored ids, synthetic ids and the no-ids path. Withpropertiesomitted the stored object comes back as before.pickalready returned onlyidfor an empty list, soContactCard/getonly gains a comment.recurrenceRuleandrecurrenceOverrideswith??, and treats a nullbaseEventIdas a base event.Checked: 7 new tests in
recurrence.test.ts; server suite 200/200; typecheck clean. The mock was run and called over JMAP. An expanded occurrence returnedbaseEventId: "ev1"with null rule and overrides, an expanded one-off returnedbaseEventId: "ev2",ev1by stored id returnedbaseEventId: nullanduseDefaultAlerts: false, and both methods returnedidonly forproperties: [].No new UI strings.
Merged 2026-09-13 as coffey-labs/ihasmail@3dd8c7c2dd
Rebuilt from: git history, session transcript.