# Исполнения: одна модель — несколько геометрий

Дополнение к SKILL.md. Типоразмеры (профиль на 100, 200, 500 мм), правое и левое зеркало, версии с
отверстием и без часто живут **в одном файле** исполнениями. Тогда всё, что ты меришь и
экспортируешь, относится к **текущему** исполнению — не к «детали вообще».

- **Признак замечаешь не ты, а ответ.** У модели с несколькими исполнениями `describe_model` сам
  пишет, сколько их и какое сейчас текущее. Увидел эту строку — прежде чем считать массу или резать
  чертёж, посмотри `describe_model(sections=embodiments)`: там габарит и масса **каждого**, и это
  чтение ничего не переключает.
- **Переключение равно смене документа.** `embodiment(action="set", target="L200")` обнуляет
  сессию построения: хендлы `sk_…`/`op_…` после него мертвы. Сохраняй документ до переключения.
- **Индекс живёт до первой правки дерева**: после `delete` индексы смещаются. Адресуй обозначением
  («L500»), а индексом — только сразу после того, как увидел список. У **варианта** обозначение
  родительское, и адресовать его номером нельзя вовсе — под «-01» подходят двое; зови его по имени
  («M5-01») или индексом.
- **Исполнения делай ПОСЛЕДНИМ шагом.** Переключение убивает хендлы, и дальнейшая правка дерева
  идёт уже через `feature_delete(featureIndex=…)` по `describe_model(sections=tree)` — путь рабочий,
  но менее удобный. Сначала доведи базовую геометрию и параметризацию, потом размножай.
- **Строишь новое исполнение** — `embodiment(action="add", number="02")`; оно сразу становится
  текущим, строй в нём немедленно. `depended=false` нужен, когда правки НЕ должны наследоваться от
  родителя, — иначе изменение уедет и в него.
- **В сборку исполнение выбирается явно**: `assembly_add_component(embodiment="L500")`. Без
  параметра встанет **базовое** исполнение, а не то, что сохранено в файле текущим. Обозначение
  нужно ПОЛНОЕ («ПРОБА.001-01», а не «-01»); сервер откажет, если КОМПАС подсунет базовое.
- **«Удлинить эти профили с 500 до 600» — это смена исполнения экземпляра, а не новая вставка**:
  `embodiment(action="set", target="L600", component=N)` и затем `rebuild`. Сопряжения при этом
  **сохраняются** — пересоздание вставки, наоборот, порвало бы их все. Какие исполнения есть у
  конкретного экземпляра, показывает `describe_model(sections="embodiments", component=N)`.
- **Выгнать всю линейку на печать** — `export_model(embodiment="all")`: каждое исполнение в свой
  файл с суффиксом обозначения.
- **После смены исполнения в собранном узле проверь сопряжения** (`sections="mates"`): если у нового
  исполнения нет объекта, на который опиралась связь, она рвётся — «ССЫЛКА ПОТЕРЯНА», `valid: false`,
  компонент недоопределён. Что было потеряно, хранит имя сопряжения; `assembly_delete` сотрёт и его.

Подробности и границы — `help(topic="embodiments")`.
