# ppt-master v5.1.0 - Product: ppt-master (https://whatsnew.fyi/product/ppt-master) - Vendor: hugohe3 - Date: 2026-08-28 - Version: v5.1.0 - Original notes: https://github.com/hugohe3/ppt-master/releases/tag/v5.1.0 - Permalink: https://whatsnew.fyi/product/ppt-master/releases/v5.1.0 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **changed** — Merge Fill Native PPTX and Enhance Native PPTX routes into one Edit Native PPTX route - **removed** — Remove legacy CLIs template_fill_pptx.py and native-enhance workflow - **changed** — Import existing decks with pptx_to_svg.py --roundtrip, edit page by page, and export with svg_to_pptx.py --roundtrip with byte-for-byte passthrough of unchanged pages - **removed** — Remove plainness exit clauses from Executor core and effects reference - **changed** — Style index no longer maps topics to restrained styles and drops its Typical context column - **removed** — Remove zero-image exit clauses across Strategist Step 4 Executor - **changed** — Stage 2 directions are catalog-informed again instead of producing restraint-only directions - **changed** — Write directions as what a page uses rather than as a look - **changed** — Announce capabilities instead of teaching them, demoting Strategist deliberation mandates to defaults and references - **added** — Add text_measure.py to expose the checker's width estimator at authoring time with measure, wrap, and box functions - **fixed** — Close checker's text-bounds blind spots by estimating canonical paragraph form instead of reporting as unverifiable - **changed** — Apply DrawingML wrapping headroom to module bounds - **fixed** — Fail overlapping direct-root modules with greater than 1 px overlap on both axes - **changed** — Overflow diagnostics now carry per-character width arithmetic and character fit count - **changed** — Make wrap match checker's headroom so wrapped paragraphs pass their intended gate - **fixed** — Font stacks export correctly with named CJK faces serving Latin glyphs when no named Latin face precedes - **added** — Add twelve objective checks comparing marker JSON with SVG fallback for native charts and tables - **fixed** — Fix uniform table borders no longer drawing diagonals in every cell - **fixed** — Fix ChartEx charts no longer emitting empty title or hardcoded Series 1 - **changed** — Original table payload survives marker validation during round-trip > [!IMPORTANT] > **Route change.** The former *Fill Native PPTX* and *Enhance Native PPTX* routes are merged into one **Edit Native PPTX** route, and their legacy CLIs (`template_fill_pptx.py`, the native-enhance workflow) are removed. Existing decks are now imported with `pptx_to_svg.py --roundtrip`, edited page by page, and exported with `svg_to_pptx.py --roundtrip`; unchanged pages pass through byte-for-byte. If you scripted the old commands, switch to the [Edit Native PPTX workflow](skills/ppt-master/workflows/edit-native-pptx.md). v5.0.0 replaced heuristic recall with vocabulary-led selection. This release fixes what that exposed in practice: decks that came out visibly plainer than the vocabulary allowed, text that overflowed its boxes, native charts and tables that drifted from their SVG previews, and an existing-deck path that patched OOXML instead of round-tripping it. ##### Generated decks stopped getting plainer Six consecutive Default decks used zero native presets, zero Boolean geometry, zero filters, and almost only rectangles and lines. The causes were in the prompts, not the capability, and are removed: - **Plainness exit clauses are gone from the always-loaded Executor core and effects reference** ("plain construction remains valid", "keep peer grids flat", "add no effect family", "lightest sufficient boundary"). Export mechanics are untouched and no quota or minimum shape count is added. - **The style index no longer maps topics to restrained styles.** Its "Typical context" column is dropped; a topic never selects a row. - **Zero-image exit clauses are removed** across Strategist → Step 4 → Executor. Text-only sources now acquire web mood/scene images and use icons when the page benefits, instead of defaulting to omission; `none` remains legal and exclusive. - **Stage 2 directions are catalog-informed again.** A fresh-session control deck showed that authoring directions before opening any catalog produced restraint-only directions with explicit decoration bans, and every page collapsed to photo + text + two rules; the revert restores the only channel that put carrier vocabulary in front of the Strategist at direction time. - **Directions are written as what a page uses, not as a look.** Cards, icons, colour chips, and soft shadows are legitimate carriers rather than "web look" markers; an everyday device menu returns as reference vocabulary. - **Capabilities are announced, not taught.** Icon library and lettering guidance state what exists; page fit decides use. Strategist deliberation mandates are demoted to defaults and references, and `docs/rules/prompt-style.md` now states the admission criterion for a prohibition: only what affects SVG validity or PPTX export may be a hard rule. ##### Text fits its box - **`text_measure.py`** exposes the checker's width estimator at authoring time (`measure`, `wrap`, `box`), so authors calibrate one representative line per text role before writing coordinates instead of bouncing off the bounds gate. - **The checker's text-bounds blind spots are closed.** The canonical "first line + positioned tspans" paragraph form is estimated instead of reported as unverifiable; DrawingML wrapping headroom applies to module bounds; overlapping direct-root modules (>1 px on both axes) now fail. - **Overflow diagnostics carry arithmetic**: per-character width at that size and how many characters fit the container. - **`wrap` matches the checker's headroom**, so a wrapped paragraph passes the gate it was wrapped for. - **Font stacks export correctly.** A named CJK face now serves Latin glyphs when no named Latin face precedes it; "Microsoft YaHei, sans-serif" no longer sends digits to Segoe UI. How a `font-family` stack maps to PPTX faces is documented. ##### Native charts and tables match their previews - **Parity is projected, not assumed.** Twelve objective checks compare the marker JSON with the SVG fallback (header bands, column fills, first-column emphasis, border topology, _[Truncated at 4000 characters — full notes: https://github.com/hugohe3/ppt-master/releases/tag/v5.1.0]_