From 0a0322faab4da2798b953327b1faf469655a99b2 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Fri, 21 Aug 2026 18:24:58 +0300 Subject: [PATCH] =?UTF-8?q?fix(skills):=20=D0=BF=D0=B8=D1=88=D1=83=D1=89?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BD=D0=B0=D0=B2=D1=8B=D0=BA=D0=B8=20=E2=80=94?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=BF=D1=80=D0=B5=D1=82=20=D0=BF=D0=BE=D0=B7?= =?UTF-8?q?=D0=B8=D1=86=D0=B8=D0=BE=D0=BD=D0=BD=D0=BE=D0=B3=D0=BE=20=D1=81?= =?UTF-8?q?=D0=B2=D1=8F=D0=B7=D1=8B=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BF?= =?UTF-8?q?=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Значение с пробелом без кавычек разрывалось на токены, и лишние молча растекались по свободным позиционным параметрам. На документированной форме вызова (powershell -NoProfile -File): form-compile.ps1 -JsonPath a.json -OutputPath b.xml -Purpose Форма списка → Purpose=[Форма] ObjectPath=[списка], ошибки НЕТ Навык отрабатывал успешно с усечённым значением; реальный триггер — путь с пробелом в -EmitDsl или -ObjectPath, результат уезжал не туда молча. У навыков с парой -DefinitionFile/-Operation осколок уезжал в -DefinitionFile, и навык жаловался на параметр, которого в команде не было. Расхождение портов: py на том же вызове отвечает «unrecognized arguments: списка» — там все аргументы объявлены опциями. Правка выравнивает PS по py, python не менялся. 41 навык получает [CmdletBinding(PositionalBinding=$false)] и ни одного позиционного параметра. Без Position=0 (в отличие от read-only навыков): «главный» параметр механически не выводится — у meta-edit первым объявлен -DefinitionFile, а путь к объекту вторым, — а ошибка выбора тестами не ловится, раннер передаёт только именованные флаги. Позиционной формы вызова нет ни в одной из 140 строк SKILL.md, внутренние вызовы навыков друг из друга тоже именованные. check-positional-binding.mjs расширен на пишущие навыки статической проверкой. Поведенческая (канареечный файл) остаётся только у read-only: у web-stop и db-run все параметры Mandatory=$false, связывание прошло бы и тело выполнилось — гард остановил бы Apache и запустил 1С. Co-Authored-By: Claude Opus 5 --- .claude/skills/cf-edit/scripts/cf-edit.ps1 | 3 +- .claude/skills/cf-edit/scripts/cf-edit.py | 2 +- .claude/skills/cf-init/scripts/cf-init.ps1 | 3 +- .claude/skills/cf-init/scripts/cf-init.py | 2 +- .../skills/cfe-borrow/scripts/cfe-borrow.ps1 | 3 +- .../skills/cfe-borrow/scripts/cfe-borrow.py | 2 +- .claude/skills/cfe-init/scripts/cfe-init.ps1 | 3 +- .claude/skills/cfe-init/scripts/cfe-init.py | 2 +- .../scripts/cfe-patch-method.ps1 | 3 +- .../scripts/cfe-patch-method.py | 2 +- .../skills/db-create/scripts/db-create.ps1 | 4 +- .claude/skills/db-create/scripts/db-create.py | 2 +- .../skills/db-dump-cf/scripts/db-dump-cf.ps1 | 4 +- .../skills/db-dump-cf/scripts/db-dump-cf.py | 2 +- .../skills/db-dump-dt/scripts/db-dump-dt.ps1 | 4 +- .../skills/db-dump-dt/scripts/db-dump-dt.py | 2 +- .../db-dump-xml/scripts/db-dump-xml.ps1 | 4 +- .../skills/db-dump-xml/scripts/db-dump-xml.py | 2 +- .../skills/db-load-cf/scripts/db-load-cf.ps1 | 4 +- .../skills/db-load-cf/scripts/db-load-cf.py | 2 +- .../skills/db-load-dt/scripts/db-load-dt.ps1 | 4 +- .../skills/db-load-dt/scripts/db-load-dt.py | 2 +- .../db-load-git/scripts/db-load-git.ps1 | 4 +- .../skills/db-load-git/scripts/db-load-git.py | 2 +- .../db-load-xml/scripts/db-load-xml.ps1 | 4 +- .../skills/db-load-xml/scripts/db-load-xml.py | 2 +- .claude/skills/db-run/scripts/db-run.ps1 | 4 +- .claude/skills/db-run/scripts/db-run.py | 2 +- .../skills/db-update/scripts/db-update.ps1 | 4 +- .claude/skills/db-update/scripts/db-update.py | 2 +- .../skills/epf-build/scripts/epf-build.ps1 | 4 +- .claude/skills/epf-build/scripts/epf-build.py | 2 +- .claude/skills/epf-dump/scripts/epf-dump.ps1 | 4 +- .claude/skills/epf-dump/scripts/epf-dump.py | 2 +- .claude/skills/form-add/scripts/form-add.ps1 | 3 +- .claude/skills/form-add/scripts/form-add.py | 2 +- .../form-compile/scripts/form-compile.ps1 | 3 +- .../form-compile/scripts/form-compile.py | 2 +- .../form-decompile/scripts/form-decompile.ps1 | 3 +- .../form-decompile/scripts/form-decompile.py | 2 +- .../skills/form-edit/scripts/form-edit.ps1 | 3 +- .claude/skills/form-edit/scripts/form-edit.py | 2 +- .../interface-edit/scripts/interface-edit.ps1 | 3 +- .../interface-edit/scripts/interface-edit.py | 2 +- .../meta-compile/scripts/meta-compile.ps1 | 3 +- .../meta-compile/scripts/meta-compile.py | 2 +- .../meta-decompile/scripts/meta-decompile.ps1 | 3 +- .../meta-decompile/scripts/meta-decompile.py | 2 +- .../skills/meta-edit/scripts/meta-edit.ps1 | 3 +- .claude/skills/meta-edit/scripts/meta-edit.py | 2 +- .../meta-remove/scripts/meta-remove.ps1 | 3 +- .../skills/meta-remove/scripts/meta-remove.py | 2 +- .../mxl-compile/scripts/mxl-compile.ps1 | 3 +- .../skills/mxl-compile/scripts/mxl-compile.py | 2 +- .../mxl-decompile/scripts/mxl-decompile.ps1 | 3 +- .../mxl-decompile/scripts/mxl-decompile.py | 2 +- .../role-compile/scripts/role-compile.ps1 | 3 +- .../role-compile/scripts/role-compile.py | 2 +- .../skd-compile/scripts/skd-compile.ps1 | 3 +- .../skills/skd-compile/scripts/skd-compile.py | 2 +- .../skd-decompile/scripts/skd-decompile.ps1 | 3 +- .../skd-decompile/scripts/skd-decompile.py | 2 +- .claude/skills/skd-edit/scripts/skd-edit.ps1 | 3 +- .claude/skills/skd-edit/scripts/skd-edit.py | 2 +- .../scripts/subsystem-compile.ps1 | 3 +- .../scripts/subsystem-compile.py | 2 +- .../subsystem-edit/scripts/subsystem-edit.ps1 | 3 +- .../subsystem-edit/scripts/subsystem-edit.py | 2 +- .../support-edit/scripts/support-edit.ps1 | 3 +- .../support-edit/scripts/support-edit.py | 2 +- .../web-publish/scripts/web-publish.ps1 | 4 +- .../skills/web-publish/scripts/web-publish.py | 2 +- .claude/skills/web-stop/scripts/web-stop.ps1 | 4 +- .claude/skills/web-stop/scripts/web-stop.py | 2 +- .../web-unpublish/scripts/web-unpublish.ps1 | 4 +- .../web-unpublish/scripts/web-unpublish.py | 2 +- .../xdto-compile/scripts/xdto-compile.ps1 | 3 +- .../xdto-compile/scripts/xdto-compile.py | 2 +- .../xdto-decompile/scripts/xdto-decompile.ps1 | 3 +- .../xdto-decompile/scripts/xdto-decompile.py | 2 +- .../skills/xdto-edit/scripts/xdto-edit.ps1 | 3 +- .claude/skills/xdto-edit/scripts/xdto-edit.py | 2 +- tests/skills/check-positional-binding.mjs | 45 +++++++++++++++---- 83 files changed, 159 insertions(+), 106 deletions(-) diff --git a/.claude/skills/cf-edit/scripts/cf-edit.ps1 b/.claude/skills/cf-edit/scripts/cf-edit.ps1 index 339b06f50..b256720cf 100644 --- a/.claude/skills/cf-edit/scripts/cf-edit.ps1 +++ b/.claude/skills/cf-edit/scripts/cf-edit.ps1 @@ -1,5 +1,6 @@ -# cf-edit v1.22 — Edit 1C configuration root (Configuration.xml) +# cf-edit v1.23 — Edit 1C configuration root (Configuration.xml) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory)][Alias('Path')][string]$ConfigPath, [string]$DefinitionFile, diff --git a/.claude/skills/cf-edit/scripts/cf-edit.py b/.claude/skills/cf-edit/scripts/cf-edit.py index a59d6c15b..9f4717672 100644 --- a/.claude/skills/cf-edit/scripts/cf-edit.py +++ b/.claude/skills/cf-edit/scripts/cf-edit.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# cf-edit v1.22 — Edit 1C configuration root (Configuration.xml) +# cf-edit v1.23 — Edit 1C configuration root (Configuration.xml) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse diff --git a/.claude/skills/cf-init/scripts/cf-init.ps1 b/.claude/skills/cf-init/scripts/cf-init.ps1 index b940d51bc..4a1b8e98e 100644 --- a/.claude/skills/cf-init/scripts/cf-init.ps1 +++ b/.claude/skills/cf-init/scripts/cf-init.ps1 @@ -1,5 +1,6 @@ -# cf-init v1.14 — Create empty 1C configuration scaffold (+write_xml_file/write_utf8_bom: общий эталон записи) +# cf-init v1.15 — Create empty 1C configuration scaffold (+write_xml_file/write_utf8_bom: общий эталон записи) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory)] [string]$Name, diff --git a/.claude/skills/cf-init/scripts/cf-init.py b/.claude/skills/cf-init/scripts/cf-init.py index b16291309..d5de6428e 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.14 — Create empty 1C configuration scaffold (+write_xml_file/write_utf8_bom: общий эталон записи) +# cf-init v1.15 — 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 diff --git a/.claude/skills/cfe-borrow/scripts/cfe-borrow.ps1 b/.claude/skills/cfe-borrow/scripts/cfe-borrow.ps1 index 5c3d8a57e..53c6dd4f9 100644 --- a/.claude/skills/cfe-borrow/scripts/cfe-borrow.ps1 +++ b/.claude/skills/cfe-borrow/scripts/cfe-borrow.ps1 @@ -1,5 +1,6 @@ -# cfe-borrow v1.32 — Borrow objects from configuration into extension (CFE) +# cfe-borrow v1.33 — Borrow objects from configuration into extension (CFE) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory)][string]$ExtensionPath, [Parameter(Mandatory)][string]$ConfigPath, diff --git a/.claude/skills/cfe-borrow/scripts/cfe-borrow.py b/.claude/skills/cfe-borrow/scripts/cfe-borrow.py index bd51cb619..ffd15819c 100644 --- a/.claude/skills/cfe-borrow/scripts/cfe-borrow.py +++ b/.claude/skills/cfe-borrow/scripts/cfe-borrow.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# cfe-borrow v1.32 — Borrow objects from configuration into extension (CFE) +# cfe-borrow v1.33 — Borrow objects from configuration into extension (CFE) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse diff --git a/.claude/skills/cfe-init/scripts/cfe-init.ps1 b/.claude/skills/cfe-init/scripts/cfe-init.ps1 index d2e9efa80..38afdc1cd 100644 --- a/.claude/skills/cfe-init/scripts/cfe-init.ps1 +++ b/.claude/skills/cfe-init/scripts/cfe-init.ps1 @@ -1,5 +1,6 @@ -# cfe-init v1.10 — Create 1C configuration extension scaffold (CFE) (+write_xml_file/write_utf8_bom: общий эталон записи) +# cfe-init v1.11 — Create 1C configuration extension scaffold (CFE) (+write_xml_file/write_utf8_bom: общий эталон записи) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory)] [string]$Name, diff --git a/.claude/skills/cfe-init/scripts/cfe-init.py b/.claude/skills/cfe-init/scripts/cfe-init.py index 7f11ce82d..792bb64e3 100644 --- a/.claude/skills/cfe-init/scripts/cfe-init.py +++ b/.claude/skills/cfe-init/scripts/cfe-init.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# cfe-init v1.10 — Create 1C configuration extension scaffold (CFE) (+write_xml_file/write_utf8_bom: общий эталон записи) +# cfe-init v1.11 — Create 1C configuration extension scaffold (CFE) (+write_xml_file/write_utf8_bom: общий эталон записи) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills """Generates minimal XML source files for a 1C configuration extension.""" import sys, os, re, argparse, uuid diff --git a/.claude/skills/cfe-patch-method/scripts/cfe-patch-method.ps1 b/.claude/skills/cfe-patch-method/scripts/cfe-patch-method.ps1 index 3a886a725..069e9a45a 100644 --- a/.claude/skills/cfe-patch-method/scripts/cfe-patch-method.ps1 +++ b/.claude/skills/cfe-patch-method/scripts/cfe-patch-method.ps1 @@ -1,5 +1,6 @@ -# cfe-patch-method v2.8 — Source-aware method interceptor for 1C extension (CFE) +# cfe-patch-method v2.9 — Source-aware method interceptor for 1C extension (CFE) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory)] [string]$ExtensionPath, diff --git a/.claude/skills/cfe-patch-method/scripts/cfe-patch-method.py b/.claude/skills/cfe-patch-method/scripts/cfe-patch-method.py index 49c3fa2e6..e7cfc3461 100644 --- a/.claude/skills/cfe-patch-method/scripts/cfe-patch-method.py +++ b/.claude/skills/cfe-patch-method/scripts/cfe-patch-method.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# cfe-patch-method v2.8 — Source-aware method interceptor for 1C extension (CFE) +# cfe-patch-method v2.9 — Source-aware method interceptor for 1C extension (CFE) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse diff --git a/.claude/skills/db-create/scripts/db-create.ps1 b/.claude/skills/db-create/scripts/db-create.ps1 index f3372fb0e..7ab3ba05b 100644 --- a/.claude/skills/db-create/scripts/db-create.ps1 +++ b/.claude/skills/db-create/scripts/db-create.ps1 @@ -1,4 +1,4 @@ -# db-create v1.11 — Create 1C information base +# db-create v1.12 — Create 1C information base # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # NB: *nix-раскладку платформы (/opt/1cv8//1cv8, без .exe) знает только .py-порт — PS на *nix не исполняется. <# @@ -46,7 +46,7 @@ .\db-create.ps1 -InfoBasePath "C:\Bases\NewDB" -UseTemplate "C:\Templates\config.cf" -AddToList -ListName "Новая база" #> -[CmdletBinding()] +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory=$false)] [string]$V8Path, diff --git a/.claude/skills/db-create/scripts/db-create.py b/.claude/skills/db-create/scripts/db-create.py index 5419cb0fd..f4b5eff8c 100644 --- a/.claude/skills/db-create/scripts/db-create.py +++ b/.claude/skills/db-create/scripts/db-create.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# db-create v1.11 — Create 1C information base +# db-create v1.12 — Create 1C information base # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse diff --git a/.claude/skills/db-dump-cf/scripts/db-dump-cf.ps1 b/.claude/skills/db-dump-cf/scripts/db-dump-cf.ps1 index b9289f6dc..56c58baaa 100644 --- a/.claude/skills/db-dump-cf/scripts/db-dump-cf.ps1 +++ b/.claude/skills/db-dump-cf/scripts/db-dump-cf.ps1 @@ -1,4 +1,4 @@ -# db-dump-cf v1.13 — Dump 1C configuration to CF file +# db-dump-cf v1.14 — Dump 1C configuration to CF file # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # NB: *nix-раскладку платформы (/opt/1cv8//1cv8, без .exe) знает только .py-порт — PS на *nix не исполняется. <# @@ -49,7 +49,7 @@ .\db-dump-cf.ps1 -InfoBasePath "C:\Bases\MyDB" -OutputFile "ext.cfe" -Extension "МоёРасширение" #> -[CmdletBinding()] +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory=$false)] [string]$V8Path, diff --git a/.claude/skills/db-dump-cf/scripts/db-dump-cf.py b/.claude/skills/db-dump-cf/scripts/db-dump-cf.py index e28541b00..4314542c8 100644 --- a/.claude/skills/db-dump-cf/scripts/db-dump-cf.py +++ b/.claude/skills/db-dump-cf/scripts/db-dump-cf.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# db-dump-cf v1.13 — Dump 1C configuration to CF file +# db-dump-cf v1.14 — Dump 1C configuration to CF file # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse diff --git a/.claude/skills/db-dump-dt/scripts/db-dump-dt.ps1 b/.claude/skills/db-dump-dt/scripts/db-dump-dt.ps1 index 3d77f6293..9c0c7f38a 100644 --- a/.claude/skills/db-dump-dt/scripts/db-dump-dt.ps1 +++ b/.claude/skills/db-dump-dt/scripts/db-dump-dt.ps1 @@ -1,4 +1,4 @@ -# db-dump-dt v1.12 — Dump 1C information base to DT file +# db-dump-dt v1.13 — Dump 1C information base to DT file # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # NB: *nix-раскладку платформы (/opt/1cv8//1cv8, без .exe) знает только .py-порт — PS на *nix не исполняется. <# @@ -39,7 +39,7 @@ .\db-dump-dt.ps1 -InfoBasePath "C:\Bases\MyDB" -OutputFile "backup.dt" #> -[CmdletBinding()] +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory=$false)] [string]$V8Path, diff --git a/.claude/skills/db-dump-dt/scripts/db-dump-dt.py b/.claude/skills/db-dump-dt/scripts/db-dump-dt.py index 1e82509fc..9d2d54e3b 100644 --- a/.claude/skills/db-dump-dt/scripts/db-dump-dt.py +++ b/.claude/skills/db-dump-dt/scripts/db-dump-dt.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# db-dump-dt v1.12 — Dump 1C information base to DT file +# db-dump-dt v1.13 — Dump 1C information base to DT file # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse diff --git a/.claude/skills/db-dump-xml/scripts/db-dump-xml.ps1 b/.claude/skills/db-dump-xml/scripts/db-dump-xml.ps1 index a72177102..6fbe6ff95 100644 --- a/.claude/skills/db-dump-xml/scripts/db-dump-xml.ps1 +++ b/.claude/skills/db-dump-xml/scripts/db-dump-xml.ps1 @@ -1,4 +1,4 @@ -# db-dump-xml v1.15 — Dump 1C configuration to XML files +# db-dump-xml v1.16 — Dump 1C configuration to XML files # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # NB: *nix-раскладку платформы (/opt/1cv8//1cv8, без .exe) знает только .py-порт — PS на *nix не исполняется. <# @@ -61,7 +61,7 @@ .\db-dump-xml.ps1 -InfoBasePath "C:\Bases\MyDB" -ConfigDir "C:\src" -Mode Partial -Objects "Справочник.Номенклатура,Документ.Заказ" #> -[CmdletBinding()] +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory=$false)] [string]$V8Path, diff --git a/.claude/skills/db-dump-xml/scripts/db-dump-xml.py b/.claude/skills/db-dump-xml/scripts/db-dump-xml.py index 0053002f5..0918f9784 100644 --- a/.claude/skills/db-dump-xml/scripts/db-dump-xml.py +++ b/.claude/skills/db-dump-xml/scripts/db-dump-xml.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# db-dump-xml v1.15 — Dump 1C configuration to XML files +# db-dump-xml v1.16 — Dump 1C configuration to XML files # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse diff --git a/.claude/skills/db-load-cf/scripts/db-load-cf.ps1 b/.claude/skills/db-load-cf/scripts/db-load-cf.ps1 index d885b8505..0c5a151a0 100644 --- a/.claude/skills/db-load-cf/scripts/db-load-cf.ps1 +++ b/.claude/skills/db-load-cf/scripts/db-load-cf.ps1 @@ -1,4 +1,4 @@ -# db-load-cf v1.14 — Load 1C configuration from CF file +# db-load-cf v1.15 — Load 1C configuration from CF file # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # NB: *nix-раскладку платформы (/opt/1cv8//1cv8, без .exe) знает только .py-порт — PS на *nix не исполняется. <# @@ -49,7 +49,7 @@ .\db-load-cf.ps1 -InfoBasePath "C:\Bases\MyDB" -InputFile "ext.cfe" -Extension "МоёРасширение" #> -[CmdletBinding()] +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory=$false)] [string]$V8Path, diff --git a/.claude/skills/db-load-cf/scripts/db-load-cf.py b/.claude/skills/db-load-cf/scripts/db-load-cf.py index c828d8700..5b034b079 100644 --- a/.claude/skills/db-load-cf/scripts/db-load-cf.py +++ b/.claude/skills/db-load-cf/scripts/db-load-cf.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# db-load-cf v1.14 — Load 1C configuration from CF file +# db-load-cf v1.15 — Load 1C configuration from CF file # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse diff --git a/.claude/skills/db-load-dt/scripts/db-load-dt.ps1 b/.claude/skills/db-load-dt/scripts/db-load-dt.ps1 index 3422969a4..e522274e9 100644 --- a/.claude/skills/db-load-dt/scripts/db-load-dt.ps1 +++ b/.claude/skills/db-load-dt/scripts/db-load-dt.ps1 @@ -1,4 +1,4 @@ -# db-load-dt v1.13 — Load 1C information base from DT file +# db-load-dt v1.14 — Load 1C information base from DT file # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # NB: *nix-раскладку платформы (/opt/1cv8//1cv8, без .exe) знает только .py-порт — PS на *nix не исполняется. <# @@ -46,7 +46,7 @@ .\db-load-dt.ps1 -InfoBasePath "C:\Bases\MyDB" -InputFile "backup.dt" #> -[CmdletBinding()] +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory=$false)] [string]$V8Path, diff --git a/.claude/skills/db-load-dt/scripts/db-load-dt.py b/.claude/skills/db-load-dt/scripts/db-load-dt.py index d48f1b2d4..a36e42b5f 100644 --- a/.claude/skills/db-load-dt/scripts/db-load-dt.py +++ b/.claude/skills/db-load-dt/scripts/db-load-dt.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# db-load-dt v1.13 — Load 1C information base from DT file +# db-load-dt v1.14 — Load 1C information base from DT file # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse diff --git a/.claude/skills/db-load-git/scripts/db-load-git.ps1 b/.claude/skills/db-load-git/scripts/db-load-git.ps1 index 6bebcf5c1..2dd9b9338 100644 --- a/.claude/skills/db-load-git/scripts/db-load-git.ps1 +++ b/.claude/skills/db-load-git/scripts/db-load-git.ps1 @@ -1,4 +1,4 @@ -# db-load-git v1.20 — Load Git changes into 1C database +# db-load-git v1.21 — Load Git changes into 1C database # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # NB: *nix-раскладку платформы (/opt/1cv8//1cv8, без .exe) знает только .py-порт — PS на *nix не исполняется. <# @@ -64,7 +64,7 @@ .\db-load-git.ps1 -InfoBasePath "C:\Bases\MyDB" -ConfigDir "C:\src" -DryRun #> -[CmdletBinding()] +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory=$false)] [string]$V8Path, diff --git a/.claude/skills/db-load-git/scripts/db-load-git.py b/.claude/skills/db-load-git/scripts/db-load-git.py index 93d8342e3..18521e4b7 100644 --- a/.claude/skills/db-load-git/scripts/db-load-git.py +++ b/.claude/skills/db-load-git/scripts/db-load-git.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# db-load-git v1.20 — Load Git changes into 1C database +# db-load-git v1.21 — Load Git changes into 1C database # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse diff --git a/.claude/skills/db-load-xml/scripts/db-load-xml.ps1 b/.claude/skills/db-load-xml/scripts/db-load-xml.ps1 index 90ea0cd7a..4cb440c54 100644 --- a/.claude/skills/db-load-xml/scripts/db-load-xml.ps1 +++ b/.claude/skills/db-load-xml/scripts/db-load-xml.ps1 @@ -1,4 +1,4 @@ -# db-load-xml v1.21 — Load 1C configuration from XML files +# db-load-xml v1.22 — Load 1C configuration from XML files # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # NB: *nix-раскладку платформы (/opt/1cv8//1cv8, без .exe) знает только .py-порт — PS на *nix не исполняется. <# @@ -61,7 +61,7 @@ .\db-load-xml.ps1 -InfoBasePath "C:\Bases\MyDB" -ConfigDir "C:\src" -Mode Partial -Files "Catalogs/Номенклатура.xml,Catalogs/Номенклатура/Ext/ObjectModule.bsl" #> -[CmdletBinding()] +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory=$false)] [string]$V8Path, diff --git a/.claude/skills/db-load-xml/scripts/db-load-xml.py b/.claude/skills/db-load-xml/scripts/db-load-xml.py index 7e443532e..aad05cc42 100644 --- a/.claude/skills/db-load-xml/scripts/db-load-xml.py +++ b/.claude/skills/db-load-xml/scripts/db-load-xml.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# db-load-xml v1.21 — Load 1C configuration from XML files +# db-load-xml v1.22 — Load 1C configuration from XML files # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse diff --git a/.claude/skills/db-run/scripts/db-run.ps1 b/.claude/skills/db-run/scripts/db-run.ps1 index b20d64881..cc5652c3f 100644 --- a/.claude/skills/db-run/scripts/db-run.ps1 +++ b/.claude/skills/db-run/scripts/db-run.ps1 @@ -1,4 +1,4 @@ -# db-run v1.8 — Launch 1C:Enterprise +# db-run v1.9 — Launch 1C:Enterprise # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # NB: *nix-раскладку платформы (/opt/1cv8//1cv8, без .exe) знает только .py-порт — PS на *nix не исполняется. <# @@ -52,7 +52,7 @@ .\db-run.ps1 -InfoBasePath "C:\Bases\MyDB" -CParam "ЗапуститьОбновление" #> -[CmdletBinding()] +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory=$false)] [string]$V8Path, diff --git a/.claude/skills/db-run/scripts/db-run.py b/.claude/skills/db-run/scripts/db-run.py index 9fc0b6d22..ac2373242 100644 --- a/.claude/skills/db-run/scripts/db-run.py +++ b/.claude/skills/db-run/scripts/db-run.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# db-run v1.8 — Launch 1C:Enterprise +# db-run v1.9 — Launch 1C:Enterprise # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse diff --git a/.claude/skills/db-update/scripts/db-update.ps1 b/.claude/skills/db-update/scripts/db-update.ps1 index ebe18ba4d..a5e00901b 100644 --- a/.claude/skills/db-update/scripts/db-update.ps1 +++ b/.claude/skills/db-update/scripts/db-update.ps1 @@ -1,4 +1,4 @@ -# db-update v1.15 — Update 1C database configuration +# db-update v1.16 — Update 1C database configuration # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # NB: *nix-раскладку платформы (/opt/1cv8//1cv8, без .exe) знает только .py-порт — PS на *nix не исполняется. <# @@ -55,7 +55,7 @@ .\db-update.ps1 -InfoBasePath "C:\Bases\MyDB" -Dynamic "+" -Extension "МоёРасширение" #> -[CmdletBinding()] +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory=$false)] [string]$V8Path, diff --git a/.claude/skills/db-update/scripts/db-update.py b/.claude/skills/db-update/scripts/db-update.py index e36b2896f..91090d563 100644 --- a/.claude/skills/db-update/scripts/db-update.py +++ b/.claude/skills/db-update/scripts/db-update.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# db-update v1.15 — Update 1C database configuration +# db-update v1.16 — Update 1C database configuration # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse diff --git a/.claude/skills/epf-build/scripts/epf-build.ps1 b/.claude/skills/epf-build/scripts/epf-build.ps1 index d238a19cf..5db255bbb 100644 --- a/.claude/skills/epf-build/scripts/epf-build.ps1 +++ b/.claude/skills/epf-build/scripts/epf-build.ps1 @@ -1,4 +1,4 @@ -# epf-build v1.13 — Build external data processor or report (EPF/ERF) from XML sources +# epf-build v1.14 — Build external data processor or report (EPF/ERF) from XML sources # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # NB: *nix-раскладку платформы (/opt/1cv8//1cv8, без .exe) знает только .py-порт — PS на *nix не исполняется. <# @@ -46,7 +46,7 @@ .\epf-build.ps1 -InfoBasePath "C:\Bases\MyDB" -SourceFile "src\МойОтчёт.xml" -OutputFile "build\МойОтчёт.erf" #> -[CmdletBinding()] +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory=$false)] [string]$V8Path, diff --git a/.claude/skills/epf-build/scripts/epf-build.py b/.claude/skills/epf-build/scripts/epf-build.py index 37fa1d117..5a5cb36c7 100644 --- a/.claude/skills/epf-build/scripts/epf-build.py +++ b/.claude/skills/epf-build/scripts/epf-build.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# epf-build v1.13 — Build external data processor or report (EPF/ERF) from XML sources +# epf-build v1.14 — Build external data processor or report (EPF/ERF) from XML sources # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse diff --git a/.claude/skills/epf-dump/scripts/epf-dump.ps1 b/.claude/skills/epf-dump/scripts/epf-dump.ps1 index 3c68eab6e..ed8f88a2b 100644 --- a/.claude/skills/epf-dump/scripts/epf-dump.ps1 +++ b/.claude/skills/epf-dump/scripts/epf-dump.ps1 @@ -1,4 +1,4 @@ -# epf-dump v1.12 — Dump external data processor or report (EPF/ERF) to XML sources +# epf-dump v1.13 — Dump external data processor or report (EPF/ERF) to XML sources # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # NB: *nix-раскладку платформы (/opt/1cv8//1cv8, без .exe) знает только .py-порт — PS на *nix не исполняется. <# @@ -49,7 +49,7 @@ .\epf-dump.ps1 -InfoBasePath "C:\Bases\MyDB" -InputFile "build\МойОтчёт.erf" -OutputDir "src" #> -[CmdletBinding()] +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory=$false)] [string]$V8Path, diff --git a/.claude/skills/epf-dump/scripts/epf-dump.py b/.claude/skills/epf-dump/scripts/epf-dump.py index 0fc28e647..91b8edd90 100644 --- a/.claude/skills/epf-dump/scripts/epf-dump.py +++ b/.claude/skills/epf-dump/scripts/epf-dump.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# epf-dump v1.12 — Dump external data processor or report (EPF/ERF) to XML sources +# epf-dump v1.13 — Dump external data processor or report (EPF/ERF) to XML sources # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse diff --git a/.claude/skills/form-add/scripts/form-add.ps1 b/.claude/skills/form-add/scripts/form-add.ps1 index e19d079ae..484bad821 100644 --- a/.claude/skills/form-add/scripts/form-add.ps1 +++ b/.claude/skills/form-add/scripts/form-add.ps1 @@ -1,5 +1,6 @@ -# form-add v1.26 — Add managed form to 1C config object (+write_xml_file/write_utf8_bom: общий эталон записи) +# form-add v1.27 — Add managed form to 1C config object (+write_xml_file/write_utf8_bom: общий эталон записи) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory)] [string]$ObjectPath, diff --git a/.claude/skills/form-add/scripts/form-add.py b/.claude/skills/form-add/scripts/form-add.py index 727a00d28..dbdacb63c 100644 --- a/.claude/skills/form-add/scripts/form-add.py +++ b/.claude/skills/form-add/scripts/form-add.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# form-add v1.26 — Add managed form to 1C config object (+write_xml_file/write_utf8_bom: общий эталон записи) +# form-add v1.27 — Add managed form to 1C config object (+write_xml_file/write_utf8_bom: общий эталон записи) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse diff --git a/.claude/skills/form-compile/scripts/form-compile.ps1 b/.claude/skills/form-compile/scripts/form-compile.ps1 index 8c873f651..d2bb7caf3 100644 --- a/.claude/skills/form-compile/scripts/form-compile.ps1 +++ b/.claude/skills/form-compile/scripts/form-compile.ps1 @@ -1,5 +1,6 @@ -# form-compile v1.195 — Compile 1C managed form from JSON or object metadata (гвард на группу additionalColumns без ключа columns) +# form-compile v1.196 — Compile 1C managed form from JSON or object metadata (гвард на группу additionalColumns без ключа columns) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +[CmdletBinding(PositionalBinding=$false)] param( [string]$JsonPath, diff --git a/.claude/skills/form-compile/scripts/form-compile.py b/.claude/skills/form-compile/scripts/form-compile.py index 450a6444b..ed6220ae1 100644 --- a/.claude/skills/form-compile/scripts/form-compile.py +++ b/.claude/skills/form-compile/scripts/form-compile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# form-compile v1.195 — Compile 1C managed form from JSON or object metadata (гвард на группу additionalColumns без ключа columns) +# form-compile v1.196 — Compile 1C managed form from JSON or object metadata (гвард на группу additionalColumns без ключа columns) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import copy diff --git a/.claude/skills/form-decompile/scripts/form-decompile.ps1 b/.claude/skills/form-decompile/scripts/form-decompile.ps1 index 799646fb5..16e0a874d 100644 --- a/.claude/skills/form-decompile/scripts/form-decompile.ps1 +++ b/.claude/skills/form-decompile/scripts/form-decompile.ps1 @@ -1,6 +1,7 @@ -# form-decompile v0.149 — Decompile 1C managed Form.xml to JSON DSL (draft) +# form-decompile v0.150 — Decompile 1C managed Form.xml to JSON DSL (draft) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью. +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory)] [Alias('Path')] diff --git a/.claude/skills/form-decompile/scripts/form-decompile.py b/.claude/skills/form-decompile/scripts/form-decompile.py index be51c82f0..0b0e0089d 100644 --- a/.claude/skills/form-decompile/scripts/form-decompile.py +++ b/.claude/skills/form-decompile/scripts/form-decompile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# form-decompile v0.149 — Decompile 1C managed Form.xml to JSON DSL (draft) +# form-decompile v0.150 — Decompile 1C managed Form.xml to JSON DSL (draft) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью. # diff --git a/.claude/skills/form-edit/scripts/form-edit.ps1 b/.claude/skills/form-edit/scripts/form-edit.ps1 index 6b3d29b57..8118c188e 100644 --- a/.claude/skills/form-edit/scripts/form-edit.ps1 +++ b/.claude/skills/form-edit/scripts/form-edit.ps1 @@ -1,5 +1,6 @@ -# form-edit v1.17 — Edit 1C managed form elements (+esc_xml/esc_xml_text: разное экранирование атрибута и текста) +# form-edit v1.18 — Edit 1C managed form elements (+esc_xml/esc_xml_text: разное экранирование атрибута и текста) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory)] [Alias('Path')] diff --git a/.claude/skills/form-edit/scripts/form-edit.py b/.claude/skills/form-edit/scripts/form-edit.py index 33ff98c20..88271d536 100644 --- a/.claude/skills/form-edit/scripts/form-edit.py +++ b/.claude/skills/form-edit/scripts/form-edit.py @@ -1,4 +1,4 @@ -# form-edit v1.17 — Edit 1C managed form elements (Python port) (+esc_xml/esc_xml_text: разное экранирование атрибута и текста) +# form-edit v1.18 — Edit 1C managed form elements (Python port) (+esc_xml/esc_xml_text: разное экранирование атрибута и текста) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import json diff --git a/.claude/skills/interface-edit/scripts/interface-edit.ps1 b/.claude/skills/interface-edit/scripts/interface-edit.ps1 index fdbfbb48d..51b02309c 100644 --- a/.claude/skills/interface-edit/scripts/interface-edit.ps1 +++ b/.claude/skills/interface-edit/scripts/interface-edit.ps1 @@ -1,5 +1,6 @@ -# interface-edit v1.21 — Edit 1C CommandInterface.xml (+русские алиасы типов: формы с ё и без) +# interface-edit v1.22 — Edit 1C CommandInterface.xml (+русские алиасы типов: формы с ё и без) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory)][Alias('Path')][string]$CIPath, [string]$DefinitionFile, diff --git a/.claude/skills/interface-edit/scripts/interface-edit.py b/.claude/skills/interface-edit/scripts/interface-edit.py index 5343f7481..7f7b1f578 100644 --- a/.claude/skills/interface-edit/scripts/interface-edit.py +++ b/.claude/skills/interface-edit/scripts/interface-edit.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# interface-edit v1.21 — Edit 1C CommandInterface.xml (+русские алиасы типов: формы с ё и без) +# interface-edit v1.22 — Edit 1C CommandInterface.xml (+русские алиасы типов: формы с ё и без) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse diff --git a/.claude/skills/meta-compile/scripts/meta-compile.ps1 b/.claude/skills/meta-compile/scripts/meta-compile.ps1 index 1018cefa7..542d7071e 100644 --- a/.claude/skills/meta-compile/scripts/meta-compile.ps1 +++ b/.claude/skills/meta-compile/scripts/meta-compile.ps1 @@ -1,5 +1,6 @@ -# meta-compile v1.98 — Compile 1C metadata object from JSON +# meta-compile v1.99 — Compile 1C metadata object from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory)] [string]$JsonPath, diff --git a/.claude/skills/meta-compile/scripts/meta-compile.py b/.claude/skills/meta-compile/scripts/meta-compile.py index 1750e0103..bd5c5e910 100644 --- a/.claude/skills/meta-compile/scripts/meta-compile.py +++ b/.claude/skills/meta-compile/scripts/meta-compile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# meta-compile v1.98 — Compile 1C metadata object from JSON +# meta-compile v1.99 — Compile 1C metadata object from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse diff --git a/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 b/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 index d476bcde8..40699c2e7 100644 --- a/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 +++ b/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 @@ -1,10 +1,11 @@ -# meta-decompile v0.64 — XML объекта метаданных 1С → JSON-черновик формата meta-compile +# meta-decompile v0.65 — XML объекта метаданных 1С → JSON-черновик формата meta-compile # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # # Поддержаны: Catalog, ExchangePlan, ChartOfCharacteristicTypes, ChartOfAccounts, ChartOfCalculationTypes, Document, # InformationRegister, AccumulationRegister, AccountingRegister, CalculationRegister, BusinessProcess, Task, Enum. Инверс meta-compile (omit-on-default: ключ эмитим только # когда значение в XML отличается от умолчания компилятора). Неподдерживаемый тип / не-MetaDataObject # root → exit 3 (ring3, как form-decompile). +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory)] [Alias('Path')] diff --git a/.claude/skills/meta-decompile/scripts/meta-decompile.py b/.claude/skills/meta-decompile/scripts/meta-decompile.py index 5850e0219..faa2eba14 100644 --- a/.claude/skills/meta-decompile/scripts/meta-decompile.py +++ b/.claude/skills/meta-decompile/scripts/meta-decompile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# meta-decompile v0.64 — XML объекта метаданных 1С → JSON-черновик формата meta-compile +# meta-decompile v0.65 — XML объекта метаданных 1С → JSON-черновик формата meta-compile # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # # Зеркало meta-decompile.ps1 (КАНОН). Структура 1:1 — те же имена функций, порядок, комментарии. diff --git a/.claude/skills/meta-edit/scripts/meta-edit.ps1 b/.claude/skills/meta-edit/scripts/meta-edit.ps1 index 7271c8da2..b1317cd58 100644 --- a/.claude/skills/meta-edit/scripts/meta-edit.ps1 +++ b/.claude/skills/meta-edit/scripts/meta-edit.ps1 @@ -1,5 +1,6 @@ -# meta-edit v1.41 — Edit existing 1C metadata object XML +# meta-edit v1.42 — Edit existing 1C metadata object XML # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +[CmdletBinding(PositionalBinding=$false)] param( [string]$DefinitionFile, diff --git a/.claude/skills/meta-edit/scripts/meta-edit.py b/.claude/skills/meta-edit/scripts/meta-edit.py index db1eb7659..695b9ac56 100644 --- a/.claude/skills/meta-edit/scripts/meta-edit.py +++ b/.claude/skills/meta-edit/scripts/meta-edit.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# meta-edit v1.41 — Edit existing 1C metadata object XML +# meta-edit v1.42 — Edit existing 1C metadata object XML # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse diff --git a/.claude/skills/meta-remove/scripts/meta-remove.ps1 b/.claude/skills/meta-remove/scripts/meta-remove.ps1 index 85f2deb52..665a51c24 100644 --- a/.claude/skills/meta-remove/scripts/meta-remove.ps1 +++ b/.claude/skills/meta-remove/scripts/meta-remove.ps1 @@ -1,5 +1,6 @@ -# meta-remove v1.10 — Remove metadata object from 1C configuration dump +# meta-remove v1.11 — Remove metadata object from 1C configuration dump # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory)] [string]$ConfigDir, diff --git a/.claude/skills/meta-remove/scripts/meta-remove.py b/.claude/skills/meta-remove/scripts/meta-remove.py index 7e2e307e6..ab7ec5b53 100644 --- a/.claude/skills/meta-remove/scripts/meta-remove.py +++ b/.claude/skills/meta-remove/scripts/meta-remove.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# meta-remove v1.10 — Remove metadata object from 1C configuration dump +# meta-remove v1.11 — Remove metadata object from 1C configuration dump # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse diff --git a/.claude/skills/mxl-compile/scripts/mxl-compile.ps1 b/.claude/skills/mxl-compile/scripts/mxl-compile.ps1 index ce6115195..905a56c71 100644 --- a/.claude/skills/mxl-compile/scripts/mxl-compile.ps1 +++ b/.claude/skills/mxl-compile/scripts/mxl-compile.ps1 @@ -1,5 +1,6 @@ -# mxl-compile v1.54 — Compile 1C spreadsheet from JSON +# mxl-compile v1.55 — Compile 1C spreadsheet from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory)] [string]$JsonPath, diff --git a/.claude/skills/mxl-compile/scripts/mxl-compile.py b/.claude/skills/mxl-compile/scripts/mxl-compile.py index a5f38de0a..6610d4b5d 100644 --- a/.claude/skills/mxl-compile/scripts/mxl-compile.py +++ b/.claude/skills/mxl-compile/scripts/mxl-compile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# mxl-compile v1.54 — Compile 1C spreadsheet from JSON +# mxl-compile v1.55 — Compile 1C spreadsheet from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import hashlib diff --git a/.claude/skills/mxl-decompile/scripts/mxl-decompile.ps1 b/.claude/skills/mxl-decompile/scripts/mxl-decompile.ps1 index e17398198..88d42bfc6 100644 --- a/.claude/skills/mxl-decompile/scripts/mxl-decompile.ps1 +++ b/.claude/skills/mxl-decompile/scripts/mxl-decompile.ps1 @@ -1,5 +1,6 @@ -# mxl-decompile v1.30 — Decompile 1C spreadsheet to JSON +# mxl-decompile v1.31 — Decompile 1C spreadsheet to JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory)] [Alias('Path')] diff --git a/.claude/skills/mxl-decompile/scripts/mxl-decompile.py b/.claude/skills/mxl-decompile/scripts/mxl-decompile.py index 86e21ab43..48750e6d0 100644 --- a/.claude/skills/mxl-decompile/scripts/mxl-decompile.py +++ b/.claude/skills/mxl-decompile/scripts/mxl-decompile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# mxl-decompile v1.30 — Decompile 1C spreadsheet to JSON +# mxl-decompile v1.31 — Decompile 1C spreadsheet to JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse diff --git a/.claude/skills/role-compile/scripts/role-compile.ps1 b/.claude/skills/role-compile/scripts/role-compile.ps1 index 07ce50709..d8da1de52 100644 --- a/.claude/skills/role-compile/scripts/role-compile.ps1 +++ b/.claude/skills/role-compile/scripts/role-compile.ps1 @@ -1,5 +1,6 @@ -# role-compile v1.31 — Compile 1C role from JSON +# role-compile v1.32 — Compile 1C role from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory)] [string]$JsonPath, diff --git a/.claude/skills/role-compile/scripts/role-compile.py b/.claude/skills/role-compile/scripts/role-compile.py index b6b6f8db9..0d1a3bfed 100644 --- a/.claude/skills/role-compile/scripts/role-compile.py +++ b/.claude/skills/role-compile/scripts/role-compile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# role-compile v1.31 — Compile 1C role from JSON +# role-compile v1.32 — Compile 1C role from JSON # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import json diff --git a/.claude/skills/skd-compile/scripts/skd-compile.ps1 b/.claude/skills/skd-compile/scripts/skd-compile.ps1 index 6cb0531a1..a39feb82a 100644 --- a/.claude/skills/skd-compile/scripts/skd-compile.ps1 +++ b/.claude/skills/skd-compile/scripts/skd-compile.ps1 @@ -1,5 +1,6 @@ -# skd-compile v1.120 — Compile 1C DCS from JSON (+write_xml_file/write_utf8_bom: общий эталон записи) +# skd-compile v1.121 — Compile 1C DCS from JSON (+write_xml_file/write_utf8_bom: общий эталон записи) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +[CmdletBinding(PositionalBinding=$false)] param( [string]$DefinitionFile, [string]$Value, diff --git a/.claude/skills/skd-compile/scripts/skd-compile.py b/.claude/skills/skd-compile/scripts/skd-compile.py index 485a96c4d..8380abc5c 100644 --- a/.claude/skills/skd-compile/scripts/skd-compile.py +++ b/.claude/skills/skd-compile/scripts/skd-compile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# skd-compile v1.120 — Compile 1C DCS from JSON (+write_xml_file/write_utf8_bom: общий эталон записи) +# skd-compile v1.121 — Compile 1C DCS from JSON (+write_xml_file/write_utf8_bom: общий эталон записи) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import json diff --git a/.claude/skills/skd-decompile/scripts/skd-decompile.ps1 b/.claude/skills/skd-decompile/scripts/skd-decompile.ps1 index 297b81e9d..6fc9a2033 100644 --- a/.claude/skills/skd-decompile/scripts/skd-decompile.ps1 +++ b/.claude/skills/skd-decompile/scripts/skd-decompile.ps1 @@ -1,5 +1,6 @@ -# skd-decompile v0.95 — Decompile 1C DCS Template.xml to JSON DSL (draft) +# skd-decompile v0.96 — Decompile 1C DCS Template.xml to JSON DSL (draft) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory)] [Alias('Path')] diff --git a/.claude/skills/skd-decompile/scripts/skd-decompile.py b/.claude/skills/skd-decompile/scripts/skd-decompile.py index 642fd6083..f07e11846 100644 --- a/.claude/skills/skd-decompile/scripts/skd-decompile.py +++ b/.claude/skills/skd-decompile/scripts/skd-decompile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# skd-decompile v0.95 — Decompile 1C DCS Template.xml to JSON DSL (draft) +# skd-decompile v0.96 — Decompile 1C DCS Template.xml to JSON DSL (draft) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import os diff --git a/.claude/skills/skd-edit/scripts/skd-edit.ps1 b/.claude/skills/skd-edit/scripts/skd-edit.ps1 index dafcd97d0..90de321fd 100644 --- a/.claude/skills/skd-edit/scripts/skd-edit.ps1 +++ b/.claude/skills/skd-edit/scripts/skd-edit.ps1 @@ -1,6 +1,7 @@ -# skd-edit v1.38 — Atomic 1C DCS editor +# skd-edit v1.39 — Atomic 1C DCS editor # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # NB: парный .py собирает выражения автодат вне f-string ради совместимости с python 3.9 (PEP 701). +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory)] [Alias('Path')] diff --git a/.claude/skills/skd-edit/scripts/skd-edit.py b/.claude/skills/skd-edit/scripts/skd-edit.py index c1b71ca21..d48f941b0 100644 --- a/.claude/skills/skd-edit/scripts/skd-edit.py +++ b/.claude/skills/skd-edit/scripts/skd-edit.py @@ -1,4 +1,4 @@ -# skd-edit v1.38 — Atomic 1C DCS editor (Python port) +# skd-edit v1.39 — Atomic 1C DCS editor (Python port) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import json diff --git a/.claude/skills/subsystem-compile/scripts/subsystem-compile.ps1 b/.claude/skills/subsystem-compile/scripts/subsystem-compile.ps1 index b2c8a0e82..8a9299c32 100644 --- a/.claude/skills/subsystem-compile/scripts/subsystem-compile.ps1 +++ b/.claude/skills/subsystem-compile/scripts/subsystem-compile.ps1 @@ -1,5 +1,6 @@ -# subsystem-compile v1.29 — Create 1C subsystem from JSON definition +# subsystem-compile v1.30 — Create 1C subsystem from JSON definition # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +[CmdletBinding(PositionalBinding=$false)] param( [string]$DefinitionFile, [string]$Value, diff --git a/.claude/skills/subsystem-compile/scripts/subsystem-compile.py b/.claude/skills/subsystem-compile/scripts/subsystem-compile.py index a81d4b2a9..3314e6b60 100644 --- a/.claude/skills/subsystem-compile/scripts/subsystem-compile.py +++ b/.claude/skills/subsystem-compile/scripts/subsystem-compile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# subsystem-compile v1.29 — Create 1C subsystem from JSON definition +# subsystem-compile v1.30 — Create 1C subsystem from JSON definition # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import json diff --git a/.claude/skills/subsystem-edit/scripts/subsystem-edit.ps1 b/.claude/skills/subsystem-edit/scripts/subsystem-edit.ps1 index 5f8e42857..ac922c640 100644 --- a/.claude/skills/subsystem-edit/scripts/subsystem-edit.ps1 +++ b/.claude/skills/subsystem-edit/scripts/subsystem-edit.ps1 @@ -1,5 +1,6 @@ -# subsystem-edit v1.24 — Edit existing 1C subsystem XML (+тип Bot; cfe-diff/cfe-borrow: недостающие типы) +# subsystem-edit v1.25 — Edit existing 1C subsystem XML (+тип Bot; cfe-diff/cfe-borrow: недостающие типы) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory)][Alias('Path')][string]$SubsystemPath, [string]$DefinitionFile, diff --git a/.claude/skills/subsystem-edit/scripts/subsystem-edit.py b/.claude/skills/subsystem-edit/scripts/subsystem-edit.py index de897ed16..950f155bc 100644 --- a/.claude/skills/subsystem-edit/scripts/subsystem-edit.py +++ b/.claude/skills/subsystem-edit/scripts/subsystem-edit.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# subsystem-edit v1.24 — Edit existing 1C subsystem XML (+тип Bot; cfe-diff/cfe-borrow: недостающие типы) +# subsystem-edit v1.25 — Edit existing 1C subsystem XML (+тип Bot; cfe-diff/cfe-borrow: недостающие типы) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse diff --git a/.claude/skills/support-edit/scripts/support-edit.ps1 b/.claude/skills/support-edit/scripts/support-edit.ps1 index 0966f25f2..743f7621f 100644 --- a/.claude/skills/support-edit/scripts/support-edit.ps1 +++ b/.claude/skills/support-edit/scripts/support-edit.ps1 @@ -1,5 +1,6 @@ -# support-edit v1.1 — Toggle 1C configuration support state (Ext/ParentConfigurations.bin) +# support-edit v1.2 — Toggle 1C configuration support state (Ext/ParentConfigurations.bin) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory=$true)][Alias('Path')][string]$TargetPath, [ValidateSet("editable","off-support","locked")] diff --git a/.claude/skills/support-edit/scripts/support-edit.py b/.claude/skills/support-edit/scripts/support-edit.py index 9c30eda20..e0154450d 100644 --- a/.claude/skills/support-edit/scripts/support-edit.py +++ b/.claude/skills/support-edit/scripts/support-edit.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# support-edit v1.1 — Toggle 1C configuration support state (Ext/ParentConfigurations.bin) +# support-edit v1.2 — Toggle 1C configuration support state (Ext/ParentConfigurations.bin) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse diff --git a/.claude/skills/web-publish/scripts/web-publish.ps1 b/.claude/skills/web-publish/scripts/web-publish.ps1 index b495f738b..52344b718 100644 --- a/.claude/skills/web-publish/scripts/web-publish.ps1 +++ b/.claude/skills/web-publish/scripts/web-publish.ps1 @@ -1,4 +1,4 @@ -# web-publish v1.7 — Publish 1C infobase via Apache (+_version_dir/_version_key: общий эталон db-семейства) +# web-publish v1.8 — Publish 1C infobase via Apache (+_version_dir/_version_key: общий эталон db-семейства) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills <# .SYNOPSIS @@ -49,7 +49,7 @@ .\web-publish.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyDB" -Manual #> -[CmdletBinding()] +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory=$false)] [string]$V8Path, diff --git a/.claude/skills/web-publish/scripts/web-publish.py b/.claude/skills/web-publish/scripts/web-publish.py index 8b0677e6f..a0e5fd396 100644 --- a/.claude/skills/web-publish/scripts/web-publish.py +++ b/.claude/skills/web-publish/scripts/web-publish.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# web-publish v1.7 — Publish 1C infobase via Apache (+_version_dir/_version_key: общий эталон db-семейства) +# web-publish v1.8 — Publish 1C infobase via Apache (+_version_dir/_version_key: общий эталон db-семейства) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills """ diff --git a/.claude/skills/web-stop/scripts/web-stop.ps1 b/.claude/skills/web-stop/scripts/web-stop.ps1 index 01bc618c3..6abc55f3f 100644 --- a/.claude/skills/web-stop/scripts/web-stop.ps1 +++ b/.claude/skills/web-stop/scripts/web-stop.ps1 @@ -1,4 +1,4 @@ -# web-stop v1.1 — Stop Apache HTTP Server +# web-stop v1.2 — Stop Apache HTTP Server # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills <# .SYNOPSIS @@ -18,7 +18,7 @@ .\web-stop.ps1 -ApachePath "C:\tools\apache24" #> -[CmdletBinding()] +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory=$false)] [string]$ApachePath diff --git a/.claude/skills/web-stop/scripts/web-stop.py b/.claude/skills/web-stop/scripts/web-stop.py index 3283e8540..08a8b8700 100644 --- a/.claude/skills/web-stop/scripts/web-stop.py +++ b/.claude/skills/web-stop/scripts/web-stop.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# web-stop v1.1 — Stop Apache HTTP Server +# web-stop v1.2 — Stop Apache HTTP Server # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills """ diff --git a/.claude/skills/web-unpublish/scripts/web-unpublish.ps1 b/.claude/skills/web-unpublish/scripts/web-unpublish.ps1 index 6207ecdb0..3eaab3f9a 100644 --- a/.claude/skills/web-unpublish/scripts/web-unpublish.ps1 +++ b/.claude/skills/web-unpublish/scripts/web-unpublish.ps1 @@ -1,4 +1,4 @@ -# web-unpublish v1.1 — Remove 1C web publication +# web-unpublish v1.2 — Remove 1C web publication # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills <# .SYNOPSIS @@ -28,7 +28,7 @@ .\web-unpublish.ps1 -AppName "bpdemo" -ApachePath "C:\tools\apache24" #> -[CmdletBinding()] +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory=$false)] [string]$AppName, diff --git a/.claude/skills/web-unpublish/scripts/web-unpublish.py b/.claude/skills/web-unpublish/scripts/web-unpublish.py index 07980ebcd..5f382eb70 100644 --- a/.claude/skills/web-unpublish/scripts/web-unpublish.py +++ b/.claude/skills/web-unpublish/scripts/web-unpublish.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# web-unpublish v1.1 — Remove 1C web publication +# web-unpublish v1.2 — Remove 1C web publication # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills """ diff --git a/.claude/skills/xdto-compile/scripts/xdto-compile.ps1 b/.claude/skills/xdto-compile/scripts/xdto-compile.ps1 index 985f3b7e2..b2462f1f9 100644 --- a/.claude/skills/xdto-compile/scripts/xdto-compile.ps1 +++ b/.claude/skills/xdto-compile/scripts/xdto-compile.ps1 @@ -1,5 +1,6 @@ -# xdto-compile v1.11 — Build a 1C XDTO package from an XML Schema (XSD) (+support-guard: общая реализация вместо урезанной) +# xdto-compile v1.12 — Build a 1C XDTO package from an XML Schema (XSD) (+support-guard: общая реализация вместо урезанной) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory=$true, ParameterSetName='File')] [Alias('Path')] diff --git a/.claude/skills/xdto-compile/scripts/xdto-compile.py b/.claude/skills/xdto-compile/scripts/xdto-compile.py index c24880622..09310fa0e 100644 --- a/.claude/skills/xdto-compile/scripts/xdto-compile.py +++ b/.claude/skills/xdto-compile/scripts/xdto-compile.py @@ -1,4 +1,4 @@ -# xdto-compile v1.11 — Build a 1C XDTO package from an XML Schema (XSD) (Python port) (+support-guard: общая реализация вместо урезанной) +# xdto-compile v1.12 — Build a 1C XDTO package from an XML Schema (XSD) (Python port) (+support-guard: общая реализация вместо урезанной) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import json diff --git a/.claude/skills/xdto-decompile/scripts/xdto-decompile.ps1 b/.claude/skills/xdto-decompile/scripts/xdto-decompile.ps1 index 71e0ad662..5a8942a06 100644 --- a/.claude/skills/xdto-decompile/scripts/xdto-decompile.ps1 +++ b/.claude/skills/xdto-decompile/scripts/xdto-decompile.ps1 @@ -1,5 +1,6 @@ -# xdto-decompile v1.1 — Convert 1C XDTO package to XML Schema (XSD) +# xdto-decompile v1.2 — Convert 1C XDTO package to XML Schema (XSD) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory=$true)] [Alias('Path')] diff --git a/.claude/skills/xdto-decompile/scripts/xdto-decompile.py b/.claude/skills/xdto-decompile/scripts/xdto-decompile.py index 592467d86..310f1645c 100644 --- a/.claude/skills/xdto-decompile/scripts/xdto-decompile.py +++ b/.claude/skills/xdto-decompile/scripts/xdto-decompile.py @@ -1,4 +1,4 @@ -# xdto-decompile v1.1 — Convert 1C XDTO package to XML Schema (XSD) (Python port) +# xdto-decompile v1.2 — Convert 1C XDTO package to XML Schema (XSD) (Python port) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import os diff --git a/.claude/skills/xdto-edit/scripts/xdto-edit.ps1 b/.claude/skills/xdto-edit/scripts/xdto-edit.ps1 index 938d989a7..ac7215bd1 100644 --- a/.claude/skills/xdto-edit/scripts/xdto-edit.ps1 +++ b/.claude/skills/xdto-edit/scripts/xdto-edit.ps1 @@ -1,5 +1,6 @@ -# xdto-edit v1.6 — Point edits of a 1C XDTO package (+support-guard: общая реализация вместо урезанной) +# xdto-edit v1.7 — Point edits of a 1C XDTO package (+support-guard: общая реализация вместо урезанной) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills +[CmdletBinding(PositionalBinding=$false)] param( [Parameter(Mandatory=$true)] [Alias('Path')] diff --git a/.claude/skills/xdto-edit/scripts/xdto-edit.py b/.claude/skills/xdto-edit/scripts/xdto-edit.py index 00fbcf98c..c6b78a890 100644 --- a/.claude/skills/xdto-edit/scripts/xdto-edit.py +++ b/.claude/skills/xdto-edit/scripts/xdto-edit.py @@ -1,4 +1,4 @@ -# xdto-edit v1.6 — Point edits of a 1C XDTO package (Python port) (+support-guard: общая реализация вместо урезанной) +# xdto-edit v1.7 — Point edits of a 1C XDTO package (Python port) (+support-guard: общая реализация вместо урезанной) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import json diff --git a/tests/skills/check-positional-binding.mjs b/tests/skills/check-positional-binding.mjs index a63744e3d..a363525ff 100644 --- a/tests/skills/check-positional-binding.mjs +++ b/tests/skills/check-positional-binding.mjs @@ -10,11 +10,20 @@ // то есть любая перестановка параметров в param() открывала дыру заново. // Снапшот-тесты этого не видят: они сверяют вывод, а не связывание аргументов. // -// Две проверки. Статическая: [CmdletBinding(PositionalBinding=$false)] объявлен, позиционный -// параметр не более одного и это Position=0; в py-порте все add_argument именованные. +// Две области. Read-only навыки: позиционным остаётся путь ко входу (Position=0), не более +// одного. Пишущие навыки: позиционных параметров нет вовсе — «главный» параметр там не +// выводится механически (у meta-edit первым объявлен -DefinitionFile, а путь к объекту вторым), +// и ошибка выбора не ловится тестами: раннер передаёт только именованные флаги. Молчаливое +// растекание там уже стреляло: `-Purpose Форма списка` у form-compile отдавало +// Purpose=[Форма] ObjectPath=[списка] БЕЗ ошибки, тогда как py-порт тот же вызов отвергал. +// +// Статическая проверка: [CmdletBinding(PositionalBinding=$false)] объявлен, число Position +// не выше нормы области; в py-порте все add_argument именованные. // Поведенческая: лишний позиционный аргумент, указывающий на канареечный файл, роняет вызов // и файл остаётся байт-в-байт. Валидные фикстуры не нужны — связывание параметров происходит -// до тела скрипта. Выход 1 при нарушении. Запуск: node tests/skills/check-positional-binding.mjs [--runtime python] +// до тела скрипта. Только для read-only навыков: у web-stop и db-run все параметры +// Mandatory=$false, связывание пройдёт и ТЕЛО ВЫПОЛНИТСЯ — гард остановил бы Apache и запустил +// 1С. Выход 1 при нарушении. Запуск: node tests/skills/check-positional-binding.mjs [--runtime python] import { spawnSync } from 'node:child_process'; import { readFileSync, writeFileSync, readdirSync, existsSync, mkdtempSync, rmSync } from 'node:fs'; import { fileURLToPath } from 'node:url'; @@ -55,6 +64,18 @@ if (skills.length === 0) { process.exit(1); } +// Пишущие навыки — всё остальное со скриптом. Список тоже по имени, чтобы новый навык +// попадал под гард сам. +const writeSkills = readdirSync(SKILLS_DIR) + .filter(name => !isReadOnly(name)) + .filter(name => existsSync(join(SKILLS_DIR, name, 'scripts', `${name}.ps1`))) + .sort(); + +if (writeSkills.length === 0) { + console.error('Не найдено ни одного пишущего навыка со скриптом — гард потерял цель.'); + process.exit(1); +} + const violations = []; const fail = (skill, msg) => violations.push(`${skill}: ${msg}`); @@ -67,7 +88,7 @@ function paramBlock(text) { return end < 0 ? null : text.slice(start, end); } -for (const skill of skills) { +function checkStatic(skill, allowPositional) { const ps1Path = join(SKILLS_DIR, skill, 'scripts', `${skill}.ps1`); const ps1 = readFileSync(ps1Path, 'utf8'); @@ -80,9 +101,11 @@ for (const skill of skills) { fail(skill, '.ps1: не разобран блок param()'); } else { const positions = [...block.matchAll(/Position\s*=\s*(\d+)/g)].map(m => m[1]); - if (positions.length > 1) { + if (!allowPositional && positions.length > 0) { + fail(skill, `.ps1: у пишущего навыка не должно быть позиционных параметров (Position=${positions.join(', ')})`); + } else if (allowPositional && positions.length > 1) { fail(skill, `.ps1: позиционных параметров больше одного (Position=${positions.join(', ')})`); - } else if (positions.length === 1 && positions[0] !== '0') { + } else if (allowPositional && positions.length === 1 && positions[0] !== '0') { fail(skill, `.ps1: единственный позиционный параметр должен быть Position=0, а не Position=${positions[0]}`); } } @@ -98,7 +121,10 @@ for (const skill of skills) { } } -// --- 2. Поведенческая проверка: лишний позиционный аргумент не трогает файл --- +for (const skill of skills) checkStatic(skill, true); +for (const skill of writeSkills) checkStatic(skill, false); + +// --- 2. Поведенческая проверка (только read-only, см. шапку): лишний позиционный аргумент не трогает файл --- const CANARY = 'канарейка: этот файл не должен быть перезаписан отчётом навыка\n'; const work = mkdtempSync(join(tmpdir(), 'posbind-')); @@ -148,5 +174,6 @@ if (violations.length) { process.exit(1); } -console.log(`OK — ${skills.length} read-only навыков, рантаймы: ${runtimes.join(', ')}.`); -console.log('Позиционным остаётся только путь ко входу; лишний позиционный аргумент падает и файл цел.'); +console.log(`OK — read-only: ${skills.length}, пишущих: ${writeSkills.length}, рантаймы: ${runtimes.join(', ')}.`); +console.log('У read-only позиционным остаётся только путь ко входу (и лишний аргумент падает, файл цел);'); +console.log('у пишущих позиционных параметров нет вовсе.');