From f89cdf9effe05af9746584444aa56c013a82613c Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sat, 18 Jul 2026 21:17:18 +0300 Subject: [PATCH] =?UTF-8?q?docs(cfe-patch-method):=20SKILL.md=20=E2=80=94?= =?UTF-8?q?=20=D1=83=D0=B1=D1=80=D0=B0=D1=82=D1=8C=20=D0=B4=D1=83=D0=B1?= =?UTF-8?q?=D0=BB=D0=B8=D1=80=D1=83=D1=8E=D1=89=D0=B5=D0=B5=20=D0=B2=D1=8B?= =?UTF-8?q?=D0=B2=D0=BE=D0=B4,=20=D0=B4=D0=B5=D1=82=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20=D0=BC=D0=B0?= =?UTF-8?q?=D1=80=D0=BA=D0=B5=D1=80=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Принцип: в SKILL.md — только то, чего модель НЕ видит в выводе/результате. - Убрано: «контекст/сигнатура/обрамление определяются автоматически» (параметров для них нет, результат виден); секция «Что переносится из оригинала» целиком (всё видно в сгенерированном коде); устаревшие имена файлов воркспейса. - Добавлено: раздел «Маркеры #Вставка/#Удаление» — синтаксис и семантика, которые модель пишет сама и из копии тела не считает (удаляемые строки остаются между маркерами, 0-я колонка, unmarked = дословно оригинал = суть контроля, пример). Co-Authored-By: Claude Opus 4.8 --- .claude/skills/cfe-patch-method/SKILL.md | 39 ++++++++++++++++++------ 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/.claude/skills/cfe-patch-method/SKILL.md b/.claude/skills/cfe-patch-method/SKILL.md index 826c6f13..4944381b 100644 --- a/.claude/skills/cfe-patch-method/SKILL.md +++ b/.claude/skills/cfe-patch-method/SKILL.md @@ -36,8 +36,6 @@ allowed-tools: | `Check` | Проверить контролируемые методы на дрейф (только отчёт) | — | | `Actualize` | Актуализировать дрейфнувшие контролируемые методы | — | -Директива контекста, `Процедура`/`Функция`, сигнатура и обрамление определяются из оригинала автоматически — вручную задавать не нужно. - ## Формат ModulePath | ModulePath | Файл | @@ -64,15 +62,36 @@ allowed-tools: `Before` и `After` применимы только к **процедурам**. Для **функций** доступны `Instead` и `ModificationAndControl`. -## Что переносится из оригинала +## Маркеры `#Вставка` / `#Удаление` (для `ModificationAndControl`) -- **Директива контекста** (`&НаСервере`/`&НаКлиенте`/…) — как у оригинала. -- **Сигнатура** — полный список параметров (для `Instead` имена параметров подставляются в `ПродолжитьВызов`). -- **Обрамляющие `#Если … Тогда`** — наследуются от оригинала. -- **Области `#Область`** — метод помещается в ту же область (переиспользуется, если уже есть в модуле). -- Для `ModificationAndControl` — **всё тело** оригинала дословно; далее расставь маркеры `#Вставка`/`#КонецВставки` и `#Удаление`/`#КонецУдаления`. +`&ИзменениеИКонтроль` вставляет в перехватчик **копию тела оригинала**. Дальше отредактируй тело под свою доработку, **помечая каждое изменение** — платформа так отличает твою правку от неизменного оригинала: -Имя процедуры перехватчика — `<Метод>`; при коллизии в модуле добавляется суффикс типа (`_Перед`/`_После`/`_Вместо`). +- **Добавляешь код** → оберни его `#Вставка` … `#КонецВставки`. +- **Удаляешь код оригинала** → оберни удаляемые строки `#Удаление` … `#КонецУдаления`, но сами строки **оставь между маркерами** (платформа сверяет их с оригиналом). +- **Заменяешь** → `#Удаление` старое `#КонецУдаления` сразу за ним `#Вставка` новое `#КонецВставки`. + +Пример: +```bsl +&ИзменениеИКонтроль("ПриЗаписи") +Процедура Расш_ПриЗаписи(Отказ) + СуммаДокумента = РассчитатьСумму(); +#Вставка + // доработка: округляем + СуммаДокумента = Окр(СуммаДокумента, 2); +#КонецВставки +#Удаление + Записать(); +#КонецУдаления +#Вставка + ЗаписатьСПроверкой(Отказ); +#КонецВставки +КонецПроцедуры +``` + +Правила: +- Маркеры — на **отдельной строке с 0-й колонки** (без отступа), даже внутри отступов и текста запроса (`|…`). +- **Незамеченные (unmarked) строки должны совпадать с оригиналом дословно** — это и есть «контроль». Если оригинал в КФ изменится, unmarked-контекст разойдётся → метод потребует актуализации (см. ниже; проверить пачкой — `-Check`). +- Меняешь только свои `#Вставка`/`#Удаление`; чужой оригинал не трогай. ## Актуализация (повторный вызов `ModificationAndControl`) @@ -80,7 +99,7 @@ allowed-tools: - `[АКТУАЛЕН]` — оригинал не менялся, изменений нет; - `[АКТУАЛИЗИРОВАН]` — тело обновлено по новому оригиналу, правки (`#Вставка`/`#Удаление`) перенесены автоматически (в выводе — сводка перенесённого); -- `[АКТУАЛИЗИРОВАН-ЧАСТИЧНО]` — часть правок не удалось разместить (якорь изменился в новом оригинале). Они помечены `// [РЕСИНК-КОНФЛИКТ]` в модуле и не потеряны. Путь к merge-воркспейсу печатается в выводе — начни с `index.md`, дальше по каждому конфликту его `conflict.md` (см. ниже), размести блоки вручную в `.bsl` расширения. +- `[АКТУАЛИЗИРОВАН-ЧАСТИЧНО]` — часть правок не удалось разместить (якорь изменился в новом оригинале). Они помечены `// [РЕСИНК-КОНФЛИКТ]` в модуле и не потеряны. Путь к merge-воркспейсу печатается в выводе — начни с `index.md`, дальше по каждому конфликту его `conflict.md`, размести блоки вручную в `.bsl` расширения. Повторный вызов `Before`/`After`/`Instead` для уже перехваченного метода не создаёт дубль (`[ПРОПУЩЕН]`).