mikhail
2763c3fd88
Merge feat/assembly-add-component: вставка детали в сборку (класс СБОРКИ начат)
...
assembly_add_component — первый инструмент построения сборок (API7,
AssemblyService): IParts7.AddFromFile → Placement.SetOrigin → RebuildModel.
71 инструмент, 138 тестов (83 unit + 55 integration). Спек + ревью Codex
(спека и реализации) учтены.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-27 13:16:44 +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
7e99790378
feat: assembly_add_component — упрочнение по ревью Codex реализации
...
#1 : RebuildModel результат проверяется (FALSE → ошибка).
#2/#3: верифицируемый откат RollbackInsertion (по beforeCount, удаляет всё сверх
исходного через IFeature7.Delete, не полагается на null-возврат AddFromFile).
#5 : тест вставки во вторую (непустую) сборку — инкремент count + корректность Index.
#7 : тест несуществующего файла — FileNotFoundException + сборка остаётся пустой.
#4 (точечный release RCW) отклонён: противоречит конвенции проекта (OPEN_QUESTIONS
v2-2, образец HoleService) — транзитные RCW не освобождаем точечно.
Тесты: AssemblyTests 3→5, итого 83 unit + 55 integration = 138 зелёных.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-27 13:09:51 +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
e587130340
Merge feat/hole-conic: коническое отверстие (hole_conic)
...
Завершён набор типов отверстий: простое + цековка + зенковка + коническое (ksHTConic).
70 инструментов, 119 тестов.
2026-05-27 12:22:04 +03:00
mikhail
3a5eb26db2
docs: коническое отверстие (hole_conic) — счётчики 70 инструментов, 119 тестов; перечни инструментов
2026-05-27 12:22:04 +03:00
mikhail
675e43160e
feat: коническое отверстие (hole_conic) — ksHTConic + IConicHoleParameters
...
- ConicHoleAsync (ksHTConic + IConicHoleParameters: ConicType=ksCNAngle, ConicAngle)
- инструмент hole_conic (diameter у дна, conicAngle 0..180); тот же HoleCore-паттерн
- интеграционный тест (конус удаляет больше цилиндра Ø10); типы отверстий завершены
- 70 инструментов, 119 тестов
2026-05-27 12:17:28 +03:00
mikhail
b8dbe48fad
docs: handoff — цековка/зенковка готовы, параметрические эскизы тупик (зафиксировано); 69 инструментов, 118 тестов
2026-05-27 12:14:49 +03:00
mikhail
1a57e74048
Merge feat/hole-types: отверстия с цековкой и зенковкой (hole_counterbore, hole_countersink)
...
Расширение hole типами под крепёж через API7 (ksHTCounterbore/ksHTCountersinking +
параметрические подынтерфейсы). HoleCore рефакторен под configure-колбэк.
69 инструментов, 118 тестов.
2026-05-27 12:13:32 +03:00
mikhail
ec5eb2b46d
docs: типы отверстий (цековка/зенковка) — README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation; счётчики 69 инструментов, 118 тестов (исправлен ошибочный подсчёт 89)
2026-05-27 12:13:23 +03:00
mikhail
aeb5d58820
fix: правки типов отверстий по ревью Codex
...
- глухая цековка: проверка depth > spotDepth (несовместимая геометрия) — P2
- описание sinkAngle: строго 0 < sinkAngle < 180 (соответствие валидации) — P3
- описание hole_counterbore: требование depth > spotfaceDepth для глухого
2026-05-27 12:04:28 +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
9079bec375
Merge feat/parametric-sketch2: решающий spike параметрики (отрицательный, findings)
2026-05-27 11:54:11 +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
1a8946c9ed
Merge feat/parametric-sketch: разведка параметрических эскизов (findings)
2026-05-27 11:43:29 +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
e4d546a84b
Merge feat/parametrics: параметрика — переменные модели (пакет D начат)
...
3 инструмента: create_variable, set_variable, delete_variable (API5 ksVariable).
Создание на ksFeature-коллекции; Expression ведущее; RebuildModel+re-fetch.
list_variables починен (видит все переменные). 67 инструментов, 116 тестов.
Ограничение: переменные драйвят геометрию лишь в параметрических эскизах (впереди).
2026-05-27 11:28:41 +03:00
mikhail
2d38cd33d8
docs: параметрика (переменные модели) — README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation, 67 инструментов, 116 тестов
2026-05-27 11:28:33 +03:00
mikhail
a30614d005
fix: правки параметрики по ревью Codex
...
- проверка возврата ksPart.RebuildModel() во всех операциях (не рапортовать успех при неудаче) — P2
- сообщение об удалении: намёк на зависимые переменные — P3
- дисклеймер про геометрию в описании set_variable + десятичный разделитель — P3
- тест дополнен: дубликат имени, удаление с зависимыми, десятичное выражение (3.5), пересчёт зависимой
- 116 тестов зелёных
2026-05-27 11:20:38 +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
e95c9d2240
Merge feat/draft: уклон граней через API5 (draft / Incline)
...
Инструмент draft — уклон граней относительно нейтральной координатной плоскости.
ВОПРЕКИ прежнему предположению, операция доступна в API5 (Incline, o3d_incline=42,
ksInclineDefinition) — не нужен API7. direction=!outward (эмпирика). 64 инструмента, 115 тестов.
2026-05-27 10:35:25 +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
143877c6cc
fix: правки draft по ревью Codex
...
- угол уклона вынесен в чистый SketchGeometry.RequireDraftAngle (0<angle<90, finite) + unit-тесты границ — P2
- описание инструмента уточнено: строго 0 < angle < 90 — P2
- интеграционный тест Draft_outward_expands_box — страхует маппинг направления (outward→!direction) — P2
- 115 тестов (69 unit + 46 integration)
2026-05-27 10:28:23 +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
7b234b4e5e
Merge feat/hole: отверстие через API7 (hole)
...
Инструмент hole — простое цилиндрическое отверстие (ksHTBase), сквозное/глухое.
В API5 определения нет → реализовано на API7 (IHoles3D/IHole3D/IHoleDisposal).
Направление сверления подбирается по убыли объёма. 63 инструмента, 104 теста.
2026-05-27 10:10:51 +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
ed1e67c2f3
Merge feat/pattern-mirror: пакет C — массивы и зеркало (linear/circular pattern, mirror)
...
4 новых инструмента: linear_pattern, circular_pattern, mirror_operation, mirror_body.
62 инструмента, 101 тест (60 unit + 41 integration). Ревью Codex (дизайн + реализация) учтено.
2026-05-27 00:24:10 +03:00
mikhail
afe94e797d
docs: пакет C (массивы и зеркало) — README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation, 62 инструмента, 101 тест
2026-05-27 00:23:57 +03:00
mikhail
4cc9fb2d00
fix: правки пакета C по ревью Codex
...
- mirror_body: ChooseBodies() в interop не приводится к ksChooseBodies (null) и не нужен —
o3d_mirrorAllOperation по умолчанию отражает все тела, сохраняя оригинал (проверено тестом);
убран нерабочий вызов (P2 fail-fast вскрыл, что приведение всегда падает)
- добавлен тест CircularPattern_reverse_flips_rotation_direction (проводка inverce) — P2
- комментарий класса FeatureOpsTests: пакеты B и C — P3
- 101 тест (60 unit + 41 integration)
2026-05-27 00:16:47 +03:00
mikhail
2aeed5ba3d
feat: зеркало операций и тела (mirror_operation, mirror_body)
...
- MirrorOperationAsync: ksMirrorCopyDefinition o3d_mirrorOperation, SetPlane + GetOperationArray
- MirrorBodyAsync: ksMirrorCopyAllDefinition o3d_mirrorAllOperation, SetPlane +
ChooseBodies().ChooseBodiesType=ksAllBodies (отражает все тела, оригинал сохраняется)
- инструменты mirror_operation (featureIds, plane), mirror_body (plane)
- интеграционные тесты: mirror_operation на ДВУХ источниках (коллекция), mirror_body — оба ±5%
- пакет C завершён: 62 инструмента, 100 тестов (60 unit + 40 integration)
2026-05-27 00:11:02 +03:00
mikhail
be6a99b9b6
feat: круговой массив (circular_pattern) — ksCircularCopyDefinition o3d_circularCopy
...
- CircularPatternAsync: SetAxis + свойства напрямую (count1=1 радиально, count2=count кольцевое,
step2 угол°, factor2=false, inverce=reverse), GetOperationArray
- инструмент circular_pattern (axis, count, step°, reverse, geometric)
- интеграционный тест (3 экз. вокруг Z, шаг 90°, объём ±5% + габарит подтверждает поворот)
- эмпирически: count1=1/count2=N даёт чистый круговой массив, step2 в градусах между соседними
2026-05-27 00:08:35 +03:00
mikhail
bc0adaf830
feat: линейный массив (linear_pattern) — ksMeshCopyDefinition o3d_meshCopy
...
- CoordinateAxis enum + CoordinateAxes.ToObj3dType/Parse (X/Y/Z → o3d_axisO*)
- SketchGeometry.RequireMin; PartModeler.RequireFeature (источник по id из _features)
- LinearPatternAsync: SetAxis1 + SetCopyParamAlongAxis(true,0,count,step,false), count2=1
- инструмент linear_pattern; unit-тесты (RequireMin, Parse), интеграционный тест (3 экз. ±5%)
- эмпирически: count включает исходный, step мм между соседними, count2=1 выключает 2D
2026-05-27 00:07:03 +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
d4b3e59c60
Merge feat/offset-loft: смещённая плоскость + операция по сечениям (loft)
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-26 23:27:03 +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
f0c9cc7db1
fix: правки offset/loft по ревью Codex
...
- CreateSketchOn проверяет entity.Create() (улучшает все пути создания эскиза)
- loft-сообщение считает сечения после дедупликации
- тест loft: проверка габарита 20x20x40
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-26 23:20:38 +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