From 0c61e012a0c2f0668e9e6784be09fc2d2acb824f Mon Sep 17 00:00:00 2001 From: Egor Yakovlev Date: Wed, 28 Oct 2026 10:31:33 +0100 Subject: [PATCH] CalendarEvent: optional timezone, the IANA zone the wall clock was meant in An offset is not a zone. The offset in start/end is the consequence of a zone at one instant: +02:00 is both Europe/Amsterdam and Africa/Johannesburg, and Amsterdam's own offset differs either side of a DST boundary. So the zone cannot be recovered from a stored event, and an application that wants to re-render an event in the zone it was scheduled in -- or place a recurrence correctly once the clocks change -- has nowhere to read it from. The field is optional and additive: a reader that does not know it is unaffected, and an event without it is exactly as valid as before. Raised because the schema is additionalProperties:false, so writing this privately would make the envelopes fail strict validation instead of extending the schema -- the honest route is here. --- services/ontology/schemas/calendarEvent.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/services/ontology/schemas/calendarEvent.json b/services/ontology/schemas/calendarEvent.json index 256143711..12063dd9f 100644 --- a/services/ontology/schemas/calendarEvent.json +++ b/services/ontology/schemas/calendarEvent.json @@ -65,6 +65,10 @@ "format": "date-time", "description": "Event end time (ISO 8601)" }, + "timezone": { + "type": "string", + "description": "IANA time zone name the event's wall-clock time was meant in, e.g. \"Europe/Amsterdam\". Not derivable from the offset in `start`/`end`: an offset is the CONSEQUENCE of a zone at one instant, so +02:00 is both Europe/Amsterdam and Africa/Johannesburg, and Amsterdam's own offset differs across a DST boundary. Needed to re-render an event in the zone it was scheduled in, and to place a recurrence correctly once the clocks change." + }, "isAllDay": { "type": "boolean" },