fix(meta-edit): внешнюю обработку/отчёт проверять epf-validate (#108)

Автопроверка после правки жёстко звала meta-validate, который
ExternalDataProcessor/ExternalReport не знает: корректная правка
заканчивалась «Unrecognized metadata type». Валидатор теперь выбирается
по типу объекта. В py-порту stdout сбрасывается перед запуском
валидатора — его вывод больше не обгоняет строки meta-edit.

verify-snapshots: кейс meta-edit с setup none собирается epf-build,
а не грузится пустой конфигурацией, где обработку платформа не видит.

Fixes #108

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-09-26 14:59:54 +03:00
co-authored by Claude Opus 5.5
parent 68a2a11a6c
commit 372510bbc4
10 changed files with 421 additions and 11 deletions
+1 -1
View File
@@ -33,7 +33,7 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/meta-edit.ps1" -Def
| Operation | Inline-операция (альтернатива DefinitionFile) |
| Value | Значение для inline-операции |
| DefinitionFile | JSON-файл с операциями (альтернатива Operation) |
| NoValidate | Не запускать meta-validate после правки |
| NoValidate | Не запускать валидацию после правки |
## Частые операции
@@ -1,4 +1,4 @@
# meta-edit v1.53 — Edit existing 1C metadata object XML
# meta-edit v1.54 — Edit existing 1C metadata object XML
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
[CmdletBinding(PositionalBinding=$false)]
param(
@@ -3897,15 +3897,17 @@ Info "Saved: $resolvedPath"
# ============================================================
if (-not $NoValidate) {
$validateScript = Join-Path (Join-Path $PSScriptRoot "..\..\meta-validate") "scripts\meta-validate.ps1"
# Внешняя обработка/отчёт — автономный объект, meta-validate его не знает (#108).
$validateSkill = if (@('ExternalDataProcessor','ExternalReport') -contains $script:objType) { "epf-validate" } else { "meta-validate" }
$validateScript = Join-Path (Join-Path $PSScriptRoot "..\..\$validateSkill") "scripts\$validateSkill.ps1"
$validateScript = [System.IO.Path]::GetFullPath($validateScript)
if (Test-Path $validateScript) {
Write-Host ""
Write-Host "--- Running meta-validate ---" -ForegroundColor DarkGray
Write-Host "--- Running $validateSkill ---" -ForegroundColor DarkGray
& powershell.exe -NoProfile -File $validateScript -ObjectPath $resolvedPath
} else {
Write-Host ""
Write-Host "[SKIP] meta-validate not found at: $validateScript" -ForegroundColor DarkGray
Write-Host "[SKIP] $validateSkill not found at: $validateScript" -ForegroundColor DarkGray
}
}
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
# meta-edit v1.53 — Edit existing 1C metadata object XML
# meta-edit v1.54 — Edit existing 1C metadata object XML
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
@@ -3985,16 +3985,20 @@ def main():
# --- Auto-validate ---
if not args.NoValidate:
# Внешняя обработка/отчёт — автономный объект, meta-validate его не знает (#108).
validate_skill = "epf-validate" if obj_type in ("ExternalDataProcessor", "ExternalReport") else "meta-validate"
script_dir = os.path.dirname(os.path.abspath(__file__))
validate_script = os.path.normpath(os.path.join(script_dir, "..", "..", "meta-validate", "scripts", "meta-validate.py"))
validate_script = os.path.normpath(os.path.join(script_dir, "..", "..", validate_skill, "scripts", f"{validate_skill}.py"))
if os.path.exists(validate_script):
print()
print("--- Running meta-validate ---")
print(f"--- Running {validate_skill} ---")
python_exe = sys.executable
# Буфер stdout сбросить до запуска: иначе вывод дочернего процесса обгоняет наш.
sys.stdout.flush()
subprocess.run([python_exe, validate_script, "-ObjectPath", resolved_path])
else:
print()
print(f"[SKIP] meta-validate not found at: {validate_script}")
print(f"[SKIP] {validate_skill} not found at: {validate_script}")
# --- Summary ---
print()