From 2a555cafd58deacc1c77b48cf29bc53661c01991 Mon Sep 17 00:00:00 2001 From: Shahovalov MIkhail Date: Tue, 26 May 2026 23:36:41 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20=D0=BF=D1=80=D0=BE=D0=BC=D1=82-handoff?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=BB=D0=B5=D0=B4=D1=83=D1=8E?= =?UTF-8?q?=D1=89=D0=B5=D0=B9=20=D1=81=D0=B5=D1=81=D1=81=D0=B8=D0=B8=20(?= =?UTF-8?q?=D0=BF=D0=B0=D0=BA=D0=B5=D1=82=20C=20=E2=80=94=20=D0=BC=D0=B0?= =?UTF-8?q?=D1=81=D1=81=D0=B8=D0=B2=D1=8B/=D0=B7=D0=B5=D1=80=D0=BA=D0=B0?= =?UTF-8?q?=D0=BB=D0=BE)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 (1M context) --- docs/superpowers/NEXT-SESSION.md | 70 ++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 docs/superpowers/NEXT-SESSION.md diff --git a/docs/superpowers/NEXT-SESSION.md b/docs/superpowers/NEXT-SESSION.md new file mode 100644 index 0000000..8c6622b --- /dev/null +++ b/docs/superpowers/NEXT-SESSION.md @@ -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`), `.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(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, затем первый инкремент — линейный массив.