Change:
This is literally just a renaming of the names in the Type column of Table 13. I also noticed that the description doesn't account for non-nodelist inputs. I'll open another issue for that.
If I'm reading the right, it looks like the term is being used to mean different things depending on which column it's in. In column 1 ("Type") or column 3 ("Subtypes"), it's referring to the type system we're creating. In column 2 ("Abstract Instances"), it's referring to the underlying JSON(ish) value kind, i.e. , , , etc, plus . I think having the same word to define these things can be confusing for the reader, and maybe we need something else in one of these places to indicate the distinction. We've already done this for the type to distinguish it from the value.
I'm not sure there is a really good alternative. We could use for abstract instances, but in the rest of the spec, "value" implies a JSON value, so this doesn't seem quite right.
If "value" implies a JSON value (corresponding to the middle column), then we should change the others (the type name). It really is confusing.
In the interim, we decided to append the type names with "Type". I will create a PR for this.
I'm going to wait for to complete before going forward with this as they change the same chunk of text.
Thanks. That's why I am trying to tidy up and get it merged ASAP.
Thanks!

Discussion:
A test expression either tests the existence of a node designated by an embedded query (see extest) or tests the result of a function expression (see fnex).  In the latter case, if the function <del> expression is of type "OptionalBoolean" or one of its subtypes, it tests whether the result is "true"; if the function expression is of type "OptionalNodes" or one of its subtypes, it tests whether the result is different from "Nothing". </del> <ins> expression is of type "OptionalBooleanType" or one of its subtypes, it tests whether the result is "true"; if the function expression is of type "OptionalNodesType" or one of its subtypes, it tests whether the result is different from "Nothing". </ins> Parentheses MAY be used within "boolean-expr" for grouping.

Notes: <del> "OptionalNodeOrValue" is an abstraction of a "comparable" (which may appear on either side of a comparison or as a function </del> <ins> "OptionalNodeOrValueType" is an abstraction of a "comparable" (which may appear on either side of a comparison or as a function </ins> argument). <del> "OptionalNode" is an abstraction of a Singular Path. </del> <ins> "OptionalNodeType" is an abstraction of a Singular Path. </ins> <del> "Value" is an abstraction of a primitive value. </del> <ins> "ValueType" is an abstraction of a primitive value. </ins> <del> "Boolean" is an abstraction of a primitive value that is either "true" or "false". </del> <ins> "BooleanType" is an abstraction of a primitive value that is either "true" or "false". </ins> <del> "OptionalValue" is an abstraction of a primitive value that may alternatively be absent ("Nothing"). </del> <ins> "OptionalValueType" is an abstraction of a primitive value that may alternatively be absent ("Nothing"). </ins> <del> "OptionalNodes" is an abstraction of a "filter-path" (which </del> <ins> "OptionalNodesType" is an abstraction of a "filter-path" (which </ins> appears in a test expression or as a function argument). The abstract instances above can be obtained from the concrete

The following subtype relationships depend on coercion: <del> "OptionalNode" is a subtype of "OptionalValue" via coercion since the "OptionalNode" instance "Node(n)" can be coerced to the "OptionalValue" instance "Value(v)", where "v" is the value of the node "n". </del> <ins> "OptionalNodeType" is a subtype of "OptionalValueType" via coercion since the "OptionalNodeType" instance "Node(n)" can be coerced to the "OptionalValueType" instance "Value(v)", where "v" is the value of the node "n". </ins> <del> "OptionalNode" is a subtype of "OptionalNodes" via coercion since the "OptionalNode" instance "Node(n)" can be coerced to the "OptionalNodes" instance "Nodes(l)", where "l" is a nodelist consisting of just the node "n". </del> <ins> "OptionalNodeType" is a subtype of "OptionalNodesType" via coercion since the "OptionalNodeType" instance "Node(n)" can be coerced to the "OptionalNodesType" instance "Nodes(l)", where "l" is a nodelist consisting of just the node "n". </ins> The type correctness of function expressions can now be defined in terms of this type system.

true: If it occurs as a "filter-path" in a test expression, the function <del> is defined to have result type "OptionalNodes" or one of its subtypes, or to have result type "OptionalBoolean" or one of its subtypes. </del> <ins> is defined to have result type "OptionalNodesType" or one of its subtypes, or to have result type "OptionalBooleanType" or one of its subtypes. </ins> If it occurs as a "comparable" in a comparison, the function is <del> defined to have result type "OptionalNodeOrValue" or one of its subtypes. </del> <ins> defined to have result type "OptionalNodeOrValueType" or one of its subtypes. </ins> For it and any function expression it contains, each argument of the function matches the defined type of the argument according to

subtype. The argument is a Singular Path and the defined type of the <del> argument is "OptionalNode" or any type of which "OptionalNode" is a subtype. </del> <ins> argument is "OptionalNodeType" or any type of which "OptionalNodeType" is a subtype. </ins> The argument is a "filter-path" or a Singular Path and the <del> defined type of the argument is "OptionalNodes". </del> <ins> defined type of the argument is "OptionalNodesType". </ins> 2.6.3.