A clip group whose clipping path is type with a fill or stroke lost that
paint when a group around it had a geometry effect. Outlining the type
for the effect replaced it with a group of glyph outlines, and a group
paints nothing as a clipping path. Distort effects lost it on the canvas
and in SVG and PDF; Transform effects that only move lost it in SVG and
PDF when other type in the group stayed type.
The type's outlines now clip, its fills become art behind the clipped
art inside the clip, and its strokes become art over it outside the
clip, as the canvas draws an unaffected clip group.
Merge current main and retain both the Pencil snapping documentation and Tech Circuit library evidence. Only docs/mcp.md required manual conflict resolution. Focused checks passed: no conflict markers or whitespace errors, all 28 catalogs retain four unique nonempty labels, and brush implementation/tests remain unchanged. No full local Cargo CI rerun.
After Select All in a threaded story whose edited frame is empty, the
panel's commands style the text of every frame, but the checkbox rows,
Stylistic Sets and the East Asian items read only the empty frame. They
now read the runs of every frame, leaving out runs with no text while
any run has text, so a feature the story's text has shows checked and a
click turns it off.
An action or journal entry recorded before Scale and Reflect followed the
turned bounding box has no basis value. Replayed, such a step now acts along
the page's axes, as it did when it was recorded; steps recorded now carry
basis "box" and replay along the box. The built-in Reflect Horizontal action
names basis "box", so it keeps reflecting across the box's own axis.
The symbol test that reflects a turned instance names basis "page", which
is the reflection it was written for.
Object › Distribute follows Object › Align and lists Horizontal
Distribute Left, Center and Right, Vertical Distribute Top, Center and
Bottom, Horizontal Distribute Space and Vertical Distribute Space. Each
item runs the button's `align.distribute*` command, so it uses Align To,
the key object and the Distribute Spacing value, and with the Artboard
tool chosen it spaces the selected artboards.
Unit::parse took one level of recursion per + - * / sign, so a text such
as "1+1+...+1" with 200,000 terms overflowed the stack and aborted the
process. Every number field, parse_number and every command parameter read
as a length went through it.
Text with more than 128 + - * / signs now reads as nothing; text with 128
or fewer reads as before. docs/mcp.md states the limit for length strings.
The test a_very_long_expression_reads_as_nothing aborted with a stack
overflow before the change.
At a Type tool caret the panel's commands style all of the text, but the
checkbox rows, Stylistic Sets and the H or V Style and Roman Italics
items showed only the caret's style. A click could then turn a feature
off for the whole text while most of it did not have the feature. At a
caret they now read every character of the text: a mixed row shows a
dash, a mixed item shows unchecked, and a click turns the feature on
throughout.