e127cebb49
По протоколу регресс-прогона (46 вызовов против 90 в прошлом): feature_delete — ksDocument3D.DeleteObject + RebuildDocument, зависимые уходят каскадом. Неудачная проба больше не требует пересобирать документ (у субагента таких кругов было три). align/vAlign у примитива text: сервер строит, замеряет и сдвигает надпись сам. Ловушка, стоившая двух заходов: ksMoveObj и ksDeleteObj по ссылке от ksConvertTextToCurve возвращают успех и не делают ничего — двигать надо по ссылке ТЕКСТА, а габарит после сдвига считать арифметикой (по текстовой ссылке рамка идёт по ячейке). Поймано тестом, который сверяет заявленный габарит с выдавленной геометрией. list_edges: отбор по типу и координатному окну + концы рёбер в списке. Так адресуется нижний контур под фаску, который иначе не выбрать: индексов не отфильтровать, точек не угадать. Навык: wf меряет пропорцию крупно (1.0→1.25 = +29 %), но квантован ступенями — точную ширину набирают height; прирост каймы указан НА СТОРОНУ и зависит от начертания, а не от шрифта; добавлено предупреждение, что primitive(subtract) режет наехавшие буквы.