Files
kompas3d-mcp/docs/superpowers/plans/2026-05-27-kompas-fdm-design-skill.md
mikhail df7bf92884 docs(skill): spec + план навыка kompas-fdm-design (проектирование под FDM)
Дизайн и план реализации нового навыка kompas-fdm-design — методика
проектирования деталей под FDM-печать (правила DFM + лёгкий гео-аудит),
отдельный от kompas-3d, без слайсера, экспорт через export_step.

Выверено консультациями pi (glm-5.1, kimi-k2.6) и 6 ревью (spec x3, план x3).
Сам навык (SKILL.md + references/) по плану — РЕАЛИЗАЦИЯ ПРЕДСТОИТ.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 22:18:27 +03:00

49 KiB
Raw Permalink Blame History

kompas-fdm-design Skill — Implementation Plan

For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (- [ ]) syntax for tracking. Also use superpowers:writing-skills when authoring/editing SKILL.md frontmatter & body.

Goal: Создать отдельный навык kompas-fdm-design — методику проектирования деталей под FDM-печать в КОМПАС-3D через MCP (правила DFM + лёгкая самопроверка геометрии), без слайсера, с числами, масштабируемыми по w/h/θ_max.

Architecture: Навык — набор Markdown-файлов в .claude/skills/kompas-fdm-design/: лёгкий SKILL.md (диспетчер) + references/fdm-rules.md (полный свод DFM) + references/geometry-audit.md (самопроверка + границы). Progressive disclosure. Полное финальное содержимое всех трёх файлов дано дословно в задачах ниже (по итогам 3 ревью плана: транскрипция из spec признана риском тихой потери контента — поэтому план self-contained, исполнитель пишет готовый текст, не «переносит» из spec).

Tech Stack: Markdown + YAML frontmatter. Кода/сборки/тестов .NET нет — навык не трогает MCP-сервер (src/). Проверка — структурная (Select-String -SimpleMatch) + по инвариантам. Опционально: live-обкатка через MCP (требует запущенного КОМПАС).

Source of truth (контекст, НЕ копировать вручную): spec docs/superpowers/specs/2026-05-27-kompas-fdm-design-skill-design.md (учтены 3 ревью). Прецеденты: .claude/skills/kompas-3d/SKILL.md, ~/.claude/skills/orcaslicer/ (SKILL.md + references/).

Критичные инварианты (проверяются в Task 4):

  1. θ_max — параметр (от вертикали; дефолт 45° PLA / 40° PETG-ABS; ≈arctan(w/2h)); нависания/teardrop/фаски/зенковки из него.
  2. Teardrop: вершина на r / sin θ_max над центром, угол 2·θ_max (при 45° → √2·r, 0.414r над верхом окружности).
  3. 90°-полка НЕ печатается (≠ «≤6 мм»); мост ≠ полка.
  4. Натяг = отрицательный зазор (вычесть из номинала); зазоры «на сторону», диаметральный = 2×.
  5. Допуск ±0.2 мм — точность изготовления, НЕ прибавлять к зазору посадки.
  6. Компенсация Ø вертикальных отверстий: +0.2 (<4), +0.20.3 (410), +0.10.2 (>10); к диаметру (радиус +X/2).
  7. Z-прочность по материалам (PLA 4055%, PETG 3550%, ABS 2035%); Z-сжатие можно, Z-растяжение/срез — нет.
  8. Бор инсёрта Ø_bore = OD_инсёрта (0…0.1) мм (≤ OD).
  9. Гео-аудит эвристический, НЕ доказывает печатнопригодность; путь нагрузки — из задачи, не из габарита.
  10. Экспорт — export_step; export_stl НЕ вводить.
  11. Имя продукта-слайсера (OrcaSlicer/Cura/PrusaSlicer/Bambu/…) не упоминается. Понятия «слайсинг/слайсер/g-code» допустимы для описания границ.

Task 1: Скелет навыка + SKILL.md

Files: Create .claude/skills/kompas-fdm-design/SKILL.md

  • Step 1: Создать каталог
New-Item -ItemType Directory -Force ".claude/skills/kompas-fdm-design/references" | Out-Null
  • Step 2: Записать SKILL.md дословно
---
name: kompas-fdm-design
description: >
  Методика проектирования деталей под FDM/FFF 3D-печать в КОМПАС-3D через MCP-сервер этого
  проекта: правила DFM (нависания и угол θ_max, толщины стенок n·w, отверстия и teardrop,
  посадки/зазоры, ориентация под прочность, elephant foot, бобышки/инсёрты/защёлки) ПЛЮС
  лёгкая самопроверка геометрии инструментами осмотра. Используй, когда задача — спроектировать
  или ДОВЕСТИ деталь, чтобы она хорошо ПЕЧАТАЛАСЬ на FDM. Триггеры: «сделай деталь
  печатнопригодной / под FDM», «спроектируй … под печать», «напечатается ли без поддержек?»,
  «подбери зазоры для печатной посадки», «как ориентировать деталь под печать», «почему деталь
  плохо печатается / где будут нависания», «доведи деталь под FDM». Строит через навык kompas-3d.
  НЕ для: механики построения через MCP (это kompas-3d); слайсинга/нарезки/g-code (вне границ);
  поиска по справке SDK (субагент kompas-sdk-research).
---

# kompas-fdm-design — проектирование деталей под FDM-печать

## Что это (и чем НЕ является)

Методический слой **поверх** навыка `kompas-3d`. Отвечает на вопрос **«как спроектировать, чтобы
напечаталось на FDM»**, а не «чем строить».

- **`kompas-3d`** = *чем и как строить* через MCP (эскиз→операция→осмотр→`validate_part`). Этот
  навык **опирается** на него для механики.
- Этот навык = *какие правила геометрии* соблюдать, чтобы FDM-печать удалась.
- **Слайсинг — вне границ.** Навык не нарезает и не оценивает g-code.

## Когда применять / когда НЕ применять

**Применять:** «сделай печатнопригодным / под FDM», «спроектируй … под печать», «напечатается без
поддержек?», «подбери зазоры печатной посадки», «как ориентировать под печать», «почему плохо
печатается», «доведи деталь под печать».

**НЕ применять:** чистая механика построения (→ `kompas-3d`); слайсинг/нарезка/g-code (вне границ);
поиск сигнатур/констант в справке SDK (→ субагент `kompas-sdk-research`).

## Калибровка (выполни первым шагом)

Все правила масштабируются от трёх параметров (часть значений — абсолютные эмпирические мм,
помечены «калибровать тестом»):

- **`w` = ширина линии ≈ диаметр сопла.** Дефолт: сопло 0.4 → `w ≈ 0.40.45 мм`. → стенки `n·w`.
- **`h` = высота слоя.** Дефолт `h ≈ 0.5·сопло` (0.2 мм); структурная печать 0.2–0.25.
- **`θ_max` = предельный угол самонесущей поверхности ОТ ВЕРТИКАЛИ.** `θ_max ≈ arctan(w/2h)`
  (≈45° при `w`=0.4, `h`=0.2). **Дефолт 45°** (PLA, хороший обдув); **40°** для PETG/ABS или
  толстого слоя (`h≥0.3` → ~34°). Нависания, teardrop, фаски, зенковки берут угол из `θ_max`.
- **Материал** (PLA / PETG / ABS) — модификатор зазоров/мостов/коробления/`θ_max`. См.
  `references/fdm-rules.md`.

Если сопло/слой/материал не заданы — прими дефолты (сопло 0.4, `h`=0.2, PLA) и скажи об этом.

## Два правила (соблюдай всегда)

**1. Ориентация печати — первое проектное решение.**
- **Спроси у пользователя** (если не задано): главное направление рабочей нагрузки и
  косметические/критичные грани. **Путь нагрузки из геометрии не выводится** — его задаёт задача.
- Реши постановку на стол (ось Z = рост слоёв). От неё зависит: где нависания; куда смотрят
  отверстия (вертикальные → компенсация Ø; горизонтальные → teardrop); путь нагрузки (**держи в
  XY**; Z-сжатие можно, Z-растяжение/срез — нет); плоскости сопряжения (на XY-гранях); «лесенка» на
  наклонных функциональных поверхностях; если поддержки неизбежны — чтобы опорные грани были
  некритичными/скрытыми.
- Зафиксируй ориентацию и проектируй под неё.

**2. Чек-лист печатнопригодности перед выдачей** (ниже). Сначала **`validate_part`** (деталь
*валидна*), затем **FDM-чек-лист** (деталь *печатнопригодна*) — разные проверки. **Гео-аудит
эвристический и не доказывает печатнопригодность** (не ловит путь нагрузки/анизотропию).

## Рабочий цикл

1. **Калибровка**: сопло→`w`; слой→`h``θ_max`; материал→поправки.
2. **Ориентация** (правило 1): опрос (нагрузка/косметика) → постановка, ось слоёв, сопряжения,
   «лесенка», поддержки.
3. **Правила эскиза/операции** (строй через `kompas-3d`): стенки `n·w`; нависания → скос под
   `θ_max`; горизонтальные отверстия → teardrop; вертикальные → компенсация Ø; фаска у основания;
   зазоры посадок (со знаком); заходные фаски; мин. элементы/текст; бобышки/инсёрты/защёлки.
   Числа — в `references/fdm-rules.md`.
4. **Гео-аудит** (`references/geometry-audit.md`) — инструментами осмотра.
5. **Предусловия экспорта**: единое тело/манифолд (`boolean_union` при необходимости) →
   `validate_part` чисто.
6. **Чек-лист** → экспорт **через `export_step`**.

## Чек-лист печатнопригодности

- [ ] Направление нагрузки и косметические грани **получены от пользователя**; ориентация
      зафиксирована; нагрузка в XY (или Z только на сжатие); сопряжения на XY-гранях.
- [ ] Стенки кратны `w` (≥2·w; несущие ≥3·w = N периметров); нет «не кратных `w`» (кроме
      функциональных).
- [ ] Нет 90°-полок; нависания ≤`θ_max` или заменены скосами; мосты в пределах пролёта по короткой
      стороне; внутренним поддержкам — доступ.
- [ ] Горизонтальные отверстия — teardrop/D (геометрия из `θ_max`); вертикальные — компенсация Ø;
      глухие — дно ≥2–3 мм.
- [ ] Фаска у основания (elephant foot); внутренние углы ≥R0.5; опорная площадка есть.
- [ ] Посадки по таблице со **знаком** (натяг — вычесть); допуск ±0.2 **НЕ** прибавлен к зазору;
      заходные фаски на сопряжениях.
- [ ] Мин. элементы/текст ≥ порогов; аспект тонких выступов ≤4–5×.
- [ ] Бобышки/инсёрты (бор ≤ OD, ставить с Z-грани)/резьба/защёлки (изгиб в XY) по правилам.
- [ ] Полости — дренаж/вент; критичные поверхности не под «лесенкой»/поддержкой.
- [ ] Предусловия экспорта: единое тело/манифолд; `validate_part` чисто.

## Гео-аудит (кратко)

Лёгкая самопроверка построенной модели **существующими** инструментами осмотра MCP:
`describe_model` / `list_faces` / `describe_face` (нависания по нормалям нижних граней; цилиндры с
горизонтальной осью → нужен teardrop), `get_bounding_box` (как ось слоёв соотносится с габаритом),
`measure` (номиналы/зазоры), `list_bodies` + `validate_part` (единое тело). **Границы и методика —
`references/geometry-audit.md`.** Аудит эвристический; истинная мин. толщина стенки и полный детект
криволинейных нависаний не решаются — это **не приговор и не доказательство печатнопригодности**.

## Связанное

- Полный численный свод DFM: [`references/fdm-rules.md`](references/fdm-rules.md).
- Рецепты самопроверки и границы: [`references/geometry-audit.md`](references/geometry-audit.md).
- Механика построения через MCP: навык **`kompas-3d`**.
- Поиск по справке SDK: субагент **`kompas-sdk-research`**.
- Дизайн навыка: `docs/superpowers/specs/2026-05-27-kompas-fdm-design-skill-design.md`.
  • Step 3: Проверить структуру, имя, ссылки, объём
$skill = ".claude/skills/kompas-fdm-design/SKILL.md"
Test-Path $skill
(Select-String -SimpleMatch -Path $skill -Pattern "name: kompas-fdm-design").Count        # 1
(Select-String -SimpleMatch -Path $skill -Pattern "## Два правила").Count                  # 1
(Select-String -SimpleMatch -Path $skill -Pattern "## Чек-лист печатнопригодности").Count  # 1
(Select-String -SimpleMatch -Path $skill -Pattern "references/fdm-rules.md").Count         # >=1
(Select-String -SimpleMatch -Path $skill -Pattern "references/geometry-audit.md").Count    # >=1
(Get-Content $skill | Measure-Object -Line).Lines                                          # <= ~200 (диспетчер лёгкий)

Expected: True; счётчики 1,1,1,≥1,≥1; строк ≤ ~200.

  • Step 4: Commit
git add .claude/skills/kompas-fdm-design/SKILL.md
git commit -m "feat(skill): kompas-fdm-design — диспетчер SKILL.md (правила DFM + гео-аудит)"

Task 2: references/fdm-rules.md (полный свод DFM)

Files: Create .claude/skills/kompas-fdm-design/references/fdm-rules.md

  • Step 1: Записать файл дословно
# Свод правил DFM для FDM-печати

> Выверено 3 ревью (pi/glm-5.1, pi/kimi-k2.6, Codex). Числа для `w≈0.40.45`, `h≈0.2` (сопло 0.4).
> **Зазоры — на сторону (радиальные)**; диаметральный = 2×. **Угол нависания — от вертикали**
> (вертикаль=0°, горизонталь=90°); самонесущие — ≤ `θ_max`. Параметры `w`/`h`/`θ_max` — см.
> SKILL.md → «Калибровка». Ссылки «§N» ниже — на разделы этого файла.

## 1. Стенки и оболочки
- Толщина стенки = **`n · w`**. Мин. конструктивная — **2·w (~0.8 мм)**; несущая — **≥3·w**.
- **Маппинг стенка→периметры:** нужно `N` периметров ⇒ стенка **`N·w`** (при `w`=0.45: 3 → 1.35,
  4 → 1.8, 5 → 2.25 мм).
- **Не задавай толщину стенки, не кратную `w`** (напр. 0.6 при `w`=0.45): слайсер оставит зазор
  или переэкструдирует. Прыгай на следующий кратный.
- **Caveat:** `n·w` — для конструктивных стенок; внешняя функциональная величина (флексура,
  тепловой барьер, посадочный размер) важнее кратности.
- Одиночная стенка `1·w` — только декоративная. Узкий сквозной прорез — **≥2·w (~0.8 мм)**.

## 2. Нависания, полки, мосты (разделять!)
- **Самонесущие — поверхности ≤ `θ_max` от вертикали.** 45–60° (при дефолте) — печатается с
  падением качества; **> `θ_max` существенно — поддержки** → избегать редизайном.
- **90°-полка (консоль, опора с одной стороны) НЕ печатается ни на какой длине** (миф «≤6 мм»
  неверен — провисает с первого слоя). Любую горизонтальную полку: **скос под `θ_max`**, либо
  **превратить в мост** (две опоры), либо поддержка.
- **Мост (bridge) — пролёт между двумя опорами на одной высоте.** При достаточном обдуве, `h≈0.2`,
  консервативно (для ненастроенного слайсера): **PLA ~1525 мм, PETG ~1015 мм, ABS ~1218 мм**.
  Длинные прямоугольные проёмы **ориентировать так, чтобы мост шёл по короткой стороне**; концы —
  на сплошных опорах.
- Нижнюю функциональную поверхность моста — припуск **0.20.3 мм** на провис. *Граница:* величину
  провиса из CAD не предсказать (обдув/скорость — настройки печати).
- **Внутренние/потолочные нависания хуже наружных** — потолок пазов аркой/шевроном, не плоским
  пролётом > 2 мм.
- **Доступ к поддержкам:** окно во внутренней полости **≥810 мм**.

## 3. Отверстия
- **Вертикальные (ось ∥ Z)** печатаются уже номинала → **увеличить диаметр модели** (радиус на
  половину): **+0.2 мм (Ø<4)**, **+0.20.3 мм (Ø 410)**, **+0.10.2 мм (Ø>10)**; калибровать,
  критичные — рассверливать.
- **Горизонтальные (ось в XY)** → **teardrop** или **D-отверстие** (плоский верх). Мин. Ø **2 мм**.
  Круглая часть тоже печатается уже → **+0.10.2 мм** к её Ø.
- **Геометрия teardrop:** боковины касательны окружности под углом `θ_max` к вертикали (с двух
  сторон), сходятся в вершине на вертикальной оси. Высота вершины над центром = **`r / sin θ_max`**;
  включённый угол при вершине = **`2·θ_max`**. При `θ_max`=45° → `r/sin45° = √2·r ≈ 1.414·r` над
  центром (= **`0.414·r` над верхом окружности**), угол 90°. Низ — оставшаяся дуга окружности.
- **Глухое отверстие:** дно = внутренний мост → **толщина дна ≥2–3 мм** или купольное/
  вентилируемое. Сквозные предпочтительнее.
- **Отступ от края** — через остаточную перемычку: стенка между отверстием и краем **≥2–3·w**
  (лёгкая нагрузка) / больше под крепёж.

## 4. Посадки и зазоры (печатная деталь ↔ печатная деталь)
Зазор **на сторону** (радиальный); диаметральный = 2× значения:

| Посадка | Зазор/сторону | Примечание |
|---|---|---|
| **Натяг (press)** | **−0.05…0 мм** (вычесть из номинала!) | короткий, PLA; иначе snap-fit (§14) |
| Переходная/плотная | 0.05–0.15 мм | |
| Скользящая | 0.150.20 мм | PLA↔PLA; контакт ≥20 мм → 0.20; PETG +0.05 |
| Свободная | 0.250.35 мм | >0.35/сторону — уже очень слабо |

- **Знак:** «натяг» = **отрицательный** зазор → вычесть из номинала (вал +/отверстие −).
  Положительное число в строке press — ошибка прочтения.
- **ABS↔ABS:** +0.05/сторону. **PETG:** прессовые со временем «расслабляются».
- **Допуск точности (НЕ прибавлять к посадкам):** общий разброс FDM — **XY ±0.2 мм** (±0.1
  калибровано), **Z хуже**. Это точность изготовления, не добавка к зазору.

## 5. Первый слой / стол
- **Elephant foot** — от притирки первого слоя (низкий Z-offset/переэкструзия; НЕ от высоты слоя).
  Фаска по нижним рёбрам: **0.3 × 45° (калибровано)** / **0.51.0 × 45° (слабая калибровка)**.
- Внутренние углы у основания — **скругление ≥R0.5**.
- **Опорная площадка:** без «лезвийных» оснований; контакт хотя бы ~3 периметра. Высокие тонкие
  детали — **интегральный фланец 1–2 мм** (предпочтительнее brim).

## 6. Ориентация и прочность
- **Z (межслойная) прочность от XY:** PLA ~4055%, PETG ~3550%, **ABS ~2035% (выброс)**. Несущую
  нагрузку — в **XY (вдоль слоёв)**.
- **Z-сжатие допустимо** (слои в сжатии не расслаиваются); избегать **Z-растяжения и Z-среза**.
- Изгиб: слои в растяжении/сжатии, не на срез по линии слоя.
- Z-нагрузка неизбежна → **увеличить несущее сечение** ~×2 относительно XY-расчёта.
- Плоскости сопряжения — на **XY-гранях**, не на Z-боковинах.

## 7. Минимальные элементы и текст
- Выступ/штифт/ребро — **≥1·w (≥0.5 мм)**; паз/щель — **≥2·w (~0.8 мм)**.
- **Аспект тонких выступов:** высота ≤ ~4–5× базовой ширины; выше — конусность/раскос/редизайн.
- **Выпуклый** текст: штрих **≥0.5 мм**, высота **≥2·h (~0.4 мм)**, sans-serif bold.
- **Гравированный** текст: штрих **≥2·w (~0.80.9 мм)** (нужно ≥2 периметра; 0.6 мм не влезает),
  глубина **≥2·h (~0.4 мм)**. (pt не используем — геометрия в мм.)

## 8. «Лесенка» (staircase) — критерий ориентации
- Наклонные/криволинейные поверхности дают ступени: глубина ≈ **`h / tan(α)`** (α — угол от
  горизонтали). Пример: α=30°, `h`=0.2 → ~0.35 мм.
- Критичные (скользящие/уплотняющие/оптические) поверхности **ориентировать вертикально или
  горизонтально**. Это вход в правило ориентации (SKILL.md, правило 1).
- Большой плоский **верх** без опоры коробит («подушка») — внутренние рёбра каждые ~15–20 мм или
  достаточная толщина верха.

## 9. Бобышки, инсёрты, резьба
- **Саморез/винтонарезной** пилот (M3): ~Ø2.5 PLA / Ø2.6 PETG / Ø2.7 ABS; заход ≥3 мм.
- **Термоинсёрт латунный** (M3): бор **по даташиту** (типично ~Ø4.0, ±0.05); **`Ø_bore = OD_инсёрта
   (0…0.1) мм`** (≤ OD, лёгкий натяг под расплав — НЕ больше OD); стенка бобышки **≥2 мм**; глубина
  = длина инсёрта + 0.5 мм; **ставить с верхней (Z) грани** (не в боковину).
- **Бобышка под винт:** OD ≥ 2–3× Ø винта; не делать массивный сплошной объём (карман/оболочка).
- **Сквозное под металлический болт:** радиальный зазор 0.2–0.3 → **+0.4–0.6 мм к номиналу** болта.
- **Резьба:** не моделировать <M6 → инсёрты/саморезы. Если моделировать: **≥M6, ось вертикальная**,
  зазор +0.1–0.2 мм, профиль крупный/трапецеидальный (не мелкий ISO — вершины-нависания).

## 10. Фаски vs скругления
- **Нижние (у стола) рёбра — фаска** (скругление = нулевой контакт + EF).
- **Верхние рёбра — скругление** (R0.5–2.0); **но** радиус **> ~½ толщины стенки** сам даёт
  нависание > `θ_max` → тогда фаска/ступень.
- **Внутренние углы — всегда скругление ≥R0.5**.

## 11. Зенковки / цековки
- **Цековка (counterbore)** — большим Ø/полостью **вверх** (дно по телу, не мостом); глубина +0.3 мм.
- **Зенковка (countersink):** конус **вверх**; включённый угол **≤90°** → стенки ≤45° от вертикали
  печатается; **>90°** → стенки-нависание → поддержка или замена цилиндрической цековкой.

## 12. Заходные фаски (assembly relief)
- На штифтах, отверстиях, инсёртах, защёлках, «ласточкиных хвостах» — **заходная фаска** (≈0.5–1 мм
  × 45° или ≈ половина зазора) против задиров при сборке.

## 13. Разбиение детали и сборка из печатных частей
- Конфликт «прочная ориентация vs бесподдержечность», или крупная/коробящаяся деталь → **разбить**
  на части с самоустанавливающимися стыками (печатные штифты/шпонки/замки), склейка; стыки на
  XY-гранях. Зазор стыка — по §4.

## 14. Защёлки (snap-fit) / живой шарнир
- Консольная защёлка: толщина балки **≥23·w (≈1.02.0 мм)**, зацеп/возврат **0.30.8 мм**,
  длина/толщина **≥5:1** (до 10:1), **скругление в основании ≥R0.5**.
- **Направление слоёв:** балка гнётся **в плоскости XY** (слои перпендикулярны изгибу), **не
  поперёк Z** (расслоится с первого нажатия).
- **Живой шарнир** — только PLA/PP-подобные, перемычка **0.30.5 мм**; PETG/ABS не годятся.

## 15. Коробление (геометрия)
- Большие плоскости (>80×80, особенно ABS): скругления углов R3–5 + рёбра/решётка снизу.
- Радиус внешних углов: R2 (ABS) / R1 (PLA/PETG).
- Длинные тонкие пролёты (>60 мм, <2 мм) — рёбра/косынки каждые 30–40 мм; высота ребра ≤5× базы.
- Избегать сплошных кубов/плит → карман/оболочка + рёбра. Усадка: PLA ~0.3%, PETG ~0.5%, ABS ~0.8%.
- Симметрия геометрии уравновешивает усадку.
- *«Мышиные уши» (Ø8–10 мм по углам)* — **крайняя мера адгезии** (по сути brim-геометрия);
  предпочтительно интегральный фланец/скругления углов.
- *Граница:* стол/корпус/обдув для ABS — настройки печати, вне навыка; здесь только геометрия.

## 16. Полые детали и гигиена модели
- **Полости:** дренаж Ø3–5 мм у **низшей** точки + вент у **высшей**.
- Допуски/зазоры — **в геометрию** (слайсер читает модель буквально).
- Раздельные тела — зазор ≥0.2 мм (общая CAD-гигиена; перед выдачей объединять — рабочий цикл,
  шаг 5 в SKILL.md).
  • Step 2: Структурная проверка (16 разделов + 4 строки таблицы посадок)
$rules = ".claude/skills/kompas-fdm-design/references/fdm-rules.md"
(Select-String -Path $rules -Pattern "^## \d+\.").Count                     # 16 (разделы)
(Select-String -SimpleMatch -Path $rules -Pattern "| Натяг (press)").Count  # 1 (строка таблицы)
(Select-String -SimpleMatch -Path $rules -Pattern "| Свободная").Count      # 1

Expected: 16, 1, 1. Если разделов ≠16 — потерян/задвоен раздел.

  • Step 3: Проверка инвариантов содержимого (по литералам)
$rules = ".claude/skills/kompas-fdm-design/references/fdm-rules.md"
foreach ($p in @(
  "r / sin θ_max", "2·θ_max", "0.414·r над верхом",          # inv2 teardrop
  "90°-полка", "НЕ печатается ни на какой длине",             # inv3 полка
  "вычесть из номинала", "0.05…0 мм",                        # inv4 натяг
  "НЕ прибавлять к посадкам",                                 # inv5 допуск
  "+0.2 мм (Ø<4)", "+0.20.3 мм (Ø 410)",                    # inv6 компенсация
  "PLA ~4055%", "ABS ~2035%",                               # inv7 Z-прочность
  "Ø_bore = OD_инсёрта  (0…0.1) мм"                          # inv8 инсёрт
)) { "{0,-40} {1}" -f $p, ((Select-String -SimpleMatch -Path $rules -Pattern $p).Count) }

Expected: каждая строка оканчивается 1 (или больше). Любой 0 = потерянный инвариант, исправить.

  • Step 4: Commit
git add .claude/skills/kompas-fdm-design/references/fdm-rules.md
git commit -m "feat(skill): kompas-fdm-design — references/fdm-rules.md (полный свод DFM)"

Task 3: references/geometry-audit.md (самопроверка + границы)

Files: Create .claude/skills/kompas-fdm-design/references/geometry-audit.md Source: spec §9 (таблица + границы). «Как применять в цикле» — авторский раздел (привязка к рабочему циклу), содержимое дано ниже дословно (НЕ плейсхолдер).

  • Step 1: Записать файл дословно
# Гео-аудит модели под FDM — что проверяемо инструментами осмотра

Лёгкая самопроверка построенной модели **существующими** инструментами осмотра MCP. Запускать на
шаге 4 рабочего цикла (см. SKILL.md), перед чек-листом и экспортом.

## Что проверяемо

| Проверка | Как | Статус |
|---|---|---|
| Нависания (приближённо) | `list_faces`/`describe_face`: для **нижних** граней угол поверхности от вертикали; > `θ_max` → флаг | ✅ плоские; ⚠️ криволинейные грубо |
| Ориентация (геом. прокси) | `get_bounding_box`: как ось слоёв соотносится с габаритом | ⚠️ длинная ось ≠ путь нагрузки |
| Горизонтальные круглые отверстия | `describe_face`: цилиндр с горизонтальной осью → «нужен teardrop» | ✅ |
| Номиналы / зазоры / габариты | `measure` между гранями; `get_bounding_box` | ✅ |
| Тело / манифолд перед выдачей | `list_bodies` (одно тело?), `validate_part` | ✅ |

## Граница честности

- **Угол нависания** мерить в **той же конвенции, что fdm-rules.md** (от вертикали; нижняя грань с
  поверхностью > `θ_max` от вертикали = нависание) — не путать с углом нормали от горизонтали.
- **Путь нагрузки агент НЕ выводит из габарита** — берёт из задачи/опроса (правило 1). Длинная ось
  ≠ несущая.
- **Истинная мин. толщина стенки и полный детект криволинейных нависаний — не решаются** (нет
  thickness/overhang-солвера).
- **Аудит эвристический и НЕ доказывает печатнопригодность** (не ловит анизотропию/путь нагрузки).
  Вывод — список флагов для решения, не «приговор». Слайсер навык не зовёт намеренно.

## Как применять в цикле

1. После построения и `validate_part` — пройти таблицу выше сверху вниз.
2. Каждый флаг — сверить с соответствующим правилом `fdm-rules.md` и решить: исправить геометрию
   или принять осознанно.
3. Путь нагрузки и косметические грани взять из ответа пользователя (правило 1), не из габарита.
4. Затем — чек-лист печатнопригодности (SKILL.md) → экспорт через `export_step`.
  • Step 2: Проверка (5 строк таблицы + границы)
$audit = ".claude/skills/kompas-fdm-design/references/geometry-audit.md"
(Select-String -SimpleMatch -Path $audit -Pattern "| Нависания (приближённо)").Count        # 1
(Select-String -SimpleMatch -Path $audit -Pattern "| Ориентация (геом. прокси)").Count       # 1
(Select-String -SimpleMatch -Path $audit -Pattern "| Тело / манифолд перед выдачей").Count    # 1
(Select-String -SimpleMatch -Path $audit -Pattern "НЕ доказывает печатнопригодность").Count   # 1 (inv9)
(Select-String -SimpleMatch -Path $audit -Pattern "берёт из задачи/опроса").Count             # 1 (inv9)

Expected: все 1.

  • Step 3: Commit
git add .claude/skills/kompas-fdm-design/references/geometry-audit.md
git commit -m "feat(skill): kompas-fdm-design — references/geometry-audit.md (самопроверка + границы)"

Task 4: Верификация навыка (инварианты + триггеры + границы scope)

Files: Read .claude/skills/kompas-fdm-design/**.

  • Step 1: Прогон по инвариантам 1–11 (одна команда, таблица результатов)
$skill = ".claude/skills/kompas-fdm-design/SKILL.md"
$rules = ".claude/skills/kompas-fdm-design/references/fdm-rules.md"
$audit = ".claude/skills/kompas-fdm-design/references/geometry-audit.md"
$all   = @($skill,$rules,$audit)

# Должны ПРИСУТСТВОВАТЬ (count >=1):
$present = @(
  @{n="1 θ_max param";   f=$skill; p="θ_max ≈ arctan(w/2h)"},
  @{n="2 teardrop";      f=$rules; p="r / sin θ_max"},
  @{n="3 полка";         f=$rules; p="НЕ печатается ни на какой длине"},
  @{n="4 натяг знак";    f=$rules; p="вычесть из номинала"},
  @{n="5 допуск";        f=$rules; p="НЕ прибавлять к посадкам"},
  @{n="6 комп. Ø";       f=$rules; p="+0.2 мм (Ø<4)"},
  @{n="7 Z PLA";         f=$rules; p="PLA ~4055%"},
  @{n="8 инсёрт бор";    f=$rules; p="Ø_bore = OD_инсёрта  (0…0.1) мм"},
  @{n="9 аудит≠доказ";   f=$audit; p="НЕ доказывает печатнопригодность"},
  @{n="10 export_step";  f=$skill; p="export_step"}
)
foreach ($c in $present) { "{0,-16} {1}" -f $c.n, ((Select-String -SimpleMatch -Path $c.f -Pattern $c.p).Count) }

# Должны ОТСУТСТВОВАТЬ (count = 0):
"10 export_stl  {0}" -f ((Select-String -SimpleMatch -Path $all -Pattern "export_stl").Count)
"11 slicer-name {0}" -f ((Select-String -Path $all -Pattern "OrcaSlicer|PrusaSlicer|Cura|Bambu|SuperSlicer|Simplify3D|Slic3r|KISSlicer|ideaMaker").Count)

Expected: блок «present» — все ≥1; export_stl = 0; slicer-name = 0. Любое нарушение — вернуться в Task 1/2/3, исправить файл, переидти Step.

  • Step 2: Тест триггеров description (пары + критерий)

Критерий: для каждого промпта оценить, перекрывает ли его текст description (по ключевым словам/ смыслу). = должен сработать kompas-fdm-design; = должен уйти другому навыку/субагенту.

Промпт Ожидание
«сделай эту деталь печатнопригодной» kompas-fdm-design
«как ориентировать кронштейн под FDM» kompas-fdm-design
«подбери зазор посадки для печати» kompas-fdm-design
«подбери отверстие под термоинсёрт M3» kompas-fdm-design
«напечатается ли без поддержек?» kompas-fdm-design
«построй коробку выдавливанием 20×20×10» → kompas-3d
«нарежь модель / сколько будет печататься» → вне границ (слайсинг)
«какая сигнатура у IHole3D» → kompas-sdk-research

Pass-критерий: все 5 покрываются триггерами description; все 3 покрываются блоком «НЕ для». Если граница размыта (ложное /) — уточнить формулировки триггеров/«НЕ для» в SKILL.md и переидти Step 1+2.

  • Step 3: Граница scope — не тронут src/ (инвариант §2 spec: без новых MCP-инструментов)
git diff --name-only main...HEAD | Where-Object { $_ -like "src/*" }

Expected: пусто (навык не меняет MCP-сервер). Если есть src/* — ошибка scope.

  • Step 4: Commit правок (если были)
git add .claude/skills/kompas-fdm-design
git commit -m "fix(skill): kompas-fdm-design — уточнения по верификации"

(Если правок не было — шаг пропустить, пустой коммит не делать.)


Task 5: Синхронизация документации проекта

Files (правит субагент docs-maintainer): README.md, CLAUDE.md; при необходимости docs/ARCHITECTURE.md.

  • Step 1: Делегировать docs-maintainer

Через Agent (subagent_type docs-maintainer) передать сводку: «Добавлен навык .claude/skills/kompas-fdm-design/ — методика проектирования под FDM (правила DFM + лёгкий гео-аудит), отдельный от kompas-3d, без слайсера, экспорт через export_step. Упомянуть рядом с описанием навыка kompas-3d в CLAUDE.md (раздел Principle/skills) и в README.md (где перечислены навыки). Счётчики инструментов/тестов НЕ меняются. presentation.html не трогать.»

  • Step 2: Фолбэк, если субагент недоступен (ручная правка)

Если docs-maintainer недоступен — в CLAUDE.md найти строку-якорь: On top of MCP — skill **.claude/skills/kompas-3d/** with a methodology и добавить сразу после предложения:

Additionally, the .claude/skills/kompas-fdm-design/ skill layers FDM design-for-printing methodology (DFM rules + light geometry audit) on top of kompas-3d; standalone, no slicer, exports via export_step.

В README.md — в разделе про навыки/skills добавить аналогичную строку про kompas-fdm-design (если такого раздела нет — пропустить README).

  • Step 3: Проверить и закоммитить
(Select-String -SimpleMatch -Path "CLAUDE.md","README.md" -Pattern "kompas-fdm-design").Count  # >=1
git add CLAUDE.md README.md docs/ARCHITECTURE.md
git commit -m "docs: упомянуть навык kompas-fdm-design (проектирование под FDM)"

Expected: счётчик ≥1.


Task 6 (опционально, рекомендуемый follow-up): live-обкатка в usecases/

Рационал: навык — дистилляция знаний, уже выверенная экспертными консультациями + 6 ревью (spec×3, план×3). Поэтому live-UC — рекомендуемая валидация на живой модели, а не гейт существования навыка (в отличие от новых MCP-механик, которые проект требует доказывать в usecases/). Требует запущенного КОМПАС. usecases/ в .gitignore — коммит не нужен.

Files: Create usecases/0003-fdm-bracket-no-supports/case.md (из usecases/_TEMPLATE/).

  • Step 1: Завести кейс
Copy-Item -Recurse "usecases/_TEMPLATE" "usecases/0003-fdm-bracket-no-supports"
  • Step 2: Заполнить case.md — Цель: спроектировать простой кронштейн под FDM без поддержек, применяя навык. Проверить на живой модели: ориентацию (правило 1), нависания (скос под θ_max), горизонтальное отверстие (teardrop по r/sin θ_max), фаску у основания, гео-аудит, чек-лист, экспорт export_step. Заполнить разделы Цель / Промт / Статус (см. соседние кейсы usecases/0001, usecases/0002 как образец оформления).

  • Step 3: Прогнать сценарий через MCP (если КОМПАС запущен): построить деталь правилами навыка через kompas-3d, прогнать гео-аудит и чек-лист, сохранить артефакты в artifacts/, экспортировать export_step. Зафиксировать находки в «Выводы». Подтверждённые числовые уточнения — поднять в references/fdm-rules.md (и переидти Task 4 Step 1).


Task 7: Финальное ревью навыка и завершение ветки

  • Step 1: superpowers:requesting-code-review по диффу ветки (навык + доки) — ясность формулировок, отсутствие плейсхолдеров, корректность кросс-ссылок.

  • Step 2: superpowers:writing-skills-верификация: frontmatter валиден; description срабатывает на целевых триггерах и не перехватывает чужие (Task 4 Step 2); progressive disclosure соблюдён (SKILL.md лёгкий ≤~200 строк, числа в references).

  • Step 3: Финальный коммит (условно)

if ((git status --porcelain).Length -gt 0) {
  git add -A; git commit -m "chore(skill): kompas-fdm-design — финал ревью"
} else { "Нет изменений — коммит не нужен" }
  • Step 4: superpowers:finishing-a-development-branch — merge/PR по выбору пользователя.

Self-Review (выполнено автором плана)

1. Покрытие spec: §1–§3 (цель/locked/параметры) → Task 1 (SKILL.md «Калибровка», описание). §4 (структура файлов) → Tasks 1–3. §5 (два правила) + §6 (цикл) + §10 (чек-лист) → Task 1 (в SKILL.md дословно). §7 (триггеры) → Task 1 frontmatter + Task 4 Step 2. §8.1–§8.16 → Task 2 (полный текст). §9 → Task 3 (полный текст). §11 (обкатка) → Task 6 (с рационалом про опциональность). §12 (non-goals: без слайсера/без MCP-инструментов/без export_stl) → Task 4 Step 1 (export_stl=0, slicer-name=0) + Step 3 (нет src/*). §13 OQ-1/OQ-2 → Task 2 Step 3 (литералы компенсации/EF в fdm-rules.md); OQ-3 → инв.10 (export_step есть, export_stl нет). Пробелов нет.

2. Плейсхолдеры: все три файла даны дословно (включая «Как применять в цикле» в Task 3 — авторский, с готовым текстом). Делегирование docs-maintainer снабжено ручным фолбэком (Task 5 Step 2) с точным якорем и текстом. Task 4 Step 2 имеет явный pass-критерий. «TODO/TBD» нет.

3. Согласованность имён/формул: имя kompas-fdm-design, пути файлов, параметры w/h/θ_max, формула teardrop r / sin θ_max и угол 2·θ_max, строка инсёрта Ø_bore = OD_инсёрта (0…0.1) мм, знак натяга 0.05…0 — записаны единообразно в содержимом файлов (Tasks 1–3) и в литералах проверок (Tasks 2–4). Проверочные Select-String -SimpleMatch используют те же литералы, что записаны в файлы (нет regex-эскейпинга/кодпоинт-хрупкости). Заголовок плана: инварианты проверяются в Task 4 (исправлено).