Skip to content

Releases: SybilGambleyyu/docfence

DocFence 0.23.0

Choose a tag to compare

@SybilGambleyyu SybilGambleyyu released this 01 Aug 12:59

DocFence 0.23 adds a privacy-safe inventory for direct legacy Word VML v:imagedata/@r:href markers.

It records aggregate marker/story counts and classifies recognized hyperlink relationships by stored external or internal target mode. Other resolved relationship types or modes remain visible as unsupported evidence. r:id, r:pict, raw src, and o:relid stay outside this narrow inventory.

New policy rules:

  • require_no_word_vml_image_hyperlinks (DFP059)
  • no_word_vml_image_hyperlink_changes (DFP060)

The release was tested locally and in CI on Python 3.11 and 3.13. The wheel and sdist are reproducible from the tagged source; SHA-256 values are included in SHA256SUMS.

DocFence 0.22.0

Choose a tag to compare

@SybilGambleyyu SybilGambleyyu released this 01 Aug 12:37

VML external-image review boundary

DocFence 0.22 adds a privacy-safe inventory for direct legacy Word VML
v:imagedata/@r:id markers backed by a relationship stored with
TargetMode="External".

  • Separately counts standard image relationships and externally stored
    unsupported relationship types.
  • Adds require_no_word_vml_external_images (DFP057) and
    no_word_vml_external_image_changes (DFP058).
  • Keeps targets, relationship IDs, VML attributes, story paths, and fingerprints
    out of public JSON, Markdown, and SARIF output.
  • Deliberately excludes embedded/internal images, orphaned relationships, raw
    VML src, r:pict, r:href, and o:relid; it does not retrieve, render,
    update, or resolve an image.

The implementation is covered by local regression tests, Python 3.11/3.13 CI,
and a pinned public Word package containing two legacy VML image-data markers.
The release wheel and source distribution were independently rebuilt from the
working tree and git archive at the tag commit and were byte-identical.

See the README and validation notes for the precise scope and source evidence.

DocFence 0.21.0

Choose a tag to compare

@SybilGambleyyu SybilGambleyyu released this 01 Aug 12:15

DocFence 0.21.0 adds a privacy-safe inventory for direct DrawingML linked-picture markers (a:blip r:link) in supported Word stories.

  • Adds the word_drawing_linked_pictures profile inventory and change signal.
  • Adds DFP055 (require no linked pictures) and DFP056 (protect an approved linked-picture baseline).
  • Separates direct linked-picture markers from generic external relationships, r:embed-only images, hyperlink fields, direct Word hyperlinks, and DrawingML hyperlink actions.
  • Reports only aggregate marker/story and backing image-relationship classification counts; image targets, relationship IDs, surrounding drawing markup, and story paths remain private.
  • Does not retrieve, resolve, update, render, or claim a Word client will load a linked image.

Validation: 47 tests; lint; hosted Python 3.11 and 3.13 CI for the release commit and tag; reproducible wheel/source builds; package checks; and an isolated-wheel smoke profile of a pinned public linked-picture DOCX.

See the tagged policy reference, threat model, and validation notes for the exact boundary.

DocFence 0.20.0

Choose a tag to compare

@SybilGambleyyu SybilGambleyyu released this 01 Aug 11:49

Direct legacy VML shape links

DocFence 0.20.0 adds a privacy-safe inventory for direct legacy VML href
markup in supported Word stories. This closes a distinct review surface: a VML
shape can store a target directly, without an OOXML hyperlink relationship, a
HYPERLINK field, w:hyperlink markup, or a DrawingML action marker.

The new word_vml_hyperlinks projection reports only aggregate element/story,
concrete-shape/group/shape-template, and direct-target-attribute-presence
counts. Raw URLs, targets, titles, alternate text, shape IDs, story paths, and
fingerprints remain private.

Two policy rules are available:

  • require_no_word_vml_hyperlinks (DFP053)
  • no_word_vml_hyperlink_changes (DFP054)

The inventory is intentionally narrow. It scans direct unqualified href
attributes on VML arc, curve, image, line, oval, polyline, rect,
roundrect, shape, group, and shapetype elements. It does not infer an
inherited or rendered link, select a Markup Compatibility branch, resolve,
retrieve, follow, validate, evaluate, render, or execute an action.

Release evidence

  • 46 tests and Ruff pass locally.
  • Hosted CI passed on Python 3.11 and 3.13, plus distribution build and Twine
    validation, for both the release commit and tag.
  • The wheel and source archive were rebuilt independently from the tagged
    source archive and were byte-for-byte identical.

See the tagged policy reference,
threat model,
and validation notes.

DocFence 0.19.0

Choose a tag to compare

@SybilGambleyyu SybilGambleyyu released this 01 Aug 11:23

DocFence 0.19 inventories direct DrawingML hyperlink-action markup in Word stories.

  • Covers stored a:hlinkClick, a:hlinkHover, and a:hlinkMouseOver markers.
  • Separates marker evidence from w:hyperlink, HYPERLINK field, and broad relationship inventories.
  • Adds DFP051 and DFP052 for no-marker and controlled-baseline gates.
  • Keeps targets, actions, invalid URLs, tooltips, relationship IDs, and story paths private while detecting same-count semantic changes.

The release was validated by the full test suite, clean CI on Python 3.11 and 3.13, reproducible wheel/sdist builds, and an isolated-wheel smoke test against a public Microsoft Word 2016 image-hyperlink fixture.

DocFence 0.18.0

Choose a tag to compare

@SybilGambleyyu SybilGambleyyu released this 01 Aug 11:01

Direct WordprocessingML hyperlink review

DocFence 0.18.0 adds a privacy-safe inventory for direct w:hyperlink markup. It is separate from stored HYPERLINK field codes and from broad relationship totals, so a residual hyperlink relationship is not confused with a direct link element.

  • DFP049 (require_no_word_hyperlink_markup) rejects a candidate with direct hyperlink markup.
  • DFP050 (no_word_hyperlink_markup_changes) protects a controlled direct-markup baseline.
  • Reports expose aggregate direct-element/story counts, relationship-backed counts, external/internal/unsupported relationship classes, anchor-only and current-document-start forms, and anchor attributes shadowed by an r:id relationship.
  • r:id precedence over w:anchor is represented without exposing either value. Targets, anchors, locations, tooltips, frames, history, display text, relationship IDs, story paths, and fingerprints remain private.

The inventory treats relationship mode as stored package evidence only. It does not resolve, retrieve, follow, validate, evaluate, or render links, and it makes no reachability or safety claim.

Validation included 44 passing tests, Ruff, reproducible wheel/source builds from the tagged commit, Twine checks, green Python 3.11/3.13/package CI, and an isolated-install profile of an independent public hyperlink fixture.

DocFence 0.17.0

Choose a tag to compare

@SybilGambleyyu SybilGambleyyu released this 01 Aug 10:39

DocFence 0.17.0 adds a privacy-safe inventory for complete stored Word HYPERLINK field references.

Highlights:

  • Counts field references and stories plus mutually exclusive literal-destination, literal internal-location-only, and dynamic-or-unparseable classes.
  • Keeps destinations, locations, ScreenTips, frame targets, instructions, paths, and fingerprints private.
  • Adds DFP047 to require no stored HYPERLINK fields and DFP048 to protect an approved field-reference baseline.
  • Reads complete simple and complex pre-separator instructions across supported stories, including current/deleted variants; it never resolves, follows, evaluates, or renders a target.

Validation: 43 tests passed locally; GitHub Actions passed on Python 3.11 and 3.13 plus distribution validation. Wheel and source archive were rebuilt twice from this release commit with a fixed SOURCE_DATE_EPOCH and matched byte-for-byte. SHA256SUMS covers the attached artifacts.

DocFence 0.16.0 — DOCVARIABLE field-reference inventory

Choose a tag to compare

@SybilGambleyyu SybilGambleyyu released this 01 Aug 10:14

DocFence 0.16.0 adds a privacy-safe inventory for stored Word DOCVARIABLE field references.\n\n- Detects complete simple and complex field instructions across supported stories, including current and deleted revision variants.\n- Reports aggregate reference/story, literal/nonliteral, and exact same-scope storage-association counts only; instructions, names, values, and paths remain private.\n- Handles Word's default * MERGEFORMAT suffix without evaluating a field.\n- Adds DFP045 (no DOCVARIABLE fields) and DFP046 (approved DOCVARIABLE field baseline).\n\nValidation: 41 tests, Ruff, clean wheel smoke against LibreOffice's public DOCVARIABLE fixture, reproducible wheel/sdist builds, and successful Python 3.11/3.13/build CI.\n\nRelease assets include SHA256SUMS for the wheel and source archive.

DocFence 0.15.0

Choose a tag to compare

@SybilGambleyyu SybilGambleyyu released this 01 Aug 09:44

DocFence 0.15.0 adds a privacy-safe inventory for stored Word document variables in Settings parts.

  • Profiles expose aggregate container, variable, and empty-value counts only.
  • Variable names and values stay inside private fingerprints, while same-count rewrites remain detectable.
  • DFP043 can require a handoff with no document-variable state; DFP044 protects an approved baseline.
  • Transitional and Strict Settings discovery, glossary-linked Settings, schema shape, required attributes, UTF-16 length limits, and malformed-state rejection are covered.

The release includes reproducible wheel and source artifacts plus SHA-256 checksums.

DocFence 0.14.0

Choose a tag to compare

@SybilGambleyyu SybilGambleyyu released this 01 Aug 09:25

DocFence 0.14 adds privacy-safe inventory and policy gates for Word editable-range permission markup. Reports surface only aggregate marker, pairing, editor-category, group, table-selector, and custom-XML-placement counts; raw editor identities and marker IDs remain private.