Release note · August 3, 2026
A subdocument target can change without changing Word text
A Word master document can keep all stored text, its w:subDoc anchor, and the anchor’s relationship ID fixed while changing which separate subdocument it names. A text diff cannot make that dependency retarget visible, yet a static reviewer can record it without opening or merging either document.
Document Change Assurance Benchmark (DCAB) 0.4.0 adds its fifteenth deterministic paired package: external.subdocument_target_retargeted. Both sides preserve every package member, every w:t sequence, and a fixed w:subDoc r:id marker. Only word/_rels/document.xml.rels changes, retargeting the standard external subdocument relationship.
Inspect the dependency; do not open the subdocument
Microsoft’s Open XML documentation for SubDocumentReference identifies w:subDoc as an anchor for a subdocument location. The corresponding OOXML relationship is an external master-document dependency. DCAB records that stored relationship boundary only: its builder, validator, scorer, and adapter never retrieve a target, launch Word, or merge subdocument content.
All package targets are synthetic example.invalid values. The target-free public truth declares external_document_dependency_target_changed with the subdocument dependency subtype. It excludes the target, relationship ID, relationship path, and any subdocument content, so tools can demonstrate coverage without leaking document locations.
A small case with a strict contract
The generator renders the anchor directly in the main document body and retains the standard subDocument relationship type with external target mode. Its independent validator checks those exact requirements, deterministic package bytes, stable member set, unchanged stored text, and the one-member relationship boundary. The standard python-docx reader opens all 28 .docx fixtures, including this pair, and its lower-level OPC reader opens all 30 packages.
The optional local DocFence 0.27.0 adapter recognizes the change through public aggregate evidence: an external-relationship change plus an external-document-dependency inventory change, while the subdocument anchor and relationship counts remain one. It never consumes a target or a private signature.
The release passed 12 tests locally, including that adapter path, then passed hosted CI on Python 3.11, 3.12, and 3.13 plus a clean DocFence installation. Fresh wheel and source-distribution installs each validate the bundled corpus.
Use the release
python -m pip install https://github.com/SybilGambleyyu/document-change-benchmark/releases/download/v0.4.0/document_change_benchmark-0.4.0-py3-none-any.whl
dcab validate
dcab docfence-observations --executable docfence --output observations.json
dcab score --observations observations.json --strict
DCAB 0.4.0 retains fixture schema version 1 because the public truth and observation envelopes are unchanged; it extends the corpus from 14 to 15 cases. It does not claim a subdocument exists, is safe, has a particular rendering, or will be loaded by any client. It supplies a reproducible static fact for serious review tooling.
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.