fix(meta-compile,meta-edit): ссылочный тип корневым cfg:, как пишет платформа

Эмитился локальный xmlns:d5p1 на тот же URI, что уже объявлен в шапке файла.
Формально эквивалентно (значим URI, а не префикс), платформа принимала — но
первый же цикл «загрузить в базу → выгрузить» переписывал КАЖДЫЙ ссылочный тип
в cfg:, то есть давал diff-шум при неизменной семантике. Форма пришла из СКД,
где cfg: действительно не работает; в метаданных такого ограничения нет.

Радиус оказался втрое меньше прежней оценки: form-compile в него НЕ входил —
он уже писал cfg:, а все его d5p1 относятся к чужим пространствам
(txtedt/chart/geo/graphscheme/data-analysis), которых в корне нет и где
локальное объявление законно.

meta-edit берёт префикс из объявлений КОРНЯ правимого файла, а если URI там не
объявлен — остаётся на самодостаточной локальной форме. Это не перестраховка:
ссылочный тип живёт в ТЕКСТЕ узла, поэтому XML-слой про префикс не знает и сам
объявление не добавит — проверено, .NET на документе без xmlns:cfg молча пишет
неразрешимый префикс. Та же природа объясняет удалённый костыль в meta-edit.py:
lxml выбрасывал xmlns:d5p1 как «неиспользуемый», и его возвращали регуляркой
после сериализации.

Синхронно снята нормализация ref-префикса в раундтрип-харнесе (debug/, вне git):
она сводила cfg: и d5p1: к одному REF: и делала харнес слепым ровно к тому,
ради чего затевался переход.

Проверка:
- живой цикл через базу (db-create → db-load-xml → db-dump-xml): выгрузка
  платформы совпала с нашими исходниками ПОСТРОЧНО, расхождений ноль;
- корпусный раундтрип 4897 объектов уже БЕЗ маски префикса: match не просел
  (150/1640/151/2600/314/42), порядок ≠ 0, TOTAL diff lines 0;
- юнит-тесты 648/648 ps1, 645/648 py;
- 1С-сертификация meta-edit 17/17 на платформе 8.3.24;
- дрейф эталонов 48 файлов, в диффе нет ни одной строки кроме d5p1: → cfg:;
  skd-* не затронуты ни одним файлом (там cfg: не работает).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-08-06 16:28:47 +03:00
co-authored by Claude Opus 5
parent a3aa8fe87c
commit 683e370938
52 changed files with 172 additions and 127 deletions
@@ -89,7 +89,7 @@
</Synonym>
<Comment/>
<Type>
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:CatalogRef.Организации</v8:Type>
<v8:Type>cfg:CatalogRef.Организации</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
@@ -128,7 +128,7 @@
</Synonym>
<Comment/>
<Type>
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:CatalogRef.Организации</v8:Type>
<v8:Type>cfg:CatalogRef.Организации</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
@@ -167,7 +167,7 @@
</Synonym>
<Comment/>
<Type>
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:CatalogRef.СтруктураПредприятия</v8:Type>
<v8:Type>cfg:CatalogRef.СтруктураПредприятия</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
@@ -206,7 +206,7 @@
</Synonym>
<Comment/>
<Type>
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:EnumRef.ХозяйственныеОперации</v8:Type>
<v8:Type>cfg:EnumRef.ХозяйственныеОперации</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
@@ -245,7 +245,7 @@
</Synonym>
<Comment/>
<Type>
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:EnumRef.ТипыНалогообложенияНДС</v8:Type>
<v8:Type>cfg:EnumRef.ТипыНалогообложенияНДС</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
@@ -284,7 +284,7 @@
</Synonym>
<Comment/>
<Type>
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:CatalogRef.НаправленияДеятельности</v8:Type>
<v8:Type>cfg:CatalogRef.НаправленияДеятельности</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
@@ -323,7 +323,7 @@
</Synonym>
<Comment/>
<Type>
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:CatalogRef.Пользователи</v8:Type>
<v8:Type>cfg:CatalogRef.Пользователи</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
@@ -362,7 +362,7 @@
</Synonym>
<Comment/>
<Type>
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:DocumentRef.АктВыполненныхВнутреннихРабот</v8:Type>
<v8:Type>cfg:DocumentRef.АктВыполненныхВнутреннихРабот</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
@@ -401,7 +401,7 @@
</Synonym>
<Comment/>
<Type>
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:DocumentRef.АктВыполненныхВнутреннихРабот</v8:Type>
<v8:Type>cfg:DocumentRef.АктВыполненныхВнутреннихРабот</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
@@ -575,7 +575,7 @@
</Synonym>
<Comment/>
<Type>
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:CatalogRef.Номенклатура</v8:Type>
<v8:Type>cfg:CatalogRef.Номенклатура</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
@@ -612,7 +612,7 @@
</Synonym>
<Comment/>
<Type>
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:CatalogRef.ХарактеристикиНоменклатуры</v8:Type>
<v8:Type>cfg:CatalogRef.ХарактеристикиНоменклатуры</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
@@ -649,7 +649,7 @@
</Synonym>
<Comment/>
<Type>
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:CatalogRef.Назначения</v8:Type>
<v8:Type>cfg:CatalogRef.Назначения</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
@@ -686,7 +686,7 @@
</Synonym>
<Comment/>
<Type>
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:CatalogRef.УпаковкиЕдиницыИзмерения</v8:Type>
<v8:Type>cfg:CatalogRef.УпаковкиЕдиницыИзмерения</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
@@ -807,7 +807,7 @@
</Synonym>
<Comment/>
<Type>
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:CatalogRef.СтруктураПредприятия</v8:Type>
<v8:Type>cfg:CatalogRef.СтруктураПредприятия</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
@@ -844,7 +844,7 @@
</Synonym>
<Comment/>
<Type>
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:CatalogRef.ГруппыПродукции</v8:Type>
<v8:Type>cfg:CatalogRef.ГруппыПродукции</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
@@ -881,7 +881,7 @@
</Synonym>
<Comment/>
<Type>
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:CatalogRef.КлючиАналитикиУчетаНоменклатуры</v8:Type>
<v8:Type>cfg:CatalogRef.КлючиАналитикиУчетаНоменклатуры</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
@@ -1014,7 +1014,7 @@
</Synonym>
<Comment/>
<Type>
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:ChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения</v8:Type>
<v8:Type>cfg:ChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>