docs(skill): два главных правила — структурное зрение и validate_part

1) «Зрение» структурное: describe_model/describe_face/describe_edge/measure —
   предпочесть снимку (точнее и дешевле по контексту); model_snapshot только для
   визуально-пространственных вопросов, не гонять картинку зря.
2) validate_part после КАЖДОЙ операции: Update()==true ≠ успех; непустой результат
   (напр. et3dError54) = брак, в STEP/печать не брать.
Базовый и импортный циклы + эвристики переориентированы на структурный осмотр и
обязательную проверку построения.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-26 19:47:14 +03:00
parent c761cba673
commit ba4e0db558
+39 -22
View File
@@ -32,6 +32,24 @@ description: >
импорт/экспорт обменных форматов, разбор сборки, измерения, снимки. Для поиска сигнатур/констант
в справке — отдельный навык `kompas-sdk-research`. Для правки документации — `docs-delegate`.
## Два правила прежде всего
**1. «Зрение» — структурное, не по картинке.** Чтобы «увидеть» деталь, вызывай **`describe_model`** —
это единый структурный паспорт одним запросом: габарит, МЦХ, тела, топология (грани/рёбра, сгруппированные
по типам), дерево построения с параметрами, переменные. Это **точнее и дешевле по контексту**, чем
`model_snapshot`. Для деталей углубляйся `describe_face` / `describe_edge` / `measure` / `list_faces|edges|bodies|features|variables`.
**`model_snapshot` бери только** для визуально-пространственных вопросов, на которые паспорт не отвечает
(общая форма, ориентация, правдоподобность результата, «куда смотрит грань»). **Не анализируй изображение
там, где достаточно чисел** — снимок дорог по контексту и менее точен.
**2. `validate_part` — после КАЖДОЙ операции.** Любая формообразующая или прямое редактирование
(`extrude_*`/`revolve_*`/`fillet_*`/`chamfer_*`/`move_face`/`split_solid_by_plane`/`move_body`/`boolean_union`)
может «пройти» (`Update()==true`), оставив деталь в ошибке. После каждой операции вызывай `validate_part`:
**пустой результат = чисто; непустой = провал** (напр. `et3dError54`) — не продолжай и не экспортируй,
исправь или переделай другим методом. Перед `export_step` / выдачей результата — обязательно чистый `validate_part`.
(`move_face`/`move_body`/`boolean_union` сами дописывают итог `validate_part` в ответ, но проверяй явно после
формообразующих тоже.)
## Инструменты MCP
**Реализованы (v2+, 46 инструментов):**
@@ -53,12 +71,12 @@ description: >
Опорный сценарий построения, проверен end-to-end (см. `usecases/0001`):
1. `kompas_connect` (+ `kompas_set_visible true`, чтобы снимки были осмысленны).
1. `kompas_connect` (+ `kompas_set_visible true`).
2. `document_create part`.
3. `sketch_create XOY``sketch_add_*``sketch_close`.
4. `extrude_boss`/`revolve_boss`/…
5. **Осмотр:** `model_snapshot` (увидеть) + `get_part_info`/`get_bounding_box` (сверить числами).
6. Итерация «на грани»: `model_snapshot``list_faces``sketch_create_on_face_index` → операция.
4. `extrude_boss`/`revolve_boss`/…**`validate_part`** (правило 2).
5. **Осмотр — структурно:** `describe_model` (паспорт: габарит, МЦХ, топология, дерево). Снимок — только если нужен визуальный контроль.
6. Итерация «на грани»: `describe_model`/`list_faces` (+`describe_face`)`sketch_create_on_face_index` → операция`validate_part`.
## Работа с импортом / сборками (выработано в usecases/0002)
@@ -71,34 +89,33 @@ description: >
3. **Извлечение отдельной детали**: при импорте включать «создавать файлы компонентов», тогда
компоненты пишутся как отдельные `.m3d` рядом; открывать деталь самостоятельным документом
(`OpenSourceDocument`). Гашение видимости компонента на снимок **не влияет** — изоляция так не делается.
4. **Осмотр детали**: габарит по осям (какая ось «высота»), `list_faces`/`list_edges`, стандартные
проекции (`#Спереди/#Сверху/#Слева/#Справа/#Изометрия`) + `model_snapshot` для каждой.
5. **Модификация** на «тупой» импортированной B-rep:
4. **Осмотр детали — структурно:** `describe_model` (габарит по осям какая ось «высота», МЦХ,
тела, топология). Грани/рёбра под операцию — `list_faces`/`describe_face`, `measure`. `model_snapshot`
(или стандартные проекции `#Спереди/#Сверху/#Слева/#Справа/#Изометрия`) — **только** если нужен
визуально-пространственный контроль формы.
5. **Модификация** на «тупой» импортированной B-rep (после каждой операции — `validate_part`):
- *Простой случай* — `move_face`: сдвинуть плоскую грань на +N мм (наружу) или −N (внутрь).
⚠ На сложном торце (с отверстием/пазом) FaceMover может дать `et3dError54`**обязательно `validate_part` после**.
⚠ На сложном торце (с отверстием/пазом) FaceMover может дать `et3dError54`.
- *Вставка N мм в середину призматической ножки* (надёжно, грани совпадают):
`split_solid_by_plane(plane, offset)``move_body(индекс верхнего тела, dz=N)`
`move_face(точка на грани реза, +N)` (мост) → `boolean_union()`. После — `validate_part`.
6. **Экспорт STEP**: `export_step(path, format=auto|ap203|ap214|ap242)`.
`move_face(точка на грани реза, +N)` (мост) → `boolean_union()`.
6. **Проверка перед выдачей:** `validate_part` — чисто; затем **Экспорт STEP** `export_step(path, format=auto|ap203|ap214|ap242)`.
Точные COM-приёмы и сигнатуры — в авто-памяти `kompas-step-and-assembly-api` и в `usecases/0002/case.md`.
## Эвристики и подводные камни
- **Решай по снимку.** После каждой формообразующей операции делай `model_snapshot` и проверяй
визуально; числами — `get_part_info`/`get_bounding_box`.
- **Грань/ребро по индексу надёжнее, чем по точке.** Сначала `list_faces`/`list_edges`, затем
`*_on_face_index` / `*_edge_index`. По точке (`SelectByPoint`) — только когда индекс не подходит.
- **Направление операции.** `extrude_boss(..., forward)` может уйти «не туда» в зависимости от
нормали выбранной грани — проверь снимком, при необходимости инвертируй `forward`.
- **МЦХ.** Объём/масса меняющейся геометрии бери через `get_part_info` (под капотом API5
`CalcMassInertiaProperties`); перед чтением после правок — `rebuild`.
- **Зрение — структурное (правило 1).** Осматривай через `describe_model`/`describe_face`/`describe_edge`/`measure`,
а не снимком. `model_snapshot` — только для визуально-пространственных вопросов; не гоняй картинку зря.
- **`validate_part` после каждой операции (правило 2).** `Update()==true` ≠ успех; непустой `validate_part`
(напр. `et3dError54`) — деталь невалидна, в STEP/печать не брать.
- **Грань/ребро по индексу надёжнее, чем по точке.** Сначала `list_faces`/`list_edges` (или `describe_model`),
затем `*_on_face_index` / `*_edge_index`. По точке (`SelectByPoint`) — только когда индекс не подходит.
- **Направление операции.** `extrude_boss(..., forward)` / `move_face(distance±)` может уйти «не туда» —
сверяй результат `get_bounding_box`/`describe_model` (числами), снимок лишь при необходимости.
- **МЦХ.** Объём/масса меняющейся геометрии бери через `get_part_info`/`describe_model`; перед чтением после правок — `rebuild`.
- **id эскизов/операций** недействительны после смены активного документа (create/open/close).
- **Единицы — мм** (геометрия) и кг (масса). Локальные координаты эскиза ≠ мировые координаты модели.
- **`Update()==true` ≠ успех.** Прямое редактирование (move_face/split/union) может «пройти», оставив
операцию в ошибке. **Всегда `validate_part` после редактирования** — пустой результат = чисто;
иначе деталь невалидна (напр. `et3dError54`), и STEP/печать брать нельзя. Инструменты
move_face/move_body/boolean_union сами дописывают итог `validate_part` в ответ.
## Открытые вопросы / границы