Change:
3.5. <del> 3.5.1. </del> <ins> A JSONPath query consists of a sequence of selectors.  Valid selectors are </ins> <del> 3.5.1.1. </del> <ins> Root selector "$" </ins> <del> A dot child selector has a member name known as a dot child name or a single asterisk ("*"). </del> <ins> Dot selector ".<name>", used with object member names exclusively. </ins> <del> A dot child name corresponds to a name in a object. </del> <ins> Dot wild card selector ".*". </ins> <del> More general child names, such as the empty string, are supported by "Union Child" (unionchild). </del> <ins> Index selector "[<index>]", where "<index>" is either an (possibly negative) array index or an object member name. </ins> <del> Note that the "dot-child-name" rule follows the philosophy of JSON strings and is allowed to contain bit sequences that cannot encode Unicode characters (a single unpaired UTF-16 surrogate, for example). The behaviour of an implementation is undefined for child names which do not encode Unicode characters. </del> <ins> Index wild card selector "[*]". </ins> <del> 3.5.1.2. </del> <ins> Array slice selector "[<start>:<end>:<step>]", where "<start>", "<end>", "<step>" are integer literals. Nested descendants selector "..". Union selector "[<sel1>,<sel2>,...,<selN>]", holding a comma delimited list of index, index wild card, array slice, and filter selectors. </ins> <del> A dot child name which is not a single asterisk ("*") is considered to have a member name.  It selects the value corresponding to the name from any object node.  It selects no nodes from a node which is not a object. </del> <ins> Filter selector "[?(<expr>)]" </ins> <del> The member name of a dot child name is the sequence of Unicode characters contained in that name. </del> <ins> Current item selector "@" 3.5.1. 3.5.1.1. </ins> <del> A dot child name consisting of a single asterisk is a wild card.  It selects all the values of any object node.  It also selects all the elements of any array node.  It selects no nodes from number, string, or literal nodes. </del> <ins> Every valid JSONPath query MUST begin with the root selector "$". 3.5.1.2. The Argument -- the root JSON value -- becomes the root node, which is addressed by the root selector "$". </ins> 3.5.2. 3.5.2.1. <del> A union selector consists of one or more union elements. </del> <ins> A dot selector starts with a dot "." followed by an object's member name. Member names containing other characters than allowed by "dot- selector" -- such as space ` ` and minus "-" characters -- MUST NOT be used with the "dot-selector".  (Such member names can be addressed by the "index-selector" instead.) </ins> 3.5.2.2. <del> A union selects any node which is selected by at least one of the union selectors and selects the concatenation of the lists (in the order of the selectors) of nodes selected by the union elements. </del> <ins> The "dot-selector" selects the node of the member value corresponding to the member name from any JSON object.  It selects no nodes from any other JSON value. Note that the "dot-selector" follows the philosophy of JSON strings and is allowed to contain bit sequences that cannot encode Unicode characters (a single unpaired UTF-16 surrogate, for example).  The behaviour of an implementation is undefined for member names which do not encode Unicode characters. </ins> <del> 3.5.2.3. </del> <ins> 3.5.3. </ins> <del> 3.5.2.3.1. </del> <ins> 3.5.3.1. </ins> <del> A child is a quoted string. </del> <ins> The dot wild card selector has the form ".*". </ins> <del> Notes: 1. double-quoted strings follow JSON in RFC8259.  Single- quoted strings follow an analogous pattern.  2.  "HEXDIG" includes A-F and a-f. </del> <ins> 3.5.3.2. </ins> <del> 3.5.2.3.2. </del> <ins> A "dot-wild-selector" acts as a wild card by selecting the nodes of all member values of an object as well as all element nodes of an array.  Applying the "dot-wild-selector" to a primitive JSON value (number, string, or true/false/null) selects no node. </ins> <del> If the child is a quoted string, the string MUST be converted to a member name by removing the surrounding quotes and replacing each escape sequence with its equivalent Unicode character, as in the table below: </del> <ins> 3.5.4. </ins> <del> The child selects the value corresponding to the member name from any object node that has a member with that name.  It selects no nodes from a node which is not a object. </del> <ins> 3.5.4.1. </ins> <del> 3.5.2.4. </del> <ins> An index selector "[<index>]" addresses at most one object member value or at most one array element value. </ins> <del> 3.5.2.4.1. </del> <ins> Applying the "index-selector" to an object value, a "quoted-member- name" string is required.  JSONPath allows it to be enclosed in _single_ or _double_ quotes. </ins> <del> An array selector selects zero or more elements of an array node.  An array selector takes the form of an index, which selects at most one element, or a slice, which selects zero or more elements. </del> <ins> Applying the "index-selector" to an array, a numerical "element- index" is required.  JSONPath allows it to be negative. </ins> <del> An array index is an integer (in base 10). </del> <ins> Notes: 1. "double-quoted" strings follow JSON in RFC8259; "single- quoted" strings follow an analogous pattern.  2.  An "element-index" is an integer (in base 10, as in JSON numbers).  3.  As in JSON numbers, the syntax does not allow octal-like integers with leading zeros such as "01" or "-01". </ins> <del> Note: the syntax does not allow integers with leading zeros such as "01" and "-01". </del> <ins> 3.5.4.2. </ins> <del> An array slice consists of three optional integers (in base 10) </del> <ins> A "quoted-member-name" string MUST be converted to a member name by removing the surrounding quotes and replacing each escape sequence with its equivalent Unicode character, as in the table below: The "index-selector" applied with a "quoted-member-name" to an object selects the node of the corresponding member value from it, if and only if that object has a member with that name.  Nothing is selected from a value which is not a object. Array indexing via "element-index" is a way of selecting a particular array element using a zero-based index.  For example, selector "[0]" selects the first and selector "[4]" the fifth element of a sufficiently long array. A negative "element-index" counts from the array end.  For example, selector "[-1]" selects the last and selector "[-2]" selects the last but one element of an array with at least two elements. 3.5.5. 3.5.5.1. The index wild card selector has the form "[*]". 3.5.5.2. An "index-wild-selector" selects the nodes of all member values of an object as well as of all elements of an array.  Applying the "index- wild-selector" to a primitive JSON value (such as a number, string, or true/false/null) selects no node. The "index-wild-selector" behaves identically to the "dot-wild- selector". 3.5.6. 3.5.6.1. The array slice selector has the form "[<start>:<end>:<step>]".  It selects elements starting at index "<start>", ending at -- but not including -- "<end>", while incrementing by "step". The "slice-selector" consists of three optional decimal integers </ins> separated by colons. <del> Note: the array slices ":" and "::" are both syntactically valid, as are ":2:2", "2::2", and "2:4:". </del> <ins> 3.5.6.2. </ins> <del> 3.5.2.4.2. </del> <ins> The "slice-selector" was inspired by the slice operator of ECMAScript 4 (ES4), which was deprecated in 2014, and that of Python. </ins> <del> 3.5.2.4.2.1. </del> <ins> 3.5.6.2.1. </ins> This section is non-normative.

Discussion:
This is a full rebase of branch pr-98 () on current main.
Does this incorporate any changes from the discussions from , or is it a simple rebase?
It is a simple rebase, followed by a number of edits coming from the discussions here. Most of the remaining conversations need some further discussion, so I hope to cover them with my updated slides in a couple of hours.
Looks like a good next step on our path.