diff --git a/.claude/skills/help-add/scripts/add-help.ps1 b/.claude/skills/help-add/scripts/add-help.ps1 index 397b59efc..d4c3f49bb 100644 --- a/.claude/skills/help-add/scripts/add-help.ps1 +++ b/.claude/skills/help-add/scripts/add-help.ps1 @@ -182,10 +182,18 @@ if (-not (Test-Path $extDir)) { exit 1 } -# Версию ищем от каталога объекта, а не от SrcDir: у внешней обработки корень <Имя>.xml лежит В SrcDir, -# и подъём от SrcDir его не видит — справка писалась 2.17 при обработке 2.20, и платформа отказывала -# в сборке (тело и дескриптор объекта обязаны быть в одной версии формата). -$formatVersion = Detect-FormatVersion (Resolve-Path $objectDir).Path +# Справка — тело объекта, а тело и дескриптор платформа загружает только в одной версии формата. +# Поэтому версию берём прежде всего из дескриптора <объект>.xml (объект может быть старше выгрузки после +# мержа веток), и только без него — подъёмом от каталога объекта. Не от SrcDir: у внешней обработки +# корень <Имя>.xml лежит В SrcDir, подъём его не видел, и справка обработки 2.20 писалась 2.17. +$formatVersion = $null +$ownerXml = "$((Resolve-Path $objectDir).Path).xml" +if (Test-Path $ownerXml) { + $ownerHead = [System.IO.File]::ReadAllText($ownerXml, [System.Text.Encoding]::UTF8) + $ownerHead = $ownerHead.Substring(0, [Math]::Min(2000, $ownerHead.Length)) + if ($ownerHead -match ']+version="(\d+\.\d+)"') { $formatVersion = $Matches[1] } +} +if (-not $formatVersion) { $formatVersion = Detect-FormatVersion (Resolve-Path $objectDir).Path } # Код языка идёт и в текст XML, и в имя файла страницы, поэтому проверяем его до записи: # пустое значение дало бы файл «.html» и пустой , разделитель пути — запись мимо diff --git a/.claude/skills/help-add/scripts/add-help.py b/.claude/skills/help-add/scripts/add-help.py index 3728cfd34..c3c12086c 100644 --- a/.claude/skills/help-add/scripts/add-help.py +++ b/.claude/skills/help-add/scripts/add-help.py @@ -347,10 +347,20 @@ def main(): print(f"Каталог объекта не найден: {ext_dir}. Проверьте путь ObjectName (например Catalogs/МойСправочник).", file=sys.stderr) sys.exit(1) - # Версию ищем от каталога объекта, а не от SrcDir: у внешней обработки корень <Имя>.xml лежит В SrcDir, - # и подъём от SrcDir его не видит — справка писалась 2.17 при обработке 2.20, и платформа отказывала - # в сборке (тело и дескриптор объекта обязаны быть в одной версии формата). - format_version = detect_format_version(os.path.abspath(object_dir)) + # Справка — тело объекта, а тело и дескриптор платформа загружает только в одной версии формата. + # Поэтому версию берём прежде всего из дескриптора <объект>.xml (объект может быть старше выгрузки после + # мержа веток), и только без него — подъёмом от каталога объекта. Не от SrcDir: у внешней обработки + # корень <Имя>.xml лежит В SrcDir, подъём его не видел, и справка обработки 2.20 писалась 2.17. + format_version = None + owner_xml = os.path.abspath(object_dir) + ".xml" + if os.path.isfile(owner_xml): + with open(owner_xml, "r", encoding="utf-8-sig") as f: + owner_head = f.read(2000) + m = re.search(r']+version="(\d+\.\d+)"', owner_head) + if m: + format_version = m.group(1) + if not format_version: + format_version = detect_format_version(os.path.abspath(object_dir)) if not is_valid_lang(lang): print(f"Недопустимый код языка: '{lang}'", file=sys.stderr)