From b1a1395db465af877bb3cad313b8f55ed4dbd778 Mon Sep 17 00:00:00 2001 From: Lucas Vogel Date: Tue, 29 Sep 2026 00:54:24 -0400 Subject: [PATCH] docs: backfill release notes for the engines, 1.2 through 2.4.1 The site's release notes stopped at 1.1.0 (March), so six months of engine releases, including every 2.x train, weren't recorded on phoenixml.dev. This adds one summary per release line, from each repo's RELEASES.md: breaking changes first, the measured W3C figures up front, and links to the full per-version notes. Each release carries its own recorded figure. Deltas are not computed across the 2026-09-04 harness correction or later denominator changes, and the page explains why. XQuery 2.1.0 is quoted at the 29,822 its own notes record. 2.2.0's notes cite 29,740 for the same release, and that inconsistency is left in the source repos, not papered over here. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_019zMS2EzLV6KZG6ooYco8Uf --- docs/release-notes.md | 116 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) diff --git a/docs/release-notes.md b/docs/release-notes.md index 4e7a071..23a98b9 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -24,6 +24,122 @@ setting and startup check. **The gRPC server has no authentication yet.** Don't expose it outside a trusted network. +## Engines: PhoenixmlDb.Xslt and PhoenixmlDb.XQuery + +Since 2.0.0 the two engines release together as one **train**: the Xslt and XQuery versions +match, and each release pins the other at the same version. The full per-version notes live in +each repo: [Xslt](https://github.com/phoenixmldb/phoenixmldb-xslt/blob/main/RELEASES.md) · [XQuery](https://github.com/phoenixmldb/phoenixmldb-xquery/blob/main/RELEASES.md). The summaries below lead with each release's +**measured** W3C figures, as recorded when it shipped. + +> **On comparing figures across releases.** The test harness was corrected more than once. On +> 2026-09-04, expected-error tests had been scored as passes on *any* error, so earlier XSLT +> figures are overstated. Later corrections changed the case count (denominator). A figure is +> exact for its own release; subtracting across a harness change compares different +> measurements. + +### 2.4.1 (2026-09-28): patch + +- **Fixed a 2.4.0 regression that broke XSpec compilation.** A string subtype such as `xs:NCName` + had no effective boolean value, and 2.4.0 had made `prefix-from-QName` return one. Fixed in + both engines, along with string-subtype map keys, `fn:translate` and `fn:collation-key`. +- **New release gate:** every release is now checked against real-world stylesheets (the XSpec + compiler, DocBook xslTNG, reported repros) on the previous version and the candidate before it + ships. + +### 2.4.0 (2026-09-28) + +**W3C XSLT 3.0: 10,397 / 10,839 (95.92%)** · **W3C QT3: 29,895 / 31,379 (95.27%)** + +Behaviour changes, read before upgrading: + +- `fn:namespace-uri` returns `xs:anyURI`, `fn:prefix-from-QName` returns `xs:NCName`, and + `fn:default-language` returns `xs:language`, as the spec requires. They previously returned + plain strings. +- `fn:distinct-values` treats an `xs:anyURI` and an equal `xs:string` as one value. +- The `xquery` CLI rejects an unknown output method (exit code 1, or `SEPM0016` in the prolog) + instead of silently producing adaptive output. It gains `html` and `xhtml`. + +Fixed: + +- **Streaming**: `xsl:message` content, templates below unmatched elements, subtree ancestors, + `has-children()`, `xsl:strip-space` / `xml:space`, early-closing parent tags, and unrequested + child processing. Closes the three streaming sets that had fallen below their 1.6.10 scores. +- **`fn:transform`** honours `source-location`, and raw delivery from XQuery returns the nodes a + template constructs instead of nothing. +- **CLI output is UTF-8 on every platform.** On Windows it followed the console code page, which + corrupted non-ASCII characters in redirected output. + +There is no Xslt 2.3.0. XQuery 2.3.0 (below) was published and then superseded, and both +engines moved to 2.4.0 together. + +### 2.3.0 (2026-09-28): XQuery only, superseded + +A lockstep version bump; the library is byte-identical to 2.2.0. Moving from 2.2.0 straight to +2.4.0 is the intended upgrade path. + +### 2.2.0 (2026-09-24/25) + +**W3C XSLT 3.0: 10,384 / 10,839 (95.80%)** · **W3C QT3: 29,803 / 31,379 (94.98%)** + +- **`xs:IDREFS`, `xs:NMTOKENS` and `xs:ENTITIES`** are valid cast and castable targets (+63 QT3). +- **`xsl:expose`** selects components correctly. +- **A match pattern with any predicate was O(n²)** in sibling count: 12.6× faster at 4,000 + siblings. +- Streamed `group-adjacent` key checks, `xsl:sort`/`xsl:key` temporary output state, + `regex-group()` in patterns, text nodes returned by `xsl:function`, and static declarations + coming into scope in declaration order. + +### 2.1.0 (2026-09-17) + +**W3C XSLT 3.0: 10,347 / 10,839 (95.46%)** · **W3C QT3: 29,822 / 31,379 (95.0%)**, as recorded in +the XQuery 2.1.0 notes. + +Breaking: a typed variable whose body produces the wrong number of items raises `XTTE0570`. +`xsl:strip-space` / `xsl:preserve-space` in imported modules are applied, with conflicts resolved +by import precedence. `xsl:map-entry` keys are atomized. + +### 2.0.0 (2026-09-15) + +**W3C QT3: 29,813** + +Major because the train is: `PhoenixmlDb.Core`, `PhoenixmlDb.XQuery` and `PhoenixmlDb.Xslt` +moved to 2.0.0 together. + +- **Breaking:** built-in functions apply argument cardinality, and their signatures match F&O 3.1, + so some existing queries stop compiling. The extension functions moved. +- In-scope namespaces survive copies and serialization. Serialization parameters are read + properly. The XSLT-side `fn:serialize` override is retired. + +### 1.8.0 (2026-09-13) + +**W3C XSLT 3.0: 10,292 / 10,630 (96.82%)** · **W3C QT3: 29,534 / 31,414 (94.02%)**. This is a +different denominator from 2.x. + +Silent wrong answers fixed: `xsl:function cache="yes"` returning other calls' results; +accumulators reading a later-declared accumulator one node late; `as="item()*"` functions losing +element nodes; `xsl:merge` merging only one of two sources; and `xsl:try` running its body in the +caller's scope. + +### 1.7.0 (2026-09-10) + +**W3C XSLT 3.0: 10,082 / 10,630 (94.8%)** + +- `fn:sum` returned 0 for `xs:integer` values cast from text. +- Aggregates over storage-backed elements atomized to `""`. +- `map:put` / `map:remove` / `map:replace` copied the whole map on every update (O(n²)). +- A caller's timeout could not stop recursion, callbacks or a slow `every`. +- Several `contains text` defects. + +### 1.2 – 1.6 (April – September 2026) + +A long run of frequent, often daily, releases: over a hundred versions across both engines. That +cadence has since been replaced by releases that each carry a complete batch. Highlights: +serialization conformance (character maps, HTML/XHTML output methods), streaming, QT3 production +sweeps, and input hardening (parser recursion bounds, `XQST0090` on invalid character references, +concurrent namespace interning). +Figures in this period predate the 2026-09-04 harness correction. Each version's notes are in +the [Xslt](https://github.com/phoenixmldb/phoenixmldb-xslt/blob/main/RELEASES.md) and [XQuery](https://github.com/phoenixmldb/phoenixmldb-xquery/blob/main/RELEASES.md) repos. + ## Version 1.1.0 (March 2026) Major update focused on standards compliance, streaming, and API completeness.