fix(xdto-compile,xdto-validate): признак фиксированного значения без самого значения

В модели XDTO fixed — булев признак, а значение лежит в default; в XML-схеме
fixed="V" совмещает и признак, и значение. Компилятор оба идиома принимал, но
не проверял принятое: зеркало xdto:fixed="true" без default собиралось молча
в пакет, который платформа отвергает («Отсутствует фиксированное значение
свойства»). Прощающий ввод был сделан наполовину.

xdto-validate v1.1 — два ERROR: значение попало в признак (fixed не булев)
и признак без значения. Формулировка второго повторяет платформенную дословно,
чтобы отказ загрузки и наш вывод читались как одно и то же.

xdto-compile v1.1 — то же условие предупреждением на сборке, то есть на шаг
раньше db-update, где починить дешевле.

Кейсы: оба идиома плюс только default и атрибут (загружается в базу);
зеркало без значения — проверка диагностики, из платформенной верификации
исключено штатным skipPlatformVerify, пакет невалиден by design.

Правило откалибровано корпусом (760 пакетов, оба рантайма): 0 ложных
срабатываний, состав предупреждений не изменился. Round-trip остался
760/760 байт-в-байт.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-07-26 16:25:38 +03:00
co-authored by Claude Opus 5
parent 20d86ae10f
commit 79beba2d1f
17 changed files with 450 additions and 6 deletions
@@ -0,0 +1,17 @@
{
"name": "fixed без значения и значение внутри fixed — платформа такой пакет отвергает",
"caseFiles": [
"pkg-fixed/XDTOPackages/fixedbad.xml",
"pkg-fixed/XDTOPackages/fixedbad/Ext/Package.bin"
],
"params": { "packagePath": "pkg-fixed/XDTOPackages/fixedbad" },
"expectError": true,
"expect": {
"stdoutContains": [
"Отсутствует фиксированное значение свойства 'БезЗначения'",
"Свойство \"ЗначениеВПризнаке\": fixed=\"Р\""
],
"stdoutNotContains": ["Правильное", "НеФиксированное"]
},
"noSnapshot": "навык только читает — сравнивать нечего, проверка через stdoutContains"
}