Release note · August 1, 2026

The style-hidden blind spot needs evidence, not guesswork

By SybilGambleyyu · DocFence 0.2.0

In Word, “hidden text” is not one simple package signal. A direct w:vanish property on a run is evidence about that run. A property on the paragraph mark is a different thing. A declaration inside a style may participate in a hierarchy of inherited and toggle properties before Word decides what to display.

That distinction matters in a CI gate. Reporting every style declaration as an effectively hidden run creates false confidence; ignoring the style part entirely leaves a real review surface opaque. DocFence 0.2.0 adds evidence for the gap without claiming to be a renderer.

Three separate signals

The release now reports three deliberately separate inventories:

Microsoft documents that hidden text is a toggle property in styles: the effective result depends on the style hierarchy, while direct formatting is absolute. It also documents w:specVanish as a paragraph-mark property that can be ignored on any other run. Those are exactly the reasons the new inventories are separate. See the Open XML guidance on hidden text and specVanish.

A useful limit is part of the feature

The style declaration count is not an effective-format calculation. DocFence does not claim which styles are applied, resolve basedOn, table or numbering styles, or calculate the toggle hierarchy. A style can therefore raise a useful review signal without becoming a fabricated “hidden run” count. Paragraph-mark branches and tracked historical formatting inside a style are also kept out of the text-style count.

This is a narrower statement, but a more dependable one: a review team can see that the stored package gained potentially relevant hidden-text declarations, then use Word or an appropriate rendering review to decide the visual outcome.

Policy stays explicit

The two new candidate-state gates are opt-in. Add them under rules: when a template or publishing boundary needs them:

  require_no_hidden_text: true
  require_no_hidden_paragraph_marks: true
  require_no_hidden_text_style_declarations: true

They produce DFP006, DFP014, and DFP013, respectively. The first is direct runs, the second is direct paragraph-mark markup, and the third is stored style/default declarations. Reports continue to contain aggregate counts and fixed categories—not source text, style names, IDs, part paths, or fingerprints. The full boundary is in the policy reference and threat model.

Release evidence

DocFence 0.2.0 adds regression cases for direct false values, paragraph-mark specVanish, style declarations, tracked style history, malformed style parts, policy results, and report redaction. It also profiles a conventionally generated Word package with 164 standard styles as a compatibility smoke test.

The wheel and source distribution were built twice from the release commit using its SOURCE_DATE_EPOCH, producing byte-identical artifacts. The GitHub release includes both artifacts and a SHA-256 manifest.

Use the release

python -m pip install https://github.com/SybilGambleyyu/docfence/releases/download/v0.2.0/docfence-0.2.0-py3-none-any.whl

docfence diff approved.docx candidate.docx --format markdown
docfence check approved.docx candidate.docx --policy docfence.yml --format sarif --output docfence.sarif

DocFence is MIT-licensed and available on GitHub. For its first release and the broader case for document CI, read Word review artifacts need a CI boundary too.