Appendix DChange log

This section documents the significant changes made in each release. See the commits and pull requests on the repository for finer detail.

Revision History
  • 3.0.0-beta1, 11 May 2025

    If I’m going to get a couple of betas out in May, I best get started, eh?

    • Fixed issue #466. The xsl:messages from stylesheets run with p:xslt are output at “info” level. (They were accidentally getting discarded in the last few alphas.)

    • Fixed issue #462. Make sure that option shortcut values are stored as untyped atomic values so that they can be promoted to the appropriate type.

    • Fixed issue #460. Refactored build and configuration APIs.

    • Fixed issue #456. Removed some debugging code that always printed a JVM stack trace when p:run failed.

    • Fixed issue #455. Refactored the DocumentManager API.

    • Added cx:jsonpath and cx:find extension steps.

    • Added cx:json-diff and cx:json-patch extension steps.

    • Made a number of improvements to error reporting.

      1. Improved error messages for documents that can’t be parsed. (Previously, “file not found” would be reported in some circumstances.)

      2. Improved error message when content type shortcuts are used in inappropriate places.

      3. Fixed a bug where the underlying cause of an exception sometimes got lost in nested exceptions. When a pipeline fails, the error report now includes the chain of causes.

      4. Clarified the error message for the special case of empty sequence in a type conversion error.

      5. Added a --stacktrace option to enable stack (step) traces in errors (and disabled them by default).

      6. Improved the formatting of error explanations when the --explain option is used.

  • 3.0.0-alpha33, 06 May 2025
    • Fixed issue #450. Make sure that options passed on the command line are promoted as required. (So “true” can be used for an xs:boolean value.) Also changed the error code used for option values that don’t match (or can’t be promoted to) the correct type. They now raise err:XD0036 instead of err:XS0077 which is really about attribute values not option values.

    • Fixed issue #447. Make sure the default verbosity is “info”, not “warn”. (This error was introduced while tinkering with the logging code; it was probably never released.)

    • Fixed issue #441. Restore loading ~/.xmlcalabash3 as the default configuration file if no configuration is given explicitly and if ./.xmlcalabash3 doesn’t exist. (In alpha31 or alpha32, the code to load ~/.xmlcalabash3 was lost, now it’s back.)

    • Disabled standard Java logging to stderr. This seems a bit odd, but XML Calabash has its own error reporter (necessary so that pipelines and integrators can capture the error messages). That reporter sends all messages to the standard Java logging system. That’s necessary so that it’s possible to capture lower level debug messages to a file without sending them all to the console. But it means that if an error occurs, the reporter prints the error message and then the underlying Java logging system prints it again, in a slightly different format. That’s going to be both confusing and annoying, so by default no Java log messages are printed.

  • 3.0.0-alpha32, 05 May 2025
    • Significant refactoring of message and logging systems.

      There’s more separation between things that are logged through the message reporter and things that are only logged to the underlying Java logger. The intent is that things only relevant to debugging XML Calabash go only to the logger. Things that might be relevant to debugging a pipeline go to both places.

      One exception is that details about how the application is configured go only to the underlying Java logger. This is necessary because we haven’t configured a message reporter before we’ve configured the application!

      The default logback.xml configuration file has been simplified. It no longer uses dynamic configuration. Use a different configuration file to change the level.

      The error explanation implementation has been changed so that it also uses the message reporter, rather than writing directly to stderr.

    • Multithreaded execution complicates the task the visualizer is trying to perform. The “detail” visualizer has been updated.

    • Fixed a few bugs in the cx:wait-for-update step; it didn’t work reliably for HTTP URIs.

  • 3.0.0-alpha31, 03 May 2025
    • Fixed issue #434. Improved the conformance of p:import-functions. Private functions are now excluded and nested imports are handled correctly.

    • Fixed issue #431. Corrected errors in p:os-exec. Fixed the bug where output to stdout was discarded unless the process ended with a return code of zero. Serialization properties and output charsets are now handled correctly.

    • Fixed issue #427. Remove carriage returns from p:os-exec output on Windows.

    • Fixed issue #425. The cwd option on p:os-exec is handled correctly if it’s a URI.

    • Fixed issue #424. Reworked the DocumentManager API.

    • Fixed issue #258. Added support for the language attribute on the XVRL schema element.

    • XML Calabash now uses Saxon 12.6 by default.

  • 3.0.0-alpha30, 30 Apr 2025
    • The Windows-related fixes in 3.0.0-alpha29 weren’t wholly satisfactory. Some places where those fixes were incomplete have been refactored. (I think two issues had been conflated and their union fixed, leaving each of the individual problems only partially resolved.)

    • Fixed issue #418. Make sure that attempts to get a path from a file: URI deal with irregularities on Windows.

    • Fixed issue #417. Don’t print “Stack trace:” on errors if there’s no stack trace.

    • Refactored the MessageReporter API. More information is now available to aid other presentation formats, localization requirements, etc.

  • 3.0.0-alpha29, 28 Apr 2025
    • This release is a handful of small bug fixes, many related to tidying up loose ends in Windows functionality. Essentially all of the test suite tests now pass on Windows.

    • Fixed issue #413. Don’t put leading slash or, on Windows, drive letters in ZIP archive names. This change applies across all the archive formats, for consistency.

    • Fixed issue #411. Removed the spurious “:” from the start of message output on steps.

  • 3.0.0-alpha28, 26 Apr 2025
    • Made a variety of changes to improve functionality on Windows: make sure files get closed, sort out some edge cases with Windows filenames, corrected a few tests that depended on end-of-line characters, fixed a bug in p:file-create-tempfile (it returned the path instead of a URI).

    • Added the ability to run pipeline steps in parallel (“multi threading”). This required a substantial bit of refactoring. I think it works correctly. See Running steps in parallel.

    • Fixed issue #403. Improved the presentation of error output to address a comment on the mailing list. I’ve also made the error output from the p:xslt and p:xquery steps more informative (and generally fixed a few loose ends in the p:xquery step).

    • Fixed issue #400. Corrected a typo that prevented “?” from being correctly escaped in p:urify.

    • Fixed issue #393. Static options imported in a common library (one imported by several other libraries) no longer get flagged as illegal duplicates.

    • Fixed issue #390. Somewhere along the line, I broke the --verbosity option so that it had no effect on the output. Now it does again.

    • Fixed issue #384. Added a shortcut for setting map parameters on the command line.

    • Fixed issue #383 and made a number of other improvements in the test driver.

    • Fixed issue #362 by improving the p:urify function. This is a little bit speculative as xproc/#1145 is still being discussed. But the current behavior is so fundamentally broken that I’m making a few proactive fixes. These changes also mean that p:urify is implicitly called in many places which should also help on Windows.

    • Fixed issue #353. Added support for content-types in the document cache. You can now cache the same document parsed with different content types.

    • Added some new unit tests to demonstrate programmatic use of XML Calabash from your own JVM application.

    • Fixed a bug where it wasn’t possible to set the value of a pipeline option named “message”. This was an accidental consequence of how the message attribute is handled on compound steps.

    • Added a stack trace to the error output. If a step fails, the default error reporter now prints a “stack trace” showing the step that failed and the steps it was nested inside. If this turns out to be annoying, I’ll add a configuration option to turn it off.

    • Fixed several bugs in the implicit validation feature. Implicit validation was accidentally enabled by default and there were also some issues with correct handling of the base URI when the base URI was explicitly absent.

    • Fixed several, small bugs in the SVG visualizer.

  • 3.0.0-alpha27, 14 Apr 2025
    • The big (as in “sweeping” and arguably a little riskier than most recent updates) fix in this release is a substantial refactor of the core of the application. This was partly done to clean up the API for creating a processor, and partly because I had outstanding concerns about the previous big refactor from about a year ago. It’s a mostly not-visible change if you’re just using the command line application, but there was at least one bug fix where the document properties of a variable were wrong (the tests passed by accident).

    • Fixed issue #378. The SVG output doesn’t display options on steps that have no binding. They still have a binding to the empty sequence, but the diagram is a lot less cluttered without them.

  • 3.0.0-alpha26, 25 Mar 2025
    • Fixed issue #372. The graph visualizer was completely unprepared for connections to option expressions.

    • Fixed issue #370 by sending message output to standard error instead of standard output. This assures that message output and pipeline output don’t clash. Writing to standard error should probably have been the default from the beginning.

    • Fixed issue #365. Documentation improvements; step names are now links to the appropriate reference page.

    • (Re)fixed issue #361. Make sure that the global context item is initialized (so that the custom stylesheet can define global variables).

    • Fixed issue #360. Attempted to improve the way writing pipeline output to standard output is handled. Pipeline output to standard output is “undecorated” if only one port is being output and it cannot produce a sequence.

    • I made some aesthetic improvements, well, changes at least, to the SVG graph styling: curved borders, a few colors.

  • 3.0.0-alpha25, 23 Mar 2025
    • Added cx:trang and cx:trang-files steps.

    • Fixed issue #361. The regular expression used to match the URI scheme was woefully inadequate.

    • Fixed issue #352 by supporting an explicit syntax for specifying the content type of inputs specified on the command line. This is especially relevant when reading from standard input as the name gives no hints about the content type.

    • Fixed issue #351. This release includes a substantial revision to SVG diagrams of pipelines and graphs. This has no user-visible effects unless you’re interested in styling the SVG diagrams.

    • Fixed issue #349 by documenting the --nogo option.

    • Fixed issue #348 by documenting the format option values for p:archive and p:unarchive.

  • 3.0.0-alpha24, 16 Mar 2025
    • Fixed issue #342 by detecting errors in expressions at run time. Static errors in expressions now generate a warning at compile time and a failure at runtime. I’m not convinced that’s exactly right, but it does mean that a static error in an expression that’s never evaluated won’t raise an error.

    • Fixed issue #336. The way that SVG diagrams are generated for pipelines and graphs has been more-or-less completely rewritten. The XML description of pipelines and graphs are now broadly similar. Almost all of the styling is performed by XSLT and there’s a mechanism for users to provide their own stylesheets. The documentation has been updated to (attempt to?) explain how this works.

    • The pages generated by the --graphs option have been updated to improve the presentation and navigation.

    • A number of small changes have been made in several places to try to provide the pipeline description with more information about the steps and the connections between them.

    • A new --nogo option has been added. This option compiles the pipeline and generates the graphs, if requested, but does not attempt to run the pipeline.

  • 3.0.0-alpha23, 09 Mar 2025
    • Fixed issue #350 by making the source port on cx:sparql primary. (That was an oversight in the library that declares the step.)

    • Fixed issue #327 by making sure that p:directory-list paths are normalized against the base URI correctly.

    • Fixed issue #325 by making sure that secondary (non-primary) input ports are bound correctly. A secondary input is not bound to the default readable port if there’s no explicit connection for it. Instead, it’s bound to the input port’s default connection.

    • Fixed issue #323 by documenting that using an extension step requires providing its declaration; added a the library URIs to all of the extension step reference pages.

    • Fixed issue #319 by bundling CoffeeSacks with XML Calabash (this is the Saxon extension function for Invisible XML). The function is automatically registered.

    • Added support for user-styling of the SVG pipeline and graph output. Documentation T.B.D. (See issue #336.)

    • Added (somewhat experimental) support for implicit XML Schema validation of primary inputs.

    • Updated Apache FOP support; XML Calabash is now using FOP 2.10. Added image/png, image/tiff, application/X-fop-areatrea, and application/vnd.hp-PCL as output formats. Allow image/svg+xml as an output format, but note that it requires a build of FOP with the sandbox enabled.

  • 3.0.0-alpha22, 02 Mar 2025
    • Added support for the p:message step.

    • Fixed issue #308 by forbidding the [p:]message attribute from being specified with p:with-option. (It’s not an option.)

    • Fixed issue #306 (and issue #252). All of the extension steps (except for the polyglot steps) are now bundled into the distribution.

    • Fixed issue #304. Make sure that [p:]message attributes on user-defined steps are output when the steps are run.

    • Fixed issue #302 by making IDs explicit so that GraphViz doesn’t output duplicates in the SVG. Cleaned up the graph output in a few small ways.

    • Fixed issue #301. Added cx:ebnf-convert, a wrapper around Gunther Rademacher’s EBNF converter, and updated cx:railroad to use it directly. This will make it easier to draw railroad diagrams of, for example, Invisible XML grammars.

    • Fixed selection of elements with relative xml:base attributes so that the resolved base URI is correct.

  • 3.0.0-alpha21, 22 Feb 2025
    • Fixed issue #286. Added a cx:markup-blitz step and made it possible to use either NineML or Markup Blitz for the p:invisible-xml step.

    • Fixed issue #285. Make sure that catalog lookup is performed when XML Schema modules are loaded.

    • Fixed issue #281. Remarkably, the p:urify function didn’t correctly handle “\” in the file path. This may also resolve issue #282.

    • Improved the error message for err:XD0049; it now includes the URI of the document that caused the error, if the URI is available.

    • Improved error messages generally by not losing the underlying exception and printing the underlying cause when an uncaught exception stops the pipeline.

    • Added an initial implementation of the cx:asciidoctor step. This implements conversion from Asciidoctor to DocBook, HTML, or PDF.

    • Added an initial implementation of the cx:xmlunit step. This implements document comparisons with XMLUnit. It doesn’t support everything that XMLUnit can do, but it supports many of the options.

    • Added an initial implementation of RDF-related steps: cx:rdf-merge, cx:rdf-graph, cx:rdfa, and cx:sparql. Added support for a wide range of RDF content types: application/ld+json, application/n-quads, application/n-triples, application/rdf+json, application/rdf+thrift, application/rdf+xml, application/sparql-query, application/sparql-results+json, application/sparql-results+xml, application/trig, text/n3, and text/turtle. (Supporting these content types means that the standard p:document instruction and the p:load and p:store steps support RDF documents natively.)

    • Added a number of new service provider interfaces so that extension steps can interact with the processor configuration.

    • Fixed a typo in the declaration of the cx:epubcheck step.

    • Cleaned up some whitespace, unused imports, and did some general code tidying.

  • 3.0.0-alpha20, 10 Feb 2025

    The 3.0.0-alpha19 release failed because of an error in build automation. This is functionally the same release.

  • 3.0.0-alpha19, 09 Feb 2025
    • Fixed issue #266. The default encoding on Windows is now Windows 1252. (It was previously documented that way, but not implemented that way.)

    • Fixed issue #265. The p:urify function can be called with a single argument.

    • Fixed issue #264. The static base URI was not being set correctly in expressions. Also updated the error message that arises if an expression fails to include location information.

    • Fixed issue #257. The p:validate-with-schematron step now returns a xvrl:report (not a reports). The bug that caused digest roll-ups to be incorrect has been fixed.

    • Fixed issue #256. That sentence in the README now has a verb.

    • Fixed issue #255. The help text has been updated to reflect current usage. Making the help text comprehensive seemed too verbose; the common options are summarized with a link to the documentation for more detail.

    • Fixed issue #253. Updated the “quick start” section of the README for clarity.

    • Fixed issue #250. Fixed a link accidentally broken by a global search-and-replace and a few other documentation issues.

    • Fixed issue #236. The --step option can be used to run any atomic step.

    • The error message associated with “not well formed JSON” now includes the JSON that’s being rejected. Did a bit of nearby tidying of error messages.

    • Updated byte order mark handling in text and JSON documents to reflect recent specification changes. (Generally, byte order marks are not part of the text.)

    • Tinkered with the GitHub actions: the PR builds now include the test report; the build environment includes Firefox and Chrome.

  • 3.0.0-alpha18, 02 Feb 2025
    • Upgraded to version 6.0.12 of the XML Resolver. This isn’t completely backwards compatible with earlier releases, so attempting to use an earlier version might not work.

    • Fixed issue #32. The p:lookup-uri function now queries the catalog resolver.

    • Fixed issue #163. Added a next command to the debugger.

    • Fixed issue #215. Make sure that options passed to a subpipeline are reset if the step appears in a loop.

    • Fixed issue #217. Correctly handle sequences of documents on the p:xslt secondary output port.

    • Fixed issue #218. Another XPath parsing bug. 🙁 Something more comprehensive is required.

    • Fixed issue #219. When a content-type is specified on p:document, it’s an override.

    • Fixed issue #220. Improved the error message used to report an unbound variable reference in an expression.

    • Fixed issue #232. Resolve the Saxon configuration file URI against the base URI of the configuration element.

    • Updates related to recent specification changes:

      • Added a p:encode step.

      • Adjusted the semantics of p:cast-content-type so that a c:data document is always decoded.

      • Added an attributes option to p:pack, p:wrap, and p:wrap-sequence.

      • Improved the semantics of text value templates in XML content. It’s now possible to add attributes to elements with a template.

    • Added a cx:collection-manager step.

    • Added diagramming steps (cx:ditaa, cx:mathml-to-svg, and cx:plantuml). These are published separately.

    • Added a cx:railroad step, published separately.

    • Improved error messages in serveral places. Improved the documentation of errors in reference pages.

    • Ignore serialization properties when they are explicitly set to the empty sequence.

    • Added support in p:cast-content-type for casting to and from text/x-java-properties. to the empty sequence.

    • Fixed a bug in p:viewport where the base URI of documents in the viewport was incorrect.

    • Allow other configuration elements in the configuration file. This provides a mechanism for steps to have their own configuration.

    • Improved the checking for invalid URIs.

    • Fixed a couple of bugs in the pipeline graph output. (Sometimes the output from a compound step wasn’t correctly connected to its input.)

  • 3.0.0-alpha17, 19 Jan 2025
    • Fixed issue #189. Generate an XVRL report for NVDL validation.

    • Fixed issue #186. Fix links to standard libraries and XProcRef.org in the reference guide.

    • Fixed issue #185. Check for required inputs and options before running a pipeline. When a top-level pipeline is run, check that required options and required inputs have been provided. (Checking for required inputs here is an opportunity to improve the error message.) Keep track of the required state of options until runtime. Within a pipeline, failing to provide a required option is a static error. But “top level” pipelines can’t be checked before they run. When they run, it must be possible to determine which options were declared as required.

    • Fixed issue #184. Fix bugs in Schematron XVRL reporting. (Generally, improve error reporting for validation steps.)

    • Fixed issue #160. The code was over-zealous when constructing step configurations. It created a new Saxon Configuration for every step. That’s not necessary; it’s only necessary that each p:library and p:declare-step (and their descendants) have a new configuration. Configurations are required at that level because any use of p:import-functions has to be isolated.

    • Compute a total order over subpipeline steps during graph building. This change replaces the, in retrospect very strange, approach previously taken where the steps were effectively unordered and at runtime each was tested to see if it could be run. Now we work out in advance a total order such that no step runs before any step that it depends on. (With some special cases to deal with the when/otherwise clauses in a choose.)

    • Fixed bug where buffered messages (accessible through p:pipeline-messages) could be “null” instead of the correct message.

    • Implemented the cx:wait-for-update step.

    • Implemented the cx:until and cx:while steps.

    • Added an “Errors and error messages” chapter to the user guide. Reworked document resolver APIs; made it possible to publish the XVRL-to-text stylesheet in the user guide.

    • Tidy up the pipeline/graph visualization output. Output option names for options, use the command line --debug flag to control debugging output. Use «anonymous» instead of the arbitrary step ID for the root pipeline if it has no declared type.

    • Fixed bug in exclude-inline-prefixes where it was possible to generate a document that was not namespace well-formed.

  • 3.0.0-alpha16, 15 Jan 2025
    • Fixed issue #175. Make sure directories are created before attempting to write files.

    • Fixed issue #174. Improved reporting of user-defined errors. If a pipeline author aborts a pipeline with p:error, make sure that any details provided are presented when the pipeline fails. (Don’t attempt to use the error explainer, it won’t know anything about that error.)

    • Fixed issue #173. The “detailed” option on p:directory-list didn’t work on Windows because Windows doesn’t support POSIX file permissions. On Windows, the step succeeds but provides slightly less detail.

    • Reworked how Graphviz visualizations are created and stored. The --description and --graph options have been replaced with a single --graphs option. The new option writes all of the descriptions to an output directory. Instead of one, potentially huge, SVG diagram of the entire set of pipelines, there are now distinct graphs for each pipeline with hyperlinks between them.

  • 3.0.0-alpha15, 13 Jan 2025
    • Fixed issue #167. Make sure that the --init functions are applied to every configuration.

    • Fixed issues #164 and #165. Improved XVRL reporting and metadata.

    • Fixed issue #159. Make sure that validity errors are reported in XVRL. Improve reports associated with RELAX NG validation failures.

    • Fixed issue #157. In p:validate-with-xml-schema, ignore any errors that arise when attempting to locate a schema at the namespace URI. (It’s not absolutely certain that this was the cause of #157, but it’s my best guess.)

    • Fixed issue #156 and related knock-on issues, including:

      • Make sure that steps wait for all of their option binding inputs. (Previous releases worked accidentally in this regard.)

      • Make sure the base URI of an expression is always resolved against the point of definition, not the point of use.

      • Only apply external option bindings to p:option instructions. (And not also p:with-option instructions!)

      • Make sure steps declared in libraries are always fully validated.

      • Fixed bug where values cast to xs:integer were returned as xs:decimal values.

      • Reworked how lazy bindings are managed; they’re now always documents.

      • General improvements to logging, trace listening, message reporting, and serialization.

    • Fixed issue #153. Setup the correct namespace context in p:if. A p:if is rewritten as a p:choose containing a p:when; make sure that the p:when constructed for this purpose has the right namespace context.

    • Fixed issue #152. Discard unused inputs on p:inline steps.

    • When constructing SVG graph output, ignore stylesheet errors rather than causing the processing to fail. (This hasn’t fixed the errors, but it makes it possible to ignore them in the short term.)

    • Found and fixed (some) issues related to how text value templates are expanded. (There are still open questions.)

    • Improved handling of err:XD0011. Always provide a reason.

    • Fix bug where namespace bindings on attributes could be lost

    • Attempt to manage the console output encoding.

      There’s a new configuration file setting, console-output-encoding. When XML Calabash writes to the console, it attempts to assure that the output is appropriate for that encoding. There’s a bit of a messy interaction between the new “message printer” class and the existing “message reporter” class. More refactoring may be useful.

    • Added “piped mode” to support processing XML in a unix-style pipeline.

      In piped mode (--pipe or piped-io), primary input comes from stdin by default and the primary output goes to stdout by default. Explicit bindings are still possible. The pretty printing associated with console output is disabled.

    • Added a (somewhat crude) Powershell script to the distribution to run XML Calabash on Windows.

  • 3.0.0-alpha14, 08 Jan 2025
    • Reworked Java versions again. This release attempts to move the requirement back to Java 11, except for the “polyglot” steps which require Java 17 or later.

    • Fixed issue #144. The XPath parser is still a little ad hoc. Also improved the error message if this situation arises again.

    • Fixed issue #142. The default readable port of a step that followed a p:try, that itself had an implicit output port, was not computed correctly.

    • Fixed issue #141. Make sure the continuous integration build scripts use the correct documentation paths. (In order to make relative links between the guides easier to test, I moved the build directories.)

    • Fixed issue #140. Removed the accidental restriction that p:variable was not allowed in p:try.

    • Fixed issue #138. The Windows shell doesn’t support UTF-8 by default (checks calendar, yep, it is 2025) so back to plain old US ASCII for all messages by default. 🎵sad trombone🎶

  • 3.0.0-alpha13, 07 Jan 2025
    • Fixed issue #134. The last release (perhaps the last couple of releases) have accidentally required Java 21. This release moves the requirement back to Java 17. Java 17 is a “long-term-support” release from 2021 so it’s not exactly cutting edge. Supporting Java 8, the historical favorite, is now deprecated, so it’s time to move forward. Java 17 seems like a reasonable compromise between 11 (2018) and 21 (2023).

    • Fixed issue #131. Clarified documentation of the CSS and XSL formatters teps. Fixed broken links between the user guide and the reference.

    • Fixed issue #130. There was a typo in the Relax NG grammar for the configuration file that caused cc:mimetype to appear twice when the second occurrence should have been cc:paged-media

    • Fixed issue #125. Corrected the explanation of verbosity in the --help output.

    • Fixed issue #124. Updated the way the configuration is parsed so that the absence of the licensed attribute on the configuration isn’t interpreted as a request for a “non-licensed” configuration.

    • Fixed issue #123. Added a namespace declaration to the tableaux for the cc:xml-calabash configuration element.

    • Fixed issue #122. Added and documented the --explain command line argument. (Previously, the explanation behavior was tied to the verbosity level which doesn’t really make sense. I also fixed a bug where the stack trace was printed twice if debug verbosity was used.)

  • 3.0.0-alpha12, 05 Jan 2025
    • Fixed a bug where lazily evaluated expressions might have the wrong in-scope namespaces.

    • Fixed a bug where the schema-awareness of expressions and the schema-validity of documents could get out of sync causing errors.

    • Fixed a bug where a spurious option was passed to visualizers established by the configuration file.

    • Added Graphviz output to the debug log if generating SVG fails.

    • Allow the debugger breakpoint syntax to begin “break at” as well as “break on”.

    • Fixed an issue where the debugger was unable to inspect the document properties of step inputs.

    • Improved the debugger breakpoint command to check that the specified breakpoint is possible. The command will now reject attempts to set breakpoints that don’t refer to a valid step id. The model command has been extended to print all of the possible ids in a pipeline.

  • 3.0.0-alpha11, 05 Jan 2025
    • Tinkered with the timeout and sleep duration options in advance of some anticipated specification changes. The sleep duration is now a number of seconds, not milliseconds. Both values can be either a number or a string in the form of an xs:dayTimeDuration.

    • Completely refactored the code that parses and serializes documents. Added support for YAML and TOML content types.

    • Added cx:xpath and cx:polyglot steps (cx:javascript, cx:python, etc.).

    • Bumped the Java version to 21, fixed a number of deprecation warnings.

    • Fixed a bug where [p:]message was still not being handled correctly.

    • Added a cx:epubcheck step.

    • Updated assertions to support using an XProc pipeline as an assertion.

  • 3.0.0-alpha10, 04 Jan 2025
    • This release never actually happened. There was a typo in the build script. I opted to bump the version rather than moving a published tag.

  • 3.0.0-alpha9, 01 Jan 2025
    • Fixed issue #92. Updated the p:archive, p:archive-manifest, and p:unarchive steps to support all of the formats supported by the Apache Commons Compression library. The “create” command on p:archive also supports merging multiple archives together.

    • Added a “visualization” API for tracking pipeline progress. Extensively revised how logging works. Removed the now unnecessary “progress” level of verbosity.

      By default system logging only goes to the console and uses dynamic levels. For a different configuration, use a different logback.xml configuration file.

    • Fixed bugs related to [p:]message attributes. Messages are now output through the message reporter at “info” level, rather than being printed directly to the console. Fixed a bug where static messages on compound steps were not being output at all.

    • Completely reworked how XVRL is supported. There’s now an internal model for the report format. Conversion from SVRL to XVRL is done by constructing the XVRL model.

    • Fixed issue #90 by correcting a typo in the SVG graphing stylesheet.

    • Fixed issue #93 by removing the accidental restriction that p:variable was not allowed in p:if. Hat tip to Achim for reporting that one!

    • Fixed issue #96. An option that had no default value but whose type did not allow the empty sequence was generating a compile time error about the invalid (default) value. The initializer now defers the error until runtime (where it won’t happen if a value is provided for the option).

    • Added application/epub+zip, application/java-archive, application/x-7z-compressed, application/x-archive, application/x-arj, application/x-cpio, and application/x-tar to the standard content type mapping.

    • Added an experimental xmlcalabash.sh script to the distribution. This should make it easier to run XML Calabash with a modified classpath.

    • Renamed a few build properties. The BUILD_HASH is now BUILD_ID and is more sensitive to internal builds. Renamed SAXON to SAXON_EDITION and removed the misleading SAXON_LICENSED property. (If you run PE or EE without a license, the edition reported is HE.)

    • Attempt to detect when PE or EE is running without a license and provide a more helpful version message.

    • Upgraded to SchXslt 1.3.1. Upgrade to jing/trang 20241231. Upgraded a few Kotlin libraries. Added the brotli and xz libraries to the core build.

    • Fixed a bug where the error location information for an error was getting lost.

  • 3.0.0-alpha8, 28 Dec 2024
    • Fixed an issue where the command line interface used by the debugger was always a “dumb” terminal. It now supports history and editing keys.

    • Improve the error messages associated with attempting to set inputs or outputs on the command line for ports that don’t exist in the pipeline.

    • An error is now reported if psvi-required is true but the processor doesn’t support XML Schema validation. (Saxon EE is required for PSVI support.)

    • Renamed the “schema-aware” command line option and configuration property to “licensed”. Cleaned up the tests for schema awareness in several places.

    • Added support for the [p:]timeout option on steps.

    • Added support for the timeout parameter on p:http-request.

    • Improved the error message associated with an undeclared prefix in an XPath expression.

    • Improved the error codes reported for static errors in several places.

    • Reworked the MessageReporter interface; allowed one reporter to chain to another. Added a buffering reporter to keep track of messages. By default the buffering reporter chains to the default reporter which chains to the logging reporter. The buffering reporter holds the last 32 messages. The default reporter prints messages to the console if they have a level that exceeds the verbosity threshold. The logging reporter sends all messages to the Java logger.

      There’s a new message-buffer-size configuration setting to set the number of messages to buffered.

    • Added a new cx:pipeline-messages extension step that can retrieve the messages buffered by the buffering reporter.

    • Changed the message reporter and document manager to be unique per-pipeline, rather than shared across multiple pipelines.

    • Fixed a bug where serialization properties on p:output were not being applied when pipeline outputs were serialized.

    • Fixed a bug where XML Calabash was failing to detect that p:import must precede p:input and p:output. Fixed that error in many of the tests in the extra test suite.

    • Improved support for Schematron assertions. Assertions are now applied to non-XML values by first performing “cast content type” on them.

    • Added support for a cx:href attribute on p:pipeinfo. When present, the processor behaves as if the referenced document appeared where the reference appears. The p:pipeinfo must be empty and the cx:href must point to a p:pipeinfo document. This makes it practical to share Schematron assertions across pipelines.

    • Fixed#74 by adding a hack to the manifest classpath.

    • Fixed an obscure bug in the debug logging message associated with p:sleep.

    • Upgraded from SchXslt1 to SchXslt2 version 1.3.

    • Cleaned up the error reporter in many steps.

    • Removed the defunct debug configuration setting.

    • Improve the reference documentation for steps. Defer to the specification and to Erik Siegal’s excellent XProcRef for standard step descriptions.

  • 3.0.0-alpha7, 24 Dec 2024
    • Added the Schematron assertions feature.

    • Added a catch command to the debugger to catch steps that fail. Added an option to the step command to stop after a step executes.

    • Fixed a bug in the way steps are handled in nested, common imports.

    • Fixed p:filter to work as expected rather than as documented. See also, PR #645, the documentation fix.

    • Updated the trace listener to record when steps fail.

    • Tinkered with the message listener to align its methods with the recent changes to --verbosity.

  • 3.0.0-alpha6, 23 Dec 2024
    • Added an interactive debugger.

    • Added a tracing feature.

    • Fixed issue #48 by supplying extension attributes to atomic steps.

    • Fixed issue #47 by documenting the pipeline option.

    • Added support for a --init command line option to support registering extension functions before running a pipeline.

    • Refactored the API that provides inputs to atomic steps. The inputs are now cached by the implementation and made available when the step is run. The previous API didn’t require that inputs be cached, but the overwhelming majority of steps do. Centralizing that feature simplifies atomic step implementations and avoids bugs.

    • Fixed a bug where p:store could not store binary outputs. Generally improved handling of serialized outputs. Implemented support for the cc:serialization configuration option.

    • Refactored the paged media steps. Documented the extensions supported by p:css-formatter and p:xsl-formatter.

    • Documented the p:system-property function, including the vendor-specific property names.

    • Refactored the logging-related configuration. Switched to the Logback backend. Changed the --debug option so that it enables debug logging.

    • Refactored and reorganized the --verbosity values. They now align with debugging log levels.

    • Refactored how “empty” is handled. Empty inputs are now addressed when the graph model is built, not during pipeline construction. This simplifies construction and fixed at least one bug.

    • Fixed a bug in the way the error explanations file was parsed.

    • Attempted to make sure that error messages include the location of the error. Things are improved, though perhaps not fixed everywhere.

    • Refactored how step and model IDs are managed. The new system produces simpler, more predictable APIs.

  • 3.0.0-alpha5, 15 Dec 2024
    • Refactored the way context information is maintained both at compile time and run time. This is a re-refactor of the refactor I started back in June when I discovered that it must be possible for the Saxon configuration for each step to be different. The problem I discovered shortly after releasing alpha4 was that the runtime context was still using the compile time environment when evaluating expressions. Mostly this manifested in the wrong value for the p:episode system property.

      It was all a bit of a mess so I threw it out and started over. Again. It’s better now, I think, but there’s still room for improvement.

    • Updated the serializer to make sure that XHTML documents are serialized as XML, not HTML.

    • Added a stub implementation of p:lookup-uri.

    • Fixed issue #32 by adding a (debug logging) warning if an input or output port trivially accepts no documents. That is, if it has a content-types constraint that includes no inclusive members or if */* is the last exclusive member.

    • Fixed issue #31 by amking some documentation improvements, including documenting the additional properties accepted by p:system-property in the Reference Guide.

  • 3.0.0-alpha4, 07 Dec 2024
    • Resolved the remaining p:validate-with-json-schema test failures. Updated to json-schema-validator version 1.5.4. This required adding a dependency on GraalVM’s polyglot JavaScript library.

    • Updated the build script to use a more recent version of XercesImpl.

    • Fixed several bugs related to the way static options are resolved.

    • Fixed a bug where [p:]inline-expand-text was incorrectly controlling AVTs in attributes on the element where it occurred.

    • Made many improvements to p:import-functions support.

    • Added special handling for use-when on p:import.

    • Support variables in match expressions on p:viewport.

    • Fixed error codes for several tests. Correctly report static errors in more cases.

    • Reworked SVG output so that there’s one file for all the pipelines and one file for all the graphs (instead of multiple files for each).

    • Added support for the --step option.

    • Fixed a bug in the attribute value template parser. It failed to handle nested comments correctly.

  • 3.0.0-alpha3, 02 Dec 2024
    • Fixed issue #9, which reveals that the XPath parser is still a bit too ad hoc.

    • Fixed a couple of NVDL tests by sorting out the cache for schemas. Updated the p:xinclude step so that it looks in the cache.

    • Added cx:cache-add and cx:cache-delete to let pipeline authors update the cache.

    • Made a bunch of improvements to static option handling.

    • Resolved the situation where two steps with the same type (private steps in different libraries, for example) would not work correctly.

    • These changes resolved the remaining input, option, with-option, step-available, and p:run tests.

  • 3.0.0-alpha2, 26 Nov 2024
    • Fixed issue #3, [p:]message attributes were not supported on steps.

    • Attempted to fix issue #2, XML Calabash failed on startup on Windows. The problem, correctly identified by Martin, was in the attempt to create a URI from a path. On Windows, paths contain \ and those are forbidden in URIs.

      I’ve adopted the solution suggested by Martin, and tested that it passes a “smoke test” on Windows. But I’m not highly confident that this is the end of the Windows path issues.

    • Removed “empty steps” from the runtime graph. These are steps that generate no output, designed to model p:empty bindings. They clutter the graph and I don’t think they’re required any more. An unbound input is now “welded shut” so that no inputs are expected.

  • 3.0.0-alpha1, 24 Nov 2024

    Initial publication.