{
  "runTimestamp": "2026-06-11T11:09:57.856Z",
  "dslVersion": "1.1",
  "protocolVersion": 1,
  "implementations": [
    {
      "adapterName": "safe-docx",
      "adapterVersion": "0.11.0+git.f5a16a3ab1f9"
    },
    {
      "adapterName": "python-docx",
      "adapterVersion": "1.2.0"
    },
    {
      "adapterName": "libreoffice",
      "adapterVersion": "LibreOffice 24.2.7.2 420(Build:2)"
    },
    {
      "adapterName": "openxml-sdk",
      "adapterVersion": "DocumentFormat.OpenXml 3.5.1"
    }
  ],
  "results": [
    {
      "scenarioId": "acceptDeletedParagraphMarkMergesParagraphs",
      "scenarioTitle": "Accepting a deleted paragraph mark merges the paragraph with the following paragraph",
      "specCitation": {
        "standard": "ECMA-376",
        "edition": 5,
        "part": 1,
        "section": "17.13.5.15",
        "clauseTitle": "del (Deleted Paragraph)"
      },
      "outcomes": {
        "safe-docx": {
          "status": "fail",
          "assertionResults": [
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:body/w:p matched 1 node(s); expected 1"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:pPr/w:rPr/w:del matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": false,
              "detail": "'First half second half' not found; expected offset 0. Projection: \"second half\""
            }
          ]
        },
        "python-docx": {
          "status": "unsupported",
          "reason": "python-docx has no tracked-changes (revision) API"
        },
        "libreoffice": {
          "status": "pass",
          "assertionResults": [
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:body/w:p matched 1 node(s); expected 1"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:pPr/w:rPr/w:del matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'First half second half' found at offset 0"
            }
          ]
        },
        "openxml-sdk": {
          "status": "unsupported",
          "reason": "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"
        }
      }
    },
    {
      "scenarioId": "acceptDeletionsRemovesDelContent",
      "scenarioTitle": "Accepting deletions removes w:del wrappers and their content",
      "specCitation": {
        "standard": "ECMA-376",
        "edition": 5,
        "part": 1,
        "section": "17.13.5.14",
        "clauseTitle": "del (Deleted Run Content)"
      },
      "outcomes": {
        "safe-docx": {
          "status": "pass",
          "assertionResults": [
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:del matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:delText matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'Kept text' found at offset 0"
            },
            {
              "assertionKind": "canonicalXmlEquals",
              "passed": true,
              "detail": "canonical forms are identical"
            }
          ]
        },
        "python-docx": {
          "status": "unsupported",
          "reason": "python-docx has no tracked-changes (revision) API"
        },
        "libreoffice": {
          "status": "pass-divergent",
          "assertionResults": [
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:del matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:delText matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'Kept text' found at offset 0"
            },
            {
              "assertionKind": "canonicalXmlEquals",
              "passed": false,
              "detail": "canonical forms differ.\n--- expected\n{\n \"kind\": \"element\",\n \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}document\",\n \"attributes\": [],\n \"children\": [\n  {\n   \"kind\": \"element\",\n   \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}body\",\n   \"attributes\": [],\n   \"children\": [\n    {\n     \"kind\": \"element\",\n     \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}p\",\n     \"attributes\": [],\n     \"children\": [\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}r\",\n       \"attributes\": [],\n       \"children\": [\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}t\",\n         \"attributes\": [],\n         \"children\": [\n          {\n           \"kind\": \"text\",\n           \"text\": \"Kept text \"\n          }\n         ]\n        }\n       ]\n      }\n     ]\n    }\n   ]\n  }\n ]\n}\n--- actual\n{\n \"kind\": \"element\",\n \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}document\",\n \"attributes\": [\n  [\n   \"{http://schemas.openxmlformats.org/markup-compatibility/2006}Ignorable\",\n   \"w14 wp14 w15\"\n  ]\n ],\n \"children\": [\n  {\n   \"kind\": \"element\",\n   \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}body\",\n   \"attributes\": [],\n   \"children\": [\n    {\n     \"kind\": \"element\",\n     \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}p\",\n     \"attributes\": [],\n     \"children\": [\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pPr\",\n       \"attributes\": [],\n       \"children\": [\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pStyle\",\n         \"attributes\": [\n          [\n           \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n           \"Normal\"\n          ]\n         ],\n         \"children\": []\n        },\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}bidi\",\n         \"attributes\": [\n          [\n           \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n           \"0\"\n          ]\n         ],\n         \"children\": []\n        },\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}jc\",\n         \"attributes\": [\n          [\n           \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n           \"left\"\n          ]\n         ],\n         \"children\": []\n        },\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}rPr\",\n         \"attributes\": [],\n         \"children\": []\n        }\n       ]\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}r\",\n       \"attributes\": [],\n       \"children\": [\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}rPr\",\n         \"attributes\": [],\n         \"children\": []\n        },\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}t\",\n         \"attributes\": [],\n         \"children\": [\n          {\n           \"kind\": \"text\",\n           \"text\": \"Kept text \"\n          }\n         ]\n        }\n       ]\n      }\n     ]\n    },\n    {\n     \"kind\": \"element\",\n     \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}sectPr\",\n     \"attributes\": [],\n     \"children\": [\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}type\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n         \"nextPage\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pgSz\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}h\",\n         \"15840\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}w\",\n         \"12240\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pgMar\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}bottom\",\n         \"1440\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}footer\",\n         \"0\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}gutter\",\n         \"0\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}header\",\n         \"0\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}left\",\n         \"1440\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}right\",\n         \"1440\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}top\",\n         \"1440\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pgNumType\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}fmt\",\n         \"decimal\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}formProt\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n         \"false\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}textDirection\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n         \"lrTb\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}docGrid\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}charSpace\",\n         \"4096\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}linePitch\",\n         \"100\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}type\",\n         \"default\"\n        ]\n       ],\n       \"children\": []\n      }\n     ]\n    }\n   ]\n  }\n ]\n}"
            }
          ]
        },
        "openxml-sdk": {
          "status": "unsupported",
          "reason": "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"
        }
      }
    },
    {
      "scenarioId": "acceptFormattingChangeKeepsNewRunProperties",
      "scenarioTitle": "Accepting formatting changes keeps current run properties",
      "specCitation": {
        "standard": "ECMA-376",
        "edition": 5,
        "part": 1,
        "section": "17.13.5.31",
        "clauseTitle": "rPrChange (Revision Information for Run Properties)"
      },
      "outcomes": {
        "safe-docx": {
          "status": "pass",
          "assertionResults": [
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:rPrChange matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryExists",
              "passed": true,
              "detail": "//w:r/w:rPr/w:b matched 1 node(s); expected at least 1"
            },
            {
              "assertionKind": "xpathQueryExists",
              "passed": true,
              "detail": "//w:r/w:rPr/w:i matched 1 node(s); expected at least 1"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'Styled text' found at offset 0"
            },
            {
              "assertionKind": "canonicalXmlEquals",
              "passed": true,
              "detail": "canonical forms are identical"
            }
          ]
        },
        "python-docx": {
          "status": "unsupported",
          "reason": "python-docx has no tracked-changes (revision) API"
        },
        "libreoffice": {
          "status": "pass-divergent",
          "assertionResults": [
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:rPrChange matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryExists",
              "passed": true,
              "detail": "//w:r/w:rPr/w:b matched 1 node(s); expected at least 1"
            },
            {
              "assertionKind": "xpathQueryExists",
              "passed": true,
              "detail": "//w:r/w:rPr/w:i matched 1 node(s); expected at least 1"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'Styled text' found at offset 0"
            },
            {
              "assertionKind": "canonicalXmlEquals",
              "passed": false,
              "detail": "canonical forms differ.\n--- expected\n{\n \"kind\": \"element\",\n \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}document\",\n \"attributes\": [],\n \"children\": [\n  {\n   \"kind\": \"element\",\n   \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}body\",\n   \"attributes\": [],\n   \"children\": [\n    {\n     \"kind\": \"element\",\n     \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}p\",\n     \"attributes\": [],\n     \"children\": [\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}r\",\n       \"attributes\": [],\n       \"children\": [\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}rPr\",\n         \"attributes\": [],\n         \"children\": [\n          {\n           \"kind\": \"element\",\n           \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}b\",\n           \"attributes\": [],\n           \"children\": []\n          },\n          {\n           \"kind\": \"element\",\n           \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}i\",\n           \"attributes\": [],\n           \"children\": []\n          }\n         ]\n        },\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}t\",\n         \"attributes\": [],\n         \"children\": [\n          {\n           \"kind\": \"text\",\n           \"text\": \"Styled text\"\n          }\n         ]\n        }\n       ]\n      }\n     ]\n    }\n   ]\n  }\n ]\n}\n--- actual\n{\n \"kind\": \"element\",\n \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}document\",\n \"attributes\": [\n  [\n   \"{http://schemas.openxmlformats.org/markup-compatibility/2006}Ignorable\",\n   \"w14 wp14 w15\"\n  ]\n ],\n \"children\": [\n  {\n   \"kind\": \"element\",\n   \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}body\",\n   \"attributes\": [],\n   \"children\": [\n    {\n     \"kind\": \"element\",\n     \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}p\",\n     \"attributes\": [],\n     \"children\": [\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pPr\",\n       \"attributes\": [],\n       \"children\": [\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pStyle\",\n         \"attributes\": [\n          [\n           \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n           \"Normal\"\n          ]\n         ],\n         \"children\": []\n        },\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}bidi\",\n         \"attributes\": [\n          [\n           \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n           \"0\"\n          ]\n         ],\n         \"children\": []\n        },\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}jc\",\n         \"attributes\": [\n          [\n           \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n           \"left\"\n          ]\n         ],\n         \"children\": []\n        },\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}rPr\",\n         \"attributes\": [],\n         \"children\": []\n        }\n       ]\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}r\",\n       \"attributes\": [],\n       \"children\": [\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}rPr\",\n         \"attributes\": [],\n         \"children\": [\n          {\n           \"kind\": \"element\",\n           \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}b\",\n           \"attributes\": [],\n           \"children\": []\n          },\n          {\n           \"kind\": \"element\",\n           \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}i\",\n           \"attributes\": [],\n           \"children\": []\n          }\n         ]\n        },\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}t\",\n         \"attributes\": [],\n         \"children\": [\n          {\n           \"kind\": \"text\",\n           \"text\": \"Styled text\"\n          }\n         ]\n        }\n       ]\n      }\n     ]\n    },\n    {\n     \"kind\": \"element\",\n     \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}sectPr\",\n     \"attributes\": [],\n     \"children\": [\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}type\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n         \"nextPage\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pgSz\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}h\",\n         \"15840\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}w\",\n         \"12240\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pgMar\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}bottom\",\n         \"1440\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}footer\",\n         \"0\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}gutter\",\n         \"0\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}header\",\n         \"0\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}left\",\n         \"1440\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}right\",\n         \"1440\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}top\",\n         \"1440\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pgNumType\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}fmt\",\n         \"decimal\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}formProt\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n         \"false\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}textDirection\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n         \"lrTb\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}docGrid\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}charSpace\",\n         \"4096\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}linePitch\",\n         \"100\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}type\",\n         \"default\"\n        ]\n       ],\n       \"children\": []\n      }\n     ]\n    }\n   ]\n  }\n ]\n}"
            }
          ]
        },
        "openxml-sdk": {
          "status": "unsupported",
          "reason": "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"
        }
      }
    },
    {
      "scenarioId": "acceptInsertionsUnwrapsInsWrappers",
      "scenarioTitle": "Accepting insertions unwraps w:ins and keeps run content",
      "specCitation": {
        "standard": "ECMA-376",
        "edition": 5,
        "part": 1,
        "section": "17.13.5.18",
        "clauseTitle": "ins (Inserted Run Content)"
      },
      "outcomes": {
        "safe-docx": {
          "status": "pass",
          "assertionResults": [
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:ins matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'Kept text Inserted text' found at offset 0"
            },
            {
              "assertionKind": "canonicalXmlEquals",
              "passed": true,
              "detail": "canonical forms are identical"
            }
          ]
        },
        "python-docx": {
          "status": "unsupported",
          "reason": "python-docx has no tracked-changes (revision) API"
        },
        "libreoffice": {
          "status": "pass-divergent",
          "assertionResults": [
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:ins matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'Kept text Inserted text' found at offset 0"
            },
            {
              "assertionKind": "canonicalXmlEquals",
              "passed": false,
              "detail": "canonical forms differ.\n--- expected\n{\n \"kind\": \"element\",\n \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}document\",\n \"attributes\": [],\n \"children\": [\n  {\n   \"kind\": \"element\",\n   \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}body\",\n   \"attributes\": [],\n   \"children\": [\n    {\n     \"kind\": \"element\",\n     \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}p\",\n     \"attributes\": [],\n     \"children\": [\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}r\",\n       \"attributes\": [],\n       \"children\": [\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}t\",\n         \"attributes\": [],\n         \"children\": [\n          {\n           \"kind\": \"text\",\n           \"text\": \"Kept text Inserted text\"\n          }\n         ]\n        }\n       ]\n      }\n     ]\n    }\n   ]\n  }\n ]\n}\n--- actual\n{\n \"kind\": \"element\",\n \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}document\",\n \"attributes\": [\n  [\n   \"{http://schemas.openxmlformats.org/markup-compatibility/2006}Ignorable\",\n   \"w14 wp14 w15\"\n  ]\n ],\n \"children\": [\n  {\n   \"kind\": \"element\",\n   \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}body\",\n   \"attributes\": [],\n   \"children\": [\n    {\n     \"kind\": \"element\",\n     \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}p\",\n     \"attributes\": [],\n     \"children\": [\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pPr\",\n       \"attributes\": [],\n       \"children\": [\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pStyle\",\n         \"attributes\": [\n          [\n           \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n           \"Normal\"\n          ]\n         ],\n         \"children\": []\n        },\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}bidi\",\n         \"attributes\": [\n          [\n           \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n           \"0\"\n          ]\n         ],\n         \"children\": []\n        },\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}jc\",\n         \"attributes\": [\n          [\n           \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n           \"left\"\n          ]\n         ],\n         \"children\": []\n        },\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}rPr\",\n         \"attributes\": [],\n         \"children\": []\n        }\n       ]\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}r\",\n       \"attributes\": [],\n       \"children\": [\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}rPr\",\n         \"attributes\": [],\n         \"children\": []\n        },\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}t\",\n         \"attributes\": [],\n         \"children\": [\n          {\n           \"kind\": \"text\",\n           \"text\": \"Kept text Inserted text\"\n          }\n         ]\n        }\n       ]\n      }\n     ]\n    },\n    {\n     \"kind\": \"element\",\n     \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}sectPr\",\n     \"attributes\": [],\n     \"children\": [\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}type\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n         \"nextPage\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pgSz\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}h\",\n         \"15840\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}w\",\n         \"12240\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pgMar\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}bottom\",\n         \"1440\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}footer\",\n         \"0\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}gutter\",\n         \"0\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}header\",\n         \"0\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}left\",\n         \"1440\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}right\",\n         \"1440\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}top\",\n         \"1440\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pgNumType\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}fmt\",\n         \"decimal\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}formProt\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n         \"false\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}textDirection\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n         \"lrTb\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}docGrid\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}charSpace\",\n         \"4096\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}linePitch\",\n         \"100\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}type\",\n         \"default\"\n        ]\n       ],\n       \"children\": []\n      }\n     ]\n    }\n   ]\n  }\n ]\n}"
            }
          ]
        },
        "openxml-sdk": {
          "status": "unsupported",
          "reason": "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"
        }
      }
    },
    {
      "scenarioId": "acceptNestedDeletionInsideInsertion",
      "scenarioTitle": "Accepting nested deletion inside insertion keeps surviving inserted text",
      "specCitation": {
        "standard": "ECMA-376",
        "edition": 5,
        "part": 1,
        "section": "17.13.5.18",
        "clauseTitle": "ins (Inserted Run Content)"
      },
      "outcomes": {
        "safe-docx": {
          "status": "pass",
          "assertionResults": [
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:ins matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:del matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:delText matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:t[contains(., 'remove-me')] matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'Anchor Start end' found at offset 0"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'Start end' found at offset 7"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'end' found at offset 13"
            }
          ]
        },
        "python-docx": {
          "status": "unsupported",
          "reason": "python-docx has no tracked-changes (revision) API"
        },
        "libreoffice": {
          "status": "pass",
          "assertionResults": [
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:ins matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:del matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:delText matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:t[contains(., 'remove-me')] matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'Anchor Start end' found at offset 0"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'Start end' found at offset 7"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'end' found at offset 13"
            }
          ]
        },
        "openxml-sdk": {
          "status": "unsupported",
          "reason": "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"
        }
      }
    },
    {
      "scenarioId": "rejectDeletionsRestoresDelContent",
      "scenarioTitle": "Rejecting deletions restores w:delText content to body text",
      "specCitation": {
        "standard": "ECMA-376",
        "edition": 5,
        "part": 1,
        "section": "17.13.5.14",
        "clauseTitle": "del (Deleted Run Content)"
      },
      "outcomes": {
        "safe-docx": {
          "status": "pass",
          "assertionResults": [
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:del matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:delText matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'Kept text Deleted text' found at offset 0"
            },
            {
              "assertionKind": "canonicalXmlEquals",
              "passed": true,
              "detail": "canonical forms are identical"
            }
          ]
        },
        "python-docx": {
          "status": "unsupported",
          "reason": "python-docx has no tracked-changes (revision) API"
        },
        "libreoffice": {
          "status": "pass-divergent",
          "assertionResults": [
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:del matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:delText matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'Kept text Deleted text' found at offset 0"
            },
            {
              "assertionKind": "canonicalXmlEquals",
              "passed": false,
              "detail": "canonical forms differ.\n--- expected\n{\n \"kind\": \"element\",\n \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}document\",\n \"attributes\": [],\n \"children\": [\n  {\n   \"kind\": \"element\",\n   \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}body\",\n   \"attributes\": [],\n   \"children\": [\n    {\n     \"kind\": \"element\",\n     \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}p\",\n     \"attributes\": [],\n     \"children\": [\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}r\",\n       \"attributes\": [],\n       \"children\": [\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}t\",\n         \"attributes\": [],\n         \"children\": [\n          {\n           \"kind\": \"text\",\n           \"text\": \"Kept text Deleted text\"\n          }\n         ]\n        }\n       ]\n      }\n     ]\n    }\n   ]\n  }\n ]\n}\n--- actual\n{\n \"kind\": \"element\",\n \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}document\",\n \"attributes\": [\n  [\n   \"{http://schemas.openxmlformats.org/markup-compatibility/2006}Ignorable\",\n   \"w14 wp14 w15\"\n  ]\n ],\n \"children\": [\n  {\n   \"kind\": \"element\",\n   \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}body\",\n   \"attributes\": [],\n   \"children\": [\n    {\n     \"kind\": \"element\",\n     \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}p\",\n     \"attributes\": [],\n     \"children\": [\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pPr\",\n       \"attributes\": [],\n       \"children\": [\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pStyle\",\n         \"attributes\": [\n          [\n           \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n           \"Normal\"\n          ]\n         ],\n         \"children\": []\n        },\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}bidi\",\n         \"attributes\": [\n          [\n           \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n           \"0\"\n          ]\n         ],\n         \"children\": []\n        },\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}jc\",\n         \"attributes\": [\n          [\n           \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n           \"left\"\n          ]\n         ],\n         \"children\": []\n        },\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}rPr\",\n         \"attributes\": [],\n         \"children\": []\n        }\n       ]\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}r\",\n       \"attributes\": [],\n       \"children\": [\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}rPr\",\n         \"attributes\": [],\n         \"children\": []\n        },\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}t\",\n         \"attributes\": [],\n         \"children\": [\n          {\n           \"kind\": \"text\",\n           \"text\": \"Kept text Deleted text\"\n          }\n         ]\n        }\n       ]\n      }\n     ]\n    },\n    {\n     \"kind\": \"element\",\n     \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}sectPr\",\n     \"attributes\": [],\n     \"children\": [\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}type\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n         \"nextPage\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pgSz\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}h\",\n         \"15840\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}w\",\n         \"12240\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pgMar\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}bottom\",\n         \"1440\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}footer\",\n         \"0\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}gutter\",\n         \"0\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}header\",\n         \"0\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}left\",\n         \"1440\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}right\",\n         \"1440\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}top\",\n         \"1440\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pgNumType\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}fmt\",\n         \"decimal\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}formProt\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n         \"false\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}textDirection\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n         \"lrTb\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}docGrid\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}charSpace\",\n         \"4096\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}linePitch\",\n         \"100\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}type\",\n         \"default\"\n        ]\n       ],\n       \"children\": []\n      }\n     ]\n    }\n   ]\n  }\n ]\n}"
            }
          ]
        },
        "openxml-sdk": {
          "status": "unsupported",
          "reason": "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"
        }
      }
    },
    {
      "scenarioId": "rejectFormattingChangeRestoresPriorRunProperties",
      "scenarioTitle": "Rejecting formatting changes restores prior run properties",
      "specCitation": {
        "standard": "ECMA-376",
        "edition": 5,
        "part": 1,
        "section": "17.13.5.31",
        "clauseTitle": "rPrChange (Revision Information for Run Properties)"
      },
      "outcomes": {
        "safe-docx": {
          "status": "pass",
          "assertionResults": [
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:rPrChange matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:r/w:rPr/w:b matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryExists",
              "passed": true,
              "detail": "//w:r/w:rPr/w:i matched 1 node(s); expected at least 1"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'Styled text' found at offset 0"
            },
            {
              "assertionKind": "canonicalXmlEquals",
              "passed": true,
              "detail": "canonical forms are identical"
            }
          ]
        },
        "python-docx": {
          "status": "unsupported",
          "reason": "python-docx has no tracked-changes (revision) API"
        },
        "libreoffice": {
          "status": "pass-divergent",
          "assertionResults": [
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:rPrChange matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:r/w:rPr/w:b matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryExists",
              "passed": true,
              "detail": "//w:r/w:rPr/w:i matched 1 node(s); expected at least 1"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'Styled text' found at offset 0"
            },
            {
              "assertionKind": "canonicalXmlEquals",
              "passed": false,
              "detail": "canonical forms differ.\n--- expected\n{\n \"kind\": \"element\",\n \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}document\",\n \"attributes\": [],\n \"children\": [\n  {\n   \"kind\": \"element\",\n   \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}body\",\n   \"attributes\": [],\n   \"children\": [\n    {\n     \"kind\": \"element\",\n     \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}p\",\n     \"attributes\": [],\n     \"children\": [\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}r\",\n       \"attributes\": [],\n       \"children\": [\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}rPr\",\n         \"attributes\": [],\n         \"children\": [\n          {\n           \"kind\": \"element\",\n           \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}i\",\n           \"attributes\": [],\n           \"children\": []\n          }\n         ]\n        },\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}t\",\n         \"attributes\": [],\n         \"children\": [\n          {\n           \"kind\": \"text\",\n           \"text\": \"Styled text\"\n          }\n         ]\n        }\n       ]\n      }\n     ]\n    }\n   ]\n  }\n ]\n}\n--- actual\n{\n \"kind\": \"element\",\n \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}document\",\n \"attributes\": [\n  [\n   \"{http://schemas.openxmlformats.org/markup-compatibility/2006}Ignorable\",\n   \"w14 wp14 w15\"\n  ]\n ],\n \"children\": [\n  {\n   \"kind\": \"element\",\n   \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}body\",\n   \"attributes\": [],\n   \"children\": [\n    {\n     \"kind\": \"element\",\n     \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}p\",\n     \"attributes\": [],\n     \"children\": [\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pPr\",\n       \"attributes\": [],\n       \"children\": [\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pStyle\",\n         \"attributes\": [\n          [\n           \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n           \"Normal\"\n          ]\n         ],\n         \"children\": []\n        },\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}bidi\",\n         \"attributes\": [\n          [\n           \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n           \"0\"\n          ]\n         ],\n         \"children\": []\n        },\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}jc\",\n         \"attributes\": [\n          [\n           \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n           \"left\"\n          ]\n         ],\n         \"children\": []\n        },\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}rPr\",\n         \"attributes\": [],\n         \"children\": [\n          {\n           \"kind\": \"element\",\n           \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}i\",\n           \"attributes\": [],\n           \"children\": []\n          },\n          {\n           \"kind\": \"element\",\n           \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}i\",\n           \"attributes\": [],\n           \"children\": []\n          }\n         ]\n        }\n       ]\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}r\",\n       \"attributes\": [],\n       \"children\": [\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}rPr\",\n         \"attributes\": [],\n         \"children\": [\n          {\n           \"kind\": \"element\",\n           \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}i\",\n           \"attributes\": [],\n           \"children\": []\n          }\n         ]\n        },\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}t\",\n         \"attributes\": [],\n         \"children\": [\n          {\n           \"kind\": \"text\",\n           \"text\": \"Styled text\"\n          }\n         ]\n        }\n       ]\n      }\n     ]\n    },\n    {\n     \"kind\": \"element\",\n     \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}sectPr\",\n     \"attributes\": [],\n     \"children\": [\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}type\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n         \"nextPage\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pgSz\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}h\",\n         \"15840\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}w\",\n         \"12240\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pgMar\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}bottom\",\n         \"1440\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}footer\",\n         \"0\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}gutter\",\n         \"0\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}header\",\n         \"0\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}left\",\n         \"1440\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}right\",\n         \"1440\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}top\",\n         \"1440\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pgNumType\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}fmt\",\n         \"decimal\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}formProt\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n         \"false\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}textDirection\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n         \"lrTb\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}docGrid\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}charSpace\",\n         \"4096\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}linePitch\",\n         \"100\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}type\",\n         \"default\"\n        ]\n       ],\n       \"children\": []\n      }\n     ]\n    }\n   ]\n  }\n ]\n}"
            }
          ]
        },
        "openxml-sdk": {
          "status": "unsupported",
          "reason": "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"
        }
      }
    },
    {
      "scenarioId": "rejectInsertedParagraphMarkMergesParagraphs",
      "scenarioTitle": "Rejecting an inserted paragraph mark removes the mark and merges the paragraph with the following paragraph",
      "specCitation": {
        "standard": "ECMA-376",
        "edition": 5,
        "part": 1,
        "section": "17.13.5.20",
        "clauseTitle": "ins (Inserted Paragraph)"
      },
      "outcomes": {
        "safe-docx": {
          "status": "fail",
          "assertionResults": [
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:body/w:p matched 1 node(s); expected 1"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:pPr/w:rPr/w:ins matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": false,
              "detail": "'First half second half' not found; expected offset 0. Projection: \"second half\""
            }
          ]
        },
        "python-docx": {
          "status": "unsupported",
          "reason": "python-docx has no tracked-changes (revision) API"
        },
        "libreoffice": {
          "status": "pass",
          "assertionResults": [
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:body/w:p matched 1 node(s); expected 1"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:pPr/w:rPr/w:ins matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'First half second half' found at offset 0"
            }
          ]
        },
        "openxml-sdk": {
          "status": "unsupported",
          "reason": "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"
        }
      }
    },
    {
      "scenarioId": "rejectInsertionsRemovesInsContent",
      "scenarioTitle": "Rejecting insertions removes w:ins wrappers and their run content",
      "specCitation": {
        "standard": "ECMA-376",
        "edition": 5,
        "part": 1,
        "section": "17.13.5.18",
        "clauseTitle": "ins (Inserted Run Content)"
      },
      "outcomes": {
        "safe-docx": {
          "status": "pass",
          "assertionResults": [
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:ins matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:t[contains(text(), 'Inserted text')] matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'Kept text' found at offset 0"
            },
            {
              "assertionKind": "canonicalXmlEquals",
              "passed": true,
              "detail": "canonical forms are identical"
            }
          ]
        },
        "python-docx": {
          "status": "unsupported",
          "reason": "python-docx has no tracked-changes (revision) API"
        },
        "libreoffice": {
          "status": "pass-divergent",
          "assertionResults": [
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:ins matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:t[contains(text(), 'Inserted text')] matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'Kept text' found at offset 0"
            },
            {
              "assertionKind": "canonicalXmlEquals",
              "passed": false,
              "detail": "canonical forms differ.\n--- expected\n{\n \"kind\": \"element\",\n \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}document\",\n \"attributes\": [],\n \"children\": [\n  {\n   \"kind\": \"element\",\n   \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}body\",\n   \"attributes\": [],\n   \"children\": [\n    {\n     \"kind\": \"element\",\n     \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}p\",\n     \"attributes\": [],\n     \"children\": [\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}r\",\n       \"attributes\": [],\n       \"children\": [\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}t\",\n         \"attributes\": [],\n         \"children\": [\n          {\n           \"kind\": \"text\",\n           \"text\": \"Kept text \"\n          }\n         ]\n        }\n       ]\n      }\n     ]\n    }\n   ]\n  }\n ]\n}\n--- actual\n{\n \"kind\": \"element\",\n \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}document\",\n \"attributes\": [\n  [\n   \"{http://schemas.openxmlformats.org/markup-compatibility/2006}Ignorable\",\n   \"w14 wp14 w15\"\n  ]\n ],\n \"children\": [\n  {\n   \"kind\": \"element\",\n   \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}body\",\n   \"attributes\": [],\n   \"children\": [\n    {\n     \"kind\": \"element\",\n     \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}p\",\n     \"attributes\": [],\n     \"children\": [\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pPr\",\n       \"attributes\": [],\n       \"children\": [\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pStyle\",\n         \"attributes\": [\n          [\n           \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n           \"Normal\"\n          ]\n         ],\n         \"children\": []\n        },\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}bidi\",\n         \"attributes\": [\n          [\n           \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n           \"0\"\n          ]\n         ],\n         \"children\": []\n        },\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}jc\",\n         \"attributes\": [\n          [\n           \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n           \"left\"\n          ]\n         ],\n         \"children\": []\n        },\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}rPr\",\n         \"attributes\": [],\n         \"children\": []\n        }\n       ]\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}r\",\n       \"attributes\": [],\n       \"children\": [\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}rPr\",\n         \"attributes\": [],\n         \"children\": []\n        },\n        {\n         \"kind\": \"element\",\n         \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}t\",\n         \"attributes\": [],\n         \"children\": [\n          {\n           \"kind\": \"text\",\n           \"text\": \"Kept text \"\n          }\n         ]\n        }\n       ]\n      }\n     ]\n    },\n    {\n     \"kind\": \"element\",\n     \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}sectPr\",\n     \"attributes\": [],\n     \"children\": [\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}type\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n         \"nextPage\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pgSz\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}h\",\n         \"15840\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}w\",\n         \"12240\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pgMar\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}bottom\",\n         \"1440\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}footer\",\n         \"0\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}gutter\",\n         \"0\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}header\",\n         \"0\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}left\",\n         \"1440\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}right\",\n         \"1440\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}top\",\n         \"1440\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pgNumType\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}fmt\",\n         \"decimal\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}formProt\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n         \"false\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}textDirection\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}val\",\n         \"lrTb\"\n        ]\n       ],\n       \"children\": []\n      },\n      {\n       \"kind\": \"element\",\n       \"name\": \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}docGrid\",\n       \"attributes\": [\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}charSpace\",\n         \"4096\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}linePitch\",\n         \"100\"\n        ],\n        [\n         \"{http://schemas.openxmlformats.org/wordprocessingml/2006/main}type\",\n         \"default\"\n        ]\n       ],\n       \"children\": []\n      }\n     ]\n    }\n   ]\n  }\n ]\n}"
            }
          ]
        },
        "openxml-sdk": {
          "status": "unsupported",
          "reason": "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"
        }
      }
    },
    {
      "scenarioId": "rejectNestedDeletionInsideInsertion",
      "scenarioTitle": "Rejecting nested deletion inside insertion removes the whole insertion",
      "specCitation": {
        "standard": "ECMA-376",
        "edition": 5,
        "part": 1,
        "section": "17.13.5.18",
        "clauseTitle": "ins (Inserted Run Content)"
      },
      "outcomes": {
        "safe-docx": {
          "status": "pass",
          "assertionResults": [
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:ins matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:del matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:delText matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:t[contains(., 'Start')] matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:t[contains(., 'remove-me')] matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:t[contains(., 'end')] matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'Anchor ' found at offset 0"
            }
          ]
        },
        "python-docx": {
          "status": "unsupported",
          "reason": "python-docx has no tracked-changes (revision) API"
        },
        "libreoffice": {
          "status": "pass",
          "assertionResults": [
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:ins matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:del matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:delText matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:t[contains(., 'Start')] matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:t[contains(., 'remove-me')] matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:t[contains(., 'end')] matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'Anchor ' found at offset 0"
            }
          ]
        },
        "openxml-sdk": {
          "status": "unsupported",
          "reason": "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"
        }
      }
    },
    {
      "scenarioId": "replaceFirstOccurrencePreservesOffsets",
      "scenarioTitle": "Replacing the first occurrence places the new text at the matched offset",
      "specCitation": {
        "standard": "ECMA-376",
        "edition": 5,
        "part": 1,
        "section": "17.3.3.31",
        "clauseTitle": "t (Text)"
      },
      "outcomes": {
        "safe-docx": {
          "status": "pass",
          "assertionResults": [
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'sixty' found at offset 15"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:t[contains(text(), 'thirty')] matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'Payment due in sixty days' found at offset 0"
            }
          ]
        },
        "python-docx": {
          "status": "pass",
          "assertionResults": [
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'sixty' found at offset 15"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:t[contains(text(), 'thirty')] matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'Payment due in sixty days' found at offset 0"
            }
          ]
        },
        "libreoffice": {
          "status": "pass",
          "assertionResults": [
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'sixty' found at offset 15"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:t[contains(text(), 'thirty')] matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'Payment due in sixty days' found at offset 0"
            }
          ]
        },
        "openxml-sdk": {
          "status": "pass",
          "assertionResults": [
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'sixty' found at offset 15"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:t[contains(text(), 'thirty')] matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'Payment due in sixty days' found at offset 0"
            }
          ]
        }
      }
    },
    {
      "scenarioId": "replaceTextAcrossRunBoundary",
      "scenarioTitle": "Replacing text spanning a run boundary places the replacement at the matched offset",
      "specCitation": {
        "standard": "ECMA-376",
        "edition": 5,
        "part": 1,
        "section": "17.3.3.31",
        "clauseTitle": "t (Text)"
      },
      "outcomes": {
        "safe-docx": {
          "status": "pass",
          "assertionResults": [
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'clause' found at offset 6"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:p[contains(., 'target')] matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'Alpha-clause-tail' found at offset 0"
            }
          ]
        },
        "python-docx": {
          "status": "unsupported",
          "reason": "match spans run boundaries; the python-docx adapter only performs intra-run replacement (glue, not algorithms)"
        },
        "libreoffice": {
          "status": "pass",
          "assertionResults": [
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'clause' found at offset 6"
            },
            {
              "assertionKind": "xpathQueryCount",
              "passed": true,
              "detail": "//w:p[contains(., 'target')] matched 0 node(s); expected 0"
            },
            {
              "assertionKind": "documentTextContainsAtOffset",
              "passed": true,
              "detail": "'Alpha-clause-tail' found at offset 0"
            }
          ]
        },
        "openxml-sdk": {
          "status": "unsupported",
          "reason": "first occurrence spans w:t boundaries; the openxml-sdk adapter only performs intra-w:t replacement (glue, not algorithms)"
        }
      }
    }
  ]
}
