docx-platform-tests results

Cross-implementation conformance results for WordprocessingML (.docx), in the web-platform-tests tradition. Each scenario asserts behavior derivable from the cited ECMA-376 clause — not from any one library — and runs unchanged against every 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.15.0+git.bbaa1e694d20
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
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-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-376 edition 5, Part 1 § 17.13.5.12 (del (Deleted Table Row))
FailUnsupported
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-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-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-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-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-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
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-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
safe-docx 0/7 · python-docx 6/7 · libreoffice 0/7 · openxml-sdk 0/7 · dolanmiu-docx 5/7 · superdoc-sdk 0/7 · docx-rs 0/7
appendParagraphPreservesExistingContent
Appending a paragraph preserves existing content and adds a trailing paragraph
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'
tables
safe-docx 0/5 · python-docx 2/5 · libreoffice 1/5 · openxml-sdk 1/5 · dolanmiu-docx 0/5 · superdoc-sdk 1/5 · docx-rs 0/5
appendTableRowExtendsRowCountKeepingGrid
Appending a table row extends row count while keeping the cell grid width
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
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-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-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
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-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
safe-docx 0/7 · python-docx 6/7 · libreoffice 0/7 · openxml-sdk 0/7 · dolanmiu-docx 5/7 · superdoc-sdk 0/7 · docx-rs 0/7
composeFormattedRunCarriesBoldItalicSize
Composing a formatted run carries bold italic and font size properties
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-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-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
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-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
safe-docx 0/7 · python-docx 6/7 · libreoffice 0/7 · openxml-sdk 0/7 · dolanmiu-docx 5/7 · superdoc-sdk 0/7 · docx-rs 0/7
composeParagraphsProduceTextRuns
Composing paragraphs produces one paragraph per requested text item
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-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
safe-docx 0/5 · python-docx 2/5 · libreoffice 1/5 · openxml-sdk 1/5 · dolanmiu-docx 0/5 · superdoc-sdk 1/5 · docx-rs 0/5
deleteTableRowRemovesRowAndContent
Deleting a table row removes that row and its distinctive content
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
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-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
safe-docx 0/5 · python-docx 2/5 · libreoffice 1/5 · openxml-sdk 1/5 · dolanmiu-docx 0/5 · superdoc-sdk 1/5 · docx-rs 0/5
horizontalMergeSetsGridSpanKeepingGrid
Horizontally merging cells records gridSpan while preserving the table grid
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
safe-docx 0/7 · python-docx 6/7 · libreoffice 0/7 · openxml-sdk 0/7 · dolanmiu-docx 5/7 · superdoc-sdk 0/7 · docx-rs 0/7
insertParagraphAfterAnchorShiftsSubsequent
Inserting a paragraph after an anchor shifts the following paragraph later
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
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-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-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-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-376 edition 5, Part 1 § 17.13.5.17 (ins (Inserted Table Row))
FailUnsupported
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-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-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-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-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
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-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
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-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-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
safe-docx 0/5 · python-docx 2/5 · libreoffice 1/5 · openxml-sdk 1/5 · dolanmiu-docx 0/5 · superdoc-sdk 1/5 · docx-rs 0/5
replaceTextInsideTableCellPreservesStructure
Replacing text inside a table cell preserves table structure and adjacent cell text
ECMA-376 edition 5, Part 1 § 17.3.3.31 (t (Text))
FailError
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
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-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
safe-docx 0/5 · python-docx 2/5 · libreoffice 1/5 · openxml-sdk 1/5 · dolanmiu-docx 0/5 · superdoc-sdk 1/5 · docx-rs 0/5
setTableCellTextReplacesCellContentOnly
Setting table cell text replaces only the addressed cell content
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'

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