Release note · August 3, 2026
A document variable can change without changing Word text
A Word document can persist a named document-variable value separately from the text stored in its body. A field may refer to that variable while retaining the same stored field result. For a serious reviewer, that is a useful distinction: text-only comparison can miss the state change, while package-level review can report it without trying to evaluate a field.
Document Change Assurance Benchmark (DCAB) 0.8.0 adds its nineteenth deterministic paired package: binding.document_variable_value_changed. Both sides retain the same DOCVARIABLE field reference, field result, variable name, package-member set, and stored w:t sequence. Only word/settings.xml changes, and the change is confined to the persisted value of one synthetic document variable.
Stored state, not field execution
The Open XML document-variables element belongs in document settings and persists a collection of name/value pairs. Its document-variable child carries the individual name and value. Microsoft’s Word Variable documentation also describes document variables as document-stored data that a matching DOCVARIABLE field can expose.
DCAB fixes the synthetic variable name, fixed field instruction, and fixed stored result. It changes only the synthetic value in w:docVars/w:docVar. The builder, verifier, scorer, and adapter do not update a field, open Word, load a macro, start an application, or claim that a client will display a particular result. This is a narrow static-review case, not a rendering or automation test.
A deterministic settings boundary
The independent verifier checks the exact variable container, name/value shape, field instruction, deterministic package bytes, stable package-member set, unchanged stored Word text, and exact one-member pair boundary. The standard python-docx reader opens all 36 .docx fixtures, and its lower-level OPC reader opens all 38 packages.
The optional local DocFence 0.27.0 adapter maps aggregate word_document_variable_inventory_changed evidence. It also verifies that there is still one stored variable and one literal variable-field reference matching the stored name. The adapter consumes counts and structural matching only; it does not expose the variable name or value.
The release passed 15 tests locally, then passed 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 19-case corpus.
Use the release
python -m pip install https://github.com/SybilGambleyyu/document-change-benchmark/releases/download/v0.8.0/document_change_benchmark-0.8.0-py3-none-any.whl
dcab validate
dcab docfence-observations --executable docfence --output observations.json
dcab score --observations observations.json --strict
DCAB 0.8.0 retains fixture schema version 1 because the public truth and observation envelopes are unchanged; it extends the corpus from 18 to 19 cases. It does not claim that a value is safe, sensitive, active, evaluated, synchronized with a field result, or visible in any particular client. 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.