Skip to content

docs(roadmap): say what 2.5 did for DOCX and what is left - #1017

Merged
DemchaAV merged 2 commits into
2.5-devfrom
docs/roadmap-docx-after-2-5
Nov 6, 2026
Merged

DemchaAV merged 2 commits into
2.5-devfrom
docs/roadmap-docx-after-2-5

Conversation

@DemchaAV

@DemchaAV DemchaAV commented Nov 6, 2026 •

Copy link
Copy Markdown
Owner

Why

Two of ROADMAP.md's Later items described a DOCX export 2.5 no longer has, and Now listed as work to come what 2.5 has done.

  • A strict mode for DOCX said dropping shape, line and ellipse "now warns", and that the missing piece was a flag against "silently producing a document with content gone". Since 2.5 those nodes are written where the layout places them, as drawings or, for a plain horizontal line in the flow, as Word's own rule (capability matrix, the drawing-nodes paragraph), dropped only where they cannot be drawn (DocxSemanticBackend.droppedBecause: a gradient-only paint, nothing painted, no layout), and every node the export drops or approximates is named, with its path, in DocxExportReport.
  • DOCX maturity offered a choice: expand coverage toward PDF parity, or move DOCX behind an experimental flag. 2.5 expanded it: the export reads the compiled layout (SemanticBackend.requiresResolvedLayout) and is held to a corpus in Word and LibreOffice. No experimental flag exists.
  • Now listed "bringing the DOCX export onto the shared fixed-layout geometry" as a live thread; on the 2.5 line the export writes from that layout.

What changed

  • Now: the DOCX thread is finishing the export for 2.5, which writes from the compiled layout, with a pointer to the v2.5.0 changelog entry.
  • A strict mode for DOCX: states what the export does now and why the report is not a refusal. A caller exporting to bytes can read the report before keeping them, but given an output file DocxSemanticBackend.write writes it before it calls the sink. The report comes from the backend passed to export(...) (on the session or a MultiSectionDocument); buildDocx and its siblings build one without a sink. A built-in option that fails the export stays a direction, not a decision: today an export writes what it can and reports the rest.
  • DOCX after 2.5 replaces DOCX maturity: records which way 2.5 went and lists what is left. That is graduating the @Beta parts 2.5 added (among them the report, the builder, buildDocx and its siblings, the section export), and the charts still written as their data table (sharing a table cell with other drawings, or in a table composed in a cell). It also names deterministic bytes that still differ across platforms (Apache POI's XML-declaration line break), and LibreOffice setting the document further from the engine's page than Word (77 of 84 corpus documents pass in Word on Windows, 48 in LibreOffice 24.2 on CI's Linux).
  • CHANGELOG.md: a v2.5.0 Documentation entry.

No dates, no version, no code. Backend-neutral layout measurement is unchanged: it is still accurate, and render-docx now depending on render-pdf only makes it more pointed.

Verification

  • Each statement checked against:
    • CHANGELOG.md v2.5.0 Highlights and Migrating: charts, report, determinism, the corpus counts (Word 77/84, LibreOffice 48/84);
    • docs/architecture/backend-capability-matrix.md: drawing nodes, the chart row, the deterministic-output row;
    • docs/api-stability.md: which DOCX parts are @Beta;
    • DocxSemanticBackend.java: the file is written, then the sink is called; droppedBecause.
  • Documentation guards, run locally on this tree:
    • ./mvnw -B -ntp test -pl :graph-compose-core -Dtest='com.demcha.documentation.**': 172 tests, 0 failures.
    • ./mvnw -B -ntp test -f qa/pom.xml -Dtest='com.demcha.documentation.**': 28 tests, 0 failures.

The strict-mode item said shapes, lines and ellipses are dropped with a
warning; since 2.5 they are drawn where the layout places them, and every
loss is named in DocxExportReport. It now says why the report is not a
refusal - an export given an output file has written it before the sink
runs - and keeps a built-in refuse option as a direction.

The DOCX maturity item offered expanding coverage or an experimental
flag; it now records that 2.5 expanded it and lists what is left: the
@beta parts, charts still written as their data table, bytes that differ
across platforms, and LibreOffice's distance from the page. Now no longer
lists moving DOCX onto the compiled layout as work to come.
@DemchaAV
DemchaAV marked this pull request as ready for review November 6, 2026 07:22
@DemchaAV
DemchaAV merged commit a588662 into 2.5-dev Nov 6, 2026
11 checks passed
@DemchaAV
DemchaAV deleted the docs/roadmap-docx-after-2-5 branch November 6, 2026 07:24
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