A comment can be marked done without changing Word text

# python# devops# opensource# productivity
A comment can be marked done without changing Word textSybilGambleyyu

A deterministic Office 2013 commentsExtended done-state change case for static WordprocessingML review.

A comment can be marked done without changing Word text

Text comparison is necessary for document review, but it is not sufficient for every stored WordprocessingML change. A document can retain its visible text, comment anchor, ordinary comment content, relationships, and package member set while a persisted comment state changes elsewhere in the package.

Document Change Assurance Benchmark (DCAB) 0.12.0 adds a small, deterministic case for exactly that boundary: review.modern_comment_done_state_changed.

Both packages hold fixed:

  • the classic comment and its document range start/end/reference anchor;
  • the matching paragraph identifier and internal package relationships;
  • content-type declarations, package members, and every stored w:t value.

Only word/commentsExtended.xml changes. Its sole Office 2013 w15:commentEx record moves from explicit done="0" to done="1".

Why this belongs in static review

Microsoft describes the commentsExtended part as carrying additional information about comments represented in the classic comments part. Its w15:commentEx schema reference says the construct is available in Office 2013 and later, associates paraId with the comment's final paragraph, and defines done="1" as a user indication that the associated comment is done.

That makes the stored metadata reviewable. It does not make it a safe basis for overclaiming. The fixture does not open Word, render or update comments, resolve a thread, authenticate a person, communicate with a service, or assert a particular client UI or workflow behavior. It tests one direct package-data boundary.

A target-free, reproducible contract

The public truth file says only that the stored done state changed and that the reference disposition is review. It excludes fixture-specific comment text, author metadata, paragraph identifiers, relationship paths, and raw serialization details.

DCAB's structural verifier checks the package topology and the exact one-member delta. Its independent python-docx check opens all 44 .docx fixtures and its OPC reader opens all 46 packages. The optional DocFence 0.27 adapter observes only aggregate inventory evidence: one classic comment, one extension record, and a resolved-comment count moving from zero to one, while people, thread, reaction, comments-ID, and extensible-comment counts remain zero.

The 0.12.0 release passed hosted Python 3.11–3.13 CI, a clean DocFence adapter install, fresh wheel and source-distribution validation, and a fresh Hugging Face dataset download.

Try it

python -m pip install https://github.com/SybilGambleyyu/document-change-benchmark/releases/download/v0.12.0/document_change_benchmark-0.12.0-py3-none-any.whl
dcab validate
dcab docfence-observations --executable docfence --output observations.json
dcab score --observations observations.json --strict
Enter fullscreen mode Exit fullscreen mode

The benchmark now contains 23 paired synthetic cases and remains on fixture schema version 1. You can find the release artifacts and full static-scope contract on GitHub, and the corpus is mirrored on Hugging Face.