Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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(ядро + helpersSelectFaceByIndex/SelectEdgeByIndex+NewParam<T>),.Sketch.cs(эскизы/примитивы),.Features.cs(операции).- Чистые маппинги/валидация — в
SketchGeometry(Core/Modeling); тип точки —SketchPoint(Host). - Прочитай память:
kompas-formative-features-api5(что есть/нет definition в API5).
Задача этой сессии (по приоритету)
- Пакет C «массивы и зеркало»: линейный массив, круговой массив, зеркальное отражение операции/тела. Самый ценный недостающий класс.
hole— отверстие (исследоватьksHoleDefinition/o3d_*hole*).draft(уклон) — ТОЛЬКО если найдёшь способ через API7 (в API5ksDraftDefinitionНЕТ, толькоo3d_DraftFromEdges=644без интерфейса — см. память).
Бери по одной операции за инкремент, доводи до зелёного и merge+push, потом следующую. Не пытайся сделать весь пакет одним заходом — инкремент надёжнее.
Процесс на каждую операцию (отлажен в прошлых сессиях)
- Рефлексия interop — найди definition и
Obj3dType. Пример команды (PowerShell):Если definition в API5 нет — проверь API7 или отметь блокером (как draft).$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 - Семантику параметров уточняй через навык
kompas-sdk-research(субагент Sonnet), не рой справку сам. - Краткий спек в
docs/superpowers/specs/→ коммит → ОТДАЙ НА РЕВЬЮ Codex (codex:rescue,--freshдля новой темы) → внеси обоснованные правки (оценивай технически, не слепо). - Реализация TDD: метод в
PartModeler.Features.cs(паттернNewEntity(o3d_*)→GetDefinition→ настройка →Create→ регистрация в_features, возврат id), инструмент вFeatureTools.cs, интеграционный тест вFeatureOpsTests.cs. - Codex-ревью реализации (
--resumeтого же треда) → правки. - Документация через навык
docs-delegate(Sonnet обновит README/CLAUDE/ARCHITECTURE/ presentation.html, сверит счётчики по факту). 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, затем первый инкремент — линейный массив.