Release note · August 3, 2026

PowerPoint’s OLE and media actions should not be an unknown bucket

By SybilGambleyyu · SlideFence 0.2.0

Not every important PowerPoint interaction is a macro, a program launch, or an external-file link. A stored action can also ask an OLE object to perform a verb or invoke a media action. Those are distinct review surfaces. Treating them only as “some other reserved action” makes a report less useful at exactly the point where a reviewer needs to decide whether a baseline changed.

Microsoft’s action-button guidance describes object actions for OLE objects and media-related actions alongside slide navigation, links, programs, and macros. The practical lesson is narrow: an OLE or media declaration is stored presentation state worth reviewing. It is not proof that the referenced object will activate or that media will play.

A transparent refinement, not a hidden reinterpretation

SlideFence 0.1.0 already kept unknown PowerPoint reserved actions visible in a safe aggregate bucket. While validating the public macro-enabled python-pptx action-properties fixture, that bucket contained one ppaction://ole?verb=… declaration and one ppaction://media declaration. Version 0.2.0 refines those two values into explicit redacted categories: ole_verb_action_count and media_action_count.

The fixture has 15 stored actions in total. The new release identifies one each for macro, program, external file, external presentation, OLE verb, and media, leaving no generic reserved-action remainder. The source fixture, its checksum, and the bounded observation record are public in the validation record; neither the review report nor this release needs to disclose its action targets or operational identifiers.

Two readable policy gates

Teams that do not expect either behavior can make the boundary explicit:

version: 1
rules:
  require_no_presentation_ole_verb_actions: true
  require_no_presentation_media_actions: true
  no_presentation_interaction_changes: true

The OLE-verb gate is critical because it records a stored object-action declaration. The media gate is high severity because it records an interaction action without equating it to playback or execution. Both retain the tool’s privacy contract: public output contains counts and fixed classes, never the raw action string, OLE verb, relationship ID, target, URL, shape ID, slide text, or payload bytes.

What the result does not say

SlideFence does not open PowerPoint, render a deck, follow a relationship, invoke a program, execute VBA, activate an OLE object, play media, authenticate a user, inspect client policy, or predict a Trust Center outcome. A stored action is evidence of a declaration—not evidence that an endpoint, object, codec, macro, or viewer will honor it. The tool is useful precisely because its result stops at the boundary it can establish.

Use the release

git clone https://github.com/SybilGambleyyu/slidefence.git
cd slidefence
git checkout v0.2.0
python -m venv .venv
.venv/bin/python -m pip install -e '.[dev]'

slidefence profile approved.pptm --format markdown
slidefence diff approved.pptm candidate.pptm --format json --output report.json
slidefence check approved.pptm candidate.pptm --policy slidefence.yml

SlideFence 0.2.0 has 15 synthetic adversarial regressions, a passing hosted Python 3.11–3.13 matrix, package checks, fresh wheel/source-distribution installs, and a direct remote-release asset verification against the public action-properties fixture. Read the 0.2.0 release, the policy reference, or the threat model for reproducible details and limits.