From 7a7d03dcffc836c6e19fa69f253604abc1d4a405 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Mon, 25 May 2026 13:07:53 +0300 Subject: [PATCH] =?UTF-8?q?docs(skd-decompile):=20=D0=BF=D1=80=D0=B8=D1=87?= =?UTF-8?q?=D1=91=D1=81=D1=8B=D0=B2=D0=B0=D0=B5=D0=BC=20SKILL.md=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=B4=20merge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - description короче и с явным «не для точечных правок» - унифицируем терминологию (sentinel-узлы) - расширяем «Когда не использовать» — почему /skd-edit лучше для адресных правок - в критичные конструкции добавляем вложенные схемы Co-Authored-By: Claude Opus 4.7 (1M context) --- .claude/skills/skd-decompile/SKILL.md | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/.claude/skills/skd-decompile/SKILL.md b/.claude/skills/skd-decompile/SKILL.md index 8b5e1277..952f2d8d 100644 --- a/.claude/skills/skd-decompile/SKILL.md +++ b/.claude/skills/skd-decompile/SKILL.md @@ -1,6 +1,6 @@ --- name: skd-decompile -description: Декомпиляция схемы компоновки данных 1С (СКД) в JSON-черновик в формате skd-compile. Используй когда нужно создать новый отчёт по образцу существующего или провести структурный рефакторинг. Для точечных правок используй skd-edit +description: Декомпиляция схемы компоновки данных 1С (СКД) в JSON-черновик в формате skd-compile. Используй для scaffold нового отчёта по образцу или структурного рефакторинга. Не для точечных правок argument-hint: [-OutputPath ] disable-model-invocation: true allowed-tools: @@ -21,7 +21,7 @@ allowed-tools: ## Когда **не** использовать -- **Точечные правки готового отчёта** (добавить поле, фильтр, итог, переименовать) → `/skd-edit`. Точечно, без потерь, без полной реконструкции. +- **Точечные правки готового отчёта** (добавить поле, фильтр, итог, переименовать) → `/skd-edit`. Цикл «декомпиляция → правка JSON → компиляция» переписывает шаблон целиком, может терять непокрытые конструкции и даёт большой diff в исходниках. `/skd-edit` правит адресно, без полной реконструкции. ## Параметры @@ -34,22 +34,19 @@ allowed-tools: powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/skd-decompile.ps1" -TemplatePath "" -OutputPath "" ``` -При наличии `-OutputPath` рядом пишется `.warnings.md`, если есть непокрытые конструкции. - ## Что получаешь -JSON — это **черновик, не полное обратимое представление СКД**. Декомпилятор знает только то, что умеет `skd-compile`, поэтому: +JSON-черновик в формате `/skd-compile` — **не полное обратимое представление СКД**. На вход компилятору такой JSON напрямую может не пойти: в нём встречаются sentinel-узлы (маркер `__unsupported__`). -- **Покрытые конструкции** эмитятся в JSON напрямую (поля, параметры с `@autoDates`, шаблоны с rows-стилями, варианты с structure/selection/filter/order/conditionalAppearance и т.п.). -- **Непокрытые, но не критичные** (например, `orderExpression` на полях, `ChoiceParameterLinks` на параметрах, custom per-cell appearance, scope в conditionalAppearance) — заменяются на sentinel `{"__unsupported__": {"id": "W###", "kind": "...", "loc": "..."}}`. JSON остаётся валидным, но **`skd-compile` отказывается компилировать его до тех пор, пока sentinel не убраны** — это намеренно, чтобы непокрытое не уехало в финальный отчёт незамеченным. -- **Критичные конструкции** (Picture cells, ХранилищеЗначения, вариативные шаблоны, не-СКД root) — fail-fast: скрипт завершается с ненулевым кодом и пишет в stderr какой именно элемент не поддержан. - -Все непокрытые места — с координатами в `.warnings.md`. +- **Готовые узлы** — большая часть СКД (поля, параметры, шаблоны, варианты со structure/filter/order/conditionalAppearance и т.п.) ложится в JSON как обычные узлы DSL. +- **Sentinel-узлы** — места, где встретилась конструкция, которую декомпилятор не умеет выразить в DSL. JSON остаётся валидным, но компилятор откажется его собирать, пока sentinel не **заменён ручной реализацией** (явный raw `template`, прописанный appearance и т.п.) **или не удалён**, если в новом отчёте конструкция не нужна. Это намеренный барьер — чтобы непокрытое не уехало в финальный отчёт незамеченным. +- **`.warnings.md`** рядом с `OutputPath` — список всех sentinel-узлов с координатами в исходнике, по нему удобно обходить места под ручную доработку. +- **Критичные конструкции** (Picture cells, ХранилищеЗначения, вложенные схемы, не-СКД root) — скрипт падает с ненулевым кодом и сообщением в stderr; такой Template как образец не годится. ## Workflow 1. `/skd-decompile -OutputPath draft.json` — получить черновик. 2. Открыть `draft.warnings.md`, посмотреть, что не покрылось. -3. Поправить JSON под задачу. Sentinel-объекты — заменить на ручную реализацию (через явный raw `template`, через ручное описание appearance и т.п.) либо удалить, если конструкция в новом отчёте не нужна. +3. Поправить JSON под задачу. Sentinel-узлы — заменить на ручную реализацию (через явный raw `template`, через ручное описание appearance и т.п.) либо удалить, если конструкция в новом отчёте не нужна. 4. `/skd-compile -DefinitionFile draft.json -OutputPath new-Template.xml` — собрать обратно. 5. `/skd-validate` + `/skd-info` — проверить.