[calsify] Issues with overrides.
Michael Douglass <mikeadouglass@gmail.com> Thu, 24 September 2020 02:35 UTC
Return-Path: <mikeadouglass@gmail.com>
X-Original-To: calsify@ietfa.amsl.com
Delivered-To: calsify@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 4A09D3A0AB4 for <calsify@ietfa.amsl.com>; Wed, 23 Sep 2020 19:35:58 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
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, FREEMAIL_FROM=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 1OYRKTFt_Jh5 for <calsify@ietfa.amsl.com>; Wed, 23 Sep 2020 19:35:56 -0700 (PDT)
Received: from mail-qt1-x82b.google.com (mail-qt1-x82b.google.com [IPv6:2607:f8b0:4864:20::82b]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 692F43A0AB3 for <calsify@ietf.org>; Wed, 23 Sep 2020 19:35:56 -0700 (PDT)
Received: by mail-qt1-x82b.google.com with SMTP id g3so1706263qtq.10 for <calsify@ietf.org>; Wed, 23 Sep 2020 19:35:56 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=to:from:subject:message-id:date:user-agent:mime-version :content-transfer-encoding:content-language; bh=3n0dXaJBL8MdD3jHINdKk3A6IvUjCusTjGVV92xGEUM=; b=GJdK7eyoJP/vE5vnSdKm+bRC9lkSGryiNzm5pr+Xdl8iv2O6uGw8oQ8u0L+RjYce5Q Q3xdLduYbuSeZpWatsuVnIeDLsVyMjXSP1fRDylGWVQWHFLExjJ5lwbgNokC7mjhp4Uo Dc2OYTa8uziRi4iZVNc9ZObSvYZvry600dTzBE58V7jZXa0wDeWmn5a2F73Yn/ZZDHwH RZNzsy41juGx6CqcleiRjy+5vhoTURLJalRXSOZhGgVsfTD61GvG5zV2Yw1d2DI24GbT ekpOvlgfQf9Q0J36IlNkGnsEyQrdVZ8yX8MlS/2abhzqNBu4r6X1J5yMN1IFjH2xg+b8 qLag==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:from:subject:message-id:date:user-agent :mime-version:content-transfer-encoding:content-language; bh=3n0dXaJBL8MdD3jHINdKk3A6IvUjCusTjGVV92xGEUM=; b=atyfPKrC4f8RZXUNkYcE6ZrO7TAIA58c0v84oNVAnZfdIfzHjUa7OPvtymYvfPpCH5 DyreMdQ8llqA/7Yo/scUHyampBkx/HAcQ2eaI4r4qHFHYxuBClxcl0OM0Cr9nR6ELHPr L6peK371MEd4W562nQOtZvRKaanftnc3KDa2GqnTu9LfIOSMnDAWn1rmrfIEk5wFLzjs OKdgd5Al/An7o+Zh2wCAt9MvsHlyCmHDV8S+c/nkqjO38KYT3EAnifbR0DKgxFrrotWx a4Z/VzkcqSXiFBC5T99SCKaUivfg5sgbQ9aqWX3nEifBLqQAZJ46p/yEnvb8M8kc7kzQ JH5g==
X-Gm-Message-State: AOAM531GCerVlfQuniK/WQLa2R/kj8HvoqgOMgkryqTIStW028nwL/Ms 5Q53ex1pPfiHJ/99QB9q3GxX0zeieaVtOQ==
X-Google-Smtp-Source: ABdhPJwxpso0IxPfoia0t1r8BbvFH8wf91MF5jREXHp0o1VEz4yeDQwQdIruhX84MX2ffCp5ad4RrA==
X-Received: by 2002:ac8:5341:: with SMTP id d1mr3328694qto.176.1600914955055; Wed, 23 Sep 2020 19:35:55 -0700 (PDT)
Received: from MBP-2019.nycap.rr.com (cpe-74-70-80-66.nycap.res.rr.com. [74.70.80.66]) by smtp.googlemail.com with ESMTPSA id j16sm1310959qkg.26.2020.09.23.19.35.53 for <calsify@ietf.org> (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 23 Sep 2020 19:35:54 -0700 (PDT)
To: Calsify <calsify@ietf.org>
From: Michael Douglass <mikeadouglass@gmail.com>
Message-ID: <7867c58d-22f6-393f-1ff1-ec822c5bf4af@gmail.com>
Date: Wed, 23 Sep 2020 22:35:53 -0400
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:68.0) Gecko/20100101 Thunderbird/68.12.0
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"; format="flowed"
Content-Transfer-Encoding: 8bit
Content-Language: en-US
Archived-At: <https://mailarchive.ietf.org/arch/msg/calsify/edK00_RYwVJr4XmSHK28Z1K5Hhw>
Subject: [calsify] Issues with overrides.
X-BeenThere: calsify@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <calsify.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/calsify>, <mailto:calsify-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/calsify/>
List-Post: <mailto:calsify@ietf.org>
List-Help: <mailto:calsify-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/calsify>, <mailto:calsify-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 24 Sep 2020 02:35:58 -0000
Earlier (8/23) I sent a message outlining an issue I felt we had with jscalendar and invites to specific instances of a recurring event. The full text of a modified form of that is below. Neil asserted at that time that recurrence ids are only ids and not dates. That's not true. CalDAV for one requires that any instance that appears or would have appeared in a date range must be returned. It's the recurrence id that provides the calculated start date. The issue is that there's no way of knowing what the timezone of the master is if you don't have a master. In iCalendar the tzid is associated with the recurrence id - not so in jscalendar. I ran into this trying to implement the conversion from jscalendar to iCalendar in bedework and at the moment have no idea how that can be achieved. If we are going to have widespread adoption of jscalendar we can't be making it difficult to convert from one to the other and scheduling has to carry on working. More worrying to me is that there has been no testing and I suspect we only have 2-3 implementations. It's quite possible to have a scenario in which one UA receives the invite as jscalendar (Thunderbird) passes it across to the calendar app (iCal) as iCalendar which then replies in iCalendar. In that scenario the recurrence ids would fail to match. The event starts life inside a calendar system as a recurring event with 2 overrides - each inviting people and one with timezones shifted. The scenario I had in mind is a recurring meeting in New York say, and one instance takes place in London and extra people are invited. It’s not far fetched and very easy to produce with iCal or thunderbird. For the purposes of the example I reduced it to a daily event but I could imagine this as a weekly/monthly meeting with the occasional meeting in London with extra attendees. This is what it looks like - sort of. BEGIN:VCALENDAR CALSCALE:GREGORIAN PRODID:-//Bedework//EN VERSION:2.0 BEGIN:VEVENT CREATED:20200902T024956Z DURATION:PT1H DTSTAMP:20200902T024957Z DTSTART;TZID=America/New_York:20200522T120000 LAST-MODIFIED:20200902T024957Z SUMMARY:recurring daily 8 times UID:6252D6C40A8308BFE25CCDFiinvite-1 RRULE:FREQ=DAILY;COUNT=8 END:VEVENT BEGIN:VEVENT RECURRENCE-ID;TZID=America/New_York:20200524T120000 ATTENDEE;RSVP=TRUE:mailto:douglm@mysite.edu ATTENDEE;RSVP=TRUE;SCHEDULE-STATUS=1.2:mailto:vbede@mysite.edu CREATED:20200823T221135Z DURATION:PT1H DTSTAMP:20200902T024957Z DTSTART;TZID=America/New_York:20200524T120000 LAST-MODIFIED:20200902T024957Z ORGANIZER:mailto:douglm@mysite.edu SUMMARY:Test rid + tzid UID:6252D6C40A8308BFE25CCDFiinvite-1 END:VEVENT BEGIN:VEVENT RECURRENCE-ID;TZID=Europe/London:20200525T170000 ATTENDEE;RSVP=TRUE:mailto:douglm@mysite.edu ATTENDEE;RSVP=TRUE;SCHEDULE-STATUS=1.2:mailto:vbede@mysite.edu CREATED:20200823T221135Z DURATION:PT1H DTSTAMP:20200902T024957Z DTSTART;TZID=Europe/London:20200525T100000 LAST-MODIFIED:20200902T024957Z ORGANIZER:mailto:douglm@mysite.edu SUMMARY:Test rid + tzid UID:6252D6C40A8308BFE25CCDFiinvite-1 END:VEVENT END:VCALENDAR The 2 overrides are sent out to the attendees. Let’s assume the recipient “vbede” can accept jscalendar. I converted the iCalendar to jscalendar using bedework and came up with this: { "@type": "jsgroup", "prodId": "//Bedework.org//BedeWork V3.13.2//EN", "entries": [ { "@type": "jsevent", "created": "2020-09-02T02:49:58Z", "timeZone": "America/New_York", "duration": "PT1H", "uid": "6252D6C40A8308BFE25CCDFiinvite-1", "start": "2020-05-24T12:00:00", "recurrenceId": "2020-05-24T12:00:00", "participants": { "b1a9dca5-8a60-42e2-ba17-d983bdf3a68d": { "@type": "Participant", "sendTo": { "imip": "mailto:douglm@mysite.edu" }, "expectReply": true, "roles": { "attendee": true, "owner": true } }, "d946d07d-393f-46eb-8b49-9bbbef13f78a": { "@type": "Participant", "sendTo": { "imip": "mailto:vbede@mysite.edu" }, "expectReply": true, "roles": { "attendee": true } } }, "replyTo": { "imip": "mailto:douglm@mysite.edu" }, "title": "Test rid + tzid", "freeBusyStatus": "free" }, { "@type": "jsevent", "created": "2020-09-02T02:49:58Z", "duration": "PT1H", "uid": "6252D6C40A8308BFE25CCDFiinvite-1", "recurrenceId": "2020-05-25T12:00:00", "participants": { "9a4252d0-b1e5-4a37-bdf5-05e17d7898f9": { "@type": "Participant", "sendTo": { "imip": "mailto:douglm@mysite.edu" }, "expectReply": true, "roles": { "attendee": true, "owner": true } }, "184e6cf2-8288-4b46-812f-e111d773dd65": { "@type": "Participant", "sendTo": { "imip": "mailto:vbede@mysite.edu" }, "expectReply": true, "roles": { "attendee": true } } }, "start": "2020-05-25T10:00:00", "timeZone": "Europe/London", "replyTo": { "imip": "mailto:douglm@mysite.edu" }, "title": "Test rid + tzid", "freeBusyStatus": "free" } ] } The problem here is there’s no tz to associate with the recurrence id so we can convert back to valid calendar This is a problem because if I try to reply with an iCalendar object I can’t guarantee that the recurrence id is correct. So where do I get the TZID from? Suggesting we add these as vendor properties to deal with this is really not good enough. There are easier and more robust ways to fix this. The easiest way to resolve all these problems is to reassociate the timezone with the start date and have a recurrence property of the same form. That would fix these issues without vendors being asked to jump through hoops just to achieve interoperability. I think this is a more robust model anyway - the current jscalendar has this implicit relationship between the recurrence and the timezone of the master. Make it explicit and we’re done. It’s also more in line with date/time libraries which associate the value and the timezone. It means I can manipulate the start date in a more natural manner - obtain the UTC time etc. WIth this we would have the event looking like: { "@type": "jsgroup", "prodId": "//Bedework.org//BedeWork V3.13.2//EN", "entries": [ { "@type": "jsevent", "created": "2020-09-02T02:49:58Z", "duration": "PT1H", "uid": "6252D6C40A8308BFE25CCDFiinvite-1", "start": { “value” :“2020-05-24T12:00:00”, "timeZone": “America/New_York" }, "recurrenceId": { “value” :"2020-05-24T12:00:00", "timeZone": “America/New_York" }, "participants": { "b1a9dca5-8a60-42e2-ba17-d983bdf3a68d": { "@type": "Participant", "sendTo": { "imip": "mailto:douglm@mysite.edu" }, "expectReply": true, "roles": { "attendee": true, "owner": true } }, "d946d07d-393f-46eb-8b49-9bbbef13f78a": { "@type": "Participant", "sendTo": { "imip": "mailto:vbede@mysite.edu" }, "expectReply": true, "roles": { "attendee": true } } }, "replyTo": { "imip": "mailto:douglm@mysite.edu" }, "title": "Test rid + tzid", "freeBusyStatus": "free" }, { "@type": "jsevent", "created": "2020-09-02T02:49:58Z", "duration": "PT1H", "uid": "6252D6C40A8308BFE25CCDFiinvite-1", "recurrenceId": { “value” :"2020-05-25T12:00:00", "timeZone": “America/New_York" }, "participants": { "9a4252d0-b1e5-4a37-bdf5-05e17d7898f9": { "@type": "Participant", "sendTo": { "imip": "mailto:douglm@mysite.edu" }, "expectReply": true, "roles": { "attendee": true, "owner": true } }, "184e6cf2-8288-4b46-812f-e111d773dd65": { "@type": "Participant", "sendTo": { "imip": "mailto:vbede@mysite.edu" }, "expectReply": true, "roles": { "attendee": true } } }, "start": { “value” :"2020-05-25T10:00:00", “timeZone": "Europe/London" }, "replyTo": { "imip": "mailto:douglm@mysite.edu" }, "title": "Test rid + tzid", "freeBusyStatus": "free" } ] } which I don’t think is so terrible. We can argue that iCalendar should have had some different representation or should have dropped the timezone like jscalendar but it didn’t. Now we have systems that process these values in an iCalendar centric manner and they aren’t going away soon. We should also make a real effort to involve other vendors in this and do some real testing - particularly for scheduling. That testing MUST involve a mix of iCalendar and jscalendar otherwise it’s simply not a real world scenario.
- [calsify] Issues with overrides. Michael Douglass
- Re: [calsify] Issues with overrides. Neil Jenkins
- Re: [calsify] Issues with overrides. Michael Douglass
- Re: [calsify] Issues with overrides. Neil Jenkins