docx-platform-tests results

Cross-implementation conformance and preservation-invariant results for WordprocessingML (.docx), in the web-platform-tests tradition. Each conformance scenario asserts behavior derivable from its cited ECMA-376 clause. A row labeled Metamorphic invariant instead reports a narrowly declared preservation property and is not an ECMA conformance result. Every scenario runs unchanged against each registered adapter. Unsupported means the adapter declined the operation honestly (the NOTRUN analog): a gap in the matrix is information about the library, not a failure of the suite. Pass (divergent serialization) means every assertion derived from the cited clause passed, but the saved document did not match the reference serialization's canonical XML — typically an implementation materializing formatting defaults on save. That is legal WordprocessingML serialization freedom, not a conformance failure; the per-assertion breakdown in latest.json carries the detail.

Scenariosafe-docx
0.17.0+git.3615e2132672
python-docx
1.2.0
libreoffice
LibreOffice 24.2.7.2 420(Build:2)
openxml-sdk
DocumentFormat.OpenXml 3.5.1
dolanmiu-docx
9.7.1
superdoc-sdk
1.16.1
docx-rs
docx-rs 0.4.20
tracked-changes
ECMA conformance: safe-docx 13/15 · python-docx 0/15 · libreoffice 14/15 · openxml-sdk 0/15 · dolanmiu-docx 0/15 · superdoc-sdk 8/15 · docx-rs 0/15
acceptDeletedParagraphMarkMergesParagraphs
Accepting a deleted paragraph mark merges the paragraph with the following paragraph
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.13.5.15 (del (Deleted Paragraph))
PassUnsupported
python-docx has no tracked-changes (revision) API
PassUnsupported
the Open XML SDK is a typed DOM over the package with no accept/reject-revisions API; implementing one would be an adapter-side algorithm
Unsupported
dolanmiu/docx can generate revision markup but exposes no API to accept or reject existing tracked changes
Unsupported
SuperDoc SDK does not expose paragraph-mark tracked changes through trackChanges.list
Unsupported
docx-rs can generate revision markup but exposes no API to accept or reject existing tracked changes
acceptDeletedTableRowRemovesEntireRow
Accepting a deleted table row removes the entire row
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.13.5.12 (del (Deleted Table Row))
Unsupported
safe-docx adapter does not implement accepting deleted table-row revisions
Unsupported
python-docx has no tracked-changes (revision) API
Pass (divergent serialization)Unsupported
the Open XML SDK is a typed DOM over the package with no accept/reject-revisions API; implementing one would be an adapter-side algorithm
Unsupported
dolanmiu/docx can generate revision markup but exposes no API to accept or reject existing tracked changes
Error
exit 1: file:///home/runner/work/docx-platform-tests/docx-platform-tests/adapters/superdoc-sdk/node_modules/@superdoc-dev/sdk/dist/runtime/host.js:352 return new SuperDocCliError(cliMessage ?? error.message ?? 'Command failed.', { ^ SuperDocCliError: structural row-level revisions (partial rows or mixed sides) are not decidable; only whole-table insert/delete is supported. at HostTransport.mapJsonRpcError (file:///home/runner/work/docx-platform-tests/docx-platform-tests/adapters/superdoc-sdk/node_modules/@superdoc-dev/sdk/dist/runtime/host.js:352:20) at HostTransport.onStdoutLine (file:///home/runner/work/docx-platform-tests/docx-platform-tests/adapters/superdoc-sdk/node_modules/@superdoc-dev/sdk/dist/runtime/host.js:334:33) at Interface.<anonymous> (file:///home/runner/work/docx-platform-tests/docx-platform-tests/adapters/superdoc-sdk/node_modules/@superdoc-dev/sdk/dist/runtime/host.js:174:18) at Interface.emit (node:events:524:28) at [_onLine] [as _onLine] (node:internal/readline/interface:419:12) at [_normalWrite] [as _normalWrite] (node:internal/readline/interface:613:22) at Socket.ondata (node:internal/readline/interface:246:23) at Socket.emit (node:events:524:28) at addChunk (node:internal/streams/readable:561:12) at readableAddChunkPushByteMode (node:internal/streams/readable:512:3) { code: 'COMMAND_FAILED', details: { operationId: 'trackChanges.decide', failure: { code: 'CAPABILITY_UNAVAILABLE', message: 'structural row-level revisions (partial rows or mixed sides) are not decidable; only whole-table insert/delete is supported.', details: { changeId: '1', reason: 'partial-rows' } } }, exitCode: 1 } Node.js v20.20.2
Unsupported
docx-rs can generate revision markup but exposes no API to accept or reject existing tracked changes
acceptDeletionsRemovesDelContent
Accepting deletions removes w:del wrappers and their content
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.13.5.14 (del (Deleted Run Content))
PassUnsupported
python-docx has no tracked-changes (revision) API
Pass (divergent serialization)Unsupported
the Open XML SDK is a typed DOM over the package with no accept/reject-revisions API; implementing one would be an adapter-side algorithm
Unsupported
dolanmiu/docx can generate revision markup but exposes no API to accept or reject existing tracked changes
Pass (divergent serialization)Unsupported
docx-rs can generate revision markup but exposes no API to accept or reject existing tracked changes
acceptFormattingChangeKeepsNewRunProperties
Accepting formatting changes keeps current run properties
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.13.5.31 (rPrChange (Revision Information for Run Properties))
PassUnsupported
python-docx has no tracked-changes (revision) API
Pass (divergent serialization)Unsupported
the Open XML SDK is a typed DOM over the package with no accept/reject-revisions API; implementing one would be an adapter-side algorithm
Unsupported
dolanmiu/docx can generate revision markup but exposes no API to accept or reject existing tracked changes
Pass (divergent serialization)Unsupported
docx-rs can generate revision markup but exposes no API to accept or reject existing tracked changes
acceptInsertionsUnwrapsInsWrappers
Accepting insertions unwraps w:ins and keeps run content
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.13.5.18 (ins (Inserted Run Content))
PassUnsupported
python-docx has no tracked-changes (revision) API
Pass (divergent serialization)Unsupported
the Open XML SDK is a typed DOM over the package with no accept/reject-revisions API; implementing one would be an adapter-side algorithm
Unsupported
dolanmiu/docx can generate revision markup but exposes no API to accept or reject existing tracked changes
Pass (divergent serialization)Unsupported
docx-rs can generate revision markup but exposes no API to accept or reject existing tracked changes
acceptMoveRemovesSourceAndUnwrapsDestination
Accepting a move removes the source content and unwraps the destination
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.13.5.22 (moveFrom (Move Source Run Content))
PassUnsupported
python-docx has no tracked-changes (revision) API
Pass (divergent serialization)Unsupported
the Open XML SDK is a typed DOM over the package with no accept/reject-revisions API; implementing one would be an adapter-side algorithm
Unsupported
dolanmiu/docx can generate revision markup but exposes no API to accept or reject existing tracked changes
FailUnsupported
docx-rs can generate revision markup but exposes no API to accept or reject existing tracked changes
acceptNestedDeletionInsideInsertion
Accepting nested deletion inside insertion keeps surviving inserted text
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.13.5.18 (ins (Inserted Run Content))
PassUnsupported
python-docx has no tracked-changes (revision) API
PassUnsupported
the Open XML SDK is a typed DOM over the package with no accept/reject-revisions API; implementing one would be an adapter-side algorithm
Unsupported
dolanmiu/docx can generate revision markup but exposes no API to accept or reject existing tracked changes
PassUnsupported
docx-rs can generate revision markup but exposes no API to accept or reject existing tracked changes
comments
ECMA conformance: safe-docx 0/3 · python-docx 2/3 · libreoffice 0/3 · openxml-sdk 0/3 · dolanmiu-docx 0/3 · superdoc-sdk 0/3 · docx-rs 0/3
addCommentBracketsRangeWithMatchingIds
Adding a comment brackets the anchor range and records matching comment ids
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.13.4.4 (commentRangeStart (Comment Anchor Range Start))
Unsupported
safe-docx adapter does not implement operation 'addCommentOnFirstTextOccurrence'
PassUnsupported
libreoffice adapter does not implement operation 'addCommentOnFirstTextOccurrence'
Unsupported
openxml-sdk adapter does not implement operation 'addCommentOnFirstTextOccurrence'
Unsupported
dolanmiu-docx adapter does not implement operation 'addCommentOnFirstTextOccurrence'
Unsupported
superdoc-sdk adapter does not implement operation 'addCommentOnFirstTextOccurrence'
Unsupported
docx-rs adapter does not implement operation 'addCommentOnFirstTextOccurrence'
generation
ECMA conformance: safe-docx 1/8 · python-docx 6/8 · libreoffice 0/8 · openxml-sdk 1/8 · dolanmiu-docx 6/8 · superdoc-sdk 0/8 · docx-rs 0/8
Metamorphic invariants: safe-docx 0/1 · python-docx 1/1 · libreoffice 0/1 · openxml-sdk 0/1 · dolanmiu-docx 0/1 · superdoc-sdk 0/1 · docx-rs 0/1
appendParagraphAddsTrailingParagraph
Appending a paragraph adds one trailing paragraph with the requested text
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.3.1.22 (p (Paragraph))
Unsupported
safe-docx adapter does not implement operation 'appendParagraphWithText'
PassUnsupported
libreoffice adapter does not implement operation 'appendParagraphWithText'
Unsupported
openxml-sdk adapter does not implement operation 'appendParagraphWithText'
Unsupported
dolanmiu-docx adapter does not implement operation 'appendParagraphWithText'
Unsupported
superdoc-sdk adapter does not implement operation 'appendParagraphWithText'
Unsupported
docx-rs adapter does not implement operation 'appendParagraphWithText'
appendParagraphPreservesExistingContent
Appending a paragraph preserves the existing opening paragraph
Metamorphic invariant (not ECMA conformance)
ECMA-376 edition 5, Part 1 § 17.3.1.22 (p (Paragraph))
Unsupported
safe-docx adapter does not implement operation 'appendParagraphWithText'
Invariant passUnsupported
libreoffice adapter does not implement operation 'appendParagraphWithText'
Unsupported
openxml-sdk adapter does not implement operation 'appendParagraphWithText'
Unsupported
dolanmiu-docx adapter does not implement operation 'appendParagraphWithText'
Unsupported
superdoc-sdk adapter does not implement operation 'appendParagraphWithText'
Unsupported
docx-rs adapter does not implement operation 'appendParagraphWithText'
tables
ECMA conformance: safe-docx 1/5 · python-docx 2/5 · libreoffice 1/5 · openxml-sdk 1/5 · dolanmiu-docx 0/5 · superdoc-sdk 1/5 · docx-rs 0/5
Metamorphic invariants: safe-docx 1/1 · python-docx 0/1 · libreoffice 1/1 · openxml-sdk 1/1 · dolanmiu-docx 0/1 · superdoc-sdk 1/1 · docx-rs 0/1
appendTableRowExtendsRowCountKeepingGrid
Appending a table row extends row count while keeping the cell grid width
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.4.79 (tr (Table Row))
Unsupported
safe-docx adapter does not implement operation 'appendTableRow'
PassUnsupported
libreoffice adapter does not implement operation 'appendTableRow'
Unsupported
openxml-sdk adapter does not implement operation 'appendTableRow'
Unsupported
dolanmiu-docx adapter does not implement operation 'appendTableRow'
Unsupported
superdoc-sdk adapter does not implement operation 'appendTableRow'
Unsupported
docx-rs adapter does not implement operation 'appendTableRow'
styles-numbering
ECMA conformance: safe-docx 0/5 · python-docx 4/5 · libreoffice 0/5 · openxml-sdk 0/5 · dolanmiu-docx 1/5 · superdoc-sdk 0/5 · docx-rs 0/5
applyNamedParagraphStyleSetsPStyleReference
Applying a named paragraph style sets a pStyle reference to the predefined style
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.3.1.27 (pStyle (Referenced Paragraph Style))
Unsupported
safe-docx adapter does not implement operation 'applyParagraphStyleToAnchor'
PassUnsupported
libreoffice adapter does not implement operation 'applyParagraphStyleToAnchor'
Unsupported
openxml-sdk adapter does not implement operation 'applyParagraphStyleToAnchor'
Unsupported
dolanmiu-docx adapter does not implement operation 'applyParagraphStyleToAnchor'
Unsupported
superdoc-sdk adapter does not implement operation 'applyParagraphStyleToAnchor'
Unsupported
docx-rs adapter does not implement operation 'applyParagraphStyleToAnchor'
applyNumberingToParagraphAttachesNumPr
Applying numbering to a paragraph attaches numbering properties that resolve through numbering.xml
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.3.1.19 (numPr (Numbering Definition Instance Reference))
Unsupported
safe-docx adapter does not implement operation 'applyNumberingToAnchorParagraph'
PassUnsupported
libreoffice adapter does not implement operation 'applyNumberingToAnchorParagraph'
Unsupported
openxml-sdk adapter does not implement operation 'applyNumberingToAnchorParagraph'
Unsupported
dolanmiu-docx adapter does not implement operation 'applyNumberingToAnchorParagraph'
Unsupported
superdoc-sdk adapter does not implement operation 'applyNumberingToAnchorParagraph'
Unsupported
docx-rs adapter does not implement operation 'applyNumberingToAnchorParagraph'
comments
ECMA conformance: safe-docx 0/3 · python-docx 2/3 · libreoffice 0/3 · openxml-sdk 0/3 · dolanmiu-docx 0/3 · superdoc-sdk 0/3 · docx-rs 0/3
commentPartRecordsAuthorInitialsAndText
Adding a comment records author initials and comment text in the comments part
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.13.4.2 (comment (Comment Content))
Unsupported
safe-docx adapter does not implement operation 'addCommentOnFirstTextOccurrence'
PassUnsupported
libreoffice adapter does not implement operation 'addCommentOnFirstTextOccurrence'
Unsupported
openxml-sdk adapter does not implement operation 'addCommentOnFirstTextOccurrence'
Unsupported
dolanmiu-docx adapter does not implement operation 'addCommentOnFirstTextOccurrence'
Unsupported
superdoc-sdk adapter does not implement operation 'addCommentOnFirstTextOccurrence'
Unsupported
docx-rs adapter does not implement operation 'addCommentOnFirstTextOccurrence'
generation
ECMA conformance: safe-docx 1/8 · python-docx 6/8 · libreoffice 0/8 · openxml-sdk 1/8 · dolanmiu-docx 6/8 · superdoc-sdk 0/8 · docx-rs 0/8
Metamorphic invariants: safe-docx 0/1 · python-docx 1/1 · libreoffice 0/1 · openxml-sdk 0/1 · dolanmiu-docx 0/1 · superdoc-sdk 0/1 · docx-rs 0/1
composeCompatibilityMode15WritesCompatSetting
Composing compatibility mode 15 writes the matching settings entry
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.15.3.4 (compatSetting (Custom Compatibility Setting))
PassUnsupported
python-docx adapter does not implement operation 'composeDocumentWithCompatibilityMode'
Unsupported
libreoffice adapter does not implement operation 'composeDocumentWithCompatibilityMode'
PassPassUnsupported
superdoc-sdk adapter does not implement operation 'composeDocumentWithCompatibilityMode'
Unsupported
docx-rs adapter does not implement operation 'composeDocumentWithCompatibilityMode'
composeFormattedRunCarriesBoldItalicSize
Composing a formatted run carries bold italic and font size properties
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.3.2.1 (b (Bold))
Unsupported
safe-docx adapter does not implement operation 'composeDocumentWithParagraphs'
PassUnsupported
libreoffice adapter does not implement operation 'composeDocumentWithParagraphs'
Unsupported
openxml-sdk adapter does not implement operation 'composeDocumentWithParagraphs'
PassUnsupported
superdoc-sdk adapter does not implement operation 'composeDocumentWithParagraphs'
Unsupported
docx-rs adapter does not implement operation 'composeDocumentWithParagraphs'
composeHeaderTextAddsSectionHeaderReference
Composing header text adds a default section header reference
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.10.5 (headerReference (Header Reference))
Unsupported
safe-docx adapter does not implement operation 'composeDocumentWithHeaderText'
PassUnsupported
libreoffice adapter does not implement operation 'composeDocumentWithHeaderText'
Unsupported
openxml-sdk adapter does not implement operation 'composeDocumentWithHeaderText'
PassUnsupported
superdoc-sdk adapter does not implement operation 'composeDocumentWithHeaderText'
Unsupported
docx-rs adapter does not implement operation 'composeDocumentWithHeaderText'
composeHyperlinkCreatesRelationshipReferencedLink
Composing a hyperlink creates a relationship-referenced external link
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.16.22 (hyperlink (Hyperlink))
Unsupported
safe-docx adapter does not implement operation 'composeDocumentWithHyperlink'
Unsupported
python-docx exposes no public API for writing external hyperlinks
Unsupported
libreoffice adapter does not implement operation 'composeDocumentWithHyperlink'
Unsupported
openxml-sdk adapter does not implement operation 'composeDocumentWithHyperlink'
PassUnsupported
superdoc-sdk adapter does not implement operation 'composeDocumentWithHyperlink'
Unsupported
docx-rs adapter does not implement operation 'composeDocumentWithHyperlink'
styles-numbering
ECMA conformance: safe-docx 0/5 · python-docx 4/5 · libreoffice 0/5 · openxml-sdk 0/5 · dolanmiu-docx 1/5 · superdoc-sdk 0/5 · docx-rs 0/5
composeNumberedListResolvesToDecimalFormat
Composing a numbered list produces paragraphs whose numbering resolves to decimal format
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.3.1.19 (numPr (Numbering Definition Instance Reference))
Unsupported
safe-docx adapter does not implement operation 'composeDocumentWithNumberedList'
PassUnsupported
libreoffice adapter does not implement operation 'composeDocumentWithNumberedList'
Unsupported
openxml-sdk adapter does not implement operation 'composeDocumentWithNumberedList'
PassUnsupported
superdoc-sdk adapter does not implement operation 'composeDocumentWithNumberedList'
Unsupported
docx-rs adapter does not implement operation 'composeDocumentWithNumberedList'
generation
ECMA conformance: safe-docx 1/8 · python-docx 6/8 · libreoffice 0/8 · openxml-sdk 1/8 · dolanmiu-docx 6/8 · superdoc-sdk 0/8 · docx-rs 0/8
Metamorphic invariants: safe-docx 0/1 · python-docx 1/1 · libreoffice 0/1 · openxml-sdk 0/1 · dolanmiu-docx 0/1 · superdoc-sdk 0/1 · docx-rs 0/1
composeParagraphsProduceTextRuns
Composing paragraphs produces one paragraph per requested text item
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.3.1.22 (p (Paragraph))
Unsupported
safe-docx adapter does not implement operation 'composeDocumentWithParagraphs'
PassUnsupported
libreoffice adapter does not implement operation 'composeDocumentWithParagraphs'
Unsupported
openxml-sdk adapter does not implement operation 'composeDocumentWithParagraphs'
PassUnsupported
superdoc-sdk adapter does not implement operation 'composeDocumentWithParagraphs'
Unsupported
docx-rs adapter does not implement operation 'composeDocumentWithParagraphs'
composeTableProducesGridMatchingCellMatrix
Composing a table produces rows and cells matching the requested matrix
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.4.37 (tbl (Table))
Unsupported
safe-docx adapter does not implement operation 'composeDocumentWithTable'
PassUnsupported
libreoffice adapter does not implement operation 'composeDocumentWithTable'
Unsupported
openxml-sdk adapter does not implement operation 'composeDocumentWithTable'
PassUnsupported
superdoc-sdk adapter does not implement operation 'composeDocumentWithTable'
Unsupported
docx-rs adapter does not implement operation 'composeDocumentWithTable'
tables
ECMA conformance: safe-docx 1/5 · python-docx 2/5 · libreoffice 1/5 · openxml-sdk 1/5 · dolanmiu-docx 0/5 · superdoc-sdk 1/5 · docx-rs 0/5
Metamorphic invariants: safe-docx 1/1 · python-docx 0/1 · libreoffice 1/1 · openxml-sdk 1/1 · dolanmiu-docx 0/1 · superdoc-sdk 1/1 · docx-rs 0/1
deleteTableRowRemovesRowAndContent
Deleting a table row removes that row and its distinctive content
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.4.79 (tr (Table Row))
Unsupported
safe-docx adapter does not implement operation 'deleteTableRowAtIndex'
Unsupported
python-docx has no public table row deletion API
Unsupported
libreoffice adapter does not implement operation 'deleteTableRowAtIndex'
Unsupported
openxml-sdk adapter does not implement operation 'deleteTableRowAtIndex'
Unsupported
dolanmiu-docx adapter does not implement operation 'deleteTableRowAtIndex'
Unsupported
superdoc-sdk adapter does not implement operation 'deleteTableRowAtIndex'
Unsupported
docx-rs adapter does not implement operation 'deleteTableRowAtIndex'
styles-numbering
ECMA conformance: safe-docx 0/5 · python-docx 4/5 · libreoffice 0/5 · openxml-sdk 0/5 · dolanmiu-docx 1/5 · superdoc-sdk 0/5 · docx-rs 0/5
directFormattingDoesNotBakeIntoStyleDefinition
Direct run formatting does not bake formatting into the paragraph style definition
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.7.4.17 (style (Style Definition))
Unsupported
safe-docx adapter does not implement operation 'formatFirstTextOccurrence'
PassUnsupported
libreoffice adapter does not implement operation 'formatFirstTextOccurrence'
Unsupported
openxml-sdk adapter does not implement operation 'formatFirstTextOccurrence'
Unsupported
dolanmiu-docx adapter does not implement operation 'formatFirstTextOccurrence'
Unsupported
superdoc-sdk adapter does not implement operation 'formatFirstTextOccurrence'
Unsupported
docx-rs adapter does not implement operation 'formatFirstTextOccurrence'
tables
ECMA conformance: safe-docx 1/5 · python-docx 2/5 · libreoffice 1/5 · openxml-sdk 1/5 · dolanmiu-docx 0/5 · superdoc-sdk 1/5 · docx-rs 0/5
Metamorphic invariants: safe-docx 1/1 · python-docx 0/1 · libreoffice 1/1 · openxml-sdk 1/1 · dolanmiu-docx 0/1 · superdoc-sdk 1/1 · docx-rs 0/1
horizontalMergeSetsGridSpanKeepingGrid
Horizontally merging cells records gridSpan while preserving the table grid
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.4.17 (gridSpan (Grid Columns Spanned by Current Table Cell))
Unsupported
safe-docx adapter does not implement operation 'mergeTableCellsInRow'
PassUnsupported
libreoffice adapter does not implement operation 'mergeTableCellsInRow'
Unsupported
openxml-sdk adapter does not implement operation 'mergeTableCellsInRow'
Unsupported
dolanmiu-docx adapter does not implement operation 'mergeTableCellsInRow'
Unsupported
superdoc-sdk adapter does not implement operation 'mergeTableCellsInRow'
Unsupported
docx-rs adapter does not implement operation 'mergeTableCellsInRow'
generation
ECMA conformance: safe-docx 1/8 · python-docx 6/8 · libreoffice 0/8 · openxml-sdk 1/8 · dolanmiu-docx 6/8 · superdoc-sdk 0/8 · docx-rs 0/8
Metamorphic invariants: safe-docx 0/1 · python-docx 1/1 · libreoffice 0/1 · openxml-sdk 0/1 · dolanmiu-docx 0/1 · superdoc-sdk 0/1 · docx-rs 0/1
insertParagraphAfterAnchorShiftsSubsequent
Inserting a paragraph after an anchor shifts the following paragraph later
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.3.1.22 (p (Paragraph))
Unsupported
safe-docx adapter does not implement operation 'insertParagraphAfterAnchorText'
PassUnsupported
libreoffice adapter does not implement operation 'insertParagraphAfterAnchorText'
Unsupported
openxml-sdk adapter does not implement operation 'insertParagraphAfterAnchorText'
Unsupported
dolanmiu-docx adapter does not implement operation 'insertParagraphAfterAnchorText'
Unsupported
superdoc-sdk adapter does not implement operation 'insertParagraphAfterAnchorText'
Unsupported
docx-rs adapter does not implement operation 'insertParagraphAfterAnchorText'
tracked-changes
ECMA conformance: safe-docx 13/15 · python-docx 0/15 · libreoffice 14/15 · openxml-sdk 0/15 · dolanmiu-docx 0/15 · superdoc-sdk 8/15 · docx-rs 0/15
rejectDeletionsRestoresDelContent
Rejecting deletions restores w:delText content to body text
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.13.5.14 (del (Deleted Run Content))
PassUnsupported
python-docx has no tracked-changes (revision) API
Pass (divergent serialization)Unsupported
the Open XML SDK is a typed DOM over the package with no accept/reject-revisions API; implementing one would be an adapter-side algorithm
Unsupported
dolanmiu/docx can generate revision markup but exposes no API to accept or reject existing tracked changes
Pass (divergent serialization)Unsupported
docx-rs can generate revision markup but exposes no API to accept or reject existing tracked changes
rejectFormattingChangeRestoresPriorRunProperties
Rejecting formatting changes restores prior run properties
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.13.5.31 (rPrChange (Revision Information for Run Properties))
PassUnsupported
python-docx has no tracked-changes (revision) API
Pass (divergent serialization)Unsupported
the Open XML SDK is a typed DOM over the package with no accept/reject-revisions API; implementing one would be an adapter-side algorithm
Unsupported
dolanmiu/docx can generate revision markup but exposes no API to accept or reject existing tracked changes
Pass (divergent serialization)Unsupported
docx-rs can generate revision markup but exposes no API to accept or reject existing tracked changes
rejectInsertedParagraphMarkMergesParagraphs
Rejecting an inserted paragraph mark removes the mark and merges the paragraph with the following paragraph
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.13.5.20 (ins (Inserted Paragraph))
PassUnsupported
python-docx has no tracked-changes (revision) API
PassUnsupported
the Open XML SDK is a typed DOM over the package with no accept/reject-revisions API; implementing one would be an adapter-side algorithm
Unsupported
dolanmiu/docx can generate revision markup but exposes no API to accept or reject existing tracked changes
Unsupported
SuperDoc SDK does not expose paragraph-mark tracked changes through trackChanges.list
Unsupported
docx-rs can generate revision markup but exposes no API to accept or reject existing tracked changes
rejectInsertedTableRowRemovesEntireRow
Rejecting an inserted table row removes the entire row
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.13.5.17 (ins (Inserted Table Row))
Unsupported
safe-docx adapter does not implement rejecting inserted table-row revisions
Unsupported
python-docx has no tracked-changes (revision) API
Pass (divergent serialization)Unsupported
the Open XML SDK is a typed DOM over the package with no accept/reject-revisions API; implementing one would be an adapter-side algorithm
Unsupported
dolanmiu/docx can generate revision markup but exposes no API to accept or reject existing tracked changes
Error
exit 1: file:///home/runner/work/docx-platform-tests/docx-platform-tests/adapters/superdoc-sdk/node_modules/@superdoc-dev/sdk/dist/runtime/host.js:352 return new SuperDocCliError(cliMessage ?? error.message ?? 'Command failed.', { ^ SuperDocCliError: structural row-level revisions (partial rows or mixed sides) are not decidable; only whole-table insert/delete is supported. at HostTransport.mapJsonRpcError (file:///home/runner/work/docx-platform-tests/docx-platform-tests/adapters/superdoc-sdk/node_modules/@superdoc-dev/sdk/dist/runtime/host.js:352:20) at HostTransport.onStdoutLine (file:///home/runner/work/docx-platform-tests/docx-platform-tests/adapters/superdoc-sdk/node_modules/@superdoc-dev/sdk/dist/runtime/host.js:334:33) at Interface.<anonymous> (file:///home/runner/work/docx-platform-tests/docx-platform-tests/adapters/superdoc-sdk/node_modules/@superdoc-dev/sdk/dist/runtime/host.js:174:18) at Interface.emit (node:events:524:28) at [_onLine] [as _onLine] (node:internal/readline/interface:419:12) at [_normalWrite] [as _normalWrite] (node:internal/readline/interface:613:22) at Socket.ondata (node:internal/readline/interface:246:23) at Socket.emit (node:events:524:28) at addChunk (node:internal/streams/readable:561:12) at readableAddChunkPushByteMode (node:internal/streams/readable:512:3) { code: 'COMMAND_FAILED', details: { operationId: 'trackChanges.decide', failure: { code: 'CAPABILITY_UNAVAILABLE', message: 'structural row-level revisions (partial rows or mixed sides) are not decidable; only whole-table insert/delete is supported.', details: { changeId: '1', reason: 'partial-rows' } } }, exitCode: 1 } Node.js v20.20.2
Unsupported
docx-rs can generate revision markup but exposes no API to accept or reject existing tracked changes
rejectInsertionsRemovesInsContent
Rejecting insertions removes w:ins wrappers and their run content
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.13.5.18 (ins (Inserted Run Content))
PassUnsupported
python-docx has no tracked-changes (revision) API
Pass (divergent serialization)Unsupported
the Open XML SDK is a typed DOM over the package with no accept/reject-revisions API; implementing one would be an adapter-side algorithm
Unsupported
dolanmiu/docx can generate revision markup but exposes no API to accept or reject existing tracked changes
Pass (divergent serialization)Unsupported
docx-rs can generate revision markup but exposes no API to accept or reject existing tracked changes
rejectMoveRestoresSourceRemovesDestination
Rejecting a move restores the source content and removes the destination
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.13.5.22 (moveFrom (Move Source Run Content))
PassUnsupported
python-docx has no tracked-changes (revision) API
Pass (divergent serialization)Unsupported
the Open XML SDK is a typed DOM over the package with no accept/reject-revisions API; implementing one would be an adapter-side algorithm
Unsupported
dolanmiu/docx can generate revision markup but exposes no API to accept or reject existing tracked changes
FailUnsupported
docx-rs can generate revision markup but exposes no API to accept or reject existing tracked changes
rejectNestedDeletionInsideInsertion
Rejecting nested deletion inside insertion removes the whole insertion
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.13.5.18 (ins (Inserted Run Content))
PassUnsupported
python-docx has no tracked-changes (revision) API
PassUnsupported
the Open XML SDK is a typed DOM over the package with no accept/reject-revisions API; implementing one would be an adapter-side algorithm
Unsupported
dolanmiu/docx can generate revision markup but exposes no API to accept or reject existing tracked changes
PassUnsupported
docx-rs can generate revision markup but exposes no API to accept or reject existing tracked changes
rejectParagraphPropertiesChangeRestoresPrior
Rejecting a paragraph-properties change restores the prior properties
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.13.5.29 (pPrChange (Revision Information for Paragraph Properties))
PassUnsupported
python-docx has no tracked-changes (revision) API
FailUnsupported
the Open XML SDK is a typed DOM over the package with no accept/reject-revisions API; implementing one would be an adapter-side algorithm
Unsupported
dolanmiu/docx can generate revision markup but exposes no API to accept or reject existing tracked changes
FailUnsupported
docx-rs can generate revision markup but exposes no API to accept or reject existing tracked changes
comments
ECMA conformance: safe-docx 0/3 · python-docx 2/3 · libreoffice 0/3 · openxml-sdk 0/3 · dolanmiu-docx 0/3 · superdoc-sdk 0/3 · docx-rs 0/3
removeAllCommentsStripsAnchorsKeepsText
Removing all comments strips comment anchors while keeping the commented text
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.13.4.5 (commentReference (Comment Content Reference Mark))
Unsupported
safe-docx adapter does not implement operation 'removeAllComments'
Unsupported
python-docx exposes no public API to remove all comments and anchors
Unsupported
libreoffice adapter does not implement operation 'removeAllComments'
Unsupported
openxml-sdk adapter does not implement operation 'removeAllComments'
Unsupported
dolanmiu-docx adapter does not implement operation 'removeAllComments'
Unsupported
superdoc-sdk adapter does not implement operation 'removeAllComments'
Unsupported
docx-rs adapter does not implement operation 'removeAllComments'
find-replace
ECMA conformance: safe-docx 2/2 · python-docx 1/2 · libreoffice 2/2 · openxml-sdk 1/2 · dolanmiu-docx 0/2 · superdoc-sdk 2/2 · docx-rs 0/2
replaceFirstOccurrencePreservesOffsets
Replacing the first occurrence places the new text at the matched offset
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.3.3.31 (t (Text))
PassPassPassPassUnsupported
dolanmiu/docx patchDocument targets explicit patch placeholders; protocol requires arbitrary paragraph-local literal search, which would be an adapter-side algorithm
PassUnsupported
docx-rs exposes no public existing-document text replacement API; implementing this would require adapter-side XML surgery
replaceTextAcrossRunBoundary
Replacing text spanning a run boundary places the replacement at the matched offset
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.3.3.31 (t (Text))
PassUnsupported
match spans run boundaries; the python-docx adapter only performs intra-run replacement/formatting (glue, not algorithms)
PassUnsupported
first occurrence spans w:t boundaries; the openxml-sdk adapter only performs intra-w:t replacement (glue, not algorithms)
Unsupported
dolanmiu/docx patchDocument targets explicit patch placeholders; protocol requires arbitrary paragraph-local literal search, which would be an adapter-side algorithm
PassUnsupported
docx-rs exposes no public existing-document text replacement API; implementing this would require adapter-side XML surgery
tables
ECMA conformance: safe-docx 1/5 · python-docx 2/5 · libreoffice 1/5 · openxml-sdk 1/5 · dolanmiu-docx 0/5 · superdoc-sdk 1/5 · docx-rs 0/5
Metamorphic invariants: safe-docx 1/1 · python-docx 0/1 · libreoffice 1/1 · openxml-sdk 1/1 · dolanmiu-docx 0/1 · superdoc-sdk 1/1 · docx-rs 0/1
replaceTextInsideTableCellPreservesStructure
Replacing text inside a table cell preserves table structure and adjacent cell text
Metamorphic invariant (not ECMA conformance)
ECMA-376 edition 5, Part 1 § 17.4.66 (tc (Table Cell))
Invariant passError
exit 1: findText not present in any paragraph: 'thirty'
Invariant passInvariant passUnsupported
dolanmiu/docx patchDocument targets explicit patch placeholders; protocol requires arbitrary paragraph-local literal search, which would be an adapter-side algorithm
Invariant passUnsupported
docx-rs exposes no public existing-document text replacement API; implementing this would require adapter-side XML surgery
replaceTextInsideTableCellUpdatesTargetText
Replacing text inside a table cell updates the target text
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.3.3.31 (t (Text))
PassError
exit 1: findText not present in any paragraph: 'thirty'
PassPassUnsupported
dolanmiu/docx patchDocument targets explicit patch placeholders; protocol requires arbitrary paragraph-local literal search, which would be an adapter-side algorithm
PassUnsupported
docx-rs exposes no public existing-document text replacement API; implementing this would require adapter-side XML surgery
styles-numbering
ECMA conformance: safe-docx 0/5 · python-docx 4/5 · libreoffice 0/5 · openxml-sdk 0/5 · dolanmiu-docx 1/5 · superdoc-sdk 0/5 · docx-rs 0/5
setDefaultFooterTextAddsFooterReference
Setting default footer text adds a default footer reference and footer part
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.10.2 (footerReference (Footer Reference))
Unsupported
safe-docx adapter does not implement operation 'setDefaultFooterText'
Error
exit 1: Traceback (most recent call last): File "/home/runner/work/docx-platform-tests/docx-platform-tests/adapters/python-docx/run_adapter.py", line 258, in <module> sys.exit(main()) ^^^^^^ File "/home/runner/work/docx-platform-tests/docx-platform-tests/adapters/python-docx/run_adapter.py", line 249, in main document.sections[0].footer.paragraphs[0].text = operation["footerText"] ~~~~~~~~~~~~~~~~~^^^ File "/home/runner/work/docx-platform-tests/docx-platform-tests/adapters/python-docx/.venv/lib/python3.12/site-packages/docx/section.py", line 279, in __getitem__ return Section(self._document_elm.sectPr_lst[key], self._document_part) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^ IndexError: list index out of range
Unsupported
libreoffice adapter does not implement operation 'setDefaultFooterText'
Unsupported
openxml-sdk adapter does not implement operation 'setDefaultFooterText'
Unsupported
dolanmiu-docx adapter does not implement operation 'setDefaultFooterText'
Unsupported
superdoc-sdk adapter does not implement operation 'setDefaultFooterText'
Unsupported
docx-rs adapter does not implement operation 'setDefaultFooterText'
tables
ECMA conformance: safe-docx 1/5 · python-docx 2/5 · libreoffice 1/5 · openxml-sdk 1/5 · dolanmiu-docx 0/5 · superdoc-sdk 1/5 · docx-rs 0/5
Metamorphic invariants: safe-docx 1/1 · python-docx 0/1 · libreoffice 1/1 · openxml-sdk 1/1 · dolanmiu-docx 0/1 · superdoc-sdk 1/1 · docx-rs 0/1
setTableCellTextReplacesCellContentOnly
Setting table cell text replaces only the addressed cell content
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.4.66 (tc (Table Cell))
Unsupported
safe-docx adapter does not implement operation 'setTableCellText'
Error
exit 1: Traceback (most recent call last): File "/home/runner/work/docx-platform-tests/docx-platform-tests/adapters/python-docx/run_adapter.py", line 258, in <module> sys.exit(main()) ^^^^^^ File "/home/runner/work/docx-platform-tests/docx-platform-tests/adapters/python-docx/run_adapter.py", line 178, in main cell = document.tables[int(operation["tableIndex"])].cell( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/runner/work/docx-platform-tests/docx-platform-tests/adapters/python-docx/.venv/lib/python3.12/site-packages/docx/table.py", line 90, in cell cell_idx = col_idx + (row_idx * self._column_count) ^^^^^^^^^^^^^^^^^^ File "/home/runner/work/docx-platform-tests/docx-platform-tests/adapters/python-docx/.venv/lib/python3.12/site-packages/docx/table.py", line 185, in _column_count return self._tbl.col_count ^^^^^^^^^^^^^^^^^^^ File "/home/runner/work/docx-platform-tests/docx-platform-tests/adapters/python-docx/.venv/lib/python3.12/site-packages/docx/oxml/table.py", line 178, in col_count return len(self.tblGrid.gridCol_lst) ^^^^^^^^^^^^ File "/home/runner/work/docx-platform-tests/docx-platform-tests/adapters/python-docx/.venv/lib/python3.12/site-packages/docx/oxml/xmlchemy.py", line 502, in get_child_element raise InvalidXmlError( docx.oxml.exceptions.InvalidXmlError: required ``<w:tblGrid>`` child element not present
Unsupported
libreoffice adapter does not implement operation 'setTableCellText'
Unsupported
openxml-sdk adapter does not implement operation 'setTableCellText'
Unsupported
dolanmiu-docx adapter does not implement operation 'setTableCellText'
Unsupported
superdoc-sdk adapter does not implement operation 'setTableCellText'
Unsupported
docx-rs adapter does not implement operation 'setTableCellText'
content-controls
ECMA conformance: safe-docx 2/2 · python-docx 2/2 · libreoffice 1/2 · openxml-sdk 2/2 · dolanmiu-docx 0/2 · superdoc-sdk 0/2 · docx-rs 0/2
Metamorphic invariants: safe-docx 2/2 · python-docx 2/2 · libreoffice 0/2 · openxml-sdk 2/2 · dolanmiu-docx 0/2 · superdoc-sdk 0/2 · docx-rs 0/2
unrelatedTextEditPreservesBlockContentControlStructure
An unrelated text edit preserves one block content control with two controlled paragraphs
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.5.2.29 (sdt (Block-Level Structured Document Tag))
PassPassFailPassUnsupported
dolanmiu/docx patchDocument targets explicit patch placeholders; protocol requires arbitrary paragraph-local literal search, which would be an adapter-side algorithm
FailUnsupported
docx-rs exposes no public existing-document text replacement API; implementing this would require adapter-side XML surgery
unrelatedTextEditPreservesInlineContentControlStructure
An unrelated text edit preserves one inline content control with valid known structure
ECMA conformance
ECMA-376 edition 5, Part 1 § 17.5.2.31 (sdt (Inline-Level Structured Document Tag))
PassPassPassPassUnsupported
dolanmiu/docx patchDocument targets explicit patch placeholders; protocol requires arbitrary paragraph-local literal search, which would be an adapter-side algorithm
FailUnsupported
docx-rs exposes no public existing-document text replacement API; implementing this would require adapter-side XML surgery
unrelatedTextEditPreservesOpaqueBlockContentControl
Suite-declared non-normative preservation of opaque sentinels on one block content control
Metamorphic invariant (not ECMA conformance)
ECMA-376 edition 5, Part 3 § 7.2 (Ignorable Attribute)
Invariant passInvariant passInvariant failInvariant passUnsupported
dolanmiu/docx patchDocument targets explicit patch placeholders; protocol requires arbitrary paragraph-local literal search, which would be an adapter-side algorithm
Invariant failUnsupported
docx-rs exposes no public existing-document text replacement API; implementing this would require adapter-side XML surgery
unrelatedTextEditPreservesOpaqueInlineContentControl
An unrelated text edit preserves declared opaque sentinels on one inline content control
Metamorphic invariant (not ECMA conformance)
ECMA-376 edition 5, Part 3 § 7.2 (Ignorable Attribute)
Invariant passInvariant passInvariant failInvariant passUnsupported
dolanmiu/docx patchDocument targets explicit patch placeholders; protocol requires arbitrary paragraph-local literal search, which would be an adapter-side algorithm
Invariant failUnsupported
docx-rs exposes no public existing-document text replacement API; implementing this would require adapter-side XML surgery

Data: results/latest.json · Schema: results/results.schema.json · Capability-axis aggregation · Suite, scenario DSL, and adapter protocol: open-agreements/docx-platform-tests (Apache-2.0) · Canonical live matrix: open-agreements.github.io