v0.2.3 — text-aware placement
Captions are now guaranteed never to cover text.
- Every text frame (title, body, plain text boxes / auto-shapes) is a 2D obstacle, narrowed to its estimated visible-text region (anchor-aware).
- Auto-sized caption height is accounted for, so a multi-line caption never spills onto a neighbour.
- The own picture is matched by geometry (not the non-unique pic_id), so a caption never lands inside a different stacked picture.
- New
inside-bottomfallback: when no text-clear external slot exists, the caption goes in the picture's own bottom strip rather than over text or skipped. verify.pyis now a five-pattern gate (text-overlap, footer, in-picture, caption-caption, missing-caption).
Verified across a 49-deck corpus: 0 text-overlap / in-picture / caption-caption / off-slide / footer defects, confirmed by an independent adversarial cross-check. See CHANGELOG.md.