v0.4.0
Model-driven reusable-fragment population completes the comprehension vertical,
plus native SmartArt and PowerPoint cell merges. Brand Profiles from 0.1.x-0.3.0
keep working unchanged; an absent comprehension is still the deterministic path.
Added
- The reusable-fragment registries (
components/sections) are now
populated by the model through the fail-closedcomprehendboundary - no
hardcoded catalog. Acomprehendproposal may carry afragmentslist (each
{ref, kind: component|section, purpose?, blocks});mergevalidates it
fail-closed (every block parses as a known IID primitive; a nested
component/sectionref must resolve to another fragment proposed in the same
comprehension;(kind, ref)is unique; cyclic references are rejected) and, on
a clean pass, DERIVES the entries intoprofile['components']/['sections']-
the registriesexpand_componentsalready inlines. The registries are rebuilt
deterministically from the (single-source) comprehension on every clean merge,
so re-comprehending the same proposal is byte-idempotent and a fragment-less
comprehension leaves them empty. A fragment is presentation-free IID, so a
validated proposal resolves through the same brand chokepoint as inline content
and cannot widen the brand guarantee. Thecomprehend-inputbundle now surfaces
advisoryfragment_candidates(recurring layouts/styles derived cheaply from
the existingartifact_catalog, possibly empty) as a hint; the model does the
semantic detection. The shared comprehension prompt gains a fifth question + a
worked example, byte-identical across the three skills. - Fragment
slotsare now substituted: a{{name}}token in a fragment's
template text is filled from the referencingcomponent/sectionblock's
slotsat expansion time (an unfilled or null token resolves to the empty
string and is never leaked). Substitution deep-copies, so it never mutates the
shared profile registry. - PowerPoint tables now honor
colspan/rowspan: a spanning cell (e.g. a banner
across columns) merges the covered grid cells in the native table, matching the
docx table writer. Previously pptx rendered a full ungrouped grid while docx
merged. smartartblocks are now authored as a NATIVE, on-brand diagram instead of
degrading to text - completing native rendering for every block type. On pptx
the diagram is real autoshapes (a chevron row for a process/flow, a stacked
rounded-box list otherwise), inheriting the deck theme's accent fill. On docx
it is a brand-styled table (a process is a single row, one cell per step; a list a
single column, one row per node). A node'schildrenare preserved (sub-lines in
the pptx shape, inlined in the docx cell); an empty diagram degrades loudly. The
diagram is rendered (not editable SmartArt with the layout-engine parts).