Skip to content

Add a ballot changelog and a previous-version note - #393

Open
johngrimes wants to merge 8 commits into
mainfrom
ballot-changelog-and-note
Open

Add a ballot changelog and a previous-version note#393
johngrimes wants to merge 8 commits into
mainfrom
ballot-changelog-and-note

Conversation

@johngrimes

@johngrimes johngrimes commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator

Addresses the review feedback in #380: if the major version is being incremented, the specification needs to say what is breaking, link the earlier specifications from a changelog, and point readers at the previous version.

The guide now declares 3.0.0-ballot with releaseLabel: ballot, and publication-request.json describes the September 2026 ballot at sequence STU 3. A new Changes page states the delta from published 2.0.0, opening with the three non-compatible changes and the migration action for each: the canonical base and package identifier move (#377), ViewDefinition.identifier becoming repeating through the CanonicalResource derivation, and the corrected sql-expressions invariant. The home page opens with a note telling a reader arriving from the old canonical where 2.0.0 still lives. The glossary gains "canonical URL" and "package identifier", since the breaking changes are stated entirely in those terms.

The delta is hand-authored because the IG Publisher resolves the previous release through the package identifier in {canonical}/package-list.json, so it cannot reach 2.0.0, which shipped as org.sql-on-fhir.ig. version-comparison is set to n/a for the same reason. The pages: block is declared in full because setting a standards status on the Changes page needs a page-level extension, and SUSHI stops auto-generating entries once any are declared.

CI will fail, for pre-existing reasons

The build reports 37 errors and 18 warnings, all present on main at c1da9a8 and none introduced here; that commit's own CI run fails with the same counts. 36 errors and all 18 warnings come from the IG Publisher deep-validating the ViewDefinition examples under the HL7 canonical (#377, diagnosed in #382); the remaining error is the unregistered Jira specification artefact (#388). Broken links are zero, and input/ignoreWarnings.txt is byte-identical to c1da9a8.

Merging accepts a documented pre-existing failure rather than a regression.

Out of scope

FHIR/sql-on-fhir.js still hardcodes the sql-on-fhir.org canonicals across 35 files, which needs a companion issue before the ballot closes. Carrying the 2.0.0 entry into the new package's published history needs raising with the Product Director, as package-list.json is maintained by the publication process and this repository has no field for a historical entry. 2.0.0's own banner sits outside HL7's publication process and cannot be corrected.

Set the guide's version to 3.0.0-ballot with releaseLabel ballot, and
describe the forthcoming publication in publication-request.json: sequence
STU 3, status ballot, path http://hl7.org/fhir/uv/sql-on-fhir/2026Sep.
The previous request described 2.0.0 at sequence R2 with a path the release
was never published to.

Disable automatic previous-version comparison. The publisher resolves the
prior release through the package identifier in package-list.json, so it
cannot reach 2.0.0, which shipped as org.sql-on-fhir.ig.
Publish a Changes page stating what breaks for an implementer upgrading from
published 2.0.0: the canonical base and package identifier move, the
ViewDefinition.identifier cardinality change, and the corrected
sql-expressions invariant. Each entry states the migration action. A note
covers readers who tracked the continuous build, where operation canonical
URLs changed form but OperationDefinition.code did not.

The delta is hand-authored because the publisher's automatic previous-version
comparison cannot bridge the package rename.

Define "canonical URL" and "package identifier" in the glossary, since the
breaking changes are stated entirely in those terms.

Declaring the page list is what allows the standards status to be set on the
Changes page. SUSHI stops auto-generating page entries once any are declared,
so all nine appear, with the titles it derived previously.
A reader arriving from a bookmark or a citation of the old canonical needs to
know immediately that the guide moved namespace and that 2.0.0 is still
available where it was. The generated version banner cannot say this, because
it has no notion of the old canonical.

The note uses the template's stu-note styling and sits above the existing
lineage sentence, which is unchanged.
Four entries cited an issue that described a later refinement rather than the
change the entry claimed. The operation entries now describe the addition and
cite each tracker item for what it actually covers, and the terminology entry
names the code systems and value sets against the issues that introduced them.
The async alignment cited #368, which is the still-open follow-up to replace a
branch build link, rather than #369 which made the change. An audit of all 32
citations after that finding turned up two more places where the prose and the
links had drifted: the cross-operation entry listed five of the six
inconsistencies it linked, and the editorial entry led with #300, which covers
the index page's query and API sections rather than the copy edits it claimed.
The round-1 audit compared each citation's title against the entry's claim,
which was not enough. Checking diffs and dates instead found seven problems.

The reviewer found three: $sqlquery-run led with #318, opened the day after
#309 merged and about parameter alignment rather than the addition; the
editorial entry led with #275, which touched one file rather than the narrative
pages generally; and the terminology entry credited #309 with
LibraryTypesCodes, which arrived in #293.

Re-auditing by diff found four more: OutputFormatCodes and ExportStatusCodes
arrived with the operations rather than with #331; the relicensing cited #261,
whose body asks for something else entirely; the cnl-0 and dom-6 entry cited
#377, which does not mention either constraint; and the relocation entry led
with a commit that only updates prose URLs.

Two entries that previously had no anchor for the operation's addition, only
for its later refinements, now cite the commit that introduced the
OperationDefinitions.
The output format entry was wrong on all three of its claims. The value sets
are shared by family rather than per operation, with the run operations binding
OutputFormatCodes and the export operations ExportOutputFormatCodes;
ExportStatusCodes binds the export status parameter and has nothing to do with
output formats; and the ExportStatusCodes code system arrived in #293 rather
than with the operations.

340dce5 formalised the two $viewdefinition operations as OperationDefinitions,
it did not add them. Both were specified in prose on the API page in 760f8f6,
seven months earlier, so the lead citation belongs there.
The output format entry claimed #331 bound each operation's format parameter to
a value set of the formats it supports, rather than leaving it open. Neither
half holds. The bindings arrived with the operations in 340dce5, five months
before #331 was filed, and the issue's own body says so. #331 proposed
per-operation value sets that were never created, and its closing comment
records that the project went the opposite way: the formats are split by
operation kind, by PR #365.
@johngrimes
johngrimes requested a review from niquola July 28, 2026 10:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant