Release note · August 3, 2026
An editable range can change without changing Word text
A Word document can store an editable-range marker around text and associate that marker with an individual editor. The covered text can remain exactly the same while the stored editor assignment changes. For a serious reviewer, that is a material distinction: a text diff sees no change, while package-level review can identify an authorization-relevant marker without pretending to know whether any identity is actually authorized.
Document Change Assurance Benchmark (DCAB) 0.9.0 adds its twentieth deterministic paired package: review.permission_range_editor_changed. Both sides retain one paired w:permStart/w:permEnd boundary, its numeric marker ID, covered stored text, package-member set, and stored w:t sequence. Only word/document.xml changes, and the change is confined to one synthetic w:ed editor assignment.
Stored markers, not effective access
Microsoft’s Open XML documentation for w:permStart describes a range-permission start marker and pairs it with a later end marker through the shared ID. The corresponding w:permEnd contract describes the reverse pairing requirement. The standard permits both markers within a paragraph, which is the deliberately compact shape used here.
DCAB fixes the paired boundary, numeric ID, and a synthetic run inside it, then changes only the synthetic individual-editor attribute. It does not enable document protection, authenticate an editor, resolve a group, calculate editable cells, open Word, start an application, or claim that an Office client will honor the marker. This is a narrow stored-markup review case, not an access-control or client-behavior test.
A deterministic permission-markup boundary
The independent verifier checks the exact leaf-marker attributes, marker order and pairing, covered run, deterministic package bytes, stable member set, unchanged stored Word text, and exact one-member pair boundary. The standard python-docx reader opens all 38 .docx fixtures, and its lower-level OPC reader opens all 40 packages.
The optional local DocFence 0.27.0 adapter maps aggregate word_permission_range_inventory_changed evidence. It verifies that each side still has one story, one start, one end, one paired range, and one individual-editor assignment, with no editor group, table-column selector, or unmatched marker. The adapter uses counts and private local signatures only; it does not expose the marker ID or editor value.
The release passed the full 16-test suite in hosted CI on Python 3.11, 3.12, and 3.13 plus a clean DocFence installation. Fresh wheel and source-distribution installs, the uploaded GitHub artifacts, and a fresh Hugging Face dataset download each validate the bundled 20-case corpus.
Use the release
python -m pip install https://github.com/SybilGambleyyu/document-change-benchmark/releases/download/v0.9.0/document_change_benchmark-0.9.0-py3-none-any.whl
dcab validate
dcab docfence-observations --executable docfence --output observations.json
dcab score --observations observations.json --strict
DCAB 0.9.0 retains fixture schema version 1 because the public truth and observation envelopes are unchanged; it extends the corpus from 19 to 20 cases. It does not claim that an editor is authenticated, allowed to edit, active, known to a client, or protected by a particular policy. It supplies a reproducible static boundary for document review.
The MIT-licensed source, generated fixtures, structural verifier, release artifacts, and research notes are available on GitHub. The fixture corpus is also mirrored as a public Hugging Face dataset.