QT4 CG Meeting 172 Minutes 2026-07-14

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

Table of Contents

Summary of new and continuing actions [0/9]

  • [ ] QT4CG-143-02: MK to try to recover the ability to extract formal equivalences into tests
  • [ ] QT4CG-167-02: MK to make a PR for #2591, grammar for step?lookup is invalid
  • [ ] QT4CG-167-03: NW to make a PR for #2482, fallback on bin:decode-string
  • [ ] QT4CG-167-05: MK to write a proposal to change #2393 so the functions return JNodes
  • [ ] QT4CG-167-07: NW to review tests for interpolated strings with edge cases in mind
  • [ ] QT4CG-167-08: MK to review the state of #1949 to see which items are still outstanding.
  • [ ] 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-172-01: MK to check if the XSLT rules are consistent with the rules in #2757.

Draft Minutes

1. Administrivia

1.1. Roll call [7/11]

JWL, BTW, WP give regrets.

  • [X] David J Birnbaum (DB)
  • [ ] Reece Dunn (RD)
  • [X] Christian Grün (CG)
  • [X] Joel Kalvesmaki (JK)
  • [X] Michael Kay (MK)
  • [X] Juri Leino (JLO)
  • [ ] John Lumley (JWL)
  • [X] Alan Painter (AP)
  • [ ] 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 21 July.

No regrets heard

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

  • [ ] QT4CG-143-02: MK to try to recover the ability to extract formal equivalences into tests
  • [X] QT4CG-167-01: DB to write a PR for #2641, comments in CSV
    • Overtaken by events, see #2778.
  • [ ] QT4CG-167-02: MK to make a PR for #2591, grammar for step?lookup is invalid
  • [ ] QT4CG-167-03: NW to make a PR for #2482, fallback on bin:decode-string
  • [ ] QT4CG-167-05: MK to write a proposal to change #2393 so the functions return JNodes
  • [ ] QT4CG-167-07: NW to review tests for interpolated strings with edge cases in mind
  • [ ] QT4CG-167-08: MK to review the state of #1949 to see which items are still outstanding.
  • [ ] 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.

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 #2594: 2389 Adaptive Serialization: more freedom
  • PR #2350: 708 An alternative proposal for generators
  • PR #2247: 716 Deferred Evaluation in XPath - the f:generator record
  • PR #2160: 2073 data model changes for JNodes and Sequences
  • PR #2071: 77c deep update

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 #2782: 2781b XQFO: outdated examples
  • PR #2779: 2781a Fix parsing errors in F&O and XQuery specs
  • PR #2771: 2769 Clarify repeatability of random-number-generator() results

Proposal: accept 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 #2315: Optimization of the workflow action checkout
  • Issue #2299: Make the pipe-like operators left associative and have the same precedence

Proposal: close with no further action.

Accepted.

1.6.4. Substantive PRs

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

  • PR #2784: 2783 fn:pad-string
  • PR #2778: 2641b Add support for CSV comments
  • PR #2777: 2644 Extend casts to sequences, arrays, maps, and records
  • PR #2776: 2769 repeatability of rng next
  • PR #2768: 2740 Drop constructor functions from built-in records
  • PR #2767: 2750 Make fn:unparsed-text, … nondeterministic
  • PR #2761: 2758 Add rules for visibility of named types across packages
  • PR #2760: 2521 URIs: unify handling of fragment identifiers
  • PR #2757: 2569 Rules for unprefixed function calls with explicit default function ns
  • PR #2739: 2738 XSLT - tree terminology
  • PR #2734: 2733 A step too far
  • PR #2719: 1234 Serialization Parameters: Indentation, Whitespace, Newlines
  • PR #2715: 2653 FLWOR, member/key/value clauses: allow sequences
  • PR #2714: 2219 Generalize method calls to sequences
  • PR #2713: 2257 Record declarations without namespace
  • PR #2712: 2702 Dynamic node tests
  • PR #2707: 1962 fn:map-to-element
  • PR #2696: 2695 Apply templates to maps, arrays, and JNodes

2. Technical agenda

I’ve put a few new PRs at the top, then the previous ones in the same order as last week.

2.1. PR #2784: 2783 fn:pad-string

See PR #2784

CG introduces the PR.

  • CG: Allows you to pass any atomic, so you can use it to pad numbers.
  • MK: I made a comment about atomization; if you supply a node whose typed value is an integer or decimal, you’re going to lose any trailing zeros. I’m not sure that’s intuitive behavior.
  • CG: How does fn:string-join handle this?
  • MK: Yes, it does have the same problem. But I guess it’s consistent.
  • JLO: Is it worth nothing that you shouldn’t allow a zero-width space character.
  • NW: I think that’ll just do the thing.
  • JK: I proposed changing the key word “fill” to “padding” so that it’s clearly a noun.
  • CG: Sounds good to me.
  • MK: An observation on the error conditions; I think you’l get a type error if the side is not a valid member of the enum. So the extra error condition isn’t necessary.

Proposal: accept the PR.

CG will make the two fixes suggested and merge the PR.

2.2. PR #2778: 2641b Add support for CSV comments

See PR #2778

MK introduces the PR. It had to be rewritten in the light of other changes to CSV.

MK reviews the new section 17.5.3 Comments.

  • MK: I also fixed a bug where we forgot to say that the field delimiter must not be a newline.
  • AP: If I want to have the first character in the first column, that I have to quote it?

NW observes that DB is not an “external contributor”! :-)

MK: If you’re going to enable comments, choose a character that doesn’t occur in the data. But yes, you could quote it.

Proposal: accept the PR.

Accepted.

2.3. PR #2777: 2644 Extend casts to sequences, arrays, maps, and records

See PR #2777

  • MK: The PR extends casts to all the collective data types.
    • … The proposed rules just use cast recursively.
  • MK: A CastTarget is expanded to include AnyItemType, TypedArrayType, etc.
    • … There’s a bit of an issue with AnyItemType at the top level, but it’s needed to be consistent with recursion.

MK reviews the rules. They’ve been restructured a bit.

  • MK: For backwards compatibility, for casting to list types, we don’t constrain the result by the occurrence indicator.
  • MK: There’s one other significant change; we used to say that if the input to castable can’t be atomized, you get an error. Now you get false.
  • MK: CG raised a comment: if you have a type for a field in your record that isn’t a valid cast target, then you can’t do the cast at all.
    • … Having one field like that rules the thing out.
    • … I introduced item() to deal with that, but it isn’t an adequate solution.
    • CG’s suggestion seems like a better way forward.

MK to revise resubmit.

2.4. PR #2768: 2740 Drop constructor functions from built-in records

See PR #2768

  • CG: We discussed this last week and MK provided some feedback.
    • … I’ve tried to ceate a new version. But it’s failing at the moment.
  • NW: Try restarting the job?
  • CG: I did. Twice. Same fail.
  • CG: Maybe it’s better to look at MK’s comment.
  • MK: I noticed after making that comment that named item types if they are records do have a constructor function.
    • … I think we need to have another attempt to bring together named item types and named record types.
  • CG: We use the record constructor functions a lot for user defined record types.
    • … But that doesn’t mean it needs to stay that way.
  • MK: I’m not suggesting removing them, but …

Let’s do some more work on this. We’re digging ourselves into a hole here.

2.5. PR #2767: 2750 Make fn:unparsed-text, … nondeterministic

See PR #2767

CG reviews the PR.

  • CG: How do we tackle the potential backwards incompatibility?
    • … We could say this is changed in 4.0, or we have to try to keep it compatible.
  • MK: I’m reasonably comfortable making that incompatibility change.
  • NW: That seems fine to me as well.
  • JK: In 3.0, 3.1 people thought this was deterministic but it wasn’t.
  • MK: I’d have to check to be sure.
  • JK: That observation might be useful in the backwards-incompatibility note.

Proposal: accept the PR.

Accepted.

2.6. PR #2761: 2758 Add rules for visibility of named types across packages

See PR #2761

  • MK: We had all the required syntax in place to say if declared types were public or private, or whatever.
    • … But we didn’t have any text describing the samantics.
    • … They’re fairly intutive, but …
  • MK: One decision that has to be made is, are types “components”.
    • … I decided not to. There’s a lot of stuff about components refering to other components, etc. and that doesn’t apply to types.
  • MK: They aren’t components, but they behave a bit like components.
    • … So I slightly fudged it.

MK reviews the semantics in 3.4.7.

  • MK: The rules for schema types are generalized accordingly.
  • JLO: It wasn’t clear to me what happens if I have a type that is private to my package but I expose a function that returns that type.
  • MK: You can still call the function; if the type in question is a choice type, then you can call it with either of the things in the choice.
    • … Even though the name of the choice type is not visible to you.

You can’t see the name, but you can still manipulate it like a record.

Proposal: accept the PR.

Accepted.

2.7. PR #2760: 2521 URIs: unify handling of fragment identifiers

See PR #2760

  • CG: I think there’s nothing new.

Wait until we’ve discussed #2786, my issue about fragment identifiers.

2.8. PR #2757: 2569 Rules for unprefixed function calls with explicit default function ns

See PR #2757

  • CG: Gunther observed that the rule about unprefixed function calls made the rules about lookup more complex.
    • … I think if the user has defined a default function namespace, we don’t have to do lookup.
  • CG: This proposal implements that.

CG reviews the rules proposed.

ACTION QT4CG-172-01: MK to check if the XSLT rules are consistent with the rules in #2757.

Proposal: accept the PR.

Accepted.

2.9. PR #2713: 2257 Record declarations without namespace

See PR #2713

  • CG: When you write scripts, you want to declare records without a prefix.
    • … This PR attempts to define rules for that.

CG reviews the rules.

  • CG: This would certainly make simple scripts easier to write.
  • MK: We’re going for rules that are simple for people who haven’t read them.
    • … Actually understanding these rules is terribly complex.
  • JLO: I think this is useful.

Proposal: accept the PR.

Accepted.

3. Any other business

The pr-archives repository exists: https://github.com/qt4cg/pr-archive/actions

If you check it out and open the index.html file at the top level, you should see all the PRs. You probably have to use a webserver.