Minor release from two focused rounds since v6.4.0: the Create Template / use-template flow was audited and reworked, and the Edit Native PPTX route was exercised on real government and university decks (multi-master, source animations, native charts, SmartArt, narration, revision rounds) and fixed wherever it broke. Every change is backed by a reproduced defect or a documented contract gap; no route was added or removed.
Edit Native PPTX (round-trip import → edit → export)
- Decks that could not be exported at all now export: a built-in layout no slide uses with a collapsed
<a:ext cx="0" cy="0"/>placeholder no longer fails the native structure contract, and an untouched page holding a full-canvas picture no longer loses that picture to background promotion when narration forces a rebuild (6509129). - Motion overlays diff against the import baseline field by field: a sidecar row that omits
transitionkeeps the source transition even though the importer writesdefaults.transition: none;animation.effect: nonereally removes the source timing;-tand effect-only rows keep the sourceadvClick/advTm; a user-edited default is a deck-wide request (a7cb776). - Narration injects into a slide whose timing tree is a bare
tmRoot, blocks on natively preserved click animations with the output stem, source slide and shape ids named, replaces its own earlier audio instead of stacking a second autoplay track, matches imported audio to output pages through the manifest, and reuses its media name across re-recordings (a7cb776, b560f85). - Fidelity: same-deck links on rebuilt objects keep their source destination through text edits, page plans and adoption; Master/Layout refs refuse edits instead of vanishing while the original keeps rendering; ancestor transform / opacity / inherited style join the source-ref diff so a moved wrapper actually moves; a paint-only edit keeps the native text body (auto-numbering, autofit, fields, language); custom-show selections and actions close after a page plan; SmartArt, OLE and other unsupported graphic frames carry the atomic proxy marker the route always promised (57f7623).
- Notes: a new note for one page no longer overwrites another page's notes part; round-trip workspaces match notes by exact stem and print the real count;
--no-notesremoves every notes part, master, relationship and override; imports writenotes/<stem>.mdonly (73bc51a, b560f85). - Packages: replaced chart parts, workbooks and slide relationships the slide XML never used are pruned on edited round-trip pages and on every generated slide (structured export left the promoted master background registered on each slide); the delivery check counts slides, notes, masters and layouts by content type, reports dangling custom-show references as errors and unreferenced slide relationships as advisories (57f7623).
- Quality gate:
svg_quality_checker.py --roundtrip --jsonwrites tovalidation/and shares its fingerprint with the exporter, so a round-trip export can reportquality_gate=passed; the checker measures importedlines/paragraphstext row by row, stops re-estimating source text that only moved vertically, enforces the exporter's one-text semantic-shape contract early, and warns when an edited page rewrites a table the importer could not carry natively (73bc51a, 6509129). - Route documentation states the identity boundary, both imported text models, what skipping
--native-charts-and-tablesreally ships, the notes consumer contract, thespid→shape-<id>mapping, retention of every Master/Layout under a page plan,--primary-language, and a revision-round paragraph (52a2801, 5581c85).
Create Template and template consumption
- Installation is staged with rollback and a machine receipt (
template_install.json); the Confirm UI freezes selected-root snapshots, accepts several explicit roots, binds stages by content and verifies the installation itself — the handoff sidecar and its two commands are gone (6de7939, f58f846). - Type A mirror is a pure tool path: zero-edit import → materialize → checker → preview with a factual spec skeleton; the Type B promise is withdrawn (f58f846).
- Template mode checks carrier baselines against slot bounds, mirror text targets, and offers an advisory
--slot-capacity-report; translucent full-canvas rects are not backgrounds; CJK literal font names never occupy the Latin slot; layout-fixed atoms leave the sparse display-size quota; three bundled deck templates gained taller chapter-number slots (be80892, f58f846). - Structured export keeps custom placeholder faces, re-skins master backgrounds from public pages, compiles typed chart/table slots natively in previews, rejects placeholder slots as Morph endpoints at validate, and compiles zero-padded page numbers to slide-number fields (6de7939, 6e3ce9c).
- Prompts: Stage 1 keeps the goal rather than blacking out template facts; Create Template gains a prototype review round; slot fit is checked before the typography lock; Quick names the typed-slot export flag;
import-sources --no-image-propagationkeeps reference bitmaps out ofimages/(6627d92, f58f846, 6e3ce9c).
Tooling
notes_to_audio.pyaccepts--rate -5%(and--pitch/--volume, now passed to edge-tts) with a space or=(73bc51a).- Test subprocess output decodes as UTF-8 regardless of the parent locale; the first
svg_outputpage is closed deterministically when its root language is read (7879bbc, c6ae489). .env.exampledocuments sponsor relay shortcuts (b44cdfa).
Install
Load skills/ppt-master/ as a skill (the attached ppt-master-skill-v6.5.0.zip contains only that directory) or install the plugin from the repository's marketplace.