feat(meta-validate): базовая проверка нераспознанных валидных типов + прощающий ввод плоских объектов (Фаза 1.4, v1.9)

20 валидных типов метаданных без глубоких правил (Subsystem/Role/CommonForm/
CommonCommand/CommandGroup/CommonAttribute/CommonTemplate/CommonPicture/
SessionParameter/SettingsStorage/FilterCriterion/FunctionalOption/
FunctionalOptionsParameter/Language/Style/StyleItem/WSReference/XDTOPackage/
DocumentNumerator/Sequence) раньше падали как "Unrecognized" + exit 1 — ложная
ошибка на валидном объекте. Теперь для них базовая структурная проверка
(root/uuid + Name-идентификатор) с ранним выходом, без type-specific правил.
Имена типов взяты из LocalName реальных файлов корпуса. По-настоящему неизвестный
тип по-прежнему отвергается.

Побочно: прощающий ввод для плоских объектов (один .xml без папки —
SessionParameter, CommonAttribute, DefinedType, ...) — раньше не находились по
голому имени Dir/Name (fallback покрывал только папочные Dir/Name/Name.xml),
добавлено дописывание .xml.

Тесты (фикстуры не самописные): valid-sessionparameter-basic (meta-compile preRun) +
real-erp-sessionparameter (external, скип на Mac) + error-unknown-type (реальный
каталог корпуса с переименованным корневым тип-элементом). meta-validate 21/21 ps1+py.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-07-11 21:05:51 +03:00
parent b9ed48ccf2
commit 9b5908c3b2
6 changed files with 181 additions and 4 deletions
@@ -0,0 +1,6 @@
{
"name": "Валидатор всё ещё ловит по-настоящему неизвестный тип метаданных (гейт не стал слепым)",
"setup": "fixture:unknown-type",
"params": { "objectPath": "Catalogs/Неизвестный.xml" },
"expectError": true
}
@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.17">
<НесуществующийТип uuid="82f554e2-86f6-4bf9-8c7d-d1499fc88bc4">
<InternalInfo>
<xr:GeneratedType name="CatalogObject.РолиКонтактныхЛиц" category="Object">
<xr:TypeId>d394a75c-51d2-457e-a698-e16a37831b71</xr:TypeId>
<xr:ValueId>0d654e63-ef5d-4c55-86e8-6775655ae10a</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="CatalogRef.РолиКонтактныхЛиц" category="Ref">
<xr:TypeId>e486d1d3-8e16-40d1-902d-ae6ec9ac0740</xr:TypeId>
<xr:ValueId>07c1b906-d491-4175-bc52-69819c08049e</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="CatalogSelection.РолиКонтактныхЛиц" category="Selection">
<xr:TypeId>f1d3d2ef-8043-4aad-a124-9d747aa8b45c</xr:TypeId>
<xr:ValueId>29896634-18fc-4101-a767-26a1c5755b08</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="CatalogList.РолиКонтактныхЛиц" category="List">
<xr:TypeId>930a4a7f-c496-4c5c-964a-5d80fb5636c3</xr:TypeId>
<xr:ValueId>09212a77-1293-4cca-9e15-3951959ecfcc</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="CatalogManager.РолиКонтактныхЛиц" category="Manager">
<xr:TypeId>d2a75006-e316-4837-9179-fa2385a20203</xr:TypeId>
<xr:ValueId>f4c7d49d-69fd-4f35-9aa9-51b70bc97b9b</xr:ValueId>
</xr:GeneratedType>
</InternalInfo>
<Properties>
<Name>РолиКонтактныхЛиц</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Роли контактных лиц</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Hierarchical>false</Hierarchical>
<HierarchyType>HierarchyFoldersAndItems</HierarchyType>
<LimitLevelCount>false</LimitLevelCount>
<LevelCount>2</LevelCount>
<FoldersOnTop>true</FoldersOnTop>
<UseStandardCommands>true</UseStandardCommands>
<Owners/>
<SubordinationUse>ToItems</SubordinationUse>
<CodeLength>9</CodeLength>
<DescriptionLength>50</DescriptionLength>
<CodeType>String</CodeType>
<CodeAllowedLength>Fixed</CodeAllowedLength>
<CodeSeries>WholeCatalog</CodeSeries>
<CheckUnique>true</CheckUnique>
<Autonumbering>true</Autonumbering>
<DefaultPresentation>AsDescription</DefaultPresentation>
<Characteristics/>
<PredefinedDataUpdate>Auto</PredefinedDataUpdate>
<EditType>InList</EditType>
<QuickChoice>false</QuickChoice>
<ChoiceMode>BothWays</ChoiceMode>
<InputByString>
<xr:Field>Catalog.РолиКонтактныхЛиц.StandardAttribute.Description</xr:Field>
<xr:Field>Catalog.РолиКонтактныхЛиц.StandardAttribute.Code</xr:Field>
</InputByString>
<SearchStringModeOnInputByString>Begin</SearchStringModeOnInputByString>
<FullTextSearchOnInputByString>DontUse</FullTextSearchOnInputByString>
<ChoiceDataGetModeOnInputByString>Directly</ChoiceDataGetModeOnInputByString>
<DefaultObjectForm/>
<DefaultFolderForm/>
<DefaultListForm/>
<DefaultChoiceForm/>
<DefaultFolderChoiceForm/>
<AuxiliaryObjectForm/>
<AuxiliaryFolderForm/>
<AuxiliaryListForm/>
<AuxiliaryChoiceForm/>
<AuxiliaryFolderChoiceForm/>
<IncludeHelpInContents>false</IncludeHelpInContents>
<BasedOn/>
<DataLockFields/>
<DataLockControlMode>Automatic</DataLockControlMode>
<FullTextSearch>Use</FullTextSearch>
<ObjectPresentation/>
<ExtendedObjectPresentation/>
<ListPresentation/>
<ExtendedListPresentation/>
<Explanation/>
<CreateOnInput>Use</CreateOnInput>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<DataHistory>DontUse</DataHistory>
<UpdateDataHistoryImmediatelyAfterWrite>false</UpdateDataHistoryImmediatelyAfterWrite>
<ExecuteAfterWriteDataHistoryVersionProcessing>false</ExecuteAfterWriteDataHistoryVersionProcessing>
</Properties>
<ChildObjects/>
</НесуществующийТип>
</MetaDataObject>
@@ -0,0 +1,9 @@
{
"name": "Валидация реального SessionParameter ERP (базовая структурная проверка)",
"setup": "external:C:/WS/tasks/cfsrc/erp_8.3.24",
"params": { "objectPath": "SessionParameters/АвторизованныйПользователь" },
"args_extra": ["-Detailed"],
"expect": {
"stdoutContains": "базовая структурная проверка"
}
}
@@ -0,0 +1,16 @@
{
"name": "meta-compile создаёт SessionParameter → meta-validate проходит базовую проверку, а не Unrecognized (Фаза 1.4)",
"setup": "empty-config",
"preRun": [
{
"script": "meta-compile/scripts/meta-compile",
"input": { "type": "SessionParameter", "name": "ТекущийПользователь", "valueType": "CatalogRef.Пользователи" },
"args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
}
],
"params": { "objectPath": "SessionParameters/ТекущийПользователь" },
"args_extra": ["-Detailed"],
"expect": {
"stdoutContains": "базовая структурная проверка"
}
}