[JMAP] Re: JMAP for Calendars comments

Mauro De Gennaro <mauro@stalw.art> Sun, 26 October 2025 11:30 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 90B607C5E4E2 for <jmap@mail2.ietf.org>; Sun, 26 Oct 2025 04:30:14 -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="GVuKY76m"; dkim=neutral reason="invalid (unsupported algorithm ed25519-sha256)" header.d=stalw.art header.b="Pr0/hXwJ"
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 wZAjZ1viRdd4 for <jmap@mail2.ietf.org>; Sun, 26 Oct 2025 04:30:14 -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 DF06A7C5E429 for <jmap@ietf.org>; Sun, 26 Oct 2025 04:30:06 -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=1761478205; bh=1x0/X1BB7Vx8ox1grgibs0/ pMfW9yEfDF8m6nx+DhwM=; b=GVuKY76mIhT7HpLOo9NB8LiJL1E0ahnWPYjgRRqdxlolY1fc7a PbgrQNp3DH/msHZODyi7p7yCG08L4wh6SkgkQnPVZP67pDgZHjXfsQnrFAp44gSq5SXTjMBoUUD FJ4D4xk4cwZ94qfhK/w2dBgUq2xVJHa9pTNsoNScCKs+Qk4LfgU2iwrKaXetCQ6W0XKPWoZ3Drv q5B1xUytauWeRIh8bWvSpc4IXCuwIapl96SbEdCPw/3zaKNoUBJebp78jhbXFMRZa6jj/SZJU/I ExuGdYR/8BynMqM6q5aBWJpGIgxORqpfn3UR2yna5+AjDi64sSQTl+maiGlbMFP8yfg==;
DKIM-Signature: v=1; a=ed25519-sha256; s=202404e; d=stalw.art; c=relaxed/relaxed; h=Message-Id:To:Date:Subject:From; t=1761478205; bh=1x0/X1BB7Vx8ox1grgibs0/ pMfW9yEfDF8m6nx+DhwM=; b=Pr0/hXwJQf0DiDk7JP4cp1TlVX5sjrK+3tWMKeA9T31sfrEn5T wGBwAkyBQoaJ1qX2TPCrhuRm4mFEHy2amWCg==;
From: Mauro De Gennaro <mauro@stalw.art>
Content-Type: multipart/alternative; boundary="Apple-Mail=_7C203960-36FF-495C-8EB3-AC7AFAEC1006"
Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3731.700.6.1.11\))
Date: Sun, 26 Oct 2025 12:29:55 +0100
References: <101DEC25-A12F-4063-90FB-446C6E5190BF@stalw.art> <4aa2017d-5ef4-486f-a264-2c8e2bec6094@dogfoodapp.fastmail.com> <34E1318A-C0D3-495F-9076-6B914C60D59F@stalw.art> <4561708e-c41a-4ef5-a644-0444eabbc083@dogfoodapp.fastmail.com> <7A250971-CC56-4D31-9B23-058B29A38E68@stalw.art> <bbc34c86-0ff7-4c95-96f4-1679032991c1@dogfoodapp.fastmail.com>
To: IETF JMAP Mailing List <jmap@ietf.org>
In-Reply-To: <bbc34c86-0ff7-4c95-96f4-1679032991c1@dogfoodapp.fastmail.com>
Message-Id: <844211F2-BF21-4B29-B996-B722E7DA02C6@stalw.art>
X-Mailer: Apple Mail (2.3731.700.6.1.11)
Message-ID-Hash: 2ELISWQU652NXJLJN67V2MTHAVPI4XBE
X-Message-ID-Hash: 2ELISWQU652NXJLJN67V2MTHAVPI4XBE
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/lrslt648yIykwSglt10i76auTmI>
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,

> Apologies for the delay in getting back to this.

No worries, last week I started writing my first I-Ds and realised how much time it takes!


> OK, I've added:
> 2.3. Principal/query extension
> 
> The following extra optional property is added to the FilterCondition object for the Principal/query method when the urn:ietf:params:jmap:principals:availability capability is used:
> 
> calendarAddress: String
>     The given string is a calendarAddress belonging to the Principal.
> 
> Does that work for you?

That’s perfect, thank you.


>> Just to clarify the model in Stalwart: when a Principal is a member of a group, they also own the group’s account data in addition to their own.
> 
> That's not how that was intended to work. An account can only be owned by a single Principal, so it should either be a group principal representing the group, or no owner (both are allowed). It sounds like you're returning a different owner depending on who's accessing the account? What was the idea behind that?
> 
>> It’s also possible for a group to share data with an individual Principal, in which case that Principal does not own the shared data.
> 
> Sorry, I don't understand what you're trying to differentiate here. Can you elaborate?

From an ACL perspective in Stalwart, members of a group account are effectively treated as co-owners of that group’s data, in addition to their own personal account data. It’s also possible for a group member to share the group account with non-members. I was trying to model this kind of multi-owner setup within the JMAP Sharing framework, but if JMAP requires each account to have a single owner, I’ll adjust the implementation so that only the main user account is marked as the owner.


> Yeah, that's reasonable. I've changed it to:
> 
> If set, the server will convert the UTC date to the event's current time zone and store the local time. If the event does not have a non-null "timeZone" property, the server MUST also set this property (and return it in the created/updated response, as per RFC8620, Section 5.3 <https://www.rfc-editor.org/rfc/rfc8620.html#section-5.3>). The value MUST be the "timeZone" property of the Calendar(s) the event is in if all of them have the same non-null value. Otherwise, the time zone is to be set to "Etc/UTC".

Great, thanks.

I have one last comment regarding Principal/getAvailability: it would be helpful if each BusyPeriod object also included the accountId when the event property is not null (and the user has access to that account). This would allow clients to map the returned event to its corresponding CalendarEvent object more easily.



Best,
Mauro