refactor(skills): свести write_xml_file и write_utf8_bom к общему эталону

У write_xml_file в docstring прямо написано «Держать копии одинаковыми —
сознательно: разошедшиеся копии сводят на нет весь смысл», и при этом копий было
три варианта. Различие оказалось не в логике нормализации, а в имени
вспомогательной функции записи байт: write_utf8_bom (11 навыков),
write_text_with_bom (form-add, help-add, template-add), save_text_bom
(cfe-borrow) — тела всех трёх побайтово эквивалентны.

Имя сведено к write_utf8_bom, тело помощника — к общему эталону (различались
только имена переменных). PS1-порт Write-XmlFile расхождений не имел.

Обе семьи переведены из храповика в реестр с эталоном: 24 семьи, 309 копий,
разъехавшихся осталось 4.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-08-09 12:29:43 +03:00
co-authored by Claude Opus 5
parent f2216745e6
commit 01749ad6ee
31 changed files with 114 additions and 73 deletions
+19 -1
View File
@@ -111,6 +111,25 @@ const FAMILIES = [
],
},
// ─── Запись файла в каноне выгрузки ──────────────────────────────────────
{
name: 'write_xml_file', py: 'write_xml_file', ps1: 'Write-XmlFile',
variants: [
{ id: 'base', authority: 'cf-init',
consumers: ['cfe-init', 'epf-init', 'erf-init', 'form-add', 'help-add', 'template-add'],
consumersPy: ['cfe-borrow'] },
],
},
{
name: 'write_utf8_bom', py: 'write_utf8_bom', ps1: null,
variants: [
{ id: 'base', authority: 'cf-init',
consumers: ['cfe-borrow', 'cfe-init', 'epf-init', 'erf-init', 'form-add', 'form-compile',
'help-add', 'meta-compile', 'mxl-compile', 'role-compile', 'skd-compile',
'subsystem-compile', 'subsystem-edit', 'template-add'] },
],
},
// ─── Отчёт валидаторов ───────────────────────────────────────────────────
// Два варианта по способу вывода: буферизованный Out-Line копит отчёт в $script:output, что даёт
// -OutFile (та же выдача в файл) и вставку заголовка в начало; потоковый Write-Host этого не умеет.
@@ -265,7 +284,6 @@ const DRIFTED = [
{ name: 'get_ml_text', py: 'get_ml_text', ps1: 'Get-MLText', maxVariants: { py: 7, ps1: 6 } },
{ name: 'import_fragment', py: 'import_fragment', ps1: 'Import-Fragment', maxVariants: { py: 5, ps1: 4 } },
{ name: 'get_child_indent', py: 'get_child_indent', ps1: 'Get-ChildIndent', maxVariants: { py: 4, ps1: 3 } },
{ name: 'write_xml_file', py: 'write_xml_file', ps1: null, maxVariants: { py: 3 } },
];
// ─── Извлечение тел функций ─────────────────────────────────────────────────