[JMAP] Re: JMAP for Calendars comments
Mauro De Gennaro <mauro@stalw.art> Thu, 09 October 2025 18:44 UTC
Return-Path: <mauro@stalw.art>
X-Original-To: jmap@mail2.ietf.org
Delivered-To: jmap@mail2.ietf.org
Received: from localhost (localhost [127.0.0.1]) by mail2.ietf.org (Postfix) with ESMTP id F0A8D703DE03 for <jmap@mail2.ietf.org>; Thu, 9 Oct 2025 11:44:13 -0700 (PDT)
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -2.098
X-Spam-Level:
X-Spam-Status: No, score=-2.098 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: mail2.ietf.org (amavisd-new); dkim=pass (2048-bit key) header.d=stalw.art header.b="Gh5wTbld"; dkim=neutral reason="invalid (unsupported algorithm ed25519-sha256)" header.d=stalw.art header.b="Wk9adX3k"
Received: from mail2.ietf.org ([166.84.6.31]) by localhost (mail2.ietf.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id FQM_D4Wk_Yxz for <jmap@mail2.ietf.org>; Thu, 9 Oct 2025 11:44:13 -0700 (PDT)
Received: from mail.stalw.art (mail.stalw.art [135.181.195.209]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-256) server-digest SHA256) (No client certificate requested) by mail2.ietf.org (Postfix) with ESMTPS id 09BC0703DDF9 for <jmap@ietf.org>; Thu, 9 Oct 2025 11:44:12 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; s=202404r; d=stalw.art; c=relaxed/relaxed; h=Message-Id:To:Date:Subject:From; t=1760035445; bh=xkeRO5HgYRAgri0zp2LOTgL Vv4Bt5AiO5NDg7CulgmY=; b=Gh5wTbldoc4lsqYzLB8ZV+C1BGeE9PUoy4EM7NOP4MpuHkuZUH +ueKA0P2/3gtfsPnIfz/GKyourQPMydR5Z1dSXa7HEg5be5SWKypctm/lFvSDDAcIIQZ6d8trHR HITmspAYv3PlyHBfDgUchIF4MjN8QmGsjNp6teHElGJ3EnPbIcppAdIaLPk7RtvCYliX03UUbhg z+jpzlTIR+80KhEmKneqArYvWwJzDPgwZoraDwQcoosCSVMomdZ6WoWZ7wTPwHQjMatztdhwXLO ay3bCbHqyNEduGsuPS8tcE7H/8xCQj98R402YgvAbShUXx1QEUEHg3Ic3vsxPZuuFUw==;
DKIM-Signature: v=1; a=ed25519-sha256; s=202404e; d=stalw.art; c=relaxed/relaxed; h=Message-Id:To:Date:Subject:From; t=1760035445; bh=xkeRO5HgYRAgri0zp2LOTgL Vv4Bt5AiO5NDg7CulgmY=; b=Wk9adX3k1KJJn8oafuhEY1u+H5q5PAvAoB7JuHcn7Cex9tdz0o hpBm1WiQzMft09Qf/0Ct4pI0UjFGXJxf+mAg==;
From: Mauro De Gennaro <mauro@stalw.art>
Content-Type: multipart/alternative; boundary="Apple-Mail=_74BF4ED8-E775-4A79-A084-9ED512A52529"
Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3731.700.6.1.11\))
Date: Thu, 09 Oct 2025 20:43:55 +0200
References: <101DEC25-A12F-4063-90FB-446C6E5190BF@stalw.art> <4aa2017d-5ef4-486f-a264-2c8e2bec6094@dogfoodapp.fastmail.com>
To: IETF JMAP Mailing List <jmap@ietf.org>
In-Reply-To: <4aa2017d-5ef4-486f-a264-2c8e2bec6094@dogfoodapp.fastmail.com>
Message-Id: <34E1318A-C0D3-495F-9076-6B914C60D59F@stalw.art>
X-Mailer: Apple Mail (2.3731.700.6.1.11)
Message-ID-Hash: 4AXW63Z4DG5IHEFLJGMS3R6B76ZCX55M
X-Message-ID-Hash: 4AXW63Z4DG5IHEFLJGMS3R6B76ZCX55M
X-MailFrom: mauro@stalw.art
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-jmap.ietf.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [JMAP] Re: JMAP for Calendars comments
List-Id: JSON Meta Access Protocol <jmap.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/jmap/mGUMmDt5DMpyAqrxcIbQZBvd5x0>
List-Archive: <https://mailarchive.ietf.org/arch/browse/jmap>
List-Help: <mailto:jmap-request@ietf.org?subject=help>
List-Owner: <mailto:jmap-owner@ietf.org>
List-Post: <mailto:jmap@ietf.org>
List-Subscribe: <mailto:jmap-join@ietf.org>
List-Unsubscribe: <mailto:jmap-leave@ietf.org>
Hi Neil, Thanks for the fixes! Please find below my replies plus some new comments, >> Now, suppose Jane sees mailto:john.do <http://john.do/>e@example.com <http://example.com/> listed as a participant in an event and wants to query John’s availability using Principal/getAvailability. How can Jane determine which principal ID is associated with that address, given that it’s defined as a ParticipantIdentity under John’s account? The Principal/query method does not currently allow querying by calendar address and Principal objects can contain just one email, so how should a client resolve that mapping? > > Interesting, I see where you're coming from now with all this. A few thoughts: > It would have to be a policy decision for the server over whether users are allowed to resolve the owner of the alias; as mentioned earlier, some people consider them private. > The most common scenario (by far) is for the organiser to be checking availability, and they would not have this problem (because you go the other way → find the principals you want to schedule with, check their availability, then get the address to invite from the Principal). > If we did want to support this, my feeling is the best way would be to add an optional principalId property to the Participant <https://www.ietf.org/archive/id/draft-ietf-calext-jscalendarbis-09.html#name-participants> object, which the server would automatically add if it could resolve which Principal this participant corresponded to, and its policy gave user permission to see this. Do others think this is worth adding? What do you think about instead extending Principal/query to support searching by calendarAddress? That might cover the same use case without introducing new properties on Participant. While looking into this, I ran into a few related issues. Let me try to explain using a simple example with ACME, Inc.: Wile E. Coyote: accountId: A1 principalId: P1 (email address: wile@acme.net) participant identities: wile@acme.net, coyote@acme.net Road Runner: accountId: A2 principalId: P2 (email address: road_runner@acme.net) participant identities: road_runner@acme.net, runner@acme.net “Corporate” group, which contains a shared calendar: accountId: A3 shared with: A1, A2 From this setup, a few questions and gaps become apparent: Finding the principal for a calendar address: As mentioned before, it’s currently not possible to obtain the principal ID for a given calendar address. Allowing Principal/query to search by calendarAddress would solve this and avoid the need to add a new property to the Participant object. Discovering a principal’s calendar addresses: If Wile wants to invite Road Runner to an event stored in the Corporate shared calendar, he might run a Principal/query for “Road Runner” and obtain the principal details, but the Principal object only lists an email address, not calendar addresses. I think that if a user is available for scheduling, at least one calendarAddress should be included in the Principalobject. Otherwise, there’s no reliable way to search for other users to invite to a shared calendar. Identifying the main account ID of a principal: Suppose Road Runner wants to share his personal calendar (or a mailbox) with Wile. He queries for Wile’s Principal and sees account IDs “A1” and “A3” listed under the accounts property. But how can his client tell which one is Wile’s main account? Both have the urn:ietf:params:jmap:principals:owner capability since he’s a member of both. I checked whether the isPersonal flag could be used for this but it serves a different purpose. To summarize, we currently lack a way to: Obtain the principalId associated with a calendarAddress (needed to fetch availability). Obtain the calendarAddress values for a Principal (needed to invite users to events). Identify the “main” accountId for a Principal (needed when sharing data). I also have a few additional comments and questions unrelated to the above: CalendarEvent/set: The line “If 'utcStart' is set, this is translated into a 'start' property using the server's current time zone information” isn’t entirely clear. I assume it means the event is converted to the calendar’s default time zone? Conflicting calendar defaults: When an event is added to multiple calendars with different default alerts, time zones, etc., how should these preferences be applied? Principal/getAvailability: The method requires both a principalId and an accountId. Could the accountId be made optional so the server returns combined availability for all calendars the principal can access? Otherwise, clients have to issue multiple queries and merge the results locally, which seems counter to JMAP’s low-bandwidth design goals. The rules for relevant events cover shared calendars, but it would help to clarify how to handle personal calendars containing events without participants. It’s unclear what busyStatus should be used when participationStatus is needsAction, tentative (and maybe also that delegated should not be included). Recurrence range matching: CalDAV treats time ranges differently for VEVENT and VTODO (RFC 4791 §9.9). Should JMAP for Calendars follow the same behavior for consistency? CalendarEvent/query: The cannotCalculateOccurrences error seems to cover general recurrence failures. Would it be useful to define a specific error when a recurrence range expansion is too large? CalendarEventNotification: The changedBy/name property should probably be nullable, since this information might not be available in iMIP messages from external systems. Shared personal calendars: The specification currently focuses on shared group calendars, which is great, but it might also need to clarify the rules for shared personal calendars (for example, how Principal/getAvailability should behave in that context). I’m nearly finished implementing JMAP for Calendars and JMAP for Sharing, so these will likely be my final round of comments. Thanks, Mauro
- [JMAP] JMAP for Calendars comments Mauro De Gennaro
- [JMAP] Re: JMAP for Calendars comments Mauro De Gennaro
- [JMAP] Re: JMAP for Calendars comments Mauro De Gennaro
- [JMAP] Re: JMAP for Calendars comments Ben Bucksch
- [JMAP] Re: JMAP for Calendars comments Mauro De Gennaro
- [JMAP] Re: JMAP for Calendars comments Neil Jenkins
- [JMAP] Re: JMAP for Calendars comments Mauro De Gennaro
- [JMAP] Re: JMAP for Calendars comments Neil Jenkins
- [JMAP] Re: JMAP for Calendars comments Mauro De Gennaro
- [JMAP] Re: JMAP for Calendars comments Mauro De Gennaro
- [JMAP] Re: JMAP for Calendars comments Neil Jenkins
- [JMAP] Re: JMAP for Calendars comments Mauro De Gennaro
- [JMAP] Re: JMAP for Calendars comments Neil Jenkins
- [JMAP] Re: JMAP for Calendars comments Mauro De Gennaro
- [JMAP] Re: JMAP for Calendars comments Neil Jenkins
- [JMAP] Re: JMAP for Calendars comments Mauro De Gennaro
- [JMAP] Re: JMAP for Calendars comments Robert Stepanek
- [JMAP] Re: JMAP for Calendars comments Neil Jenkins