Commit Graph

63 Commits

Author SHA1 Message Date
mikhail 5e6d3ec8ae docs: спек assembly_add_mate — сопряжения компонентов (API7), спайк зелёный
Веха СБОРКИ, инкремент 2. Механизм подтверждён спайком: mates.Add(type) +
BaseObject1/2 (грани через FindObjectsByPoint FirstLevel=false) + Update +
RebuildModel. Coincidence (ширина 120→40), Distance(30) (→70). Свой enum MateType.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 13:24:58 +03:00
mikhail 20518efe52 docs: handoff — инкремент 1 (assembly_add_component) готов; следующее — сопряжения
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 13:18:22 +03:00
mikhail 5b9a0c6e32 docs: assembly_add_component — класс СБОРКИ начат (71 инструмент, 138 тестов)
README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation.html: счётчики 70→71,
119→138; новая группа инструментов Assembly; ключевые факты AssemblyService
(workflow API7, эмпирика UpdatePlacement, RequireActiveAssembly, откат).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 13:16:37 +03:00
mikhail 5eee7ad1af feat: assembly_add_component — вставка детали из .m3d в сборку (API7)
Веха СБОРКИ, инкремент 1. Новый AssemblyService (API7, паттерн HoleService):
IParts7.AddFromFile → Placement.SetOrigin → RebuildModel. Новый AssemblyTools
(MCP-инструмент assembly_add_component), регистрация в DI.

Ключевая находка: UpdatePlacement возвращает FALSE для вручную позиционируемого
компонента (не ошибка), позицию применяет SetOrigin + RebuildModel(true).

Валидация — чистый AssemblyValidation (расширение .m3d/.a3d, нормализация пути,
конечность координат). RequireActiveAssembly — раздельные ошибки по типу документа.

Тесты: +14 unit (AssemblyValidation), +3 integration (AssemblyTests: вставка в
origin, позиционирование со сдвигом, отклонение не-сборки). Итого 83 unit + 53
integration = 136 зелёных.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 13:04:19 +03:00
mikhail 5f17884f06 docs: спек assembly_add_component — учтены 8 замечаний ревью Codex
Проверки COM-результатов (AddFromFile/SetOrigin/UpdatePlacement), helper
RequireActiveAssembly (раздельные ошибки, проверка типа документа до TopPart),
валидация расширения .m3d/.a3d + нормализация пути, before/after count в тесте,
фиксированная геометрия детали от нуля, проверка сохранённости файла.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 12:57:04 +03:00
mikhail a8f7363869 docs: спек assembly_add_component — вставка детали из .m3d в сборку (API7)
Веха СБОРКИ, инкремент 1. Новый AssemblyService (API7, паттерн HoleService):
AddFromFile → Placement.SetOrigin → UpdatePlacement. Сигнатуры подтверждены
рефлексией interop. Валидация — чистые static. Тест — габаритом/числом компонентов.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 12:50:35 +03:00
mikhail 560845c448 docs: handoff переписан под новую веху — сборки и 2D-чертёж (точки входа API7, инкременты, процесс) 2026-05-27 12:39:29 +03:00
mikhail ab6370fceb docs: handoff — типы отверстий завершены (+коническое); следующее: пакет C расширения, 2D/сборки 2026-05-27 12:22:58 +03:00
mikhail 3a5eb26db2 docs: коническое отверстие (hole_conic) — счётчики 70 инструментов, 119 тестов; перечни инструментов 2026-05-27 12:22:04 +03:00
mikhail b8dbe48fad docs: handoff — цековка/зенковка готовы, параметрические эскизы тупик (зафиксировано); 69 инструментов, 118 тестов 2026-05-27 12:14:49 +03:00
mikhail ec5eb2b46d docs: типы отверстий (цековка/зенковка) — README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation; счётчики 69 инструментов, 118 тестов (исправлен ошибочный подсчёт 89) 2026-05-27 12:13:23 +03:00
mikhail aec2f1e52f feat: типы отверстий — цековка и зенковка (hole_counterbore, hole_countersink) через API7
- HoleCore отрефакторен: параметр holeType + Action<IHole3D> configure (настройка HoleParameters)
- CounterboreHoleAsync (ksHTCounterbore + ISpotfacingHoleParameters: SpotfacingDiameter/Depth)
- CountersinkHoleAsync (ksHTCountersinking + ICountersinkHoleParameters: ksCTDiameterAngle, Diameter/Angle)
- переиспользуется размещение/подбор направления/откат из базового hole
- инструменты hole_counterbore, hole_countersink; интеграционные тесты (объём ±10% / больше базы)
- 69 инструментов, 118 тестов; спек docs/superpowers/specs/2026-05-27-hole-types-design.md
2026-05-27 11:59:15 +03:00
mikhail 9237340667 docs: параметрические эскизы — решающий spike отрицательный (ksCDimWithVariable не строится)
API7-путь построения эскиза работает (Sketchs.Add→BeginEdit→FragmentDocument→IDrawingContainer→
LineSegments.Add), но управляющий размер недостижим: ksCDimWithVariable Create=False из внешней
автоматизации; ksCFixedLenght игнорирует Expression со ссылкой на переменную (привязан к литералу).
Вывод: переменные не драйвят геометрию эскиза через доступный COM-API. Путь признан тупиковым.
2026-05-27 11:54:10 +03:00
mikhail b5487c05ec docs: handoff — параметрические эскизы разведаны (крупная API7-подсистема), путь намечен 2026-05-27 11:44:24 +03:00
mikhail 67afbbfb3e docs: разведка параметрических эскизов — findings (крупная подсистема API7, отложено)
Установлено эмпирически: управляющий размер (ksCDimWithVariable) есть только в API7;
API5-эскиз через API7 ISketch.Curves не аннотируется (Curves=null); правильный путь —
ISketch.BeginEdit→FragmentDocument→IDrawingContainer — отдельная подсистема построения
эскизов. Реализация выделена в отдельный труд; spike-артефакты не коммичены.
2026-05-27 11:43:29 +03:00
mikhail 43596cb930 docs: handoff-промт — пакет D начат (переменные), следующий приоритет параметрические эскизы 2026-05-27 11:29:22 +03:00
mikhail 2d38cd33d8 docs: параметрика (переменные модели) — README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation, 67 инструментов, 116 тестов 2026-05-27 11:28:33 +03:00
mikhail bc52b5d920 feat: параметрика — переменные модели (create/set/delete_variable) через API5
- VariableService: CreateVariableAsync/SetVariableAsync/DeleteVariableAsync/GetVariableValueAsync
- создание ТОЛЬКО на ksFeature.VariableCollection (ksPart — только внешние); RebuildModel + re-fetch
- Expression — ведущее поле (константа/формула со ссылками); value пересчитывается
- list_variables (ModelInspectionService) исправлен: читает feature-коллекцию (все переменные)
- инструменты create_variable/set_variable/delete_variable (VariableTools) + DI
- интеграционный тест CRUD round-trip (создание, формула width*2, удаление по зависимостям)
- ОГРАНИЧЕНИЕ: переменные драйвят геометрию лишь в параметрической модели (эскизы на литералах — нет)
- 116 тестов; спек docs/superpowers/specs/2026-05-27-parametrics-design.md
2026-05-27 11:14:28 +03:00
mikhail 7d85eb949b docs: handoff-промт — draft готов (API5 Incline), следующий приоритет параметрика (пакет D) 2026-05-27 10:36:06 +03:00
mikhail 72045c8a84 docs: уклон (draft, API5 Incline) — README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation, 64 инструмента, 115 тестов 2026-05-27 10:35:16 +03:00
mikhail 205a4b02de feat: уклон граней (draft) через API5 — ksInclineDefinition o3d_incline=42
- ВОПРЕКИ прежнему предположению: уклон ЕСТЬ в API5 (операция Incline, не Draft) →
  стандартный паттерн PartModeler, регистрируется в _features (массивы/зеркало применимы)
- DraftAsync: FaceArray().Add(грани) + SetPlane(нейтральная коорд. плоскость) + angle + direction
- ЭМПИРИЧЕСКИ: direction=false=расширение, true=сужение (обратно справке) → маппинг !outward
- инструмент draft (faceIndices, neutralPlane, angle 0..90, outward); валидация угла и индексов
- интеграционный тест: 4 боковые грани коробки → усечённая пирамида (объём ±10%)
- 105 тестов; спек docs/superpowers/specs/2026-05-27-draft-design.md
2026-05-27 10:23:16 +03:00
mikhail 4f7e8f3b7e docs: handoff-промт — hole готов (API7), следующий приоритет draft через API7 2026-05-27 10:11:27 +03:00
mikhail 0aab06169f docs: отверстие (hole, API7) — README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation, 63 инструмента, 104 теста 2026-05-27 10:10:42 +03:00
mikhail d3dd78ec0b fix: правки hole по ревью Codex
- направление сверления — по факту убыли объёма (Update=TRUE даже при сверлении в воздух
  на сквозном отверстии); TryDirection + CurrentVolume (API5 МЦХ) — P2-баг, вскрыт тестом
- валидация double.IsFinite для координат/диаметра/глубины (Infinity проходил мимо >0) — P2
- откат точки-сироты и объекта отверстия при неуспехе (IFeature7.Delete) + RebuildDocument — P2
- тест Hole_through_bottom_face_uses_direction_fallback (нижняя грань) — P3
- 104 теста зелёных
2026-05-27 10:04:22 +03:00
mikhail 13ab0f6581 feat: отверстие (hole) через API7 — IHoles3D/IHole3D + IHoleDisposal
- HoleService (Core/Modeling): простое цилиндрическое отверстие (ksHTBase), сквозное/глухое
- размещение: BaseSurface=грань (FindObjectsByPoint) + AssociationVertex=Points3D.Add()
  (точка по мировым координатам ksPParamCoord+X/Y/Z); эскиз размещения не нужен
- в API5 определения отверстия НЕТ (как draft) — реализовано на API7 (прецедент: move_face)
- авто-направление в тело с повтором; DI-регистрация; инструмент hole в FeatureTools
- интеграционные тесты: сквозное (Ø10 удаляет π·25·20) + глухое (Ø8×10); spike зелёный с первого раза
- 103 теста зелёных; спек docs/superpowers/specs/2026-05-27-hole-design.md
2026-05-27 09:53:54 +03:00
mikhail 56f4a91364 docs: обновлён handoff-промт — пакет C готов, следующий приоритет hole 2026-05-27 00:24:58 +03:00
mikhail afe94e797d docs: пакет C (массивы и зеркало) — README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation, 62 инструмента, 101 тест 2026-05-27 00:23:57 +03:00
mikhail 8cc0f49f99 docs: правки спека пакета C по дизайн-ревью Codex (circular свойствами, multi-feature тест, эмпирические тонкости) 2026-05-27 00:03:47 +03:00
mikhail d6ab16fd6a docs: спек пакета C — массивы и зеркало (linear/circular pattern, mirror) 2026-05-26 23:45:40 +03:00
mikhail 2a555cafd5 docs: промт-handoff для следующей сессии (пакет C — массивы/зеркало)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 23:36:41 +03:00
mikhail 692b113333 docs: смещённая плоскость + loft — 58 инструментов, 89 тестов
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 23:27:02 +03:00
mikhail b2aac016af feat: смещённая плоскость (sketch_create_on_offset_plane) + операция по сечениям (loft)
OpenSketchOnOffsetPlaneAsync (o3d_planeOffset=14, ksPlaneOffsetDefinition) —
эскиз на смещённой плоскости. LoftAsync (o3d_baseLoft=30, ksBaseLoftDefinition):
Sketchs().Add сечений + SetLoftParam + SetThinParam(false). Смещённая плоскость
разблокировала loft (параллельные сечения). Integration: цилиндр на высоте 20;
loft 2 квадратов → призма 16000 мм³.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 23:17:00 +03:00
mikhail 53b9d2c18b docs: операция sweep (пакет B шаг 3) — 56 инструментов, 87 тестов
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 23:13:16 +03:00
mikhail 6e3c7c6fd5 feat(feature): кинематическая операция (sweep)
SweepAsync (o3d_baseEvolution): SetSketch(профиль) + PathPartArray(траектория)
+ sketchShiftType=0 + SetThinParam(false). Инструмент sweep в FeatureTools.
Integration: окружность R5 по вертикали 50 → цилиндр ~3927 мм³.
loft отложен — требует offset-плоскости (пакет E) для параллельных сечений.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 23:04:42 +03:00
mikhail e8b22c04e7 docs: операция rib (пакет B шаг 2) — 55 инструментов, 86 тестов
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 23:01:35 +03:00
mikhail fc99739e1e feat(feature): операция Ребро жёсткости (rib)
RibAsync (o3d_ribOperation): SetSketch + index/angle/side + SetThinParam.
SketchGeometry.RibSide маппинг (left/right/up/down). Инструмент rib в FeatureTools.
Эмпирически: контур ребра висит в зазоре (не касается тела), side=left для косынки.
Integration: L-уголок + ребро в углу → объём растёт.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 22:51:58 +03:00
mikhail 472f1e56e0 docs: операция shell (пакет B шаг 1) — 51 инструмент, 79 тестов
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 22:36:22 +03:00
mikhail fef0741eef fix(feature): правки shell по ревью Codex
- сообщение shell считает грани после дедупликации (Distinct)
- тест переименован (open_cap) + комментарий о симметрии торцов
- RCW-долг транзитов shell задокументирован в OPEN_QUESTIONS v2-2

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 22:31:59 +03:00
mikhail 115fcb8759 feat(feature): операция Оболочка (shell)
ShellAsync (o3d_shellOperation): удаление граней по индексам + толщина стенки,
thinType=!outward. SelectFaceByIndex в ядре, инструмент shell в FeatureTools.
Валидация: thickness>0, дедупликация индексов, проверка диапазона до мутации.
Integration-тест: коробка 40x30x20 → оболочка 2мм → 7152 мм³ (±5%).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 22:28:03 +03:00
mikhail b6ee39a914 docs(spec): дизайн операции Оболочка (shell) — пакет B шаг 1
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 22:20:02 +03:00
mikhail 706ee070cf docs: 7 новых примитивов эскиза (пакет A) в README/ARCHITECTURE/CLAUDE/presentation
50 инструментов, 78 тестов (47 unit + 31 integration). Пакет A «богаче
эскизы» отмечен выполненным; следующие — B (формообразующие) / C (массивы).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 21:55:52 +03:00
mikhail dc4003810d feat(sketch): 7 примитивов эскиза — дуга x2, эллипс, ломаная, многоугольник, сплайн, точка
Методы PartModeler + MCP-инструменты sketch_add_arc_3points/arc/ellipse/
polyline/polygon/spline/point. NURBS порядок 4, ksEndObj через try/finally,
param-структуры через NewParam с освобождением RCW. 7 интеграционных
тестов (профиль → выдавливание → объём) зелёные.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 21:50:27 +03:00
mikhail 2eab169e28 docs(plan,spec): правки по ревью Codex — примитивы эскиза
- NURBS: порядок 4 (кубический), не degree=3; константа SplineOrder
- NewParam<T>: освобождать сырой RCW при неудачном cast
- сплайн: ksEndObj гарантированно через try/finally
- валидация вынесена в SketchGeometry (RequirePositive/RequireVertexCount/
  RequirePoints с null+finite) — unit-тестируема
- closed polyline требует >=3 точек
- SketchPoint: [JsonPropertyName] x/y; Map с null-guard
- точка: убран неверный термin «вспомогательная»; нейтральный стиль
- зафиксированы источники сигнатур (Automation=docs, типы=interop A/B)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 21:43:23 +03:00
mikhail ac87b81e99 docs(plan): план реализации пакета A — примитивы эскиза
10 задач TDD: рефакторинг PartModeler в partial, SketchGeometry+SketchPoint,
по одному примитиву на задачу (дуга x2, эллипс, ломаная, многоугольник,
сплайн, точка), финальный прогон и документация. Сигнатуры COM и коды
param-структур сверены рефлексией по libs/kompas-interop/.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 21:25:28 +03:00
mikhail 362fea4d54 docs(spec): дизайн пакета A — богаче эскизы (примитивы 2D)
7 новых MCP-инструментов эскиза: дуга (3 точки / центр+углы), эллипс,
ломаная, правильный многоугольник, сплайн (NURBS), точка. Тонкие обёртки
над ksDocument2D; param-структуры через GetParamStruct. Рефакторинг
PartModeler в partial class (Sketch/Features). Сигнатуры COM сверены по
docs/Kompas3D_SDK/.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 21:06:34 +03:00
mikhail e1337e4016 feat(sdk-docs): MD-база знаний SDK — в репозиторий; генератор и зеркало убраны
docs/Kompas3D_SDK/ становится каноническим источником справки КОМПАС SDK
и включается в репозиторий (2491 файл, ~14 МБ). HTML-зеркало
docs/KOMPAS_SDK_ru-RU/ (~1.4 ГБ, © АСКОН) и генератор
tools/build_kompas3d_sdk.py больше не нужны — регенерация не предполагается.

- .gitignore: MD-база разблокирована; зеркало остаётся проигнорированным
  (safety-net на случай повторной локальной выгрузки).
- CLAUDE.md / SKILL.md: убраны упоминания регенерации и зеркала.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 20:00:05 +03:00
mikhail c761cba673 feat(sdk-docs): оптимизация MD-базы знаний + переход справки на неё
Оптимизация генератора docs/Kompas3D_SDK/ (build_kompas3d_sdk.py):
- слияние навигационных страниц в родителя (54 хаба, 475 интерфейсов);
  читаемые slug-имена + категория по доминирующему типу детей;
- шумоподавление: убраны артефакты «Интерфейс...», TOC-хвосты,
  breadcrumb-таблицы; синтаксис развёрнут из пайп-таблиц в плоский текст;
- слим frontmatter: sources сведён к корневой странице на группу;
- генератор самодостаточен — читает zoom_pageinfo.js напрямую,
  зависимость от kompas_sdk_index.tsv убрана.

Навык kompas-sdk-research переведён с kdoc.py/HTML на поиск по MD-базе
(Grep/Read). Удалены устаревшие скрипты: kdoc.py, convert_sdk_docs.py,
convert_sdk_to_md.py. Ссылки в CLAUDE.md/ARCHITECTURE.md/README.md/.gitignore
актуализированы.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 19:45:31 +03:00
mikhail 28d2ae3868 feat(inspection): структурное «зрение» модели — осмотр без снимка
Новый слой «модель как данные» (приоритетный над model_snapshot):
- describe_model — структурный «паспорт» детали одним вызовом (габарит,
  МЦХ, тела, сводка топологии, дерево построения с параметрами, переменные)
- list_features / list_bodies / list_variables
- describe_face / describe_edge (drill-down по индексу)
- measure (расстояние/угол между гранями/рёбрами/вершинами)
- model_snapshot понижен до fallback для визуально-пространственных вопросов

Реализация: ModelInspectionService (COM) + чистый InspectionText (рендер,
группировка, детект «импорт без истории») + record-модели; InspectionTools.
Дерево читается через ksPart.GetFeature()->SubFeatureCollection; точный тип
и параметры операций берутся из GetObject()->GetDefinition() (ksFeature.type
отдаёт лишь coarse o3d_entity).

Снимок дерева также включает слои conversion (STEP), editing (move_face/solid)
и validation, развивавшиеся параллельно. Полный прогон: 61 тест зелёный,
43 MCP-инструмента. Документация (README, ARCHITECTURE, OPEN_QUESTIONS,
CLAUDE.md, presentation.html) синхронизирована.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 18:44:38 +03:00
mikhail 498eeaa847 @
feat(query): перечисление рёбер + скругление/фаска по индексу

QueryService.ListEdgesAsync: обход EntityCollection(o3d_edge), для каждого ребра —
индекс, тип кривой (line/circle/arc/ellipse/nurbs через ksEdgeDefinition.Is*) и длина
(GetLength, мм). Запись EdgeInfo. Новый инструмент list_edges.
PartModeler: выделены ядра CreateFillet/CreateChamfer и хелпер SelectEdgeByIndex;
добавлены FilletEdgeIndexAsync/ChamferEdgeIndexAsync. Новые инструменты
fillet_edge_index, chamfer_edge_index — выбор ребра по индексу (надёжнее точки).

Тест List_edges_and_fillet_by_index: цилиндр → 2 круговых ребра ≈62.83 мм →
скругление ребра по индексу → объём уменьшается. Итого 31 инструмент, 19 тестов.
Документация синхронизирована через навык docs-delegate (Sonnet).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@
2026-05-26 11:22:57 +03:00
mikhail 170e2aa4c0 @
feat(skills): навык kompas-sdk-research + перенос kdoc.py в навык

Новый навык kompas-sdk-research делегирует поиск/чтение офлайн-справки КОМПАС SDK
субагенту Sonnet (экономит контекст Opus на 26k страниц WebHelp).
Навигатор kdoc.py перенесён tools/ → .claude/skills/kompas-sdk-research/ как часть навыка;
добавлен автопоиск каталога справки (вверх от CWD/скрипта или через KDOC_DIR),
чтобы скрипт работал из любой точки. Индекс остаётся в docs/kompas_sdk_index.tsv.
Ссылки обновлены в CLAUDE.md, README, ARCHITECTURE, presentation, .gitignore.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@
2026-05-26 11:09:10 +03:00