Release note · August 3, 2026
A one-line Word setting can change a custom XML schema association
A consequential WordprocessingML change need not alter text, a relationship target, or a visible page. A document can retain one direct w:attachedSchema entry in Settings while changing its target namespace. A text-oriented review has little reason to surface that stored association; a package-review tool should be able to state it precisely.
Document Change Assurance Benchmark (DCAB) 0.19.0 adds its thirtieth deterministic pair: binding.attached_custom_xml_schema_namespace_changed. The baseline and candidate preserve their member set, stored text sequence, and schema-association count. Only word/settings.xml changes, where a synthetic namespace value is replaced.
A valid leaf, an intentionally narrow boundary
Microsoft documents AttachedSchema as an attached custom XML schema. The OOXML definition places the w:attachedSchema CT_String leaf directly in document Settings. The benchmark models exactly that stored structure—one direct element, one w:val attribute, no child markup or text—and does not introduce a Settings relationship part.
word/settings.xml only changed package member
w:attachedSchema w:val="namespace" one valid direct leaf on each side
word/_rels/settings.xml.rels absent on both sides
The change is deliberately not a schema-validation experiment. The pair includes no schema payload, does not locate or retrieve one, does not resolve the namespace, does not load a schema, does not validate custom XML, and does not open Word or claim host behavior. The synthetic values use the reserved example.invalid domain.
A public fact with no namespace disclosure
The target-free truth reports only three stable facts: binding: custom_xml_schema, kind: attached_custom_xml_schema_namespace_changed, and source: word_settings. It excludes both namespace identifiers, Settings-part paths, relationship information, and any private fingerprint.
Independent structural validation checks the exact leaf shape, one-member change boundary, absence of a Settings relationship part, stable package topology, unchanged stored text, deterministic regeneration, and the absence of fixture namespace material from public truth. The result is a scoreable review case without turning the corpus into a transport mechanism for operational identifiers.
One released consumer, still a tool-neutral case
The optional DocFence 0.29.0 adapter reaches a strict 30/30 score from aggregate evidence: attached_custom_xml_schema_inventory_changed plus a fixed attached_custom_xml_schema_count of one. It does not consume a namespace, Settings path, or private fingerprint.
Hosted CI passed on Python 3.11, 3.12, and 3.13 for the main commit and release tag. Clean wheel and source-distribution installs validate the bundled 30-case corpus. The public Hugging Face dataset mirror was byte-verified against the generated fixture tree and validated directly after download.
Use the release
python -m pip install https://github.com/SybilGambleyyu/document-change-benchmark/releases/download/v0.19.0/document_change_benchmark-0.19.0-py3-none-any.whl
dcab validate
dcab docfence-observations --executable docfence --output observations.json
dcab score --observations observations.json --strict
DCAB retains fixture schema version 1 because the public truth and observation envelopes are unchanged. This release adds one exact static-review fact—not a schema resolver, document client, renderer, validator, or universal policy claim.
The MIT-licensed builder, generated fixtures, verifier, release artifacts, and research notes are available on GitHub. The corpus is also mirrored as a public Hugging Face dataset.