fix(meta-info,meta-decompile): xs:base64Binary без квалификаторов — двоичные данные, не хранилище

Вчерашняя правка исходила из того, что xs:base64Binary без BinaryDataQualifiers — вторая
форма ХранилищаЗначения. Спросили платформу: конфигурация с таким узлом загружается и
выгружается обратно как xs:base64Binary с Length 0 / AllowedLength Variable, то есть как
БЕЗЛИМИТНЫЕ двоичные данные. ХранилищеЗначения — отдельный узел v8:ValueStorage.

- meta-info: xs:base64Binary снова всегда ДвоичныеДанные (правка отменена, замер записан
  в комментарий).
- meta-decompile: узел без квалификаторов теперь возвращается как BinaryData(0), а не
  ValueStorage — раньше раундтрип молча менял тип реквизита. Проверено: пересборка из
  полученного DSL даёт байт в байт то же, что выгрузила платформа.
- Кейс и фикстура переименованы по факту и стали полной конфигурацией: теперь кейс доезжает
  до платформы в verify-snapshots (раньше падал с «конфигурации для загрузки нет»).

check-uuid-invariant: добавлен сценарий внешнего источника — правки идут в два файла, и
пересборка файла источника дала бы ему новый uuid, осиротив существующие таблицы. Проверка
не холостая: намеренная порча uuid источника гард роняет.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBsZA5cr2WFThtgp7i5WVi
This commit is contained in:
Nick Shirokov
2026-09-06 20:02:05 +03:00
co-authored by Claude Opus 5
parent b4bc02bc98
commit 11c0450d2a
18 changed files with 663 additions and 44 deletions
@@ -1,4 +1,4 @@
# meta-info v1.13 — Compact summary of 1C metadata object
# meta-info v1.14 — Compact summary of 1C metadata object
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
[CmdletBinding(PositionalBinding=$false)]
param(
@@ -233,12 +233,10 @@ function Format-SingleType([string]$raw, $parentNode) {
}
"v8:ValueStorage" { return "ХранилищеЗначения" }
"v8:UUID" { return "УникальныйИдентификатор" }
"xs:base64Binary" {
# ДвоичныеДанные только при своих квалификаторах: без них это вторая форма
# ХранилищаЗначения, которую платформа принимает (так же различает meta-decompile).
$bq = $parentNode.SelectSingleNode("v8:BinaryDataQualifiers", $ns)
if ($bq) { return "ДвоичныеДанные" } else { return "ХранилищеЗначения" }
}
# xs:base64Binary — всегда ДвоичныеДанные, и без квалификаторов тоже: замерено
# на 8.3.24.1691 — такой узел платформа загружает и выгружает обратно как безлимитные
# двоичные данные (Length 0, AllowedLength Variable), а не как ХранилищеЗначения.
"xs:base64Binary" { return "ДвоичныеДанные" }
"v8:Null" { return "Null" }
default {
# Normalize d5p1:/dNpN: -> cfg: