feat(meta-validate): проверка существования ссылочных типов (Фаза 1.2, v1.8)

Check 16: все <v8:Type> вида CatalogRef.X / DocumentRef / EnumRef / DefinedType /
ChartOf*Ref / BusinessProcessRef / ExchangePlanRef / TaskRef проверяются на наличие
объекта в конфигурации (Dir/X.xml или папка Dir/X).

WARN-уровень, не error: ложное срабатывание на частичных выгрузках хуже пропуска.
Расширения (CFE) пропускаются по маркеру ConfigurationExtensionPurpose — их типы
ссылаются на объекты базовой конфигурации, отсутствующие в выгрузке расширения.
Дедуп по ref-ключу; маппинг тип→каталог согласован с TYPE_TO_DIR (verify-snapshots).

Тесты: valid-reftype-resolves (self-ref, -Detailed, OK) + warn-reftype-missing
(WARN, exit 0). meta-validate 18/18 ps1+py. Анти-дрейф OK.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-07-11 20:41:53 +03:00
parent f8cd7dd681
commit b9ed48ccf2
4 changed files with 142 additions and 2 deletions
@@ -0,0 +1,17 @@
{
"name": "Ссылочный тип реквизита разрешается в объект конфигурации (Check 16)",
"setup": "empty-config",
"preRun": [
{
"script": "meta-compile/scripts/meta-compile",
"input": { "type": "Catalog", "name": "ТестСсылка", "attributes": ["Связанный: CatalogRef.ТестСсылка"] },
"args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
}
],
"params": { "objectPath": "Catalogs/ТестСсылка" },
"args_extra": ["-Detailed"],
"expect": {
"stdoutContains": "16. Reference types:",
"stdoutNotContains": "16. Ссылочный тип"
}
}
@@ -0,0 +1,15 @@
{
"name": "Валидатор предупреждает о несуществующем ссылочном типе реквизита (Check 16)",
"setup": "empty-config",
"preRun": [
{
"script": "meta-compile/scripts/meta-compile",
"input": { "type": "Catalog", "name": "ТестСсылкаБитая", "attributes": ["Контрагент: CatalogRef.НетТакогоСправочника"] },
"args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
}
],
"params": { "objectPath": "Catalogs/ТестСсылкаБитая" },
"expect": {
"stdoutContains": "16. Ссылочный тип 'CatalogRef.НетТакогоСправочника'"
}
}