fix(meta-validate): состав конфигурации, а не наличие файла, решает уровень ссылки (#84)

Проверки 16 и 20 выбирали уровень по наличию файла, тогда как платформа судит по составу
конфигурации. Из-за этого валидатор ошибался в обе стороны: пропускал ссылку на форму
объекта, которого в конфигурации нет (WARN, exit=0 — платформа такую выгрузку не грузит),
и ложно отказывал на фрагменте частичной выгрузки, где файла формы нет намеренно.

Единое правило: ChildObjects отвечает за существование объекта, наличие файла — только за
полноту выгрузки. Нет в составе -> ERROR, в составе есть, а файла нет -> WARN. Уровень для
фрагмента остаётся мягким сознательно: один и тот же фрагмент грузится или нет в зависимости
от состояния конфигурации БД, которого валидатору не видно.

Матрица снята на платформе 8.3.24.1691 (полная и частичная загрузка, семь ситуаций).
Прогноз про загрузку убран из текста WARN — там он не гарантирован.

Состав читается поиском подстроки в границах секции ChildObjects, без разбора XML:
batch-режим порождает процесс на объект, и полная карта оплачивалась бы каждым объектом.

Корпусный прогон по acc_8.3.24 и erp_8.3.24 (33 895 объектов): расхождений до/после нет.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-08-22 12:34:45 +03:00
co-authored by Claude Opus 5
parent 0a0322faab
commit 7b40eb4c0b
24 changed files with 2442 additions and 73 deletions
@@ -0,0 +1,9 @@
{
"name": "Полная выгрузка: форма в ChildObjects, а файла формы нет — ошибка целостности",
"setup": "fixture:catalog-form-file-missing-full-tree",
"params": { "objectPath": "Catalogs/Товары.xml" },
"expectError": true,
"expect": {
"stdoutContains": "но файл формы отсутствует"
}
}