Observed consumer limitation
Public synthetic paragraph moves from #941 / PR #972 preserve exact safe-docx Accept/Reject projections. LibreOffice independently preserves moved text but leaves an extra empty terminal paragraph when accepting a terminal move source or rejecting a terminal move destination. Middle moves resolve exactly in both directions.
This is not a complete reader-fidelity pass. The deletion-only mitigation from #891 does not apply directly: moving a paragraph mark outside its named move range may change semantics. Do not copy that mitigation without schema and projection evidence.
Durable characterization
packages/docx-core/src/integration/issue-941-libreoffice-terminal-move.test.ts in PR #972 exercises three public synthetic cases via compareDocuments and the repository's isolated LibreOffice oracle. It asserts exact visible text in all six projections and records the extra terminal container only in the two affected projections. It explicitly skips when LibreOffice is unavailable rather than reporting an unexecuted pass.
Follow-up acceptance
- Investigate a schema-valid, range-preserving representation that removes the extra terminal container in LibreOffice without regressions in middle moves, preserved revisions, or text projections.
- Retain the characterization as a before/after regression; do not normalize away empty paragraphs in the acceptance assertion.
- Run MCE-aware schema validation, exact safe-docx projections, and independent consumer checks on public/synthetic output.
- Word opening is verified separately, but Word Accept-All/Reject-All projections remain unverified. Establish those with an owner-coordinated oracle; opening cleanly is not projection verification.
- Do not use private Escrow files or derivatives and do not run unattended hosted Word.
Ref: #941, #972, #891.
Observed consumer limitation
Public synthetic paragraph moves from #941 / PR #972 preserve exact safe-docx Accept/Reject projections. LibreOffice independently preserves moved text but leaves an extra empty terminal paragraph when accepting a terminal move source or rejecting a terminal move destination. Middle moves resolve exactly in both directions.
This is not a complete reader-fidelity pass. The deletion-only mitigation from #891 does not apply directly: moving a paragraph mark outside its named move range may change semantics. Do not copy that mitigation without schema and projection evidence.
Durable characterization
packages/docx-core/src/integration/issue-941-libreoffice-terminal-move.test.tsin PR #972 exercises three public synthetic cases via compareDocuments and the repository's isolated LibreOffice oracle. It asserts exact visible text in all six projections and records the extra terminal container only in the two affected projections. It explicitly skips when LibreOffice is unavailable rather than reporting an unexecuted pass.Follow-up acceptance
Ref: #941, #972, #891.