[calsify] AD review of draft-ietf-calext-jscalendar-23

Barry Leiba <barryleiba@computer.org> Wed, 19 February 2020 06:58 UTC

Return-Path: <barryleiba@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 31CDA12006F; Tue, 18 Feb 2020 22:58:52 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: 0.892
X-Spam-Level:
X-Spam-Status: No, score=0.892 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, FREEMAIL_FORGED_FROMDOMAIN=0.249, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.25, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, TO_NO_BRKTS_PCNT=2.292] autolearn=no autolearn_force=no
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 lOvyW3PmCE9R; Tue, 18 Feb 2020 22:58:49 -0800 (PST)
Received: from mail-il1-f176.google.com (mail-il1-f176.google.com [209.85.166.176]) (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 683B312001A; Tue, 18 Feb 2020 22:58:46 -0800 (PST)
Received: by mail-il1-f176.google.com with SMTP id p8so19622209iln.12; Tue, 18 Feb 2020 22:58:46 -0800 (PST)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc :content-transfer-encoding; bh=ksu20sUTQWB870gyM3+UvXUdCii4ycNybLruC67rGvk=; b=ueJE7xL54Dw+wm33fNcGDbJfUPkYuePti86xjV02k/e3oqdGmBweyJzXLG6Hma74MZ VvFPTK8fNOOCsmJLyVorIm8xjbbypJoQVYOw5laj/dHDkxeYcOQdF+3nbCqi8dMoqEBc 98ts0p5dQd3I433wyUe7dNKsecap3dOepWIEYZkkuUsErXKHegb6IeUetf7wKYfId0cg u2RE3bo/rlQhtwV5gQrMuKofFGoU7AGL6sIy4LEhN21+oMWZDYhqz9qli9qGVat1zNUw SWOt3yCvdzY6phri9rgkhVOkm3h3zE+2jpDGEms4SLvO2ujGVQ2BL2C+sReUp/eQv1Gb y+rA==
X-Gm-Message-State: APjAAAWmYJjtkfai0uPutA5R2ooD/QLdLunJcgcD9AU7NiEfZB44NSir ZrFgAa/guOihFxYBiY89U6w/jStmvDrLBE0mPNanOt8lDt8=
X-Google-Smtp-Source: APXvYqyUSnfmpd0qeuExBw+FCbkza9VekHsfvTlV2OecPRyRxhBcn/mwgBUe7XGqfHRP+9kb7gptYsdp9FlfsNyW5MA=
X-Received: by 2002:a92:9885:: with SMTP id a5mr23306621ill.107.1582095524395; Tue, 18 Feb 2020 22:58:44 -0800 (PST)
MIME-Version: 1.0
From: Barry Leiba <barryleiba@computer.org>
Date: Tue, 18 Feb 2020 22:58:33 -0800
Message-ID: <CALaySJJREdQn2oXr9+WgRn+rw2T=JHY-gTv8m+d1u4eZqjFO3w@mail.gmail.com>
To: draft-ietf-calext-jscalendar.all@ietf.org
Cc: calsify@ietf.org
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Archived-At: <https://mailarchive.ietf.org/arch/msg/calsify/ThVGH4A0vbhNK6_3jqERwkdYq5Y>
Subject: [calsify] AD review of draft-ietf-calext-jscalendar-23
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: Wed, 19 Feb 2020 06:58:52 -0000

Thanks for the work on this document.  I have a long list of comments,
many of which are just editorial, but a number of which are
substantive.  Because of the length of the list, I’d rather we deal
with all of them before moving the document into last call, so please
digest this list, address what you can directly, and chat with me
about the others.

Throughout: “i.e.” and “e.g.” each needs a comma after it, always.

Throughout: Please use “media type” instead of “MIME type”.

— Abstract —

   It aims to be an
   alternative, and over time successor to, the widely deployed
   iCalendar data format and to be unambiguous, extendable and simple to
   process.


Some misplaced commas here.

NEW
   It aims to be an
   alternative and, over time, a successor to the widely deployed
   iCalendar data format, and to be unambiguous, extendable, and simple
   to process.
END


   In contrast to the JSON-based jCal format, it is not a
   direct mapping from iCalendar and expands semantics where
   appropriate.

I would be clearer about what it *is*, rather than just saying what it
isn’t.  Maybe something like this (tweak accordingly):

NEW
   In contrast to the jCal format, which is also JSON-based, JSCalendar
   is not a direct mapping from iCalendar, but defines the data model
   afresh and expands semantics where appropriate.
END

— Section 1 —

   o  The attributes of the calendar entry represented must be described
      as a simple key-value pair.  Simple events are simple to
      represent, complex events can be modelled accurately.

Number agreement: “as simple key-value pairs” (multiple attributes)
The second sentence is a comma splice; either change the comma to a
semicolon or put “and” after the comma.

   o  The data model should avoid ambiguities and make it difficult to
      make mistakes during implementation.

Is “difficult” really the right word?  Or maybe “less likely”?


      and drop widely unused, obsolete or redundant

“Widely” doesn’t seem apt with a negative such as “unused” (sort of
like how something can be “twice as often used”, but not “twice as
often unused”).  I would say “seldom-used” (and I would add the Oxford
comma, as I did in the Abstract and would do throughout the document,
but I’m not going to push that nor mention it again).

      should be easy with most common iCalendar files but is not
      guaranteed with the full specification.

What does “not guaranteed with the full specification” mean?  can you
maybe rephrase it?

   o  Extensions, such as new properties and components, MUST NOT lead
      to requiring an update to this document.

I think it’s impossible to guarantee that at a “MUST NOT” level.
maybe, “generally do not require updates to this document.”

— Section 1.1 —

   For example, iCalendar defines various formats for local times, UTC
   time and dates, which confuses new users and often leads to
   implementation errors.  Other sources for errors are the requirement
   for custom time zone definitions within a single calendar component,
   as well as the iCalendar format itself; the latter causing
   interoperability issues due to misuse of CR LF terminated strings,
   line continuations and subtle differences between iCalendar parsers.
   The definition of recurrence rules is ambiguous and has resulted in
   differing understandings even between experienced calendar
   developers.

OK, I said I wouldn’t mention it again, but here’s an example of where
something is actually made harder to read by not including the Oxford
comma: I read item 1, “local times”, then item 2, “time and dates”,
then started looking for item 3.  Um.  But in general, I think the
paragraph is clunky and would benefit from being structured as a list.
Does this look reasonable?:

NEW
   Sources of implementation errors include the following:

   - iCalendar defines various formats for local times, UTC time, and dates.

   - iCalendar requires custom time zone definitions within a single
     calendar component.

   - iCalendar’s definition of recurrence rules is ambiguous and has resulted
     in differing understandings even between experienced calendar developers.

   - The iCalendar format itself causes interoperability issues due to misuse
     of CRLF-terminated strings, line continuations, and subtle differences
     among iCalendar parsers.
END

   In recent years, many new products and services have appeared that
   wish to use a JSON representation of calendar data within their API.

Number agreement: “within their APIs.”

   JSCalendar is intended
   to meet this demand for JSON-formatted calendar data, and to provide
   a standard, elegant representation as an alternative to new
   proprietary formats.

The IESG is going to complain about saying what you intend, rather
than what you’re doing, and they will definitely push back on
marketing-sounding things such as claims of elegance.  I also find
“this demand” to lack a clear antecedent.


NEW
   JSCalendar meets the demand for JSON-formatted calendar data that is
   free of such known problems and provides a standard representation
   as an alternative to the proprietary formats.
END

— Section 1.2 —

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in [RFC2119].

Please use the new BCP 14 boilerplate and add a normative reference to RFC8174.

— Section 1.3 —

   Other types may also be given, with their representation defined
   elsewhere in this document.

Number agreement: “with their representations defined”

— Section 1.4.2 —

   Where "UnsignedInt" is given as a data type, it means an "Int" where
   the value MUST be in the range 0 <= value <= 2^53-1.

Why is there a MUST here, but not in 1.4.1.  I suggest defining these
two (Int and UnsignedInt) consistently.  I don’t much care whether you
use MUST or not, though I would opt for not, so:

NEW
   Where “UnsignedInt" is given as a data type, it means an integer in
   the range 0 <= value <= 2^53-1, represented as a JSON "Number".
END

— Section 1.4.3 —

   In common notation, it should be of the form "YYYY-MM-DDTHH:MM:SSZ".

…which doesn’t allow for fractional seconds, which are allowed if
they’re non-zero.  I’m just noting that; I’m not sure it should be
fixed.

— Section 1.4.4 —

   Instead, they occur in
   every time zone at the same wall-clock time (as opposed to the same
   instant point in time).

I found myself momentarily unsure abnout this sentence.  I suggest a
slight rewording that I think is slightly (just slightly) clearer):

NEW
   Instead, they occur in
   each time zone at the given wall-clock time (as opposed to the same
   instant point in time).

END


— Section 1.4.6 —

       signed-duration = (["+"] / "-") duration

I guess this works.  I think this is a bit cleaner.  No?:

NEW
       signed-duration = ["+" / "-"] duration
END

(I passed the original by a colleague as a check, and he kept looking
at it with varying puzzled expressions before he agreed that he
understood it.  Let’s not make people work that hard.)

— Section 1.4.7 —

   characters from the "URL and Filename Safe" base64 alphabet, as
   defined in Section 5 of [RFC4648]

For absolute, 100% clarity I suggest << "URL and Filename Safe"
base64url alphabet >>.

   Ids need not be unique
   between different objects.

“among”, rather than “between” (the latter implies only two).

   For example, two JSEvent objects MAY use
   the same ids in their respective "links" properties.

While the BCP 14 “MAY” here is arguably not wrong, I think the intent
here isn’t to say what choice is allowed, but to alert the implementer
about what could happen.  So I’d make it “may” (or “might”).

   This does not imply any semantic connection
   between the two.

You give two scenarios with two instances in each, so “between the
two” seems odd.  I would simply say, “These situations do not imply
any semantic connections among the objects.”

   The keys are a path in a subset of
   [RFC6901] JSON pointer format, with an implicit leading "/" (i.e.
   prefix each key with "/" before applying the JSON pointer evaluation
   algorithm).

“The keys are a path”?  There’s at least a number problem here, but I
find the whole sentence to be hard to follow.  Do you mean this?:

NEW
   Each key is a path represented in a subset of
   JSON pointer format [RFC6901].  The paths have an implicit leading "/",
   so each key is prefixed with "/" before applying the JSON pointer
   evaluation algorithm.
END

   1.  The pointer MUST NOT reference inside an array (i.e. it MUST NOT
       insert/delete from an array; the array MUST be replaced in its
       entirety instead).

I don’t see any value in “MUST NOT reference inside an array”, and
there’s a reason that you then clarify it.  Just let the clearer
version stand alone:

NEW
   1.  The pointer MUST NOT
       insert/delete values from an array; the array MUST be replaced in
       its entirety instead.
END

   3.  There MUST NOT be two patches in the PatchObject where the
       pointer of one is the prefix of the pointer of the other, e.g.
       "alerts/foo/offset" and "alerts".

Is “the” correct in “the prefix”, or do you mean “a prefix”?  Are
"alerts/foo/offset" and "alerts/foo" allowed together?

   o  null: Remove the property from the patched object.  If not present
      in the parent, this a no-op.

What’s the subject of the second sentence?  Is it the pointer, the
property, the patched object?  It’s unclear; please say it explicitly,
“If <what?> is not present”.

   o  Anything else: The value to set for this property (this may be a
      replacement or addition to the object being patched).

The structure of this bullet should be parallel to that of the first
bullet: as the first bullet is an instruction, so should this be:

NEW
   o  Anything else: Set the value for the property to this value (this
      may be a replacement or addition to the object being patched).
END

   Implementations MUST reject a PatchObject if any of its patches are
   invalid.

It’s worth being explicit here:

NEW
   Implementations MUST reject in its entirety a PatchObject if any of
   its patches is invalid.  Implementations MUST NOT apply partial patches.
END

— Section 1.4.9 —

   By default, time zones in JSCalendar are identified by their name in
   the IANA Time Zone Database [TZDB], and the zone rules of the
   respective zone record apply.

Number agreement: “by their names” and “zone records”

   Implementations MAY embed the definition of custom time zones in the
   "timeZones" property (see Section 4.7.2).

Number agreement: “definitions”

— Section 1.4.10 —

   The object that defines this
   relation is the linking object, the other object is the linked
   object.

This is a comma splice.  Either change the comma to a semicolon or put
“while” after it (or “and”, but I prefer “while” here).

      Keys in the set MUST be one of the following values, or specified
      in the property definition where the Relation object is used, or
      an IANA-registered value, or a vendor-specific value:

I suggest naming the IANA registry from which the key name has to
come.  Same comment in other places in the document where you say
“IANA-registered value”.

      *  "child": The linked object is a subpart of the linking object.

      *  "parent": The linking object is part of the overall linked
         object.

I don’t understand the definition of “parent”.  Wouldn’t a proper
definition be parallel to the definition of “child”, like this?:

NEW
      *  "parent": The linking object is a subpart of the linkied object.
END

   Note, the Relation object only has one property (except @type); it is
   specified as an object with a single property to allow for extension
   in the future.

Do you mean, “specified as an array with a single property”, or some
such?  Or maybe this?:

NEW
   Note: the “relation” array only contains one property; it is specified
   as an array to allow for extension in the future.
END

— Section 2.2 —

   A JSTask may start and be due at certain points in time, may take
   some estimated time to complete and may recur; none of which is
   required.  This notably differs from JSEvent (Section 2.1) which is
   required to start at a certain point in time and typically takes some
   non-zero duration to complete.

1. The semicolon is incorrect, and should be a comma.

2. In the second sentence, “which is” needs a comma before it.

3. Why is that description of JSEvent here, and not in Section 2.1?

— Section 3.1 —

      types, but normalization of these types is inherently protocol and
      scheme-specific, depending on the use-case

This needs a hyphen on “protocol-“ (it’s short for “protocol-specific”).

   calendar exchange protocol or defined by another RFC.

I would say “defined elsewhere”, or “defined in another document”: it
might not be in an RFC.

— Section 3.2 —

   Some JSCalendar properties allow vendor-specific value extensions.
   If so, vendor-specific values MUST be prefixed with a domain name
   controlled by the vendor, e.g. "example.com/customrel".

There’s no “if so” about it: it’s a fact.  Maybe you want to say,
“Such vendor-specific values MUST…”

— Section 4.1.2 —

   [RFC4122] describes a range of
   established algorithms to generate universally unique identifiers
   (UUID), and the random or pseudo-random version is recommended.

I suggest using more specific reference to 4122, and recommending with
the BCP 14 key word:

NEW
   [RFC4122] describes a range of
   established algorithms to generate universally unique identifiers
   (UUID).  UUID version 4, described in Section 4.4 of [RFC4122],
   is RECOMMENDED.
END

— Section 4.1.4 —

   For example, it is not to be used to further the understanding of
   non-standard properties.

Just a suggestion here: I would specifically note that this hurts
interoperability, something such as this:

NEW
   For example, it is not to be used to further the understanding of
   non-standard properties, a practice that is knows to cause long-term
   interoperability problems.
END

— Section 4.1.6 —
As this is mandatory (and “created” is not), what is the value of this
property if the object has not been modified?  Is it the initial
creation date/time?  The text should be clear.

— Section 4.2.3 —

   They MAY
   define parameters and the "charset" parameter value MUST be "utf-8",

“define”?  Do you maybe mean “include”?

— Section 4.2.4 —

   Indicates the time is not important to display to the user when
   rendering this calendar object, for example an event that
   conceptually occurs all day or across multiple days, such as "New
   Year's Day" or "Italy Vacation".

This is spliced, and also is long and awkward.  I suggest this:

NEW
   Indicates that the time is not important to display to the user when
   rendering this calendar object. An example of this is an event that
   conceptually occurs all day or across multiple days, such as "New
   Year's Day" or "Italy Vacation".
END

— Section 4.2.5 —

      This MUST be either one of the following values,

“Either” is one of two, and there are more than two here.  Just remove “either”.

I also don’t understand what it means for a JSCalendar object to start
or end at a particular location.  Does it mean that the event or task
described occurs at the location?  Where does “start” and “end” come
in?  Are we talking about things that can move, so they might start
one place and end at another?  So what happens if the event doesn’t
move?  Do we set both “start” and “end” to the same location?  Why is
there no way to specify intermediate locations?

Can you explain this better?

      A set of link ids for links to alternate representations of this

Make it “alternative” (as you do in the next paragraph).

      This MUST be omitted
      if none (rather than an empty set).

Make it, “If there are no links, this MUST be omitted (rather than
specified as an empty set).”

— Section 4.2.7 —

      This MAY be a "data:" URL

You might want a citation to RFC 2397 here.

      Links with a rel of "describedby" SHOULD be considered by the
      client to be an alternate representation of the description.

“alternative”

      Links with a rel of "icon" SHOULD be considered by the client to
      be an image that it MAY use when presenting the calendar data to a
      user.

I’m a bit confused by the SHOULD/MAY.  If the image is not used when
presenting to the user, is there any other thing that SHOULD be done
with it?

      "rel" property MUST be set to "icon".  The value MUST be either

Again, remove “either”.

      *  "badge": an image inline with the title of the object.

I don’t understand what “an image inline with the title” means.  Do
you mean, “an image meant to be displayed along with the title”?  Or
something else?

— Section 4.2.11 —

   value is a case-insensitive color name taken from the set of names

It doesn’t make sense to say “case-insensitive” unless you’re talking
about a comparison.  Do you mean to say that it’s a lower-case
representation?  An upper-case representation?  Something else?

— Section 4.3 —

   Some events and tasks occur at regular, or indeed irregular,
   intervals.

If you keep “indeed”, it needs commas both before and after it.
Better, just remove the word; it adds nothing.  And the commas after
“regular” and “irregular” are both unnecessary.

   Rather than having to copy the data for every occurrence,
   you can instead have a master event with a recurrence rule

While I don’t object to your using “you” here, it’s striking that you
use “you” exactly twice in the document (the other is in 4.3.2.1
bullet 2.1), so this is a style deviation.  Do as you see fit with
that information.

— Section 4.3.2 —

   If the task defines neither a "start" nor "due" date-time,
   its "recurrenceRules" property value MUST be null.

Or absent?

      This MUST be either a CLDR-registered calendar system
      name, or a non-standard, experimental calendar system name
      prefixed with the characters "x-".

1. CLDR?  Please define and include a reference citation.

2. See RFC 6648 and tell me why we should still have “x-“ here.

— Section 4.3.2.1 —

           the first day of the next month (if skip == "forward") or the
           last day of the current month (if skip == "backward").

In the previous bullet you say << (if skip is "backward”) >>, and I
suggest you write these that way as well.  Consistency.  (Similar
comment for << if skip == "omit" >> a few bullets down.)

— Section 4.4.1 —

   The priority is specified as an integer in the range 0 to 9.  A value
   of 0 specifies an undefined priority.  A value of 1 is the highest
   priority.  A value of 2 is the second highest priority.  Subsequent
   numbers specify a decreasing ordinal priority.  A value of 9 is the
   lowest priority.

What happens whenb priority 0 is mixed with other priority values?

— Section 4.4.4 —

   The value is a URI to use that
   method.

There’s no antecedent to “that”.  I think it should be, “The value is
a URI for the method specified in the key.”  (Same comment for Section
4.4.5.)

   property MUST be omitted if no method is defined (rather than an
   empty object).

“rather than being specified as an empty object”.  (Same comment for
Section 4.4.5.)

   o  "other": The organizer is identified by this URI but the method
      how to submit the RSVP is undefined.

Poor English here; make it, “the method for submitting the response is
undefined.”  (Same comment for Section 4.4.5.)

      *  "resource": a non-human resource, e.g. a projector

      *  "location": a physical location involved in the calendar object
         that needs to be scheduled, e.g. a conference room.

I would argue that a location is a non-human resource.  I suggest
switching the order and clarifying it, thus:

NEW
      *  "location": a physical location that needs to be scheduled, such
         as a conference room.

      *  "resource": a non-human resource other than a location, such as
         a projector
END

— Secton 4.4.5 —

      This MUST be omitted if none (rather than an empty set).

I’ve mentioned this enough times that you should know how to fix this
and all other similar sentences.

      object, which caused this participant to be invited due to their
      membership of the group(s).

“membership in the group(s).”

— Section 4.5.2 —

   o  trigger: "OffsetTrigger|AbsoluteTrigger|UnknownTrigger"
      (mandatory)

This is a manner of specifying this sort of thing that has not been
used before.  You’ve always been using a defined type.  Here (and in
other items below) you appear to be using specific strings with no
explanation about what the “|” means.  There’s an inconsistency here
that I’d like to see fixed or clearly explained.

      Defines when to trigger the alert.  New types may be defined in
      future RFCs.

“future documents” or “future specifications”, and similarly for other
instances of “future RFC”.

      The Relation object SHOULD set the "parent" relation type, but MAY
      be empty.

These are contradictory: if it SHOULD be non-empty, then it’s not
correct that it MAY be empty.

— Section 4.7.2 —

   Maps identifiers of custom time zones to their time zone definition.

Number agreement: “definitions”

— Section 6.8 —

   a virtual location.  Fans can see a live convert on premises or

“concert” ?

         "description": "Music Bowl, Central Park, New York",
         "coordinates": "geo:40.7829,73.9654"

Should this maybe be << geo:40.7829,-73.9654 >>

— Section 7 —

   The transmission of such information must be careful to protect it
   from possible threats, such as eavesdropping, replay, message
   insertion, deletion, modification, and man-in-the-middle attacks.

“must be done carefully”


— Section 7.1 —

   It is not always possible to tell this through static
   analysis of the rule, so implementations MUST be careful to avoid
   getting stuck in an infinite loop, or otherwise exhausting resources,
   searching for the next occurrence.

Number agreement: “infinite loops”
Also, “exhausting resources while searching”

— Section 8.1 —

   Person & email address to contact for further information:
      calext@ietf.org

The address is incorrect; it should be calsify, not calext.

— Section 8.2.3 —

   This preferably takes the form of an RFC, but for simple definitions
   a description in the registry may be sufficient.

I’ve had a conversation with IANA about this.  The operative bit here
is whether "a description in the registry" could serve as the
"specification".  I don't think we'd accept that.  It's supposed to
be, according to BCP 26, a "permanent and readily available public
specification, in sufficient detail so that interoperability between
independent implementations is possible."  While what you put in the
registry can be considered permanent, and it's certainly readily
available and public, it's a bit of a stretch. And it's hard to
imagine that a sentence or two in a registry could be "sufficient
detail".  I'd say that some document, however brief, that's external
to IANA is required.

   Before a period of 30 days has passed, the DE will either approve or
   deny the registration request and publish a notice of the decision to
   the Calext WG mailing list or its successor, as well as inform IANA.

IANA has expected response times, and specifying this stuff in RFCs is
not a good idea.  I’d suggest tagging this for IANA review and getting
agreement with IANA about what we should say here.

   If the DE does not respond within 30 days, the registrant may request
   the IESG take action to process the request in a timely manner.

This part definitely needs to go.  People can always take complaints
to the IESG, and we shouldn’t be saying that here.

   The IESG may reassign responsibility for a JSCalendar property.  The
   most common case of this will be to enable changes to be made to a
   registration where the author of the registration has died, moved out
   of contact, or is otherwise unable to make changes that are important
   to the community.

And similarly for this; please strike it.

— Section 8.2.5 —

      The property name MUST
      NOT already be registered for any of the objects listed in
      Context.

What does “listed in Context” mean?  Can you explain this in the document?

— Section 8.4.1 —

   o  Experts: The initial list of experts for Expert Review of updates
      to the subregistry.

Hm, are you actually proposing that registrations provide their own
lists of experts, rather than having them appointed by the IESG?  I
don’t think that’s going to work.  We probably need to have a
discussion about the intent here, so please initiate that by
explaining to me what you’re looking for.

— Section 10 —
It’s not acceptable that all references are informative: there are
clearly normative references here, and you’ll have to go through and
sort out which ones are normative (which ones are for material that’s
necessary for understanding this document.  At the very least, the
references for BCP 14, JSON, JSON Pointer, and things such as that
will be normative.

-- 
Barry