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.
| Scenario | safe-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 | |||||||
acceptDeletedParagraphMarkMergesParagraphsAccepting a deleted paragraph mark merges the paragraph with the following paragraph ECMA-376 edition 5, Part 1 § 17.13.5.15 (del (Deleted Paragraph)) | Pass | Unsupported python-docx has no tracked-changes (revision) API | Pass | 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 | 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 |
acceptDeletedTableRowRemovesEntireRowAccepting a deleted table row removes the entire row ECMA-376 edition 5, Part 1 § 17.13.5.12 (del (Deleted Table Row)) | Fail | 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 |
acceptDeletionsRemovesDelContentAccepting deletions removes w:del wrappers and their content ECMA-376 edition 5, Part 1 § 17.13.5.14 (del (Deleted Run Content)) | Pass | 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 | Pass (divergent serialization) | Unsupported docx-rs can generate revision markup but exposes no API to accept or reject existing tracked changes |
acceptFormattingChangeKeepsNewRunPropertiesAccepting formatting changes keeps current run properties ECMA-376 edition 5, Part 1 § 17.13.5.31 (rPrChange (Revision Information for Run Properties)) | Pass | 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 | Pass (divergent serialization) | Unsupported docx-rs can generate revision markup but exposes no API to accept or reject existing tracked changes |
acceptInsertionsUnwrapsInsWrappersAccepting insertions unwraps w:ins and keeps run content ECMA-376 edition 5, Part 1 § 17.13.5.18 (ins (Inserted Run Content)) | Pass | 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 | Pass (divergent serialization) | Unsupported docx-rs can generate revision markup but exposes no API to accept or reject existing tracked changes |
acceptMoveRemovesSourceAndUnwrapsDestinationAccepting 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)) | Pass | 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 | Fail | Unsupported docx-rs can generate revision markup but exposes no API to accept or reject existing tracked changes |
acceptNestedDeletionInsideInsertionAccepting nested deletion inside insertion keeps surviving inserted text ECMA-376 edition 5, Part 1 § 17.13.5.18 (ins (Inserted Run Content)) | Pass | Unsupported python-docx has no tracked-changes (revision) API | Pass | 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 | Unsupported 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 | |||||||
addCommentBracketsRangeWithMatchingIdsAdding 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' | Pass | Unsupported 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 | |||||||
appendParagraphPreservesExistingContentAppending 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' | Pass | Unsupported 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 | |||||||
appendTableRowExtendsRowCountKeepingGridAppending 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' | Pass | Unsupported 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 | |||||||
applyNamedParagraphStyleSetsPStyleReferenceApplying 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' | Pass | Unsupported 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' |
applyNumberingToParagraphAttachesNumPrApplying 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' | Pass | Unsupported 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 | |||||||
commentPartRecordsAuthorInitialsAndTextAdding 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' | Pass | Unsupported 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 | |||||||
composeFormattedRunCarriesBoldItalicSizeComposing 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' | Pass | Unsupported libreoffice adapter does not implement operation 'composeDocumentWithParagraphs' | Unsupported openxml-sdk adapter does not implement operation 'composeDocumentWithParagraphs' | Pass | Unsupported superdoc-sdk adapter does not implement operation 'composeDocumentWithParagraphs' | Unsupported docx-rs adapter does not implement operation 'composeDocumentWithParagraphs' |
composeHeaderTextAddsSectionHeaderReferenceComposing 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' | Pass | Unsupported libreoffice adapter does not implement operation 'composeDocumentWithHeaderText' | Unsupported openxml-sdk adapter does not implement operation 'composeDocumentWithHeaderText' | Pass | Unsupported superdoc-sdk adapter does not implement operation 'composeDocumentWithHeaderText' | Unsupported docx-rs adapter does not implement operation 'composeDocumentWithHeaderText' |
composeHyperlinkCreatesRelationshipReferencedLinkComposing 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' | Pass | Unsupported 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 | |||||||
composeNumberedListResolvesToDecimalFormatComposing 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' | Pass | Unsupported libreoffice adapter does not implement operation 'composeDocumentWithNumberedList' | Unsupported openxml-sdk adapter does not implement operation 'composeDocumentWithNumberedList' | Pass | Unsupported 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 | |||||||
composeParagraphsProduceTextRunsComposing 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' | Pass | Unsupported libreoffice adapter does not implement operation 'composeDocumentWithParagraphs' | Unsupported openxml-sdk adapter does not implement operation 'composeDocumentWithParagraphs' | Pass | Unsupported superdoc-sdk adapter does not implement operation 'composeDocumentWithParagraphs' | Unsupported docx-rs adapter does not implement operation 'composeDocumentWithParagraphs' |
composeTableProducesGridMatchingCellMatrixComposing 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' | Pass | Unsupported libreoffice adapter does not implement operation 'composeDocumentWithTable' | Unsupported openxml-sdk adapter does not implement operation 'composeDocumentWithTable' | Pass | Unsupported 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 | |||||||
deleteTableRowRemovesRowAndContentDeleting 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 | |||||||
directFormattingDoesNotBakeIntoStyleDefinitionDirect 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' | Pass | Unsupported 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 | |||||||
horizontalMergeSetsGridSpanKeepingGridHorizontally 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' | Pass | Unsupported 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 | |||||||
insertParagraphAfterAnchorShiftsSubsequentInserting 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' | Pass | Unsupported 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 | |||||||
rejectDeletionsRestoresDelContentRejecting deletions restores w:delText content to body text ECMA-376 edition 5, Part 1 § 17.13.5.14 (del (Deleted Run Content)) | Pass | 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 | Pass (divergent serialization) | Unsupported docx-rs can generate revision markup but exposes no API to accept or reject existing tracked changes |
rejectFormattingChangeRestoresPriorRunPropertiesRejecting formatting changes restores prior run properties ECMA-376 edition 5, Part 1 § 17.13.5.31 (rPrChange (Revision Information for Run Properties)) | Pass | 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 | Pass (divergent serialization) | Unsupported docx-rs can generate revision markup but exposes no API to accept or reject existing tracked changes |
rejectInsertedParagraphMarkMergesParagraphsRejecting 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)) | Pass | Unsupported python-docx has no tracked-changes (revision) API | Pass | 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 | 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 |
rejectInsertedTableRowRemovesEntireRowRejecting an inserted table row removes the entire row ECMA-376 edition 5, Part 1 § 17.13.5.17 (ins (Inserted Table Row)) | Fail | 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 |
rejectInsertionsRemovesInsContentRejecting insertions removes w:ins wrappers and their run content ECMA-376 edition 5, Part 1 § 17.13.5.18 (ins (Inserted Run Content)) | Pass | 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 | Pass (divergent serialization) | Unsupported docx-rs can generate revision markup but exposes no API to accept or reject existing tracked changes |
rejectMoveRestoresSourceRemovesDestinationRejecting 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)) | Pass | 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 | Fail | Unsupported docx-rs can generate revision markup but exposes no API to accept or reject existing tracked changes |
rejectNestedDeletionInsideInsertionRejecting nested deletion inside insertion removes the whole insertion ECMA-376 edition 5, Part 1 § 17.13.5.18 (ins (Inserted Run Content)) | Pass | Unsupported python-docx has no tracked-changes (revision) API | Pass | 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 | Unsupported docx-rs can generate revision markup but exposes no API to accept or reject existing tracked changes |
rejectParagraphPropertiesChangeRestoresPriorRejecting a paragraph-properties change restores the prior properties ECMA-376 edition 5, Part 1 § 17.13.5.29 (pPrChange (Revision Information for Paragraph Properties)) | Pass | Unsupported python-docx has no tracked-changes (revision) API | Fail | 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 | Fail | Unsupported 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 | |||||||
removeAllCommentsStripsAnchorsKeepsTextRemoving 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 | |||||||
replaceFirstOccurrencePreservesOffsetsReplacing the first occurrence places the new text at the matched offset ECMA-376 edition 5, Part 1 § 17.3.3.31 (t (Text)) | Pass | Pass | Pass | Pass | Unsupported dolanmiu/docx patchDocument targets explicit patch placeholders; protocol requires arbitrary paragraph-local literal search, which would be an adapter-side algorithm | Pass | Unsupported docx-rs exposes no public existing-document text replacement API; implementing this would require adapter-side XML surgery |
replaceTextAcrossRunBoundaryReplacing text spanning a run boundary places the replacement at the matched offset ECMA-376 edition 5, Part 1 § 17.3.3.31 (t (Text)) | Pass | Unsupported match spans run boundaries; the python-docx adapter only performs intra-run replacement/formatting (glue, not algorithms) | Pass | Unsupported 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 | Pass | Unsupported 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 | |||||||
replaceTextInsideTableCellPreservesStructureReplacing text inside a table cell preserves table structure and adjacent cell text ECMA-376 edition 5, Part 1 § 17.3.3.31 (t (Text)) | Fail | Error exit 1: findText not present in any paragraph: 'thirty' | Pass | Pass | Unsupported dolanmiu/docx patchDocument targets explicit patch placeholders; protocol requires arbitrary paragraph-local literal search, which would be an adapter-side algorithm | Pass | Unsupported 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 | |||||||
setDefaultFooterTextAddsFooterReferenceSetting 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 | |||||||
setTableCellTextReplacesCellContentOnlySetting 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