QT4CG meeting 179 draft minutes, 8 September 2026

Hello,

Here are the minutes from yesterday’s meeting. Apologies for the delay.

   https://qt4cg.org/meeting/minutes/2026/09-08.html

QT4 CG Meeting 179 Minutes 2026-09-08

   [1]Meeting index / [2]QT4CG.org / [3]Dashboard / [4]GH Issues / [5]GH
   Pull Requests

Table of Contents

     * [6]Summary of new and continuing actions [0/7]
     * [7]Draft Minutes
     * [8]1. Administrivia
          + [9]1.1. Roll call [8/11]
          + [10]1.2. Accept the agenda
          + [11]1.3. Approve minutes of the previous meeting
          + [12]1.4. Next meeting
          + [13]1.5. Review of open action items [1/7]
          + [14]1.6. Review of open pull requests and issues
               o [15]1.6.1. Blocked
               o [16]1.6.2. Merge without discussion
               o [17]1.6.3. Close without action
               o [18]1.6.4. Substantive PRs
               o [19]1.6.5. Required for V4.0
     * [20]2. Technical agenda
          + [21]2.1. PR #2797: 2699 fn:element-to-map: validation
          + [22]2.2. PR #2831: 2809 fn:deep-equal, debug option:
            nondeterminism
          + [23]2.3. PR #2868: 2867 fn:current everywhere
          + [24]2.4. PR #2869: 2820 Revise cast expressions to avoid the
            need for occurrence indicators
          + [25]2.5. PR #2875: 2874 Formal equivalencies: bugs
          + [26]2.6. PR #2878: 2073 JNodes and Sequences
          + [27]2.7. PR #2881: 2873 fn:update: another attempt
     * [28]3. Any other business

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 [29]the agenda.

   Accepted.

1.3. Approve minutes of the previous meeting

   Proposal: Accept [30]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 [31]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 [32]#2071: 77c deep update
     * PR [33]#2247: 716 Deferred Evaluation in XPath - the f:generator
       record
     * PR [34]#2350: 708 An alternative proposal for generators
     * PR [35]#2760: 2521 URIs: unify handling of fragment identifiers
     * PR [36]#2789: 2787 XQuery changes to merge declare record and
       declare type
     * PR [37]#2815: 2567 Extended and restricted record types
     * PR [38]#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 [39]#2892: 2891 Oxford comma: inconsistencies
     * PR [40]#2890: 2872 Refine supports-dtd option
     * PR [41]#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 [42]#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 [43]#2797: 2699 fn:element-to-map: validation
     * PR [44]#2831: 2809 fn:deep-equal, debug option: nondeterminism
     * PR [45]#2868: 2867 fn:current everywhere
     * PR [46]#2869: 2820 Revise cast expressions to avoid the need for
       occurrence indicators
     * PR [47]#2875: 2874 Formal equivalencies: bugs
     * PR [48]#2878: 2073 JNodes and Sequences
     * PR [49]#2881: 2873 fn:update: another attempt
     * PR [50]#2885: 2849 xs:integer vs. restricted subtypes
     * PR [51]#2886: 1459 Function properties and arities

1.6.5. Required for V4.0

   The following issues are labeled "required for V4.0".
     * Issue [52]#1777: Shallow copy in XSLT with maps and arrays
     * Issue [53]#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 [54]#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 [55]#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 [56]#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 [57]#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 [58]#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 [59]#2878

   Not ready for discussion this week.

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

   See PR [60]#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.

References

   1. https://qt4cg.org/meeting/minutes/
   2. https://qt4cg.org/
   3. https://qt4cg.org/dashboard
   4. https://github.com/qt4cg/qtspecs/issues
   5. https://github.com/qt4cg/qtspecs/pulls
   6. https://qt4cg.org/meeting/minutes/2026/09-08.html#new-actions
   7. https://qt4cg.org/meeting/minutes/2026/09-08.html#minutes
   8. https://qt4cg.org/meeting/minutes/2026/09-08.html#administrivia
   9. https://qt4cg.org/meeting/minutes/2026/09-08.html#roll-call
  10. https://qt4cg.org/meeting/minutes/2026/09-08.html#agenda
  11. https://qt4cg.org/meeting/minutes/2026/09-08.html#approve-minutes
  12. https://qt4cg.org/meeting/minutes/2026/09-08.html#next-meeting
  13. https://qt4cg.org/meeting/minutes/2026/09-08.html#open-actions
  14. https://qt4cg.org/meeting/minutes/2026/09-08.html#open-pull-requests
  15. https://qt4cg.org/meeting/minutes/2026/09-08.html#blocked
  16. https://qt4cg.org/meeting/minutes/2026/09-08.html#merge-without-discussion
  17. https://qt4cg.org/meeting/minutes/2026/09-08.html#close-without-action
  18. https://qt4cg.org/meeting/minutes/2026/09-08.html#substantive
  19. https://qt4cg.org/meeting/minutes/2026/09-08.html#required-40
  20. https://qt4cg.org/meeting/minutes/2026/09-08.html#technical-agenda
  21. https://qt4cg.org/meeting/minutes/2026/09-08.html#pr-2797
  22. https://qt4cg.org/meeting/minutes/2026/09-08.html#pr-2831
  23. https://qt4cg.org/meeting/minutes/2026/09-08.html#pr-2868
  24. https://qt4cg.org/meeting/minutes/2026/09-08.html#pr-2869
  25. https://qt4cg.org/meeting/minutes/2026/09-08.html#pr-2875
  26. https://qt4cg.org/meeting/minutes/2026/09-08.html#pr-2878
  27. https://qt4cg.org/meeting/minutes/2026/09-08.html#pr-2881
  28. https://qt4cg.org/meeting/minutes/2026/09-08.html#any-other-business
  29. https://qt4cg.org/meeting/agenda/2026/09-08.html
  30. https://qt4cg.org/meeting/minutes/2026/09-01.html
  31. https://qt4cg.org/meeting/minutes/2026/09-08.html#technical-agenda
  32. https://qt4cg.org/dashboard/#pr-2071
  33. https://qt4cg.org/dashboard/#pr-2247
  34. https://qt4cg.org/dashboard/#pr-2350
  35. https://qt4cg.org/dashboard/#pr-2760
  36. https://qt4cg.org/dashboard/#pr-2789
  37. https://qt4cg.org/dashboard/#pr-2815
  38. https://qt4cg.org/dashboard/#pr-2862
  39. https://qt4cg.org/dashboard/#pr-2892
  40. https://qt4cg.org/dashboard/#pr-2890
  41. https://qt4cg.org/dashboard/#pr-2889
  42. https://github.com/qt4cg/qtspecs/issues/2879
  43. https://qt4cg.org/dashboard/#pr-2797
  44. https://qt4cg.org/dashboard/#pr-2831
  45. https://qt4cg.org/dashboard/#pr-2868
  46. https://qt4cg.org/dashboard/#pr-2869
  47. https://qt4cg.org/dashboard/#pr-2875
  48. https://qt4cg.org/dashboard/#pr-2878
  49. https://qt4cg.org/dashboard/#pr-2881
  50. https://qt4cg.org/dashboard/#pr-2885
  51. https://qt4cg.org/dashboard/#pr-2886
  52. https://github.com/qt4cg/qtspecs/issues/1777
  53. https://github.com/qt4cg/qtspecs/issues/675
  54. https://qt4cg.org/dashboard/#pr-2797
  55. https://qt4cg.org/dashboard/#pr-2831
  56. https://qt4cg.org/dashboard/#pr-2868
  57. https://qt4cg.org/dashboard/#pr-2869
  58. https://qt4cg.org/dashboard/#pr-2875
  59. https://qt4cg.org/dashboard/#pr-2878
  60. https://qt4cg.org/dashboard/#pr-2881

--
Norm Tovey-Walsh
Saxonica

Received on Wednesday, 9 September 2026 09:46:07 UTC