Skip to content

Characterize and resolve LibreOffice terminal move paragraph containers #973

Description

@stevenobiajulu

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions