From 35e06e8786440ea887336923e637bd7aca514306 Mon Sep 17 00:00:00 2001 From: Shahovalov MIkhail Date: Wed, 27 May 2026 19:08:53 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20NEXT-SESSION=20=E2=80=94=20=D1=81=D0=BD?= =?UTF-8?q?=D0=B8=D0=B7=D0=B8=D1=82=D1=8C=20=D1=8F=D0=BA=D0=BE=D1=80=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5,=20=D0=BE=D0=BF=D1=82=D0=B8=D0=BC=D0=B8?= =?UTF-8?q?=D0=B7=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20=D1=85=D1=8D?= =?UTF-8?q?=D0=BD=D0=B4=D0=BE=D1=84=D1=84-=D0=BF=D1=80=D0=BE=D0=BC=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Сокращён со 117 до ~40 строк. Убраны пред-решённый следующий инкремент, пред-разведанные точки входа API (RadialDimensions/AngleDimensions, сниппет рефлексии), развёрнутый процесс/ловушки/паттерн теста — заменены указателями на CLAUDE.md / навык kompas-3d / авто-память. Текущее состояние свёрнуто до инвентаря по классам. Модель сама разведывает API и выбирает инкремент — эффект свежего взгляда. Co-Authored-By: Claude Opus 4.7 (1M context) --- docs/superpowers/NEXT-SESSION.md | 133 +++++++------------------------ 1 file changed, 29 insertions(+), 104 deletions(-) diff --git a/docs/superpowers/NEXT-SESSION.md b/docs/superpowers/NEXT-SESSION.md index add5259..41fc02f 100644 --- a/docs/superpowers/NEXT-SESSION.md +++ b/docs/superpowers/NEXT-SESSION.md @@ -4,113 +4,38 @@ --- -Продолжаем разработку MCP-сервера КОМПАС-3D (kompas3d-mcp). Работай автономно, с коммитами и -пушами в `main`; используй Codex для ревью КАЖДОЙ реализованной фичи (спека и реализации). -КОМПАС-3D должен быть запущен (нужен для интеграционных тестов). +Продолжаем разработку MCP-сервера КОМПАС-3D (**kompas3d-mcp**). Работай автономно: коммить и +пушь в `main`, каждую фичу (спек и реализацию) прогоняй через ревью Codex. Для интеграционных +тестов **КОМПАС-3D должен быть запущен**. -**Фокус — продолжать ВЕХУ 2D-ЧЕРТЁЖ** (самый ценный развивающийся класс). Деталь и сборки близки -к насыщению. Следующий инкремент — **радиальный/угловой размер** ИЛИ **рамка/формат листа** (см. -«Следующий инкремент»). +**Сначала сориентируйся** — этот промт задаёт направление, а не заменяет источники: +- `CLAUDE.md` — текущее состояние, проверенные факты реализации и конвенции (STA-поток, COM-QI + контейнеры, отложенный долг по RCW, команды сборки/тестов, инфраструктура интеграционных тестов). +- Навык `kompas-3d` — методика управления КОМПАС через MCP (базовый цикл, `validate_part`, осмотр). +- Авто-память (читай по теме перед работой): `kompas-drawing-api7`, `kompas-assembly-insert-api7`, + `kompas-step-and-assembly-api`, `kompas-hole-api7`, `kompas-variables-api5`, + `kompas-parametric-sketch-findings`. Спеки фич — `docs/superpowers/specs/`. -## Текущее состояние (main = origin) +**Состояние (main = origin):** 76 MCP-инструментов, 218 тестов зелёных, сборка Release чистая. Три класса: +- **Деталь** — насыщена (эскизы, формообразующие, массивы/зеркало, отверстия, уклон, переменные, + STEP, прямое редактирование B-rep, структурный осмотр). +- **Сборки** — базовое готово (вставка компонента, сопряжения coincidence/distance). +- **2D-чертёж** — развивается: стандартные виды, основная надпись, размеры линейный и диаметральный. -**76 MCP-инструментов, 218 тестов зелёных (141 unit + 77 integration).** Сборка Release чистая. +**Фокус — веха 2D-ЧЕРТЁЖ** (самый ценный растущий класс; деталь и сборки близки к насыщению). +Осмотри, что уже реализовано в `DrawingService`/`DrawingTools`, найди пробелы и **предложи самый +ценный следующий инкремент**. Возможные направления (не исчерпывающе, не предрешено): радиальный и +угловой размеры, рамка/формат листа, текстовые обозначения (шероховатость, допуски, тех. требования). +Точки входа в API разведывай сам — рефлексия по `libs/kompas-interop/*.dll` + субагент `kompas-sdk-research`. -Три класса функционала: -- **ДЕТАЛЬ** (насыщена): эскизы (полный набор 2D-примитивов), формообразующие (extrude/revolve/ - fillet/chamfer/shell/rib/sweep/loft), массивы и зеркало, уклон (`draft`), все типы отверстий - (`hole`/`_counterbore`/`_countersink`/`_conic`), переменные (`create/set/delete_variable`), - STEP import/export, прямое редактирование B-rep (`move_face`/`split_solid_by_plane`/`move_body`/ - `boolean_union`), структурный осмотр (`describe_model`/`list_*`/`measure`). -- **СБОРКИ — завершены** (`AssemblyService`, namespace `Kompas.Mcp.Core.Assemblies`, API7): - - `assembly_add_component(filePath, x, y, z)` — вставка детали/подсборки `.m3d`/`.a3d` с позицией. - `IParts7.AddFromFile(path,true,true)` → `part.Placement.SetOrigin` → `UpdatePlacement(true)` → - `top.RebuildModel(true)`. - - `assembly_add_mate(mateType, x1,y1,z1, x2,y2,z2, value)` — сопряжение граней двух компонентов - (`coincidence`/`distance`). `(IMateConstraints3D)top.MateConstraints.Add(...)` → `BaseObject1/2` - (грани через `top.FindObjectsByPoint(x,y,z,FirstLevel=false)`) → `Update` → проверка `mate.Valid`. - - `list_components` (чтение сборки) был и раньше. -- **2D-ЧЕРТЁЖ — 4 инкремента готовы** (`DrawingService`, namespace `Kompas.Mcp.Core.Drawings`, API7): - 1. `drawing_create_standard_views(partFilePath, scale, x, y)` — стандартные виды (спереди/сверху/ - слева) сохранённой модели; возвращает `ViewNumbers` (для адресации видов при простановке размеров). - 2. `drawing_fill_title_block(designation?, name?, material?)` — основная надпись (графы 2/1/3). - 3. `drawing_add_linear_dimension(x1,y1,x2,y2,x3,y3, orientation, viewNumber)` — линейный размер - (horizontal/vertical/parallel). - 4. `drawing_add_diametral_dimension(xc,yc,radius,angle°, viewNumber)` — диаметральный размер (Ø=2R). +**Метод (кратко):** при неопределённости (привязка к геометрии, координаты, единицы) — спайк до +спека; затем краткий спек → ревью Codex → TDD (валидаторы в чистый static для unit, интеграционный +тест наследует `IntegrationTestBase`) → ревью Codex реализации → документация субагентом +`docs-maintainer` → merge/push в `main` → обнови этот хэндофф и память. Число тестов задавай по +раннеру `dotnet test`, не по числу `[Fact]`/`[Theory]`. -Спеки всех фич — в `docs/superpowers/specs/2026-05-27-*.md`. Память (читать перед работой): -`kompas-drawing-api7` (чертёж: виды, штамп, размеры — все приёмы), `kompas-assembly-insert-api7` -(сборки: вставка + сопряжения), `kompas-step-and-assembly-api`, `kompas-hole-api7` (паттерн API7- -сервиса), `kompas-parametric-sketch-findings` (тупик — не повторять). +**Не повторять:** параметрические эскизы (переменная двигает геометрию) недостижимы через COM-API — +см. память `kompas-parametric-sketch-findings` и спек `2026-05-27-parametric-sketch-findings.md`. -## Следующий инкремент (на выбор; оба расписаны) - -### Вариант A — радиальный / угловой размер (продолжает размеры, ценнее) -Тот же контейнер, что у линейного/диаметрального — `ISymbols2DContainer` (QI от вида); есть готовый -хелпер `RequireSymbols2DContainer(viewNumber)` в `DrawingService`. Точки входа (рефлексия подтвердила): -- Радиальный: `symbols.RadialDimensions` (`IRadialDimensions.Add()` → `IRadialDimension`): - `Xc,Yc,Radius,Angle` + `DimensionType` + ветви (`AddBranch`/`AddBranchByArcParam`/`ShelfX,Y`). -- Угловой: `symbols.AngleDimensions` (`IAngleDimension`) — задание через две прямые/точки. -**Сделай спайк ДО спека** (у радиального — `DimensionType`/ветви; у углового — что измеряет и как -задаются стороны угла; что в `NominalValue`). Значение читается `((IDimensionText)dim).NominalValue`. -Тест — `*Dimensions.Count` целевого вида вырос + значение (как у диаметрального). - -### Вариант B — рамка / формат листа (проще, без спайка) -`ILayoutSheet.Format` (`SheetFormat`) — задать формат листа (A4/A3) и ориентацию. Детерминированно -тестируется (задать формат → прочитать). `doc2d.LayoutSheets.ItemByNumber[1]` → `.Format`. -Менее ценно, чем размеры, но низкий риск. - -## ОТРИЦАТЕЛЬНЫЙ результат (не повторять) -**Параметрические эскизы (переменная двигает геометрию) — НЕДОСТИЖИМЫ через COM-API.** -`ksCDimWithVariable` (`IDrawingObject1.NewConstraint`) `Create()`=FALSE из внешней автоматизации; -`ksCFixedLenght` игнорирует `Expression`-ссылку. См. -`docs/superpowers/specs/2026-05-27-parametric-sketch-findings.md`. НЕ трогать. - -## Процесс на каждый инкремент (отлажен — 6 фич за прошлую сессию) -1. **Рефлексия interop** — подтверди сигнатуры (имена/типы могут отличаться от справки): - ```powershell - $a7=[Reflection.Assembly]::LoadFrom((Resolve-Path 'libs/kompas-interop/KompasAPI7.dll').Path) - ($a7.GetTypes()|?{$_.Name -eq 'IRadialDimension'}).GetProperties()|%{ "$($_.PropertyType.Name) $($_.Name)" } - ``` - Enum'ы — в `Kompas6Constants`/`Kompas6Constants3D`. **Тестовый проект НЕ ссылается на эти - constants-сборки** → COM-enum в публичном API сервиса оборачивай СВОИМ enum (как `MateType`/ - `DimensionOrientation`), unit-тесть по `(int)`-коду нельзя — проверяй только свой enum/Parse. -2. **Семантику API** уточняй субагентом `kompas-sdk-research` (Haiku, read-only), не рой справку сам. -3. **При неопределённости (привязка к геометрии, координаты, единицы) — СПАЙК ДО СПЕКА**: черновой - метод сервиса + временный `*SpikeTests.cs`, прогнать, зафиксировать находку. (Так делалось для - сопряжений, видов, штампа, линейного и диаметрального размеров — всегда окупалось.) -4. **Краткий спек** в `docs/superpowers/specs/` → коммит → **ревью Codex** (`codex:rescue --fresh` для - новой темы) → внеси обоснованные правки (оценивай технически, отклоняй неуместное с обоснованием — - напр. точечный release RCW отклоняется по конвенции v2-2). -5. **TDD**: метод в `DrawingService` (или новом сервисе), инструмент в `*Tools.cs`, чистые валидаторы - в static (unit), интеграционный тест в `*Tests.cs` (наследует `IntegrationTestBase`, Collection - `KompasCollection`). Спайк-методы/тесты УДАЛИ, промотировав в финальный код. -6. **Ревью Codex реализации** (`--resume` того же треда) → правки. -7. **Документация** субагентом `docs-maintainer` (Sonnet: README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/ - presentation.html). **Число тестов задавай ТОЧНО по `dotnet test` раннеру** (НЕ по числу - `[Fact]`/`[Theory]` — теории разворачиваются в несколько кейсов). -8. `merge --no-ff` в main → удали ветку → `push origin main` → обнови этот handoff + память. - -## Паттерн интеграционного теста -`CreateAsync(...)` → построить/вставить → операция → проверить → `finally CloseAsync`. -- ДЕТАЛЬ — объём/габарит/МЦХ. СБОРКА — габарит/`list_components`. -- ЧЕРТЁЖ — числом, не объёмом: **виды** — `Views.Count`/`ObjectCount`; **размеры** — НЕ в - `IView.ObjectCount` (они в `ISymbols2DContainer`) → считать `ISymbols2DContainer.*Dimensions.Count` - целевого вида; **значение размера** — `((IDimensionText)dim).NominalValue`. -- Артефакты (`.m3d` детали для видов/сборок) — в gitignored `.scratch/` (`TestPaths.NewFile`). -- Возможен ТРАНЗИЕНТНЫЙ сбой пакета сразу после большого прогона (нестабильность КОМПАС) — перезапусти. - -## Ключевые ловушки (проверено) -- Все COM-вызовы — на STA-потоке (`KompasDispatcher.InvokeAsync`). Контейнеры берём COM-QI: - `(IModelContainer)part`, `(ISymbols2DContainer)view`, `(IMateConstraints3D)top.MateConstraints`. -- **Размеры чертежа** — в `ISymbols2DContainer` (QI ОТ КОНКРЕТНОГО `IView`), координаты — в ЛОКАЛЬНОЙ - СК вида (= координаты модели на плоскости вида при 1:1). `AutoNominalValue=true` авто-измеряет. -- Углы 2D-размеров — в РАДИАНАХ в API (инструмент экспонирует градусы → `DimensionAngles.ToRadians`). -- Валидацию — в чистые static (unit-тестируемо), проверяй `double.IsFinite`. Проверяй результат - `Update()`/`RebuildModel()`; при неуспехе после `Add()` — откат `.Delete()`. -- НЕ освобождай транзитные RCW точечно — общий отложенный долг (OPEN_QUESTIONS v2-2). -- Команды: `dotnet build -c Release`; `dotnet test --filter "Category=Unit"`; - `dotnet test --filter "Category=Integration"` (нужен запущенный КОМПАС). - -Начни с выбора варианта (A — радиальный/угловой размер, рекомендуется; B — рамка/формат листа), -затем рефлексия interop соответствующих интерфейсов + (для A) спайк до спека. +Начни с обзора текущих возможностей 2D-чертежа и пробелов, предложи следующий инкремент, согласуй +направление — и приступай.