Release note · August 3, 2026

A mail-merge recipient-selection state can change while the source stays fixed

By SybilGambleyyu · Document Change Assurance Benchmark 0.17.0

A Word mail merge has more stored review state than its data-source address. A document can retain the same source and the same recipient record while changing whether that record is selected for the merge. That is a meaningful package-review boundary even when ordinary document text does not change.

Document Change Assurance Benchmark (DCAB) 0.17.0 adds its twenty-eighth deterministic pair: review.mail_merge_recipient_active_state_changed. Both packages keep their members, stored w:t sequence, mail-merge source, settings markup, relationships, recipient-data content type, and recipient-record hash fixed. Only word/recipientData.xml changes: the explicit stored inclusion state moves from false to true.

The source and selection are separate stored surfaces

Microsoft’s Mail Merge Recipient Data Part contract specifies a recipient-data part related internally from Document Settings, with a w:recipients root and no relationships of its own. Its w:active definition says that a false value prevents the corresponding external record from being used in the merged document.

word/settings.xml
  w:mailMerge
    w:dataSource               fixed source anchor
    w:odso / w:recipientData   fixed internal selection anchor

word/_rels/settings.xml.rels
  mailMergeSource relationship fixed
  recipientData relationship   fixed, internal

word/recipientData.xml
  w:recipients / w:recipientData
    w:active false → true  the only changed state

The case includes the complete source and recipient-data topology instead of changing a loose setting in isolation. It also deliberately avoids two misleading shortcuts: Microsoft’s compatibility notes say Word does not use the w:src ODSO element, and that documents containing w:headerSource fail to open.

Static evidence, not a merge execution claim

The source is synthetic and uses the reserved example.invalid domain. DCAB never retrieves or parses it, identifies a real recipient, computes a record hash, connects to a data provider, performs a merge, opens Word, or claims how any client presents recipient selection. The public oracle names only the narrow fact mail_merge_recipient_active_state_changed; it omits the source target, recipient hash, inclusion value, relationship IDs, and part paths.

The optional DocFence 0.27.0 adapter reaches a strict 28/28 score from aggregate evidence: mail_merge_inventory_changed, one mail-merge configuration, one data-source relationship, no header-source relationship, and one internally related recipient-data part. It does not publish the stored source, recipient identity, hash, state, IDs, paths, or private fingerprints.

Hosted CI passed on Python 3.11, 3.12, and 3.13 for both the main commit and its release tag. The standard python-docx reader opens all 54 .docx fixtures, while its lower-level OPC reader opens all 56 packages. Rebuilt fixtures, clean wheel and source-distribution installs, release artifacts, and the public Hugging Face dataset mirror validate the 28-case corpus.

Use the release

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

DCAB 0.17.0 retains fixture schema version 1 because the public truth and observation envelopes are unchanged. It adds one stored recipient-selection review boundary—not a mail client, data connector, merge engine, document renderer, or universal security-policy claim.

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.