docs: промт-handoff для следующей сессии (пакет C — массивы/зеркало)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-26 23:36:41 +03:00
parent d4b3e59c60
commit 2a555cafd5
+70
View File
@@ -0,0 +1,70 @@
# Промт для следующей сессии
Скопируй блок ниже как стартовое сообщение новой сессии 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):
```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, затем первый инкремент — линейный массив.