diff --git a/.claude/skills/cf-init/SKILL.md b/.claude/skills/cf-init/SKILL.md index 6a2b3477..b4b0aa15 100644 --- a/.claude/skills/cf-init/SKILL.md +++ b/.claude/skills/cf-init/SKILL.md @@ -22,6 +22,24 @@ allowed-tools: | `Version` | Версия конфигурации | | `Vendor` | Поставщик | | `CompatibilityMode` | Режим совместимости (default: `Version8_3_24`) | +| `FormatVersion` | Версия формата выгрузки (default: `2.17`) | + +Оба параметра задаются от **целевой платформы** — той, на которой конфигурация будет работать, — но по +разным правилам. + +`FormatVersion` — **не выше** версии формата целевой платформы: 8.3.24 — `2.17`, 8.3.25 — `2.18`, +8.3.26 — `2.19`, 8.3.27 — `2.20`, 8.5 — `2.21`. Ниже брать можно: платформа читает свой формат и любой +более старый, поэтому дефолт `2.17` подходит для всей линейки 8.3.24 и выше. + +`CompatibilityMode` влияет на доступную функциональность. Если в задаче не оговорено иное — **равен +целевой платформе** (`Version8_3_27` для 8.3.27); это то же самое, что «Не использовать» в +Конфигураторе, и именно такое значение платформа проставляет новой базе. Более низкий режим берут +осознанно — когда конфигурация должна работать и на старых платформах; он отключает возможности, +появившиеся позже. Выше целевой платформы — нельзя: такая конфигурация загрузится, но работать на ней +не будет. + +Значение `DontUse` не задавать: платформа заменяет его на `Version8_3_8`, то есть молча опускает +конфигурацию до старого режима. ```powershell powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/cf-init.ps1" -Name "МояКонфигурация" @@ -36,8 +54,8 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/cf-init.ps1" -Name # С версией и поставщиком ... -Name TestCfg -Synonym "Тестовая" -Version "1.0.0.1" -Vendor "Фирма 1С" -OutputDir test-tmp/cf2 -# Другой режим совместимости -... -Name TestCfg -CompatibilityMode Version8_3_27 -OutputDir test-tmp/cf3 +# Под платформу 8.3.27 — версия формата и режим совместимости вместе +... -Name TestCfg -FormatVersion 2.20 -CompatibilityMode Version8_3_27 -OutputDir test-tmp/cf3 ``` ## Верификация diff --git a/.claude/skills/cf-init/scripts/cf-init.ps1 b/.claude/skills/cf-init/scripts/cf-init.ps1 index 64a12896..526c33a3 100644 --- a/.claude/skills/cf-init/scripts/cf-init.ps1 +++ b/.claude/skills/cf-init/scripts/cf-init.ps1 @@ -1,4 +1,4 @@ -# cf-init v1.11 — Create empty 1C configuration scaffold (+write_xml_file/write_utf8_bom: общий эталон записи) +# cf-init v1.13 — Create empty 1C configuration scaffold (+write_xml_file/write_utf8_bom: общий эталон записи) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -9,14 +9,26 @@ param( [string]$Vendor, [string]$CompatibilityMode = "Version8_3_24", # Версия формата выгрузки (MDClasses). Её задаёт ПЛАТФОРМА, которой выгружают, и от режима - # совместимости она не зависит: 8.3.20-8.3.24 пишут 2.17, 8.3.25 — 2.18, 8.3.26 — 2.19, - # 8.3.27 — 2.20. Дефолт консервативный: 2.17 читается всеми поддерживаемыми платформами. - [ValidateSet("2.17", "2.18", "2.19", "2.20", "2.21")] + # совместимости она не зависит. Дефолт 2.17 — нижняя граница проверенного диапазона. [string]$FormatVersion = "2.17" ) $ErrorActionPreference = "Stop" +# --- Format version --- +# Проверенный диапазон: 2.17 (8.3.24) … 2.21 (8.5). Полная лестница — docs/1c-configuration-spec.md, +# «Лестница версий». Версии ниже 2.17 (платформы 8.3.23 и старше) реальны, поэтому запретом их не +# закрываем: за пределами диапазона — ПРЕДУПРЕЖДЕНИЕ, скаффолд всё равно выпускается. Ошибка — только +# на нечисловое значение: это опечатка, а не версия. +$formatVerifiedMin = "2.17" +$formatVerifiedMax = "2.21" +# Версия формата как число: "2.20" → 220. Строковое сравнение неверно ("2.9" > "2.17"). +function Get-FormatRank([string]$ver) { + if ($ver -match '^(\d+)\.(\d+)$') { return [int]$Matches[1] * 100 + [int]$Matches[2] } + return 0 +} +$formatRank = Get-FormatRank $FormatVersion + function Esc-XmlText { param([string]$s) # Эскейп ТЕКСТА элемента: только & < > — кавычку и апостроф платформа держит сырыми. @@ -24,6 +36,17 @@ function Esc-XmlText { } [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 +# Проверка версии — ПОСЛЕ настройки кодировки консоли: иначе em-dash в сообщении уедет в вопросы. +# Пишем прямо в stderr, а не Write-Warning: в PS 5.1 предупреждение уходит в stdout, получает +# локализованный префикс и переносится по 80 символов — подстрока в тесте перестаёт находиться. +if ($formatRank -eq 0) { + [Console]::Error.WriteLine("Malformed -FormatVersion '$FormatVersion' (expected N.N, e.g. 2.17)") + exit 1 +} +if ($formatRank -lt (Get-FormatRank $formatVerifiedMin) -or $formatRank -gt (Get-FormatRank $formatVerifiedMax)) { + [Console]::Error.WriteLine("WARNING: Format version '$FormatVersion' is outside the tested range $formatVerifiedMin-$formatVerifiedMax — the scaffold is emitted as requested but was not verified on that platform") +} + # --- Resolve output dir --- if (-not [System.IO.Path]::IsPathRooted($OutputDir)) { $OutputDir = Join-Path (Get-Location).Path $OutputDir @@ -50,7 +73,9 @@ $co7 = [guid]::NewGuid().ToString() # --- Mobile functionalities --- # Версия формата как число — по ней ниже включаются вставки 2.21. -$is221 = (($FormatVersion -match '^(\d+)\.(\d+)$') -and ([int]$Matches[1] * 100 + [int]$Matches[2]) -ge 221) +$is221 = ($formatRank -ge 221) +# TextToSpeech приехал раньше остальных вставок 8.5 — своей ступенью, поэтому гейт отдельный. +$is218 = ($formatRank -ge 218) $mobileFuncs = @( @("Biometrics","true"), @("Location","false"), @("BackgroundLocation","false"), @@ -68,9 +93,12 @@ $mobileFuncs = @( @("DocumentScanning","false"), @("SpeechToText","false"), @("Geofences","false"), @("IncomingShareRequests","false"), @("AllIncomingShareRequestsTypesProcessing","false") ) -# TextToSpeech — возможность мобильного приложения, добавленная форматом 2.21 (8.5), -# последней в списке. На младших форматах платформа её не пишет. -if ($is221) { $mobileFuncs += ,@("TextToSpeech","false") } +# TextToSpeech — возможность мобильного приложения, добавленная форматом 2.18 (8.3.25), +# последней в списке; в 2.21 список не менялся. Замерено выгрузками пустой ИБ шести платформ: +# 2.13/2.17 — 37 записей без неё, 2.18-2.21 — 38 с ней. Гейт обязателен и в обе стороны: +# на 2.17 тег ломает загрузку XDTO-ошибкой (проверено на 8.3.24), без тега на 2.18+ платформа +# подставит дефолт false и допишет его при выгрузке — то есть разойдётся роундтрип. +if ($is218) { $mobileFuncs += ,@("TextToSpeech","false") } $mobileXml = "" foreach ($mf in $mobileFuncs) { diff --git a/.claude/skills/cf-init/scripts/cf-init.py b/.claude/skills/cf-init/scripts/cf-init.py index 20ac5e5b..a4030a5e 100644 --- a/.claude/skills/cf-init/scripts/cf-init.py +++ b/.claude/skills/cf-init/scripts/cf-init.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# cf-init v1.11 — Create empty 1C configuration scaffold (+write_xml_file/write_utf8_bom: общий эталон записи) +# cf-init v1.13 — Create empty 1C configuration scaffold (+write_xml_file/write_utf8_bom: общий эталон записи) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills """Generates minimal XML source files for a 1C configuration.""" import sys, os, argparse, re, uuid @@ -50,6 +50,16 @@ def write_xml_file(path, content): write_utf8_bom(path, text) +def format_rank(ver): + """"2.20" → 220, "2.9" → 209. Строковое сравнение неверно ("2.9" > "2.17").""" + m = re.match(r'^(\d+)\.(\d+)$', ver or '') + return int(m.group(1)) * 100 + int(m.group(2)) if m else 0 + + +FORMAT_VERIFIED_MIN = "2.17" +FORMAT_VERIFIED_MAX = "2.21" + + def main(): sys.stdout.reconfigure(encoding="utf-8") sys.stderr.reconfigure(encoding="utf-8") @@ -60,13 +70,24 @@ def main(): parser.add_argument('-Version', dest='Version', default='') parser.add_argument('-Vendor', dest='Vendor', default='') parser.add_argument('-CompatibilityMode', dest='CompatibilityMode', default='Version8_3_24') - # Версия формата выгрузки (MDClasses) — её задаёт ПЛАТФОРМА, а не режим совместимости: - # 8.3.20-8.3.24 пишут 2.17, 8.3.25 — 2.18, 8.3.26 — 2.19, 8.3.27 — 2.20. - # Дефолт консервативный: 2.17 читается всеми платформами. - parser.add_argument('-FormatVersion', dest='FormatVersion', default='2.17', - choices=['2.17', '2.18', '2.19', '2.20', '2.21']) + # Версия формата выгрузки (MDClasses) — её задаёт ПЛАТФОРМА, а не режим совместимости. + # Дефолт 2.17 — нижняя граница проверенного диапазона. + parser.add_argument('-FormatVersion', dest='FormatVersion', default='2.17') args = ci_parse_args(parser) + # Проверенный диапазон: 2.17 (8.3.24) … 2.21 (8.5). Полная лестница — + # docs/1c-configuration-spec.md, «Лестница версий». Версии ниже 2.17 (платформы 8.3.23 и + # старше) реальны, поэтому запретом их не закрываем: за пределами диапазона — + # ПРЕДУПРЕЖДЕНИЕ, скаффолд всё равно выпускается. Ошибка — только на нечисловое значение. + format_rank_value = format_rank(args.FormatVersion) + if format_rank_value == 0: + print(f"Malformed -FormatVersion '{args.FormatVersion}' (expected N.N, e.g. 2.17)", file=sys.stderr) + sys.exit(1) + if not (format_rank(FORMAT_VERIFIED_MIN) <= format_rank_value <= format_rank(FORMAT_VERIFIED_MAX)): + print(f"WARNING: Format version '{args.FormatVersion}' is outside the tested range " + f"{FORMAT_VERIFIED_MIN}-{FORMAT_VERIFIED_MAX} — the scaffold is emitted as requested " + f"but was not verified on that platform", file=sys.stderr) + name = args.Name synonym = args.Synonym if args.Synonym else name output_dir = args.OutputDir @@ -91,8 +112,9 @@ def main(): # --- Mobile functionalities --- # Версия формата как число — по ней ниже включаются вставки 2.21. - _fm = re.match(r'^(\d+)\.(\d+)$', args.FormatVersion) - is_221 = bool(_fm) and int(_fm.group(1)) * 100 + int(_fm.group(2)) >= 221 + is_221 = format_rank_value >= 221 + # TextToSpeech приехал раньше остальных вставок 8.5 — своей ступенью, поэтому гейт отдельный. + is_218 = format_rank_value >= 218 mobile_funcs = [ ("Biometrics","true"), ("Location","false"), ("BackgroundLocation","false"), @@ -110,9 +132,12 @@ def main(): ("DocumentScanning","false"), ("SpeechToText","false"), ("Geofences","false"), ("IncomingShareRequests","false"), ("AllIncomingShareRequestsTypesProcessing","false"), ] - # TextToSpeech — возможность мобильного приложения, добавленная форматом 2.21 (8.5), - # последней в списке. На младших форматах платформа её не пишет. - if is_221: + # TextToSpeech — возможность мобильного приложения, добавленная форматом 2.18 (8.3.25), + # последней в списке; в 2.21 список не менялся. Замерено выгрузками пустой ИБ шести платформ: + # 2.13/2.17 — 37 записей без неё, 2.18-2.21 — 38 с ней. Гейт обязателен и в обе стороны: + # на 2.17 тег ломает загрузку XDTO-ошибкой (проверено на 8.3.24), без тега на 2.18+ платформа + # подставит дефолт false и допишет его при выгрузке — то есть разойдётся роундтрип. + if is_218: mobile_funcs.append(("TextToSpeech", "false")) mobile_xml = "" diff --git a/.claude/skills/cf-validate/scripts/cf-validate.ps1 b/.claude/skills/cf-validate/scripts/cf-validate.ps1 index fb692c55..a0f2622d 100644 --- a/.claude/skills/cf-validate/scripts/cf-validate.ps1 +++ b/.claude/skills/cf-validate/scripts/cf-validate.ps1 @@ -1,4 +1,4 @@ -# cf-validate v1.6 — Validate 1C configuration root structure +# cf-validate v1.7 — Validate 1C configuration root structure # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -89,6 +89,19 @@ $finalize = { } } +# --- Format version --- +# Проверенный диапазон версий формата выгрузки: 2.17 (8.3.24) … 2.21 (8.5). Полная лестница — +# docs/1c-configuration-spec.md, «Лестница версий». Версию задаёт платформа ВЫГРУЗКИ, а не режим +# совместимости конфигурации. Версии ниже 2.17 (платформы 8.3.23 и старше) существуют, но навыки +# на них не проверялись — это предупреждение о непокрытии, а не о некорректности файла. +$formatVerifiedMin = "2.17" +$formatVerifiedMax = "2.21" +# Версия формата как число: "2.20" → 220. Строковое сравнение неверно ("2.9" > "2.17"). +function Get-FormatRank([string]$ver) { + if ($ver -match '^(\d+)\.(\d+)$') { return [int]$Matches[1] * 100 + [int]$Matches[2] } + return 0 +} + # --- Reference tables --- $guidPattern = '^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$' $identPattern = '^[A-Za-z\u0410-\u042F\u0401\u0430-\u044F\u0451_][A-Za-z0-9\u0410-\u042F\u0401\u0430-\u044F\u0451_]*$' @@ -203,11 +216,15 @@ if ($root.NamespaceURI -ne $expectedNs) { } $version = $root.GetAttribute("version") +$versionRank = Get-FormatRank $version if (-not $version) { Report-Warn "1. Missing version attribute on MetaDataObject" -} elseif ($version -notin @("2.17", "2.18", "2.19", "2.20", "2.21")) { - # Лестница версий формата: 2.17 (8.3.20-8.3.24), 2.18 (8.3.25), 2.19 (8.3.26), 2.20 (8.3.27). - Report-Warn "1. Unusual version '$version' (expected 2.17-2.20 or 2.21)" +} elseif ($versionRank -eq 0) { + Report-Error "1. Malformed version '$version' (expected N.N)" +} elseif ($versionRank -lt (Get-FormatRank $formatVerifiedMin)) { + Report-Warn "1. Format version '$version' is below the tested range $formatVerifiedMin-$formatVerifiedMax — skills were not verified on it" +} elseif ($versionRank -gt (Get-FormatRank $formatVerifiedMax)) { + Report-Warn "1. Format version '$version' is above the tested range $formatVerifiedMin-$formatVerifiedMax — skills were not verified on it" } # Must have Configuration child diff --git a/.claude/skills/cf-validate/scripts/cf-validate.py b/.claude/skills/cf-validate/scripts/cf-validate.py index fe8406fc..42b4b212 100644 --- a/.claude/skills/cf-validate/scripts/cf-validate.py +++ b/.claude/skills/cf-validate/scripts/cf-validate.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# cf-validate v1.6 — Validate 1C configuration XML structure +# cf-validate v1.7 — Validate 1C configuration XML structure # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills """Validates Configuration.xml: root structure, InternalInfo, properties, ChildObjects, languages.""" import sys, os, argparse, re @@ -132,6 +132,20 @@ VALID_ENUM_VALUES = { EXPECTED_NS = 'http://v8.1c.ru/8.3/MDClasses' +# ── Format version ─────────────────────────────────────────── +# Проверенный диапазон версий формата выгрузки: 2.17 (8.3.24) … 2.21 (8.5). Полная лестница — +# docs/1c-configuration-spec.md, «Лестница версий». Версию задаёт платформа ВЫГРУЗКИ, а не режим +# совместимости конфигурации. Версии ниже 2.17 (платформы 8.3.23 и старше) существуют, но навыки +# на них не проверялись — это предупреждение о непокрытии, а не о некорректности файла. +FORMAT_VERIFIED_MIN = "2.17" +FORMAT_VERIFIED_MAX = "2.21" + + +def format_rank(ver): + """"2.20" → 220, "2.9" → 209. Строковое сравнение неверно ("2.9" > "2.17").""" + m = re.match(r'^(\d+)\.(\d+)$', ver or '') + return int(m.group(1)) * 100 + int(m.group(2)) if m else 0 + class Reporter: def __init__(self, max_errors, detailed=False): @@ -252,11 +266,17 @@ def main(): check1_ok = False version = root.get('version', '') + version_rank = format_rank(version) if not version: r.warn('1. Missing version attribute on MetaDataObject') - elif version not in ('2.17', '2.18', '2.19', '2.20', '2.21'): - # Лестница версий формата: 2.17 (8.3.20-8.3.24), 2.18 (8.3.25), 2.19 (8.3.26), 2.20 (8.3.27). - r.warn(f"1. Unusual version '{version}' (expected 2.17-2.20 or 2.21)") + elif version_rank == 0: + r.error(f"1. Malformed version '{version}' (expected N.N)") + elif version_rank < format_rank(FORMAT_VERIFIED_MIN): + r.warn(f"1. Format version '{version}' is below the tested range " + f"{FORMAT_VERIFIED_MIN}-{FORMAT_VERIFIED_MAX} — skills were not verified on it") + elif version_rank > format_rank(FORMAT_VERIFIED_MAX): + r.warn(f"1. Format version '{version}' is above the tested range " + f"{FORMAT_VERIFIED_MIN}-{FORMAT_VERIFIED_MAX} — skills were not verified on it") # Must have Configuration child cfg_node = None diff --git a/.claude/skills/cfe-validate/scripts/cfe-validate.ps1 b/.claude/skills/cfe-validate/scripts/cfe-validate.ps1 index e005432f..f568ec31 100644 --- a/.claude/skills/cfe-validate/scripts/cfe-validate.ps1 +++ b/.claude/skills/cfe-validate/scripts/cfe-validate.ps1 @@ -1,4 +1,4 @@ -# cfe-validate v1.8 — Validate 1C configuration extension structure (CFE) (полнота GeneratedType, ТЧ из AdditionalColumns, сверка путей с -ConfigPath) +# cfe-validate v1.9 — Validate 1C configuration extension structure (CFE) (полнота GeneratedType, ТЧ из AdditionalColumns, сверка путей с -ConfigPath) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -93,6 +93,19 @@ $finalize = { } } +# --- Format version --- +# Проверенный диапазон версий формата выгрузки: 2.17 (8.3.24) … 2.21 (8.5). Полная лестница — +# docs/1c-configuration-spec.md, «Лестница версий». Версию задаёт платформа ВЫГРУЗКИ, а не режим +# совместимости конфигурации. Версии ниже 2.17 (платформы 8.3.23 и старше) существуют, но навыки +# на них не проверялись — это предупреждение о непокрытии, а не о некорректности файла. +$formatVerifiedMin = "2.17" +$formatVerifiedMax = "2.21" +# Версия формата как число: "2.20" → 220. Строковое сравнение неверно ("2.9" > "2.17"). +function Get-FormatRank([string]$ver) { + if ($ver -match '^(\d+)\.(\d+)$') { return [int]$Matches[1] * 100 + [int]$Matches[2] } + return 0 +} + # --- Reference tables --- $guidPattern = '^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$' $identPattern = '^[A-Za-z\u0410-\u042F\u0401\u0430-\u044F\u0451_][A-Za-z0-9\u0410-\u042F\u0401\u0430-\u044F\u0451_]*$' @@ -239,11 +252,15 @@ if ($root.NamespaceURI -ne $expectedNs) { } $version = $root.GetAttribute("version") +$versionRank = Get-FormatRank $version if (-not $version) { Report-Warn "1. Missing version attribute on MetaDataObject" -} elseif ($version -notin @("2.17", "2.18", "2.19", "2.20", "2.21")) { - # Лестница версий формата: 2.17 (8.3.20-8.3.24), 2.18 (8.3.25), 2.19 (8.3.26), 2.20 (8.3.27). - Report-Warn "1. Unusual version '$version' (expected 2.17-2.20 or 2.21)" +} elseif ($versionRank -eq 0) { + Report-Error "1. Malformed version '$version' (expected N.N)" +} elseif ($versionRank -lt (Get-FormatRank $formatVerifiedMin)) { + Report-Warn "1. Format version '$version' is below the tested range $formatVerifiedMin-$formatVerifiedMax — skills were not verified on it" +} elseif ($versionRank -gt (Get-FormatRank $formatVerifiedMax)) { + Report-Warn "1. Format version '$version' is above the tested range $formatVerifiedMin-$formatVerifiedMax — skills were not verified on it" } # Must have Configuration child diff --git a/.claude/skills/cfe-validate/scripts/cfe-validate.py b/.claude/skills/cfe-validate/scripts/cfe-validate.py index 48a2c90a..89d0073c 100644 --- a/.claude/skills/cfe-validate/scripts/cfe-validate.py +++ b/.claude/skills/cfe-validate/scripts/cfe-validate.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# cfe-validate v1.8 — Validate 1C configuration extension XML structure (CFE) (полнота GeneratedType, ТЧ из AdditionalColumns, сверка путей с -ConfigPath) +# cfe-validate v1.9 — Validate 1C configuration extension XML structure (CFE) (полнота GeneratedType, ТЧ из AdditionalColumns, сверка путей с -ConfigPath) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills """Validates extension Configuration.xml: root, InternalInfo, extension properties, ChildObjects, borrowed objects.""" import sys, os, argparse, re @@ -157,6 +157,20 @@ VALID_ENUM_VALUES = { EXPECTED_NS = 'http://v8.1c.ru/8.3/MDClasses' +# ── Format version ─────────────────────────────────────────── +# Проверенный диапазон версий формата выгрузки: 2.17 (8.3.24) … 2.21 (8.5). Полная лестница — +# docs/1c-configuration-spec.md, «Лестница версий». Версию задаёт платформа ВЫГРУЗКИ, а не режим +# совместимости конфигурации. Версии ниже 2.17 (платформы 8.3.23 и старше) существуют, но навыки +# на них не проверялись — это предупреждение о непокрытии, а не о некорректности файла. +FORMAT_VERIFIED_MIN = "2.17" +FORMAT_VERIFIED_MAX = "2.21" + + +def format_rank(ver): + """"2.20" → 220, "2.9" → 209. Строковое сравнение неверно ("2.9" > "2.17").""" + m = re.match(r'^(\d+)\.(\d+)$', ver or '') + return int(m.group(1)) * 100 + int(m.group(2)) if m else 0 + class Reporter: def __init__(self, max_errors, detailed=False): @@ -281,11 +295,17 @@ def main(): check1_ok = False version = root.get('version', '') + version_rank = format_rank(version) if not version: r.warn('1. Missing version attribute on MetaDataObject') - elif version not in ('2.17', '2.18', '2.19', '2.20', '2.21'): - # Лестница версий формата: 2.17 (8.3.20-8.3.24), 2.18 (8.3.25), 2.19 (8.3.26), 2.20 (8.3.27). - r.warn(f"1. Unusual version '{version}' (expected 2.17-2.20 or 2.21)") + elif version_rank == 0: + r.error(f"1. Malformed version '{version}' (expected N.N)") + elif version_rank < format_rank(FORMAT_VERIFIED_MIN): + r.warn(f"1. Format version '{version}' is below the tested range " + f"{FORMAT_VERIFIED_MIN}-{FORMAT_VERIFIED_MAX} — skills were not verified on it") + elif version_rank > format_rank(FORMAT_VERIFIED_MAX): + r.warn(f"1. Format version '{version}' is above the tested range " + f"{FORMAT_VERIFIED_MIN}-{FORMAT_VERIFIED_MAX} — skills were not verified on it") # Must have Configuration child cfg_node = None diff --git a/.claude/skills/epf-init/SKILL.md b/.claude/skills/epf-init/SKILL.md index 9761bca8..f4f45101 100644 --- a/.claude/skills/epf-init/SKILL.md +++ b/.claude/skills/epf-init/SKILL.md @@ -26,12 +26,18 @@ allowed-tools: | Name | да | — | Имя обработки (латиница/кириллица) | | Synonym | нет | = Name | Синоним (отображаемое имя) | | SrcDir | нет | `src` | Каталог исходников относительно CWD | -| FormatVersion | нет | `2.17` | Версия формата: 2.20 — платформа 8.3.27, 2.21 — 8.5. Дефолт открывается любой платформой | +| FormatVersion | нет | `2.17` | Версия формата выгрузки — см. ниже | + +`FormatVersion` — **не выше** версии формата платформы, на которой объект будут собирать и открывать: +8.3.24 — `2.17`, 8.3.25 — `2.18`, 8.3.26 — `2.19`, 8.3.27 — `2.20`, 8.5 — `2.21`. Ниже брать можно: +платформа читает свой формат и любой более старый, поэтому дефолт `2.17` подходит для всей линейки +8.3.24 и выше. Для более старых платформ счёт идёт так же, по одной версии на релиз (8.3.23 — `2.16`), +но на них навыки не проверялись — такое значение принимается с предупреждением. ## Команда ```powershell -powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/init.ps1" -Name "" [-Synonym ""] [-SrcDir ""] [-FormatVersion "<2.17|2.18|2.19|2.20|2.21>"] +powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/init.ps1" -Name "" [-Synonym ""] [-SrcDir ""] [-FormatVersion "<версия>"] ``` ## Дальнейшие шаги diff --git a/.claude/skills/epf-init/scripts/init.ps1 b/.claude/skills/epf-init/scripts/init.ps1 index 0e8ad671..276d2a26 100644 --- a/.claude/skills/epf-init/scripts/init.ps1 +++ b/.claude/skills/epf-init/scripts/init.ps1 @@ -1,4 +1,4 @@ -# epf-init v1.7 — Init 1C external data processor scaffold (+write_xml_file/write_utf8_bom: общий эталон записи) +# epf-init v1.8 — Init 1C external data processor scaffold (+write_xml_file/write_utf8_bom: общий эталон записи) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -11,12 +11,25 @@ param( # Версия формата выгрузки. Своей конфигурации у автономной обработки нет, наследовать # версию неоткуда — поэтому её задают явно. Формы, макеты и справку внутри обработки # навыки берут уже отсюда: их детектор читает version из корня этого файла. - [ValidateSet("2.17", "2.18", "2.19", "2.20", "2.21")] [string]$FormatVersion = "2.17" ) $ErrorActionPreference = "Stop" +# --- Format version --- +# Проверенный диапазон: 2.17 (8.3.24) … 2.21 (8.5). Полная лестница — docs/1c-configuration-spec.md, +# «Лестница версий». Версии ниже 2.17 (платформы 8.3.23 и старше) реальны, поэтому запретом их не +# закрываем: за пределами диапазона — ПРЕДУПРЕЖДЕНИЕ, скаффолд всё равно выпускается. Ошибка — только +# на нечисловое значение: это опечатка, а не версия. +$formatVerifiedMin = "2.17" +$formatVerifiedMax = "2.21" +# Версия формата как число: "2.20" → 220. Строковое сравнение неверно ("2.9" > "2.17"). +function Get-FormatRank([string]$ver) { + if ($ver -match '^(\d+)\.(\d+)$') { return [int]$Matches[1] * 100 + [int]$Matches[2] } + return 0 +} +$formatRank = Get-FormatRank $FormatVersion + function Esc-XmlText { param([string]$s) # Эскейп ТЕКСТА элемента: только & < > — кавычку и апостроф платформа держит сырыми. @@ -25,6 +38,17 @@ function Esc-XmlText { [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 [Console]::InputEncoding = [System.Text.Encoding]::UTF8 +# Проверка версии — ПОСЛЕ настройки кодировки консоли: иначе em-dash в сообщении уедет в вопросы. +# Пишем прямо в stderr, а не Write-Warning: в PS 5.1 предупреждение уходит в stdout, получает +# локализованный префикс и переносится по 80 символов — подстрока в тесте перестаёт находиться. +if ($formatRank -eq 0) { + [Console]::Error.WriteLine("Malformed -FormatVersion '$FormatVersion' (expected N.N, e.g. 2.17)") + exit 1 +} +if ($formatRank -lt (Get-FormatRank $formatVerifiedMin) -or $formatRank -gt (Get-FormatRank $formatVerifiedMax)) { + [Console]::Error.WriteLine("WARNING: Format version '$FormatVersion' is outside the tested range $formatVerifiedMin-$formatVerifiedMax — the scaffold is emitted as requested but was not verified on that platform") +} + $uuid1 = [guid]::NewGuid().ToString() $uuid2 = [guid]::NewGuid().ToString() $uuid3 = [guid]::NewGuid().ToString() @@ -34,7 +58,7 @@ $uuid4 = [guid]::NewGuid().ToString() $xmlnsDecl = 'xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' # 2.21 (8.5) добавила в шапку пространство палитры. Вставляем НА МЕСТО (после lf, перед style): # платформа держит объявления по алфавиту, дописать в конец нельзя. -if (($FormatVersion -match '^(\d+)\.(\d+)$') -and ([int]$Matches[1] * 100 + [int]$Matches[2]) -ge 221) { +if ($formatRank -ge 221) { $xmlnsDecl = $xmlnsDecl -replace ' xmlns:style=', ' xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style=' } diff --git a/.claude/skills/epf-init/scripts/init.py b/.claude/skills/epf-init/scripts/init.py index 7f0c4f63..1643a683 100644 --- a/.claude/skills/epf-init/scripts/init.py +++ b/.claude/skills/epf-init/scripts/init.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# epf-init v1.7 — Init 1C external data processor scaffold (+write_xml_file/write_utf8_bom: общий эталон записи) +# epf-init v1.8 — Init 1C external data processor scaffold (+write_xml_file/write_utf8_bom: общий эталон записи) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills """Generates minimal XML source files for a 1C external data processor.""" import sys, os, re, argparse, uuid @@ -56,6 +56,10 @@ def format_rank(ver): return int(m.group(1)) * 100 + int(m.group(2)) if m else 0 +FORMAT_VERIFIED_MIN = "2.17" +FORMAT_VERIFIED_MAX = "2.21" + + def main(): sys.stdout.reconfigure(encoding="utf-8") sys.stderr.reconfigure(encoding="utf-8") @@ -66,10 +70,22 @@ def main(): # Версия формата выгрузки. Своей конфигурации у автономного объекта нет, наследовать # версию неоткуда — поэтому её задают явно. Формы, макеты и справку внутри объекта # навыки берут уже отсюда: их детектор читает version из корня этого файла. - parser.add_argument('-FormatVersion', dest='FormatVersion', default='2.17', - choices=['2.17', '2.18', '2.19', '2.20', '2.21']) + parser.add_argument('-FormatVersion', dest='FormatVersion', default='2.17') args = ci_parse_args(parser) + # Проверенный диапазон: 2.17 (8.3.24) … 2.21 (8.5). Полная лестница — + # docs/1c-configuration-spec.md, «Лестница версий». Версии ниже 2.17 (платформы 8.3.23 и + # старше) реальны, поэтому запретом их не закрываем: за пределами диапазона — + # ПРЕДУПРЕЖДЕНИЕ, скаффолд всё равно выпускается. Ошибка — только на нечисловое значение. + format_rank_value = format_rank(args.FormatVersion) + if format_rank_value == 0: + print(f"Malformed -FormatVersion '{args.FormatVersion}' (expected N.N, e.g. 2.17)", file=sys.stderr) + sys.exit(1) + if not (format_rank(FORMAT_VERIFIED_MIN) <= format_rank_value <= format_rank(FORMAT_VERIFIED_MAX)): + print(f"WARNING: Format version '{args.FormatVersion}' is outside the tested range " + f"{FORMAT_VERIFIED_MIN}-{FORMAT_VERIFIED_MAX} — the scaffold is emitted as requested " + f"but was not verified on that platform", file=sys.stderr) + name = args.Name synonym = args.Synonym if args.Synonym else name src_dir = args.SrcDir diff --git a/.claude/skills/epf-validate/scripts/epf-validate.ps1 b/.claude/skills/epf-validate/scripts/epf-validate.ps1 index bce7a851..3059bc44 100644 --- a/.claude/skills/epf-validate/scripts/epf-validate.ps1 +++ b/.claude/skills/epf-validate/scripts/epf-validate.ps1 @@ -1,4 +1,4 @@ -# epf-validate v1.4 — Validate 1C external data processor / report structure +# epf-validate v1.5 — Validate 1C external data processor / report structure # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # Works for both EPF (ExternalDataProcessor) and ERF (ExternalReport) — auto-detects param( @@ -111,6 +111,19 @@ $finalize = { } } +# --- Format version --- +# Проверенный диапазон версий формата выгрузки: 2.17 (8.3.24) … 2.21 (8.5). Полная лестница — +# docs/1c-configuration-spec.md, «Лестница версий». Версию задаёт платформа ВЫГРУЗКИ, а не режим +# совместимости конфигурации. Версии ниже 2.17 (платформы 8.3.23 и старше) существуют, но навыки +# на них не проверялись — это предупреждение о непокрытии, а не о некорректности файла. +$formatVerifiedMin = "2.17" +$formatVerifiedMax = "2.21" +# Версия формата как число: "2.20" → 220. Строковое сравнение неверно ("2.9" > "2.17"). +function Get-FormatRank([string]$ver) { + if ($ver -match '^(\d+)\.(\d+)$') { return [int]$Matches[1] * 100 + [int]$Matches[2] } + return 0 +} + # --- Reference tables --- $guidPattern = '^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$' @@ -183,11 +196,15 @@ if ($root.NamespaceURI -ne $expectedNs) { } $version = $root.GetAttribute("version") +$versionRank = Get-FormatRank $version if (-not $version) { Report-Warn "1. Missing version attribute on MetaDataObject" -} elseif ($version -notin @("2.17", "2.18", "2.19", "2.20", "2.21")) { - # Лестница версий формата: 2.17 (8.3.20-8.3.24), 2.18 (8.3.25), 2.19 (8.3.26), 2.20 (8.3.27). - Report-Warn "1. Unusual version '$version' (expected 2.17-2.20 or 2.21)" +} elseif ($versionRank -eq 0) { + Report-Error "1. Malformed version '$version' (expected N.N)" +} elseif ($versionRank -lt (Get-FormatRank $formatVerifiedMin)) { + Report-Warn "1. Format version '$version' is below the tested range $formatVerifiedMin-$formatVerifiedMax — skills were not verified on it" +} elseif ($versionRank -gt (Get-FormatRank $formatVerifiedMax)) { + Report-Warn "1. Format version '$version' is above the tested range $formatVerifiedMin-$formatVerifiedMax — skills were not verified on it" } # Detect type: ExternalDataProcessor or ExternalReport diff --git a/.claude/skills/epf-validate/scripts/epf-validate.py b/.claude/skills/epf-validate/scripts/epf-validate.py index 6f5192cc..45b3e2d4 100644 --- a/.claude/skills/epf-validate/scripts/epf-validate.py +++ b/.claude/skills/epf-validate/scripts/epf-validate.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# epf-validate v1.4 — Validate 1C external data processor / report structure +# epf-validate v1.5 — Validate 1C external data processor / report structure # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # Works for both EPF (ExternalDataProcessor) and ERF (ExternalReport) — auto-detects @@ -60,6 +60,21 @@ CHILD_TYPE_ORDER = { } +# ── Format version ─────────────────────────────────────────── +# Проверенный диапазон версий формата выгрузки: 2.17 (8.3.24) … 2.21 (8.5). Полная лестница — +# docs/1c-configuration-spec.md, «Лестница версий». Версию задаёт платформа ВЫГРУЗКИ, а не режим +# совместимости конфигурации. Версии ниже 2.17 (платформы 8.3.23 и старше) существуют, но навыки +# на них не проверялись — это предупреждение о непокрытии, а не о некорректности файла. +FORMAT_VERIFIED_MIN = "2.17" +FORMAT_VERIFIED_MAX = "2.21" + + +def format_rank(ver): + """"2.20" → 220, "2.9" → 209. Строковое сравнение неверно ("2.9" > "2.17").""" + m = re.match(r'^(\d+)\.(\d+)$', ver or '') + return int(m.group(1)) * 100 + int(m.group(2)) if m else 0 + + def localname(el): return etree.QName(el.tag).localname @@ -185,11 +200,17 @@ def main(): check1_ok = False version = root.get("version", "") + version_rank = format_rank(version) if not version: report_warn("1. Missing version attribute on MetaDataObject") - elif version not in ("2.17", "2.18", "2.19", "2.20", "2.21"): - # Лестница версий формата: 2.17 (8.3.20-8.3.24), 2.18 (8.3.25), 2.19 (8.3.26), 2.20 (8.3.27). - report_warn(f"1. Unusual version '{version}' (expected 2.17-2.20 or 2.21)") + elif version_rank == 0: + report_error(f"1. Malformed version '{version}' (expected N.N)") + elif version_rank < format_rank(FORMAT_VERIFIED_MIN): + report_warn(f"1. Format version '{version}' is below the tested range " + f"{FORMAT_VERIFIED_MIN}-{FORMAT_VERIFIED_MAX} — skills were not verified on it") + elif version_rank > format_rank(FORMAT_VERIFIED_MAX): + report_warn(f"1. Format version '{version}' is above the tested range " + f"{FORMAT_VERIFIED_MIN}-{FORMAT_VERIFIED_MAX} — skills were not verified on it") # Detect type child_elements = [] diff --git a/.claude/skills/erf-init/SKILL.md b/.claude/skills/erf-init/SKILL.md index a5dce9c4..346c164f 100644 --- a/.claude/skills/erf-init/SKILL.md +++ b/.claude/skills/erf-init/SKILL.md @@ -26,13 +26,19 @@ allowed-tools: | Name | да | — | Имя отчёта (латиница/кириллица) | | Synonym | нет | = Name | Синоним (отображаемое имя) | | SrcDir | нет | `src` | Каталог исходников относительно CWD | -| FormatVersion | нет | `2.17` | Версия формата: 2.20 — платформа 8.3.27, 2.21 — 8.5. Дефолт открывается любой платформой | +| FormatVersion | нет | `2.17` | Версия формата выгрузки — см. ниже | | --WithSKD | нет | — | Создать пустую СКД и привязать к MainDataCompositionSchema | +`FormatVersion` — **не выше** версии формата платформы, на которой объект будут собирать и открывать: +8.3.24 — `2.17`, 8.3.25 — `2.18`, 8.3.26 — `2.19`, 8.3.27 — `2.20`, 8.5 — `2.21`. Ниже брать можно: +платформа читает свой формат и любой более старый, поэтому дефолт `2.17` подходит для всей линейки +8.3.24 и выше. Для более старых платформ счёт идёт так же, по одной версии на релиз (8.3.23 — `2.16`), +но на них навыки не проверялись — такое значение принимается с предупреждением. + ## Команда ```powershell -powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/init.ps1" -Name "" [-Synonym ""] [-SrcDir ""] [-FormatVersion "<2.17|2.18|2.19|2.20|2.21>"] [-WithSKD] +powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/init.ps1" -Name "" [-Synonym ""] [-SrcDir ""] [-FormatVersion "<версия>"] [-WithSKD] ``` ## Дальнейшие шаги diff --git a/.claude/skills/erf-init/scripts/init.ps1 b/.claude/skills/erf-init/scripts/init.ps1 index ec0e071c..782641a7 100644 --- a/.claude/skills/erf-init/scripts/init.ps1 +++ b/.claude/skills/erf-init/scripts/init.ps1 @@ -1,4 +1,4 @@ -# erf-init v1.7 — Init 1C external report scaffold (+write_xml_file/write_utf8_bom: общий эталон записи) +# erf-init v1.8 — Init 1C external report scaffold (+write_xml_file/write_utf8_bom: общий эталон записи) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -13,12 +13,25 @@ param( # Версия формата выгрузки. Своей конфигурации у автономного отчёта нет, наследовать # версию неоткуда — поэтому её задают явно. Формы, макеты и справку внутри отчёта # навыки берут уже отсюда: их детектор читает version из корня этого файла. - [ValidateSet("2.17", "2.18", "2.19", "2.20", "2.21")] [string]$FormatVersion = "2.17" ) $ErrorActionPreference = "Stop" +# --- Format version --- +# Проверенный диапазон: 2.17 (8.3.24) … 2.21 (8.5). Полная лестница — docs/1c-configuration-spec.md, +# «Лестница версий». Версии ниже 2.17 (платформы 8.3.23 и старше) реальны, поэтому запретом их не +# закрываем: за пределами диапазона — ПРЕДУПРЕЖДЕНИЕ, скаффолд всё равно выпускается. Ошибка — только +# на нечисловое значение: это опечатка, а не версия. +$formatVerifiedMin = "2.17" +$formatVerifiedMax = "2.21" +# Версия формата как число: "2.20" → 220. Строковое сравнение неверно ("2.9" > "2.17"). +function Get-FormatRank([string]$ver) { + if ($ver -match '^(\d+)\.(\d+)$') { return [int]$Matches[1] * 100 + [int]$Matches[2] } + return 0 +} +$formatRank = Get-FormatRank $FormatVersion + function Esc-XmlText { param([string]$s) # Эскейп ТЕКСТА элемента: только & < > — кавычку и апостроф платформа держит сырыми. @@ -27,6 +40,17 @@ function Esc-XmlText { [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 [Console]::InputEncoding = [System.Text.Encoding]::UTF8 +# Проверка версии — ПОСЛЕ настройки кодировки консоли: иначе em-dash в сообщении уедет в вопросы. +# Пишем прямо в stderr, а не Write-Warning: в PS 5.1 предупреждение уходит в stdout, получает +# локализованный префикс и переносится по 80 символов — подстрока в тесте перестаёт находиться. +if ($formatRank -eq 0) { + [Console]::Error.WriteLine("Malformed -FormatVersion '$FormatVersion' (expected N.N, e.g. 2.17)") + exit 1 +} +if ($formatRank -lt (Get-FormatRank $formatVerifiedMin) -or $formatRank -gt (Get-FormatRank $formatVerifiedMax)) { + [Console]::Error.WriteLine("WARNING: Format version '$FormatVersion' is outside the tested range $formatVerifiedMin-$formatVerifiedMax — the scaffold is emitted as requested but was not verified on that platform") +} + $uuid1 = [guid]::NewGuid().ToString() $uuid2 = [guid]::NewGuid().ToString() $uuid3 = [guid]::NewGuid().ToString() @@ -36,7 +60,7 @@ $uuid4 = [guid]::NewGuid().ToString() $xmlnsDecl = 'xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' # 2.21 (8.5) добавила в шапку пространство палитры. Вставляем НА МЕСТО (после lf, перед style): # платформа держит объявления по алфавиту, дописать в конец нельзя. -if (($FormatVersion -match '^(\d+)\.(\d+)$') -and ([int]$Matches[1] * 100 + [int]$Matches[2]) -ge 221) { +if ($formatRank -ge 221) { $xmlnsDecl = $xmlnsDecl -replace ' xmlns:style=', ' xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style=' } diff --git a/.claude/skills/erf-init/scripts/init.py b/.claude/skills/erf-init/scripts/init.py index 82b9e182..4c16f671 100644 --- a/.claude/skills/erf-init/scripts/init.py +++ b/.claude/skills/erf-init/scripts/init.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# erf-init v1.7 — Init 1C external report scaffold (+write_xml_file/write_utf8_bom: общий эталон записи) +# erf-init v1.8 — Init 1C external report scaffold (+write_xml_file/write_utf8_bom: общий эталон записи) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills """Generates minimal XML source files for a 1C external report.""" import sys, os, re, argparse, uuid @@ -56,6 +56,10 @@ def format_rank(ver): return int(m.group(1)) * 100 + int(m.group(2)) if m else 0 +FORMAT_VERIFIED_MIN = "2.17" +FORMAT_VERIFIED_MAX = "2.21" + + def main(): sys.stdout.reconfigure(encoding="utf-8") sys.stderr.reconfigure(encoding="utf-8") @@ -66,11 +70,23 @@ def main(): # Версия формата выгрузки. Своей конфигурации у автономного объекта нет, наследовать # версию неоткуда — поэтому её задают явно. Формы, макеты и справку внутри объекта # навыки берут уже отсюда: их детектор читает version из корня этого файла. - parser.add_argument('-FormatVersion', dest='FormatVersion', default='2.17', - choices=['2.17', '2.18', '2.19', '2.20', '2.21']) + parser.add_argument('-FormatVersion', dest='FormatVersion', default='2.17') parser.add_argument('-WithSKD', dest='WithSKD', action='store_true') args = ci_parse_args(parser) + # Проверенный диапазон: 2.17 (8.3.24) … 2.21 (8.5). Полная лестница — + # docs/1c-configuration-spec.md, «Лестница версий». Версии ниже 2.17 (платформы 8.3.23 и + # старше) реальны, поэтому запретом их не закрываем: за пределами диапазона — + # ПРЕДУПРЕЖДЕНИЕ, скаффолд всё равно выпускается. Ошибка — только на нечисловое значение. + format_rank_value = format_rank(args.FormatVersion) + if format_rank_value == 0: + print(f"Malformed -FormatVersion '{args.FormatVersion}' (expected N.N, e.g. 2.17)", file=sys.stderr) + sys.exit(1) + if not (format_rank(FORMAT_VERIFIED_MIN) <= format_rank_value <= format_rank(FORMAT_VERIFIED_MAX)): + print(f"WARNING: Format version '{args.FormatVersion}' is outside the tested range " + f"{FORMAT_VERIFIED_MIN}-{FORMAT_VERIFIED_MAX} — the scaffold is emitted as requested " + f"but was not verified on that platform", file=sys.stderr) + name = args.Name synonym = args.Synonym if args.Synonym else name src_dir = args.SrcDir diff --git a/.claude/skills/form-validate/scripts/form-validate.ps1 b/.claude/skills/form-validate/scripts/form-validate.ps1 index 3e1f3716..2410e686 100644 --- a/.claude/skills/form-validate/scripts/form-validate.ps1 +++ b/.claude/skills/form-validate/scripts/form-validate.ps1 @@ -1,4 +1,4 @@ -# form-validate v1.15 — Validate 1C managed form +# form-validate v1.16 — Validate 1C managed form # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -158,6 +158,19 @@ function Report-Warn { Write-Host "[WARN] $msg" } +# --- Format version --- +# Проверенный диапазон версий формата выгрузки: 2.17 (8.3.24) … 2.21 (8.5). Полная лестница — +# docs/1c-configuration-spec.md, «Лестница версий». Версию задаёт платформа ВЫГРУЗКИ, а не режим +# совместимости конфигурации. Версии ниже 2.17 (платформы 8.3.23 и старше) существуют, но навыки +# на них не проверялись — это предупреждение о непокрытии, а не о некорректности файла. +$formatVerifiedMin = "2.17" +$formatVerifiedMax = "2.21" +# Версия формата как число: "2.20" → 220. Строковое сравнение неверно ("2.9" > "2.17"). +function Get-FormatRank([string]$ver) { + if ($ver -match '^(\d+)\.(\d+)$') { return [int]$Matches[1] * 100 + [int]$Matches[2] } + return 0 +} + # --- Form name from path --- $formName = [System.IO.Path]::GetFileNameWithoutExtension($FormPath) @@ -184,13 +197,17 @@ if ($root.LocalName -ne "Form") { Report-Error "Root element is '$($root.LocalName)', expected 'Form'" } else { $version = $root.GetAttribute("version") - # Лестница версий формата: 2.17 (8.3.20-8.3.24), 2.18 (8.3.25), 2.19 (8.3.26), 2.20 (8.3.27). - if ($version -in @("2.17", "2.18", "2.19", "2.20")) { - Report-OK "Root element: Form version=$version" - } elseif ($version) { - Report-Warn "Form version='$version' (expected 2.17-2.20)" - } else { + $versionRank = Get-FormatRank $version + if (-not $version) { Report-Warn "Form version attribute missing" + } elseif ($versionRank -eq 0) { + Report-Error "Malformed version '$version' (expected N.N)" + } elseif ($versionRank -lt (Get-FormatRank $formatVerifiedMin)) { + Report-Warn "Format version '$version' is below the tested range $formatVerifiedMin-$formatVerifiedMax — skills were not verified on it" + } elseif ($versionRank -gt (Get-FormatRank $formatVerifiedMax)) { + Report-Warn "Format version '$version' is above the tested range $formatVerifiedMin-$formatVerifiedMax — skills were not verified on it" + } else { + Report-OK "Root element: Form version=$version" } } diff --git a/.claude/skills/form-validate/scripts/form-validate.py b/.claude/skills/form-validate/scripts/form-validate.py index b046b709..4742d265 100644 --- a/.claude/skills/form-validate/scripts/form-validate.py +++ b/.claude/skills/form-validate/scripts/form-validate.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# form-validate v1.15 — Validate 1C managed form +# form-validate v1.16 — Validate 1C managed form # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse @@ -114,6 +114,21 @@ def detect_format_version(d): return "2.17" +# ── Format version ─────────────────────────────────────────── +# Проверенный диапазон версий формата выгрузки: 2.17 (8.3.24) … 2.21 (8.5). Полная лестница — +# docs/1c-configuration-spec.md, «Лестница версий». Версию задаёт платформа ВЫГРУЗКИ, а не режим +# совместимости конфигурации. Версии ниже 2.17 (платформы 8.3.23 и старше) существуют, но навыки +# на них не проверялись — это предупреждение о непокрытии, а не о некорректности файла. +FORMAT_VERIFIED_MIN = "2.17" +FORMAT_VERIFIED_MAX = "2.21" + + +def format_rank(ver): + """"2.20" → 220, "2.9" → 209. Строковое сравнение неверно ("2.9" > "2.17").""" + m = re.match(r'^(\d+)\.(\d+)$', ver or '') + return int(m.group(1)) * 100 + int(m.group(2)) if m else 0 + + def localname(el): return etree.QName(el.tag).localname @@ -242,13 +257,19 @@ def main(): report_error(f"Root element is '{localname(root)}', expected 'Form'") else: version = root.get("version", "") - # Лестница версий формата: 2.17 (8.3.20-8.3.24), 2.18 (8.3.25), 2.19 (8.3.26), 2.20 (8.3.27). - if version in ("2.17", "2.18", "2.19", "2.20"): - report_ok(f"Root element: Form version={version}") - elif version: - report_warn(f"Form version='{version}' (expected 2.17-2.20)") - else: + version_rank = format_rank(version) + if not version: report_warn("Form version attribute missing") + elif version_rank == 0: + report_error(f"Malformed version '{version}' (expected N.N)") + elif version_rank < format_rank(FORMAT_VERIFIED_MIN): + report_warn(f"Format version '{version}' is below the tested range " + f"{FORMAT_VERIFIED_MIN}-{FORMAT_VERIFIED_MAX} — skills were not verified on it") + elif version_rank > format_rank(FORMAT_VERIFIED_MAX): + report_warn(f"Format version '{version}' is above the tested range " + f"{FORMAT_VERIFIED_MIN}-{FORMAT_VERIFIED_MAX} — skills were not verified on it") + else: + report_ok(f"Root element: Form version={version}") # --- Check 2: AutoCommandBar --- if not stopped: diff --git a/.claude/skills/meta-validate/scripts/meta-validate.ps1 b/.claude/skills/meta-validate/scripts/meta-validate.ps1 index a78a8cd1..a9c6c3b2 100644 --- a/.claude/skills/meta-validate/scripts/meta-validate.ps1 +++ b/.claude/skills/meta-validate/scripts/meta-validate.ps1 @@ -1,4 +1,4 @@ -# meta-validate v1.18 — Validate 1C metadata object structure +# meta-validate v1.19 — Validate 1C metadata object structure # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -153,6 +153,19 @@ $finalize = { } } +# --- Format version --- +# Проверенный диапазон версий формата выгрузки: 2.17 (8.3.24) … 2.21 (8.5). Полная лестница — +# docs/1c-configuration-spec.md, «Лестница версий». Версию задаёт платформа ВЫГРУЗКИ, а не режим +# совместимости конфигурации. Версии ниже 2.17 (платформы 8.3.23 и старше) существуют, но навыки +# на них не проверялись — это предупреждение о непокрытии, а не о некорректности файла. +$formatVerifiedMin = "2.17" +$formatVerifiedMax = "2.21" +# Версия формата как число: "2.20" → 220. Строковое сравнение неверно ("2.9" > "2.17"). +function Get-FormatRank([string]$ver) { + if ($ver -match '^(\d+)\.(\d+)$') { return [int]$Matches[1] * 100 + [int]$Matches[2] } + return 0 +} + # --- Reference tables --- $guidPattern = '^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$' @@ -350,12 +363,15 @@ if ($root.NamespaceURI -ne $expectedNs) { # Version attribute $version = $root.GetAttribute("version") +$versionRank = Get-FormatRank $version if (-not $version) { Report-Warn "1. Missing version attribute on MetaDataObject" -} elseif ($version -notin @("2.17", "2.18", "2.19", "2.20", "2.21")) { - # Лестница версий формата: 2.17 (8.3.20-8.3.24), 2.18 (8.3.25), 2.19 (8.3.26), - # 2.20 (8.3.27), 2.21 (8.5). Версию задаёт платформа ВЫГРУЗКИ, а не режим совместимости. - Report-Warn "1. Unusual version '$version' (expected 2.17-2.21)" +} elseif ($versionRank -eq 0) { + Report-Error "1. Malformed version '$version' (expected N.N)" +} elseif ($versionRank -lt (Get-FormatRank $formatVerifiedMin)) { + Report-Warn "1. Format version '$version' is below the tested range $formatVerifiedMin-$formatVerifiedMax — skills were not verified on it" +} elseif ($versionRank -gt (Get-FormatRank $formatVerifiedMax)) { + Report-Warn "1. Format version '$version' is above the tested range $formatVerifiedMin-$formatVerifiedMax — skills were not verified on it" } # Detect type element — exactly one child element in md namespace @@ -1515,12 +1531,7 @@ $versionedProps = @{ "AuxiliaryVariantForm" = "2.21" # вспомогательная форма варианта отчёта "UseInInterfaceCompatibilityMode" = "2.21" # использование общей формы в режиме совместимости интерфейса } -# Версия формата как число: "2.20" → 220. Строковое сравнение неверно ("2.9" > "2.17"). -function Get-FormatRank([string]$ver) { - if ($ver -match '^(\d+)\.(\d+)$') { return [int]$Matches[1] * 100 + [int]$Matches[2] } - return 0 -} -$fileRank = Get-FormatRank $version +$fileRank = $versionRank if ($fileRank -gt 0) { foreach ($vp in ($versionedProps.Keys | Sort-Object)) { $nodes = $xmlDoc.SelectNodes("//md:$vp | //xr:$vp", $ns) diff --git a/.claude/skills/meta-validate/scripts/meta-validate.py b/.claude/skills/meta-validate/scripts/meta-validate.py index b6734834..e3843e03 100644 --- a/.claude/skills/meta-validate/scripts/meta-validate.py +++ b/.claude/skills/meta-validate/scripts/meta-validate.py @@ -1,4 +1,4 @@ -# meta-validate v1.18 — Validate 1C metadata object structure (Python port) +# meta-validate v1.19 — Validate 1C metadata object structure (Python port) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import os @@ -175,6 +175,21 @@ def finalize(): print(f"Written to: {out_file}") +# ── Format version ─────────────────────────────────────────── +# Проверенный диапазон версий формата выгрузки: 2.17 (8.3.24) … 2.21 (8.5). Полная лестница — +# docs/1c-configuration-spec.md, «Лестница версий». Версию задаёт платформа ВЫГРУЗКИ, а не режим +# совместимости конфигурации. Версии ниже 2.17 (платформы 8.3.23 и старше) существуют, но навыки +# на них не проверялись — это предупреждение о непокрытии, а не о некорректности файла. +FORMAT_VERIFIED_MIN = "2.17" +FORMAT_VERIFIED_MAX = "2.21" + + +def format_rank(ver): + """"2.20" → 220, "2.9" → 209. Строковое сравнение неверно ("2.9" > "2.17").""" + m = re.match(r'^(\d+)\.(\d+)$', ver or '') + return int(m.group(1)) * 100 + int(m.group(2)) if m else 0 + + # ── Reference tables ───────────────────────────────────────── guid_pattern = re.compile(r'^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$') @@ -399,12 +414,17 @@ if root_ns != expected_ns: # Version attribute version = root.get("version", "") +version_rank = format_rank(version) if not version: report_warn("1. Missing version attribute on MetaDataObject") -elif version not in ("2.17", "2.18", "2.19", "2.20", "2.21"): - # Лестница версий формата: 2.17 (8.3.20-8.3.24), 2.18 (8.3.25), 2.19 (8.3.26), - # 2.20 (8.3.27), 2.21 (8.5). Версию задаёт платформа ВЫГРУЗКИ, а не режим совместимости. - report_warn(f"1. Unusual version '{version}' (expected 2.17-2.21)") +elif version_rank == 0: + report_error(f"1. Malformed version '{version}' (expected N.N)") +elif version_rank < format_rank(FORMAT_VERIFIED_MIN): + report_warn(f"1. Format version '{version}' is below the tested range " + f"{FORMAT_VERIFIED_MIN}-{FORMAT_VERIFIED_MAX} — skills were not verified on it") +elif version_rank > format_rank(FORMAT_VERIFIED_MAX): + report_warn(f"1. Format version '{version}' is above the tested range " + f"{FORMAT_VERIFIED_MIN}-{FORMAT_VERIFIED_MAX} — skills were not verified on it") # Detect type element -- exactly one child element in md namespace type_node = None @@ -1437,14 +1457,7 @@ versioned_props = { "UseInInterfaceCompatibilityMode": "2.21", # использование общей формы в режиме совместимости интерфейса } - -def format_rank(ver): - """"2.20" → 220, "2.9" → 209. Строковое сравнение неверно ("2.9" > "2.17").""" - m = re.match(r'^(\d+)\.(\d+)$', ver or '') - return int(m.group(1)) * 100 + int(m.group(2)) if m else 0 - - -file_rank = format_rank(version) +file_rank = version_rank if file_rank > 0: for vp in sorted(versioned_props): nodes = find_all(root, f"//md:{vp} | //xr:{vp}") diff --git a/tests/skills/cases/cf-init/format-217-no-texttospeech.json b/tests/skills/cases/cf-init/format-217-no-texttospeech.json new file mode 100644 index 00000000..8581785a --- /dev/null +++ b/tests/skills/cases/cf-init/format-217-no-texttospeech.json @@ -0,0 +1,20 @@ +{ + "name": "Формат 2.17: TextToSpeech не эмитится — на 8.3.24 тег ломает загрузку XDTO-ошибкой", + "params": { + "name": "Конфа217" + }, + "args_extra": [ + "-FormatVersion", + "2.17" + ], + "expect": { + "fileContains": { + "file": "Configuration.xml", + "text": "version=\"2.17\"" + }, + "fileNotContains": { + "file": "Configuration.xml", + "text": "TextToSpeech" + } + } +} diff --git a/tests/skills/cases/cf-init/format-218-texttospeech.json b/tests/skills/cases/cf-init/format-218-texttospeech.json new file mode 100644 index 00000000..8fe3c6ba --- /dev/null +++ b/tests/skills/cases/cf-init/format-218-texttospeech.json @@ -0,0 +1,25 @@ +{ + "name": "Формат 2.18: TextToSpeech в мобильной функциональности (появился в 8.3.25, не в 8.5)", + "params": { + "name": "Конфа218" + }, + "args_extra": [ + "-FormatVersion", + "2.18", + "-CompatibilityMode", + "Version8_3_25" + ], + "expect": { + "fileContains": { + "file": "Configuration.xml", + "text": [ + "TextToSpeech", + "version=\"2.18\"" + ] + }, + "fileNotContains": { + "file": "Configuration.xml", + "text": "xmlns:pal=" + } + } +} diff --git a/tests/skills/cases/cf-init/snapshots/format-217-no-texttospeech/Configuration.xml b/tests/skills/cases/cf-init/snapshots/format-217-no-texttospeech/Configuration.xml new file mode 100644 index 00000000..3e78c7e6 --- /dev/null +++ b/tests/skills/cases/cf-init/snapshots/format-217-no-texttospeech/Configuration.xml @@ -0,0 +1,251 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + Конфа217 + + + ru + Конфа217 + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-init/snapshots/format-217-no-texttospeech/Ext/ClientApplicationInterface.xml b/tests/skills/cases/cf-init/snapshots/format-217-no-texttospeech/Ext/ClientApplicationInterface.xml new file mode 100644 index 00000000..3c1161b2 --- /dev/null +++ b/tests/skills/cases/cf-init/snapshots/format-217-no-texttospeech/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-init/snapshots/format-217-no-texttospeech/Languages/Русский.xml b/tests/skills/cases/cf-init/snapshots/format-217-no-texttospeech/Languages/Русский.xml new file mode 100644 index 00000000..37c60d78 --- /dev/null +++ b/tests/skills/cases/cf-init/snapshots/format-217-no-texttospeech/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-init/snapshots/format-218-texttospeech/Configuration.xml b/tests/skills/cases/cf-init/snapshots/format-218-texttospeech/Configuration.xml new file mode 100644 index 00000000..1373a580 --- /dev/null +++ b/tests/skills/cases/cf-init/snapshots/format-218-texttospeech/Configuration.xml @@ -0,0 +1,255 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + Конфа218 + + + ru + Конфа218 + + + + + Version8_3_25 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + TextToSpeech + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_25 + + + + Русский + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-init/snapshots/format-218-texttospeech/Ext/ClientApplicationInterface.xml b/tests/skills/cases/cf-init/snapshots/format-218-texttospeech/Ext/ClientApplicationInterface.xml new file mode 100644 index 00000000..3c1161b2 --- /dev/null +++ b/tests/skills/cases/cf-init/snapshots/format-218-texttospeech/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cf-init/snapshots/format-218-texttospeech/Languages/Русский.xml b/tests/skills/cases/cf-init/snapshots/format-218-texttospeech/Languages/Русский.xml new file mode 100644 index 00000000..28d781ed --- /dev/null +++ b/tests/skills/cases/cf-init/snapshots/format-218-texttospeech/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/epf-init/format-below-range.json b/tests/skills/cases/epf-init/format-below-range.json new file mode 100644 index 00000000..600ad5e2 --- /dev/null +++ b/tests/skills/cases/epf-init/format-below-range.json @@ -0,0 +1,23 @@ +{ + "name": "Формат ниже проверенного диапазона: предупреждение, но скаффолд выпускается", + "params": { + "name": "Обработка213" + }, + "args_extra": [ + "-FormatVersion", + "2.13" + ], + "expect": { + "files": [ + "Обработка213.xml" + ], + "fileContains": { + "file": "Обработка213.xml", + "text": [ + "version=\"2.13\"" + ] + }, + "stderrContains": "is outside the tested range 2.17-2.21" + }, + "skipValidation": true +} diff --git a/tests/skills/cases/epf-init/format-malformed.json b/tests/skills/cases/epf-init/format-malformed.json new file mode 100644 index 00000000..98152e35 --- /dev/null +++ b/tests/skills/cases/epf-init/format-malformed.json @@ -0,0 +1,11 @@ +{ + "name": "Ошибка: -FormatVersion не число — это опечатка, а не старая версия", + "params": { + "name": "ОбработкаКривая" + }, + "args_extra": [ + "-FormatVersion", + "2,17" + ], + "expectError": "Malformed -FormatVersion '2,17'" +} diff --git a/tests/skills/cases/epf-init/snapshots/format-below-range/Обработка213.xml b/tests/skills/cases/epf-init/snapshots/format-below-range/Обработка213.xml new file mode 100644 index 00000000..f3a66a3f --- /dev/null +++ b/tests/skills/cases/epf-init/snapshots/format-below-range/Обработка213.xml @@ -0,0 +1,28 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + + Обработка213 + + + ru + Обработка213 + + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/epf-init/snapshots/format-below-range/Обработка213/Ext/ObjectModule.bsl b/tests/skills/cases/epf-init/snapshots/format-below-range/Обработка213/Ext/ObjectModule.bsl new file mode 100644 index 00000000..15543d27 --- /dev/null +++ b/tests/skills/cases/epf-init/snapshots/format-below-range/Обработка213/Ext/ObjectModule.bsl @@ -0,0 +1,11 @@ +#Область ОписаниеПеременных + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#КонецОбласти \ No newline at end of file diff --git a/tests/skills/cases/form-validate/format-221-clean.json b/tests/skills/cases/form-validate/format-221-clean.json new file mode 100644 index 00000000..63534c26 --- /dev/null +++ b/tests/skills/cases/form-validate/format-221-clean.json @@ -0,0 +1,19 @@ +{ + "name": "Формат 2.21: форма, созданную штатной цепочкой, валидатор считает чистой (issue #63)", + "preRun": [ + { + "script": "epf-init/scripts/init", + "args": { "-Name": "Версия221", "-SrcDir": "{workDir}", "-FormatVersion": "2.21" } + }, + { + "script": "form-add/scripts/form-add", + "args": { "-ObjectPath": "{workDir}/Версия221.xml", "-FormName": "Форма" } + } + ], + "params": { "formPath": "Версия221/Forms/Форма" }, + "expect": { + "stdoutContains": "Validation OK", + "stdoutNotContains": "[WARN]" + }, + "skipPlatformVerify": "автономная внешняя обработка: верификатор грузит каталог как конфигурацию, EPF так не проверить" +} diff --git a/tests/skills/cases/form-validate/format-above-range.json b/tests/skills/cases/form-validate/format-above-range.json new file mode 100644 index 00000000..7fa02c03 --- /dev/null +++ b/tests/skills/cases/form-validate/format-above-range.json @@ -0,0 +1,19 @@ +{ + "name": "Версия формы выше проверенного диапазона: предупреждение о непокрытии", + "preRun": [ + { + "script": "epf-init/scripts/init", + "args": { "-Name": "Версия299", "-SrcDir": "{workDir}", "-FormatVersion": "2.99" } + }, + { + "script": "form-add/scripts/form-add", + "args": { "-ObjectPath": "{workDir}/Версия299.xml", "-FormName": "Форма" } + } + ], + "params": { "formPath": "Версия299/Forms/Форма" }, + "expect": { + "stdoutContains": "Format version '2.99' is above the tested range 2.17-2.21", + "stdoutNotContains": "[ERROR]" + }, + "skipPlatformVerify": "автономная внешняя обработка: верификатор грузит каталог как конфигурацию, EPF так не проверить" +} diff --git a/tests/skills/cases/form-validate/format-below-range.json b/tests/skills/cases/form-validate/format-below-range.json new file mode 100644 index 00000000..270b47ac --- /dev/null +++ b/tests/skills/cases/form-validate/format-below-range.json @@ -0,0 +1,19 @@ +{ + "name": "Версия формы ниже проверенного диапазона: предупреждение о непокрытии, не об ошибке", + "preRun": [ + { + "script": "epf-init/scripts/init", + "args": { "-Name": "Версия216", "-SrcDir": "{workDir}", "-FormatVersion": "2.16" } + }, + { + "script": "form-add/scripts/form-add", + "args": { "-ObjectPath": "{workDir}/Версия216.xml", "-FormName": "Форма" } + } + ], + "params": { "formPath": "Версия216/Forms/Форма" }, + "expect": { + "stdoutContains": "Format version '2.16' is below the tested range 2.17-2.21", + "stdoutNotContains": "[ERROR]" + }, + "skipPlatformVerify": "автономная внешняя обработка: верификатор грузит каталог как конфигурацию, EPF так не проверить" +} diff --git a/tests/skills/cases/form-validate/snapshots/format-221-clean/Configuration.xml b/tests/skills/cases/form-validate/snapshots/format-221-clean/Configuration.xml new file mode 100644 index 00000000..2ed58586 --- /dev/null +++ b/tests/skills/cases/form-validate/snapshots/format-221-clean/Configuration.xml @@ -0,0 +1,251 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + + + \ No newline at end of file diff --git a/tests/skills/cases/form-validate/snapshots/format-221-clean/Ext/ClientApplicationInterface.xml b/tests/skills/cases/form-validate/snapshots/format-221-clean/Ext/ClientApplicationInterface.xml new file mode 100644 index 00000000..3c1161b2 --- /dev/null +++ b/tests/skills/cases/form-validate/snapshots/format-221-clean/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/form-validate/snapshots/format-221-clean/Languages/Русский.xml b/tests/skills/cases/form-validate/snapshots/format-221-clean/Languages/Русский.xml new file mode 100644 index 00000000..37c60d78 --- /dev/null +++ b/tests/skills/cases/form-validate/snapshots/format-221-clean/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/form-validate/snapshots/format-221-clean/Версия221.xml b/tests/skills/cases/form-validate/snapshots/format-221-clean/Версия221.xml new file mode 100644 index 00000000..1d747dbb --- /dev/null +++ b/tests/skills/cases/form-validate/snapshots/format-221-clean/Версия221.xml @@ -0,0 +1,30 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + + Версия221 + + + ru + Версия221 + + + + ExternalDataProcessor.Версия221.Form.Форма + + + +
Форма
+
+
+
\ No newline at end of file diff --git a/tests/skills/cases/form-validate/snapshots/format-221-clean/Версия221/Ext/ObjectModule.bsl b/tests/skills/cases/form-validate/snapshots/format-221-clean/Версия221/Ext/ObjectModule.bsl new file mode 100644 index 00000000..15543d27 --- /dev/null +++ b/tests/skills/cases/form-validate/snapshots/format-221-clean/Версия221/Ext/ObjectModule.bsl @@ -0,0 +1,11 @@ +#Область ОписаниеПеременных + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#КонецОбласти \ No newline at end of file diff --git a/tests/skills/cases/form-validate/snapshots/format-221-clean/Версия221/Forms/Форма.xml b/tests/skills/cases/form-validate/snapshots/format-221-clean/Версия221/Forms/Форма.xml new file mode 100644 index 00000000..a9b45a1f --- /dev/null +++ b/tests/skills/cases/form-validate/snapshots/format-221-clean/Версия221/Forms/Форма.xml @@ -0,0 +1,23 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + + +
+
\ No newline at end of file diff --git a/tests/skills/cases/form-validate/snapshots/format-221-clean/Версия221/Forms/Форма/Ext/Form.xml b/tests/skills/cases/form-validate/snapshots/format-221-clean/Версия221/Forms/Форма/Ext/Form.xml new file mode 100644 index 00000000..631f9f9d --- /dev/null +++ b/tests/skills/cases/form-validate/snapshots/format-221-clean/Версия221/Forms/Форма/Ext/Form.xml @@ -0,0 +1,15 @@ + +
+ + true + + + + + + cfg:ExternalDataProcessorObject.Версия221 + + true + + + \ No newline at end of file diff --git a/tests/skills/cases/form-validate/snapshots/format-221-clean/Версия221/Forms/Форма/Ext/Form/Module.bsl b/tests/skills/cases/form-validate/snapshots/format-221-clean/Версия221/Forms/Форма/Ext/Form/Module.bsl new file mode 100644 index 00000000..8ead4cec --- /dev/null +++ b/tests/skills/cases/form-validate/snapshots/format-221-clean/Версия221/Forms/Форма/Ext/Form/Module.bsl @@ -0,0 +1,19 @@ +#Область ОбработчикиСобытийФормы + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовФормы + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +#КонецОбласти + +#Область ОбработчикиОповещений + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#КонецОбласти \ No newline at end of file diff --git a/tests/skills/cases/form-validate/snapshots/format-above-range/Configuration.xml b/tests/skills/cases/form-validate/snapshots/format-above-range/Configuration.xml new file mode 100644 index 00000000..2ed58586 --- /dev/null +++ b/tests/skills/cases/form-validate/snapshots/format-above-range/Configuration.xml @@ -0,0 +1,251 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + + + \ No newline at end of file diff --git a/tests/skills/cases/form-validate/snapshots/format-above-range/Ext/ClientApplicationInterface.xml b/tests/skills/cases/form-validate/snapshots/format-above-range/Ext/ClientApplicationInterface.xml new file mode 100644 index 00000000..3c1161b2 --- /dev/null +++ b/tests/skills/cases/form-validate/snapshots/format-above-range/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/form-validate/snapshots/format-above-range/Languages/Русский.xml b/tests/skills/cases/form-validate/snapshots/format-above-range/Languages/Русский.xml new file mode 100644 index 00000000..37c60d78 --- /dev/null +++ b/tests/skills/cases/form-validate/snapshots/format-above-range/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/form-validate/snapshots/format-above-range/Версия299.xml b/tests/skills/cases/form-validate/snapshots/format-above-range/Версия299.xml new file mode 100644 index 00000000..50d4cee5 --- /dev/null +++ b/tests/skills/cases/form-validate/snapshots/format-above-range/Версия299.xml @@ -0,0 +1,30 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + + Версия299 + + + ru + Версия299 + + + + ExternalDataProcessor.Версия299.Form.Форма + + + +
Форма
+
+
+
\ No newline at end of file diff --git a/tests/skills/cases/form-validate/snapshots/format-above-range/Версия299/Ext/ObjectModule.bsl b/tests/skills/cases/form-validate/snapshots/format-above-range/Версия299/Ext/ObjectModule.bsl new file mode 100644 index 00000000..15543d27 --- /dev/null +++ b/tests/skills/cases/form-validate/snapshots/format-above-range/Версия299/Ext/ObjectModule.bsl @@ -0,0 +1,11 @@ +#Область ОписаниеПеременных + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#КонецОбласти \ No newline at end of file diff --git a/tests/skills/cases/form-validate/snapshots/format-above-range/Версия299/Forms/Форма.xml b/tests/skills/cases/form-validate/snapshots/format-above-range/Версия299/Forms/Форма.xml new file mode 100644 index 00000000..07e1a618 --- /dev/null +++ b/tests/skills/cases/form-validate/snapshots/format-above-range/Версия299/Forms/Форма.xml @@ -0,0 +1,23 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + Any + + +
+
\ No newline at end of file diff --git a/tests/skills/cases/form-validate/snapshots/format-above-range/Версия299/Forms/Форма/Ext/Form.xml b/tests/skills/cases/form-validate/snapshots/format-above-range/Версия299/Forms/Форма/Ext/Form.xml new file mode 100644 index 00000000..8ee39490 --- /dev/null +++ b/tests/skills/cases/form-validate/snapshots/format-above-range/Версия299/Forms/Форма/Ext/Form.xml @@ -0,0 +1,15 @@ + +
+ + true + + + + + + cfg:ExternalDataProcessorObject.Версия299 + + true + + + \ No newline at end of file diff --git a/tests/skills/cases/form-validate/snapshots/format-above-range/Версия299/Forms/Форма/Ext/Form/Module.bsl b/tests/skills/cases/form-validate/snapshots/format-above-range/Версия299/Forms/Форма/Ext/Form/Module.bsl new file mode 100644 index 00000000..8ead4cec --- /dev/null +++ b/tests/skills/cases/form-validate/snapshots/format-above-range/Версия299/Forms/Форма/Ext/Form/Module.bsl @@ -0,0 +1,19 @@ +#Область ОбработчикиСобытийФормы + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовФормы + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +#КонецОбласти + +#Область ОбработчикиОповещений + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#КонецОбласти \ No newline at end of file diff --git a/tests/skills/cases/form-validate/snapshots/format-below-range/Configuration.xml b/tests/skills/cases/form-validate/snapshots/format-below-range/Configuration.xml new file mode 100644 index 00000000..2ed58586 --- /dev/null +++ b/tests/skills/cases/form-validate/snapshots/format-below-range/Configuration.xml @@ -0,0 +1,251 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + + + \ No newline at end of file diff --git a/tests/skills/cases/form-validate/snapshots/format-below-range/Ext/ClientApplicationInterface.xml b/tests/skills/cases/form-validate/snapshots/format-below-range/Ext/ClientApplicationInterface.xml new file mode 100644 index 00000000..3c1161b2 --- /dev/null +++ b/tests/skills/cases/form-validate/snapshots/format-below-range/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/form-validate/snapshots/format-below-range/Languages/Русский.xml b/tests/skills/cases/form-validate/snapshots/format-below-range/Languages/Русский.xml new file mode 100644 index 00000000..37c60d78 --- /dev/null +++ b/tests/skills/cases/form-validate/snapshots/format-below-range/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/form-validate/snapshots/format-below-range/Версия216.xml b/tests/skills/cases/form-validate/snapshots/format-below-range/Версия216.xml new file mode 100644 index 00000000..6c020797 --- /dev/null +++ b/tests/skills/cases/form-validate/snapshots/format-below-range/Версия216.xml @@ -0,0 +1,30 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + + Версия216 + + + ru + Версия216 + + + + ExternalDataProcessor.Версия216.Form.Форма + + + +
Форма
+
+
+
\ No newline at end of file diff --git a/tests/skills/cases/form-validate/snapshots/format-below-range/Версия216/Ext/ObjectModule.bsl b/tests/skills/cases/form-validate/snapshots/format-below-range/Версия216/Ext/ObjectModule.bsl new file mode 100644 index 00000000..15543d27 --- /dev/null +++ b/tests/skills/cases/form-validate/snapshots/format-below-range/Версия216/Ext/ObjectModule.bsl @@ -0,0 +1,11 @@ +#Область ОписаниеПеременных + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#КонецОбласти \ No newline at end of file diff --git a/tests/skills/cases/form-validate/snapshots/format-below-range/Версия216/Forms/Форма.xml b/tests/skills/cases/form-validate/snapshots/format-below-range/Версия216/Forms/Форма.xml new file mode 100644 index 00000000..92c0c5f2 --- /dev/null +++ b/tests/skills/cases/form-validate/snapshots/format-below-range/Версия216/Forms/Форма.xml @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + + +
+
\ No newline at end of file diff --git a/tests/skills/cases/form-validate/snapshots/format-below-range/Версия216/Forms/Форма/Ext/Form.xml b/tests/skills/cases/form-validate/snapshots/format-below-range/Версия216/Forms/Форма/Ext/Form.xml new file mode 100644 index 00000000..868167a9 --- /dev/null +++ b/tests/skills/cases/form-validate/snapshots/format-below-range/Версия216/Forms/Форма/Ext/Form.xml @@ -0,0 +1,15 @@ + +
+ + true + + + + + + cfg:ExternalDataProcessorObject.Версия216 + + true + + + \ No newline at end of file diff --git a/tests/skills/cases/form-validate/snapshots/format-below-range/Версия216/Forms/Форма/Ext/Form/Module.bsl b/tests/skills/cases/form-validate/snapshots/format-below-range/Версия216/Forms/Форма/Ext/Form/Module.bsl new file mode 100644 index 00000000..8ead4cec --- /dev/null +++ b/tests/skills/cases/form-validate/snapshots/format-below-range/Версия216/Forms/Форма/Ext/Form/Module.bsl @@ -0,0 +1,19 @@ +#Область ОбработчикиСобытийФормы + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовФормы + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +#КонецОбласти + +#Область ОбработчикиОповещений + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#КонецОбласти \ No newline at end of file diff --git a/tests/skills/cases/meta-compile/snapshots/format-218-props/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/format-218-props/Configuration.xml index e92d8735..91f1994b 100644 --- a/tests/skills/cases/meta-compile/snapshots/format-218-props/Configuration.xml +++ b/tests/skills/cases/meta-compile/snapshots/format-218-props/Configuration.xml @@ -222,6 +222,10 @@ AllIncomingShareRequestsTypesProcessing false + + TextToSpeech + false + diff --git a/tests/skills/cases/meta-compile/snapshots/format-220-compat24/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/format-220-compat24/Configuration.xml index ae63ff82..9c92fd6a 100644 --- a/tests/skills/cases/meta-compile/snapshots/format-220-compat24/Configuration.xml +++ b/tests/skills/cases/meta-compile/snapshots/format-220-compat24/Configuration.xml @@ -222,6 +222,10 @@ AllIncomingShareRequestsTypesProcessing false + + TextToSpeech + false + diff --git a/tests/skills/cases/meta-compile/snapshots/format-220-props/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/format-220-props/Configuration.xml index 81fa0c03..b187ac05 100644 --- a/tests/skills/cases/meta-compile/snapshots/format-220-props/Configuration.xml +++ b/tests/skills/cases/meta-compile/snapshots/format-220-props/Configuration.xml @@ -222,6 +222,10 @@ AllIncomingShareRequestsTypesProcessing false + + TextToSpeech + false +