refactor(validate): свести Report-* к общему эталону вывода

interface-validate, subsystem-validate и xdto-validate отличались от остальных
шести валидаторов только стилем: инлайн-сигнатура вместо param-блока и
однострочный if. Приведены к эталону cf-validate.

form-validate и mxl-validate оставлены отдельным вариантом с обоснованием:
они пишут через Write-Host, а не через буферизованный Out-Line. Буферизация
нужна для -OutFile (тот же отчёт в файл), которого у этих двух навыков нет;
для модели-потребителя stdout одинаков — на успешном прогоне обе ветки дают
одну строку.

Семьи Report-OK/Error/Warn переведены из храповика в реестр с эталоном.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-08-08 21:23:58 +03:00
co-authored by Claude Opus 5
parent fadda6a287
commit f2216745e6
7 changed files with 61 additions and 18 deletions
+34 -3
View File
@@ -111,6 +111,40 @@ const FAMILIES = [
],
},
// ─── Отчёт валидаторов ───────────────────────────────────────────────────
// Два варианта по способу вывода: буферизованный Out-Line копит отчёт в $script:output, что даёт
// -OutFile (та же выдача в файл) и вставку заголовка в начало; потоковый Write-Host этого не умеет.
// Для модели-потребителя stdout одинаков: на успешном прогоне обе ветки дают одну строку.
{
name: 'validate: report_error', py: null, ps1: 'Report-Error',
variants: [
{ id: 'buffered', authority: 'cf-validate',
consumers: ['cfe-validate', 'epf-validate', 'interface-validate', 'meta-validate',
'role-validate', 'skd-validate', 'subsystem-validate', 'xdto-validate'] },
{ id: 'streamed', authority: 'form-validate', consumers: ['mxl-validate'],
why: 'потоковый вывод вместо буферизованного — эти навыки не поддерживают -OutFile' },
],
},
{
name: 'validate: report_warn', py: null, ps1: 'Report-Warn',
variants: [
{ id: 'buffered', authority: 'cf-validate',
consumers: ['cfe-validate', 'epf-validate', 'interface-validate', 'meta-validate',
'role-validate', 'skd-validate', 'subsystem-validate', 'xdto-validate'] },
{ id: 'streamed', authority: 'form-validate', consumers: ['mxl-validate'],
why: 'потоковый вывод вместо буферизованного — эти навыки не поддерживают -OutFile' },
],
},
{
name: 'validate: report_ok', py: null, ps1: 'Report-OK',
variants: [
{ id: 'buffered', authority: 'cf-validate',
consumers: ['cfe-validate', 'epf-validate', 'meta-validate', 'role-validate', 'skd-validate'] },
{ id: 'streamed', authority: 'form-validate', consumers: ['mxl-validate'],
why: 'потоковый вывод вместо буферизованного — эти навыки не поддерживают -OutFile' },
],
},
// ─── Прощающий ввод: разбор строки типа ──────────────────────────────────
{
name: 'resolve_type_str', py: 'resolve_type_str', ps1: 'Resolve-TypeStr',
@@ -229,9 +263,6 @@ const FAMILIES = [
const DRIFTED = [
{ name: 'emit_mltext', py: 'emit_mltext', ps1: 'Emit-MLText', maxVariants: { py: 5, ps1: 5 } },
{ name: 'get_ml_text', py: 'get_ml_text', ps1: 'Get-MLText', maxVariants: { py: 7, ps1: 6 } },
{ name: 'validate: report_error', py: null, ps1: 'Report-Error', maxVariants: { ps1: 3 } },
{ name: 'validate: report_warn', py: null, ps1: 'Report-Warn', maxVariants: { ps1: 3 } },
{ name: 'validate: report_ok', py: null, ps1: 'Report-OK', maxVariants: { ps1: 3 } },
{ 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 } },