mirror of
https://github.com/storytold/deckcraft.git
synced 2026-10-24 18:46:57 -06:00
The writer emitted the legacy comment part only: replies were flattened into sibling comments, the resolved flag was dropped. Modern PowerPoint decks carry a second, threaded part (p188) as well - and DeckCraft read both, importing every comment twice. Export now writes the modern threaded part (p188:cmLst, with the slide's commentRel anchor ext and the modern authors part) next to the flattened legacy part, the same pair of parts PowerPoint itself writes: older readers keep the legacy view, PowerPoint 2021+ and DeckCraft read threads, replies and resolved state. The reader prefers the modern part when both are present and scales modern positions as EMU instead of legacy 1/8 pt, so real PowerPoint decks stop double-importing their comments and keep their marker positions. Comment ids are deterministic GUIDs from the existing tables::guid, so exports stay reproducible without a new dependency. Known limitation for a follow-up: comments anchor with p188:unknownAnchor (schema-valid) rather than a slide moniker, which needs part identity the model does not have yet. Tests: threads plus resolved state round-trip on top-level comments and replies, both parts and the anchor-rel wiring asserted in the raw package, part numbering with comment-free slides skipped, legacy-only and modern-only packages import each with their own position units, and XML-special characters survive the trip.