Files
kompas3d-mcp/docs/superpowers/NEXT-SESSION.md
T

6.1 KiB

Промт для следующей сессии

Скопируй блок ниже как стартовое сообщение новой сессии Claude Code.


Продолжаем разработку MCP-сервера КОМПАС-3D (kompas3d-mcp). Работай автономно, с коммитами и пушами в main; используй Codex для ревью каждой реализованной фичи. КОМПАС-3D должен быть запущен (нужен для интеграционных тестов).

Текущее состояние (main, синхронизирован с origin)

  • 58 MCP-инструментов, 89 тестов зелёных (53 unit + 36 integration).
  • Пакет A «богаче эскизы» — готов (дуга×2, эллипс, ломаная, многоугольник, сплайн, точка).
  • Пакет B «формообразующие» — основная часть готова: shell, rib, sweep, loft.
  • Пакет E начат: смещённая плоскость (sketch_create_on_offset_plane).
  • PartModeler разбит на partial: PartModeler.cs (ядро + helpers SelectFaceByIndex/ SelectEdgeByIndex + NewParam<T>), .Sketch.cs (эскизы/примитивы), .Features.cs (операции).
  • Чистые маппинги/валидация — в SketchGeometry (Core/Modeling); тип точки — SketchPoint (Host).
  • Прочитай память: kompas-formative-features-api5 (что есть/нет definition в API5).

Задача этой сессии (по приоритету)

  1. Пакет C «массивы и зеркало»: линейный массив, круговой массив, зеркальное отражение операции/тела. Самый ценный недостающий класс.
  2. hole — отверстие (исследовать ksHoleDefinition / o3d_*hole*).
  3. draft (уклон) — ТОЛЬКО если найдёшь способ через API7 (в API5 ksDraftDefinition НЕТ, только o3d_DraftFromEdges=644 без интерфейса — см. память).

Бери по одной операции за инкремент, доводи до зелёного и merge+push, потом следующую. Не пытайся сделать весь пакет одним заходом — инкремент надёжнее.

Процесс на каждую операцию (отлажен в прошлых сессиях)

  1. Рефлексия interop — найди definition и Obj3dType. Пример команды (PowerShell):
    $a5=[Reflection.Assembly]::LoadFrom((Resolve-Path 'libs/kompas-interop/Kompas6API5.dll'))
    $c3=[Reflection.Assembly]::LoadFrom((Resolve-Path 'libs/kompas-interop/Kompas6Constants3D.dll'))
    # перечисли Obj3dType со словом array/pattern/mirror; покажи свойства/методы ksXxxDefinition
    
    Если definition в API5 нет — проверь API7 или отметь блокером (как draft).
  2. Семантику параметров уточняй через навык kompas-sdk-research (субагент Sonnet), не рой справку сам.
  3. Краткий спек в docs/superpowers/specs/ → коммит → ОТДАЙ НА РЕВЬЮ Codex (codex:rescue, --fresh для новой темы) → внеси обоснованные правки (оценивай технически, не слепо).
  4. Реализация TDD: метод в PartModeler.Features.cs (паттерн NewEntity(o3d_*)GetDefinition → настройка → Create → регистрация в _features, возврат id), инструмент в FeatureTools.cs, интеграционный тест в FeatureOpsTests.cs.
  5. Codex-ревью реализации (--resume того же треда) → правки.
  6. Документация через навык docs-delegate (Sonnet обновит README/CLAUDE/ARCHITECTURE/ presentation.html, сверит счётчики по факту).
  7. merge --no-ff в main, удали ветку, push origin main.

Паттерн интеграционного теста

CreateAsync(Part) → построить геометрию → операция → RebuildAsync → проверить объём (GetPartInfoAsync) и/или габарит (GetBoundingBoxAsync); finally CloseAsync. Считай ожидаемый объём аналитически и сверяй InRange ±5%; для нестрогих форм — ±10% или проверка габарита / «after vs before».

Ключевые ловушки (проверено)

  • Выбор грани/ребра — по стабильному индексу из list_faces/list_edges (helper'ы SelectFaceByIndex/SelectEdgeByIndex в ядре); индекс валиден, пока геометрия не менялась.
  • Углы у эскизных/формообразующих — в градусах.
  • param-структуры (эллипс/полигон/nurbs) — через NewParam<T>(StructType2DEnum), освобождать.
  • Валидацию выноси в SketchGeometry как чистые static (unit-тестируемо); проверяй double.IsFinite (NaN проходит через <= 0), дедуплицируй списки индексов.
  • НЕ освобождай транзитные RCW точечно в одной операции — это общий отложенный долг (OPEN_QUESTIONS v2-2), консистентность важнее; единый рефакторинг — отдельной задачей.
  • Команды: dotnet build -c Release; dotnet test --filter "Category=Unit"; dotnet test --filter "Category=Integration" (нужен запущенный КОМПАС).

Начни с рефлексии interop для массивов (пакет C) и kompas-sdk-research по найденному definition, затем первый инкремент — линейный массив.