Две bug-фиксы для шаблонов:
1. PS-quirk: \$widths = if (\$t.widths) { @(\$t.widths) } else { @() }
разворачивал одно-элементный массив в строку, после чего \$widths[0]
возвращал первый Char (например '1' для "15.625"), а [double][Char]'1'=49.
Заменил if-expression на обычный if-statement.
2. Indent в <dcsat:appearance>: компайлер ставил 4 таба вместо 5
(и 5 вместо 6 у items внутри). Поправлено в обоих рантаймах.
sample30: −552 строки (2666 → 2114).
Платформа эмитит <useRestriction>true|false</useRestriction> у каждого
параметра безусловно. Раньше compile эмитил только если =true, что
приводило к LOST <useRestriction>false</useRestriction> в roundtrip.
Эффект на sample30: −84 строки diff.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Реальные отчёты непоследовательны: одни filter/item имеют
<viewMode>Normal</viewMode> с userSettingID, другие — нет (зависит от
момента редактирования через UI). Стратегия "compile добавляет implicit
Normal когда есть userSettingID" даёт ложные ADDED строки в bit-perfect.
Меняю на корректную модель:
- decompile сохраняет viewMode даже = 'Normal' если node физически
присутствует в XML (object form переходит автоматически)
- compile эмитит viewMode только если явно задан в JSON
Применено к: filter (item + group), dataParameters, conditionalAppearance,
selection items, order items.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Платформа эмитит <viewMode>Normal</viewMode> автоматически когда у
элемента есть <userSettingID> (это сигнал пользовательской настройки).
Теперь compile делает то же:
- filter item, dataParameters item, conditionalAppearance item, table
axis (column/row/point/series) — все эмитят Normal если userSettingID
задан и явный viewMode не указан
Кроме того: FilterItemGroup теперь поддерживает свой viewMode /
userSettingID / presentation / userSettingPresentation (наравне с
обычными filter items).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
DSL расширения (item-level — паттерн object form расширен):
- selection: {field, viewMode}
- order: {field, direction, viewMode} (новая object form)
- structure group: {type:group, viewMode, itemsViewMode}
DSL расширения (block-level на settings):
- selectionViewMode, filterViewMode, orderViewMode
- conditionalAppearanceViewMode
- itemsViewMode (на самих settings)
Compile эмитит viewMode/itemsViewMode только если явно задано в JSON —
это позволяет decompile сохранить точное наличие/отсутствие из XML и
получить bit-perfect round-trip (платформа эмитит эти теги
контекстно — на ABCXYZ-стиле для каждого блока, а в простых отчётах
без пользовательских настроек — не эмитит).
Дополнительно:
- Пустой LocalStringType теперь эмитится как self-closing (как платформа)
- Убран default order/selection=["Auto"] на StructureItemGroup
(раньше compile дефолтил, теперь эмитит только если задано)
В SKILL.md не упоминаем — фича редкая. Полное описание в spec.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>