From 1d49c16a6794cc45bc76d20bf0991c8f2a36e93c Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sun, 26 Jul 2026 12:58:07 +0300 Subject: [PATCH] =?UTF-8?q?docs(xdto):=20=D1=83=D1=81=D1=82=D1=80=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=82=D1=8C=20=D0=BF=D1=80=D0=BE=D1=82=D0=B8=D0=B2?= =?UTF-8?q?=D0=BE=D1=80=D0=B5=D1=87=D0=B8=D0=B5=20=C2=AB=D0=BA=D0=B0=D0=BA?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D1=82=D1=8C=20=D0=BF=D0=B0?= =?UTF-8?q?=D0=BA=D0=B5=D1=82=C2=BB=20=D0=BC=D0=B5=D0=B6=D0=B4=D1=83=20?= =?UTF-8?q?=D0=BD=D0=B0=D0=B2=D1=8B=D0=BA=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit На один и тот же вопрос четыре инструкции отвечали по-разному: decompile объявлял себя «основным способом менять пакет», edit сам себя занижал до варианта для маленьких пакетов, compile про edit не упоминал вовсе, а workflow валидатора его не знал. Модель получала бы разный ответ в зависимости от того, на какой файл попала, причём два из них уводили от единственного навыка, созданного ровно для этой задачи. Единое правило проведено через все четыре: точечная правка — xdto-edit; переработка схемы целиком или знакомство с ней — decompile → compile. Заодно в decompile добавлена развилка на xdto-info, чтобы разграничить «нужна схема» и «нужна сводка для кода». Мелочи: грамматика в xdto-edit, служебное значение -Mode auto убрано из таблицы параметров (пользователь его не пишет), описан флаг [до N]. Co-Authored-By: Claude Opus 5 (1M context) --- .claude/skills/xdto-compile/SKILL.md | 3 ++- .claude/skills/xdto-decompile/SKILL.md | 9 ++++++--- .claude/skills/xdto-edit/SKILL.md | 8 ++++---- .claude/skills/xdto-info/SKILL.md | 5 +++-- .claude/skills/xdto-validate/SKILL.md | 2 +- 5 files changed, 16 insertions(+), 11 deletions(-) diff --git a/.claude/skills/xdto-compile/SKILL.md b/.claude/skills/xdto-compile/SKILL.md index c9b8c027..16ff88b2 100644 --- a/.claude/skills/xdto-compile/SKILL.md +++ b/.claude/skills/xdto-compile/SKILL.md @@ -102,4 +102,5 @@ XSD выразительнее модели XDTO. Всё, что не перен 3. `/xdto-validate <каталог-исходников>/XDTOPackages/<Имя>` — убедиться, что типы разрешились 4. `/db-load-xml` + `/db-update` -Правка существующего пакета: `/xdto-decompile` → правка XSD → `/xdto-compile -Force`. +Правка существующего пакета: точечно — `/xdto-edit`; переработать схему целиком — +`/xdto-decompile` → правка XSD → `/xdto-compile -Force`. diff --git a/.claude/skills/xdto-decompile/SKILL.md b/.claude/skills/xdto-decompile/SKILL.md index 45725f7b..7413388f 100644 --- a/.claude/skills/xdto-decompile/SKILL.md +++ b/.claude/skills/xdto-decompile/SKILL.md @@ -30,12 +30,15 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/xdto-decompile.ps1" ... -PackagePath src/XDTOPackages/ОбменСБанком -OutFile bank.xsd ``` -## Правка пакета +## Переработка схемы целиком `/xdto-decompile` → правка XSD → `/xdto-compile -Force` возвращает пакет без потерь, включая имя, синоним и комментарий объекта метаданных — они выгружаются -в `xs:annotation/xs:appinfo`. Это основной способ менять существующий пакет: -отдельных операций правки не нужно, схема читается и правится целиком. +в `xs:annotation/xs:appinfo`. + +Этот путь нужен, когда схему меняют широко или сначала надо разобраться, как она +устроена. Чтобы поправить одно свойство, схему целиком читать не нужно — `/xdto-edit`. +Если нужна не схема, а сводка «что присвоить и что обязательно», — `/xdto-info`. В схеме могут встретиться атрибуты с префиксом `xdto:` — так записано то, что XML Schema выразить не может (например `nillable` у атрибута). Схема при этом остаётся diff --git a/.claude/skills/xdto-edit/SKILL.md b/.claude/skills/xdto-edit/SKILL.md index 2cd1ba8e..58b53ec3 100644 --- a/.claude/skills/xdto-edit/SKILL.md +++ b/.claude/skills/xdto-edit/SKILL.md @@ -10,11 +10,11 @@ allowed-tools: # /xdto-edit — Точечное редактирование пакета XDTO -Меняет один элемент пакета, не требуя читать и переписывать всю схему. Для больших +Меняет один элемент пакета, не требуя читать и переписывать всю схему — для больших пакетов (`EnterpriseData` — около мегабайта) это единственный практичный путь. -Для маленького пакета проще связка `/xdto-decompile` → правка XSD → `/xdto-compile -Force`: -она даёт тот же результат и позволяет видеть схему целиком. +Если нужно переработать схему целиком или сперва разобраться, как она устроена, — +`/xdto-decompile` → правка XSD → `/xdto-compile -Force`. ## Параметры @@ -78,7 +78,7 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/xdto-edit.ps1" -Pac `set-namespace` меняет `targetNamespace`, все внутренние ссылки на собственные типы и `` объекта метаданных. Пакеты, импортирующие старое пространство имён, **не изменяются** — при версионировании они и должны продолжать смотреть на прежнее. -Навык их перечислит; если правка не версионная, поправь их импорты сами. +Навык их перечислит; если правка не версионная, поправь их импорты сам. После правки автоматически запускается `/xdto-validate` — отключается через `-NoValidate`. diff --git a/.claude/skills/xdto-info/SKILL.md b/.claude/skills/xdto-info/SKILL.md index 46411930..14292505 100644 --- a/.claude/skills/xdto-info/SKILL.md +++ b/.claude/skills/xdto-info/SKILL.md @@ -23,7 +23,7 @@ allowed-tools: | `Package` | нет | Выбрать пакет по имени объекта метаданных | | `Name` | нет | Имя типа. Без выбранного пакета ищется по всей конфигурации | | `Depth` | нет | Глубина разузлования вложенных объектов. По умолчанию 1 | -| `Mode` | нет | `used-by` — кто ссылается на тип. По умолчанию `auto` | +| `Mode` | нет | `used-by` — показать, кто ссылается на тип | | `Limit` / `Offset` | нет | Пагинация. По умолчанию 150 строк | | `OutFile` | нет | Записать результат в файл (UTF-8 BOM) | @@ -79,7 +79,8 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/xdto-info.ps1" -Pac - **`объект X`** — свойству нужно присвоить вложенный объект XDTO, а не значение. Раскрыть его состав — `-Depth 2` и больше. - **`[обязательный]`** — без заполнения запись XML не пройдёт. Непомеченное свойство - необязательно. `[список]` — коллекция, заполняется через `.Добавить()`. + необязательно. `[список]` — коллекция, заполняется через `.Добавить()`; + `[до N]` — коллекция с ограничением сверху. - **`← СуммаТип`** — исходное имя типа из схемы; слева от стрелки уже развёрнутое значение. - **`[значение элемента]`** — свойство хранит собственное значение элемента, остальные свойства такого типа лежат в атрибутах XML. diff --git a/.claude/skills/xdto-validate/SKILL.md b/.claude/skills/xdto-validate/SKILL.md index e1e919b3..890c5819 100644 --- a/.claude/skills/xdto-validate/SKILL.md +++ b/.claude/skills/xdto-validate/SKILL.md @@ -39,6 +39,6 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/xdto-validate.ps1" ## Типичный workflow -1. `/xdto-compile` или правка через `/xdto-decompile` → `/xdto-compile -Force` +1. `/xdto-compile`, `/xdto-edit` или переработка через `/xdto-decompile` → `/xdto-compile -Force` 2. `/xdto-validate <путь>` — до загрузки в базу 3. `/db-load-xml` + `/db-update`