Skip to content

docs(changelog): file the 2.5 DOCX fixes under Fixed, add a summary and a 2.4 migration note - #1016

Merged
DemchaAV merged 3 commits into
2.5-devfrom
docs/changelog-2-5-docx-summary
Nov 6, 2026
Merged

DemchaAV merged 3 commits into
2.5-devfrom
docs/changelog-2-5-docx-summary

Conversation

@DemchaAV

@DemchaAV DemchaAV commented Nov 6, 2026 •

Copy link
Copy Markdown
Owner

Why

The v2.5.0 entry grew one bullet per DOCX change, all of them under ### Public API: 256
bullets, about 4,800 lines, of which 9 add or change public API. A reader had no summary of
what the DOCX export became in 2.5, and nothing told a 2.4 user what changes in the file they
get or in the code they write. Older bullets still stated as current behaviour that later
changes in the same cycle replaced — line heights written exact on every paragraph, a timeline
rail drawn as a bar, shapes anchored to the page. And the acceptance figures a Tests bullet quotes,
41 of 62 presets in Word and 37 in LibreOffice, came from the corpus's first run.

What changed

  • ### Highlights at the top of the entry: what the DOCX export is in 2.5 — written from
    the compiled layout, Word charts with an embedded workbook, DocxExportReport, bytes identical
    on one platform with deterministic(true), buildDocx / writeDocx / toDocxBytes, and the
    corpus it is held to, with the acceptance measured today. One line for the PDF text layer of an
    inline icon.
  • ### Migrating the DOCX export from 2.4: code keeps compiling (the Stable
    session.export(new DocxSemanticBackend()) path, kept constructors); what a reader of the file
    should expect instead (Word numbering, Normal-style runs, chart parts, anchored drawings,
    fixed-layout tables, one-line bands, spacers, a page zone as the page lays it out and on the
    pages its predicate picks — 2.4 wrote it as one line on every page — and the text headers,
    footers and page backgrounds 2.4 ignored); which log warnings went and came, and that the
    report names every node; the layout pass the export now costs; embedded fonts;
    where an editable rule comes from; byte comparisons through a deterministic backend passed to
    export(...); graph-compose-render-docx no longer needing render-pdf declared by hand; the
    two record-pattern source breaks (SemanticExportContext, ShapeNode). Each point is taken
    from the 2.4.1 recipe against the current recipe, matrix and code.
  • ### Fixed: the 247 bullets that change what the export writes and add no public API move
    out of ### Public API, in their order. The 9 that add public API stay (the members come from
    the knowledge-pack diff v2.4.1..HEAD). No line is dropped or reworded by the move.
  • Superseded claims: 62 sentences that a later change in this cycle replaced get a pointer
    in the form the entry already uses — (since …: see "<newer entry>") — rather than being cut;
    each names a newer entry. The deterministic-bytes entry also says the bytes match on one
    platform.
  • Stale numbers: the acceptance bullet now reads 77 of 84 in Word 16 and 48 of 84 in
    LibreOffice 24.2 on CI's Linux, keeping 41 and 37 as the first run's; the corpus bullet counts
    64 presets and 20 built documents rather than 62.

No version, date or release metadata changes; the entry stays "Planned".

Verification

  • Acceptance measured on this tree's base: scripts/docx-visual/word-fidelity.ps1 (Word
    16.0.20527) — 77 of 84 pass, all 64 presets, gate green against word-windows.tsv; CI run
    42135867817 on 2.5-dev at 5f42b51, measured-libreoffice-acceptance.md — 48 of 84, 40 presets.
  • The move step, before any addition, is checked by script: the non-blank lines before and
    after it are the same multiset, plus the one ### Fixed heading. Every new pointer's quoted
    title is checked to be an existing bullet lead.
  • ./mvnw -B -ntp test -pl :graph-compose-core -Dtest='com.demcha.documentation.**' — 172 tests,
    0 failures (VersionConsistencyGuardTest, which reads the CHANGELOG headings, included).
  • ./mvnw -B -ntp test -f qa/pom.xml -Dtest='com.demcha.documentation.**' — 28 tests, 0 failures.
  • scripts/release-notes.mjs on the extracted 2.5 section: 520,452 characters, condensed to its
    322 entry leads (31,111 characters) for the GitHub Release, Highlights and Migration first;
    node --test scripts/release-notes.test.mjs passes.
  • Full reactor gate on the final tree (clean verify as CI runs it, the four knowledge checks,
    core javadoc, install and the examples tests): passed — core 841, render-pdf 339,
    render-docx 2539, testing 5, render-pptx 142, templates 128, qa 1910, examples 93; 0 failures,
    0 javadoc warnings.

Lane: documentation only — no code, test or generated file changes.

…nd a 2.4 migration note

The v2.5.0 entry kept 256 DOCX bullets under Public API, 9 of which add
public API. The other 247 move, in order, to a new Fixed section. A
Highlights block says what the DOCX export is in 2.5, and a migration
note tells a 2.4 user what changes in the file, the log and the code.

Sentences that a later change in the cycle replaced get the entry's own
"(since ...: see ...)" pointer to the newer entry, 62 of them. The
acceptance figures are measured again: Word 16 passes 77 of the 84
corpus documents and LibreOffice 24.2 on CI 48, where the bullet quoted
the first run's 41 and 37 of 62 presets.
…ter a verb

2.4 already wrote a page zone, as one line of runs on every page; the
summary and the migration note now say that, and what 2.5 changes about
it: the zone as the page lays it out, on the pages its predicate picks
where Word has such a header or footer, and the warning logged only for
a predicate Word cannot follow. The rule note says the 12pt limit holds
for a line as well as a divider. Pointers that read as fragments get a
verb, and the lines they lengthened are wrapped to the entry's width.
…ix two pointers

Two pointers read wrongly where they stood: NavySidebar's now says the
date is on the title's line and the preset on one page, and the panel
cut's says the page is written as a Word section. A zone predicate that
picks odd pages goes to Word's ordinary header, which the migration note
now names, and the acceptance bullet says a document is set on as many
pages as the engine sets it on, as the summary does. Each paragraph that
a pointer lengthened is reflowed to the entry's width; no word changes.
@DemchaAV
DemchaAV marked this pull request as ready for review November 6, 2026 02:06
@DemchaAV
DemchaAV merged commit 1041d18 into 2.5-dev Nov 6, 2026
11 checks passed
@DemchaAV
DemchaAV deleted the docs/changelog-2-5-docx-summary branch November 6, 2026 07:01
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