QT4 CG Meeting 179 Minutes 2026-09-08

Meeting index / QT4CG.org / Dashboard / GH Issues / GH Pull Requests

Table of Contents

Summary of new and continuing actions [0/7]

  • [ ] QT4CG-143-02: MK to try to recover the ability to extract formal equivalences into tests
  • [ ] QT4CG-167-07: NW to review tests for interpolated strings with edge cases in mind
  • [ ] QT4CG-167-09: NW to close all “nice to have” issues at the end of October if they haven’t progressed
  • [ ] QT4CG-170-01: RD to draft a proposal that attempts to address the lexical issues differently.
  • [ ] QT4CG-176-01: NW to see about improving the linking for record types.
  • [ ] QT4CG-177-01: NW to put the progress graphs back in the minutes.
  • [ ] QT4CG-179-01: CG to fix the typo “or absent” in 14.6.5.

Draft Minutes

1. Administrivia

1.1. Roll call [8/11]

AP, BTW give regrets.

  • [X] David J Birnbaum (DB)
  • [X] Reece Dunn (RD)
  • [X] Christian Grün (CG)
  • [X] Joel Kalvesmaki (JK) [:04-]
  • [X] Michael Kay (MK)
  • [ ] Juri Leino (JLO)
  • [X] John Lumley (JWL)
  • [ ] Alan Painter (AP)
  • [X] Wendell Piez (WP)
  • [ ] Bethan Tovey-Walsh (BTW)
  • [X] Norm Tovey-Walsh (NW) Scribe. Chair.

1.2. Accept the agenda

Proposal: Accept the agenda.

Accepted.

1.3. Approve minutes of the previous meeting

Proposal: Accept the minutes of the previous meeting.

Accepted.

1.4. Next meeting

The next meeting is planned for 15 September.

AP gives regrets for 15 September.

1.5. Review of open action items [1/7]

  • [ ] QT4CG-143-02: MK to try to recover the ability to extract formal equivalences into tests
  • [ ] QT4CG-167-07: NW to review tests for interpolated strings with edge cases in mind
  • [ ] QT4CG-167-09: NW to close all “nice to have” issues at the end of October if they haven’t progressed
  • [ ] QT4CG-170-01: RD to draft a proposal that attempts to address the lexical issues differently.
  • [ ] QT4CG-176-01: NW to see about improving the linking for record types.
  • [ ] QT4CG-177-01: NW to put the progress graphs back in the minutes.
  • [X] QT4CG-178-01: CG to review the functx library for uses of node()
    • All the existing functions do what they do what the did before even with our GNode refactoring
    • JNodes cause something unexpected, but that’s to be expected.

1.6. Review of open pull requests and issues

This section summarizes all of the issues and pull requests that need to be resolved before we can finish. See Technical Agenda below for the focus of this meeting.

1.6.1. Blocked

The following PRs are open but have merge conflicts or comments which suggest they aren’t ready for action.

  • PR #2071: 77c deep update
  • PR #2247: 716 Deferred Evaluation in XPath - the f:generator record
  • PR #2350: 708 An alternative proposal for generators
  • PR #2760: 2521 URIs: unify handling of fragment identifiers
  • PR #2789: 2787 XQuery changes to merge declare record and declare type
  • PR #2815: 2567 Extended and restricted record types
  • PR #2862: 2861 Clarify CSV serialization edge cases

1.6.2. Merge without discussion

The following PRs are editorial, small, or otherwise appeared to be uncontroversial when the agenda was prepared. The chairs propose that these can be merged without discussion. If you think discussion is necessary, please say so.

  • PR #2892: 2891 Oxford comma: inconsistencies
  • PR #2890: 2872 Refine supports-dtd option
  • PR #2889: 2887 Fix bad JSON example

Proposal: merge without discussion.

Accepted.

1.6.3. Close without action

It has been proposed that the following issues be closed without action. If you think discussion is necessary, please say so.

  • Issue #2879: Rename fn:system-properties()?#supports-xinclude to match scope

Proposal: close with no further action.

Accepted.

1.6.4. Substantive PRs

The following substantive PRs were open when this agenda was prepared.

  • PR #2797: 2699 fn:element-to-map: validation
  • PR #2831: 2809 fn:deep-equal, debug option: nondeterminism
  • PR #2868: 2867 fn:current everywhere
  • PR #2869: 2820 Revise cast expressions to avoid the need for occurrence indicators
  • PR #2875: 2874 Formal equivalencies: bugs
  • PR #2878: 2073 JNodes and Sequences
  • PR #2881: 2873 fn:update: another attempt
  • PR #2885: 2849 xs:integer vs. restricted subtypes
  • PR #2886: 1459 Function properties and arities

1.6.5. Required for V4.0

The following issues are labeled “required for V4.0”.

  • Issue #1777: Shallow copy in XSLT with maps and arrays
  • Issue #675: XSLT streaming rules for new constructs

2. Technical agenda

Let’s continue our oldest-to-newest pass from last week.

2.1. PR #2797: 2699 fn:element-to-map: validation

See PR #2797

CG introduces the PR.

  • CG: This PR enforces validation for the plan that’s supplied.
    • … The option is named “liberal” and when it’s false, conversion will fail when the type cannot be applied to the value.
  • MK: In 14.6.5, I don’t think the type entry can be absent.
  • CG: My proposal would be to allow it to be absent.
  • MK: But things in a record cannot be absent.
  • CG: Okay, so it’s an empty sequence.

ACTION QT4CG-179-01: CG to fix the typo “or absent” in 14.6.5.

Proposal: accept this PR.

Accepted.

2.2. PR #2831: 2809 fn:deep-equal, debug option: nondeterminism

See PR #2831

  • CG: There’s nothing new about this one. It’s to make fn:deep-equal nondeterministic if the debug option is true.
  • CG: We could accept this PR, then the behavior would be the same for fn:doc and fn:deep-equal
    • … But there’s a broader question, in #2848

Leave open until we have a comprehensive solution.

Some discussion of nondeterminism as a property of the runtime. MK is uneasy; the data model says it’s a property of the function. But there are other functions that have unstable forms.

  • MK: We could describe trace, message, and so on as inconsequential output.
  • WP: In terms of language theory, isn’t this stuff out of band by definition?
    • … I think we have to exclude that.
  • RD: Then you get a similar effect if you have a deterministic function that takes a callback function and you call trace in that.
  • MK: Yes, that’s a similar issue.
  • RD: In async languages, there’s the concept of async functions and red/blue functions and propagating properties. And isn’t the I/O monad nondeterministic in Haskell?
  • NW: Saying trace output is inconsequential seems like the easy answer.
  • JWL: If you say that the output of the function doesn’t depend on the message, but what happens if you put that message in a file and read it back later?
  • MK: That’s why it’s useful to have a label for it and explain what we mean.

2.3. PR #2868: 2867 fn:current everywhere

See PR #2868

  • CG: The reason for this PR was MK’s PR that introduced the context value keywords that can be used in default parameters to reference the value that is the context value from the calling function.
  • CG: This syntax seems a bit limiting and only applies to XQuery, so maybe we could make the current() function available everywhere.

CG describes the semantics in the specification.

  • CG: It becomes similar to global variables. With current() you can refer to the context value as well.
  • CG: I considered binding different values to current, but it would have more profound consequences.
  • MK: And would be inconsistent with XSLT!
  • JWL: In the item ! current()/@default-category example, I think it’s important to say that the value comes from the context item, not the item!
  • MK: The problem here is partly the way the text is rendered. It’s not always clear if the description goes with the previous or next example.
  • WP: Some rewording here would be useful here.

CG asks JWL to propose some improved prose.

Okay, we’ll put this on the agenda next week as “propose to merge without discussion” after those editorial changes have been made.

2.4. PR #2869: 2820 Revise cast expressions to avoid the need for occurrence indicators

See PR #2869

  • MK: We accepted a proposal to extend cast expressions to array, map and record types.
    • … Gunther identified some ambiguity in the syntax.
    • … I’ve revised thie syntax to avoid that ambiguity.
  • MK: It gets rid of the occurrence indicator from a cast target.
    • … The cast target now includes an optional “?” at the end.
  • MK: You can no longer follow it by an arbitrary occurrence indicator.
  • MK: The semantics are updated so that you’re casting an atomic item.
  • MK: You can’t cast a sequence, but you can cast an array that contains sequences.
  • MK: Casting to lists hasn’t changed, but the prose has been improved.
  • MK: Internal casting to a sequence is slightly more complicated than you might expect.
  • MK: Casting to an array type invokes the internal cast to a sequence.
  • MK: It works similarly for casting to a map type.
  • MK: And for casting to a record type.
  • MK: The rule for records doesn’t currently allow default values, we’ll have to update this if/when that proposal is accepted.

Proposal: accept this PR.

Accepted.

2.5. PR #2875: 2874 Formal equivalencies: bugs

See PR #2875

  • CG: This one is basically editorial. I looked at all the formal equivalance rules. I checked if they could be parsed and matched the rules.
    • … Some needed to be updated.

Proposal: accept this PR.

Accepted.

  • RD: Would it help to run the code through a pretty printer?

2.6. PR #2878: 2073 JNodes and Sequences

See PR #2878

Not ready for discussion this week.

2.7. PR #2881: 2873 fn:update: another attempt

See PR #2881

  • CG: There’s an existing PR from MK about updating that uses a function with the same name.
  • CG: This PR describes another fn:update function.

CG reviews the examples.

  • RD: In the examples, why is there an arrow operator to jvalue at the end?
  • CG: To make the serialization consistent. We generate tests for these.
  • MK: Deep equal isn’t going to dereference a JNode.
  • RD: So in practice, calling jvalue is optional? Could that be added as a note?
  • CG: There are existing issues on how to deal with the serialization of JNodes.
    • … It may change, and so may the examples.
  • MK: But we don’t use serialization to compare, we use fn:deep-equals
  • RD: Could the test be modified to indicate that they return a JNode and have the test driver do it?
    • … The examples would be cleaner.
  • MK: You could wrap a call to JTree around the result as an alternative.

No takers for updating the tests as described.

  • WP: Awesome. I’ll need to review the examples with more care.
  • MK: You’ve packed a lot of power into a single function with a very simple signature.
    • … There’s a lot of overloading and I haven’t quite got my head around how it works.
    • … When are you replacing the value and when are you replacing the node itself?
    • … Can you explain that?

CG reviews the rules for the function.

  • MK: I think it would be good to split the description for XNodes and JNodes.
  • WP: I’d like to know more about the requirements.
    • … A Query language or Transformation language that has this inside it is interesting.
  • RD: There was an XQuery update facility to do a similar sort of thing.
    • … When using updates tied to a database, you can use XQuery to implement REST endpoints, so you need some way to update data there
    • … And also it can be useful when doing more complicated queries that are transformative or generating aggregated results.
  • MK: In the case of maps and arrays, this is doing something that’s very hard to do any other way.
    • … In the context of XML, we have a range of solutions already, but some things are still remarkably difficult to do.

Consider again in the future.

3. Any other business

None heard.