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

97 lines
9.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Промт для следующей сессии
Скопируй блок ниже как стартовое сообщение новой сессии Claude Code.
---
Продолжаем разработку MCP-сервера КОМПАС-3D (kompas3d-mcp). Работай автономно,
с коммитами и пушами в `main`; используй Codex для ревью каждой реализованной фичи.
КОМПАС-3D должен быть запущен (нужен для интеграционных тестов).
## Текущее состояние (main, синхронизирован с origin)
- 67 MCP-инструментов, 116 тестов зелёных (69 unit + 47 integration).
- Пакет A «богаче эскизы» — готов (дуга×2, эллипс, ломаная, многоугольник, сплайн, точка).
- Пакет B «формообразующие» — основная часть готова: shell, rib, sweep, loft.
- Пакет C «массивы и зеркало» — ГОТОВ: `linear_pattern`, `circular_pattern`,
`mirror_operation`, `mirror_body`. Источник копирования — id операций из реестра `_features`
(хелпер `RequireFeature`); оси — `CoordinateAxis`/`CoordinateAxes` (`Core/Modeling`).
- `hole` — отверстие ГОТОВ (через **API7**, в API5 определения нет): `HoleService`
(`Core/Modeling/HoleService.cs`), простое цилиндрическое, сквозное/глухое. Прецедент: первая
формообразующая на API7 (раньше API7 был только у `move_face`).
- `draft` — уклон граней ГОТОВ (через **API5** `ksInclineDefinition`/`o3d_incline=42` — операция
«Incline», не «Draft»; стандартный паттерн `PartModeler.Features.cs`, регистрируется в `_features`).
Эмпирика: `direction=false`=расширение, `true`=сужение → маппинг `!outward`.
- Пакет D «параметрика» НАЧАТ: переменные модели — `create_variable`, `set_variable`,
`delete_variable` (`VariableService`, API5 `ksVariable`). Создание на коллекции корневого
`ksFeature` (СВОЙСТВО `VariableCollection`); `Expression` ведущее; `RebuildModel`+re-fetch.
`list_variables` починен (видит все переменные). ОГРАНИЧЕНИЕ: переменные драйвят геометрию лишь
в параметрических эскизах (у нас эскизы на литералах — пока не драйвят).
- Пакет E начат: смещённая плоскость (`sketch_create_on_offset_plane`).
- `PartModeler` разбит на partial: `PartModeler.cs` (ядро + helpers `SelectFaceByIndex`/
`SelectEdgeByIndex` + `RequireFeature` + `NewParam<T>`), `.Sketch.cs` (эскизы/примитивы),
`.Features.cs` (операции, включая массивы/зеркало/уклон). API7-сервисы: `HoleService`, `FaceEditService`.
- Чистые маппинги/валидация — в `SketchGeometry` (Core/Modeling); тип точки — `SketchPoint` (Host).
- Прочитай память: `kompas-formative-features-api5` (definition в API5; draft=Incline есть),
`kompas-pattern-mirror-api5` (пакет C), `kompas-hole-api7` (hole: только API7),
`kompas-variables-api5` (переменные: create на ksFeature, ограничение про геометрию).
## Задача этой сессии (по приоритету)
1. **Параметрические эскизы** РАЗВЕДАНЫ — путь намечен, но это КРУПНАЯ отдельная подсистема (не
инкремент). Установлено: управляющий размер `ksCDimWithVariable` только в API7; API5-эскиз через
API7 `ISketch.Curves`=null; нужен путь `ISketch.BeginEdit→FragmentDocument→IDrawingContainer`
(новая API7-подсистема построения эскизов). См. `docs/superpowers/specs/2026-05-27-parametric-sketch-findings.md`
и память `kompas-parametric-sketch-findings`. Начинать с минимального spike (отрезок через API7
IDrawingContainer → ksCDimWithVariable с именем → сменить переменную → перестроить → длина
изменилась?). Ключевой риск: реагирует ли решатель эскиза из внешней автоматизации.
2. Расширения hole: зенковка/цековка/коническое отверстие (`ksHTCounterbore=1/Countersinking=2/
Conic=4` + подынтерфейсы `ISpotfacingHoleParameters`/`IConicHoleParameters`/…), резьба.
Меньше неопределённости — хороший следующий инкремент.
3. Расширения draft: уклон от ребра (`IDraftFromEdges`, API7); нейтральная плоскость по грани.
4. Расширения пакета C: 2D-сетка линейного массива, выбор оси по ребру, массив вдоль кривой
(`o3d_curveCopy=37`).
5. 2D-чертёж / сборки — крупные отдельные направления.
Бери по одной операции за инкремент, доводи до зелёного и merge+push, потом следующую.
Не пытайся сделать весь пакет одним заходом — инкремент надёжнее.
## Процесс на каждую операцию (отлажен в прошлых сессиях)
1. Рефлексия interop — найди definition и `Obj3dType`. Пример команды (PowerShell):
```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, затем первый инкремент — линейный массив.