175 Commits

Author SHA1 Message Date
mikhail 71cafb2270 feat: drawing_add_linear_dimension — упрочнение по ревью Codex реализации
#4: отклонение нулевого NominalValue после Update (ориентация несовместима с
точками, напр. horizontal на вертикали |X2-X1|=0) — откат dim.Delete + ошибка.
#3: Parallel протестирован — работает БЕЗ явного Angle (КОМПАС авто-вычисляет угол
по точкам; (0,0)-(30,40)→50). #7: rollback-ветка покрыта тестом нулевой проекции.
#8: контракт «первый несистемный вид» — осознанный (задокументирован).

Тесты: DrawingDimensionTests 5→7 (+parallel, +нулевая проекция/откат). Итого
131 unit + 72 integration = 203.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 18:07:01 +03:00
mikhail 8e0ab374af feat: drawing_add_linear_dimension — линейный размер на виде (API7)
Веха 2D-ЧЕРТЁЖ, инкремент 3. DrawingService.AddLinearDimensionAsync: (ISymbols2D
Container)view (QI) → LineDimensions.Add → X1..Y3 (локальная СК вида) + Orientation
+ AutoNominalValue → Update → проверка Valid → ((IDimensionText)dim).NominalValue.
Свой enum DimensionOrientation (horizontal/vertical/parallel). Новый инструмент
drawing_add_linear_dimension. DrawingViewsResult += ViewNumbers (адресация видов).

Находка: размеры НЕ в IView.ObjectCount (он про геометрию IDrawingContainer) —
проверка попадания в вид через ISymbols2DContainer.LineDimensions.Count.

Ревью Codex спека учтено: RequireDistinctPoints (нулевая длина) + Valid после
Update; контракт «первый несистемный вид»; null-check Add; AutoNominalValue явно;
ViewNumbers required + текст ответа create_standard_views; тесты адресации/негатив.

Тесты: +8 unit (DimensionOrientations, DrawingValidation), +5 integration
(DrawingDimensionTests). Итого 131 unit + 70 integration = 201.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 18:01:02 +03:00
mikhail ca3d91ae68 docs: спек drawing_add_linear_dimension — линейный размер на виде (API7)
Веха 2D-ЧЕРТЁЖ, инкремент 3. Спайк подтвердил: (ISymbols2DContainer)view QI →
LineDimensions.Add → X1..Y3 (локальная СК вида) + Orientation + Update; авто-значение
((IDimensionText)dim).NominalValue == расстояние (проверено 40). Плюс: DrawingViewsResult
+= ViewNumbers (адресация видов, закрывает замечание Codex из ревью видов).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 17:49:18 +03:00
mikhail d6a129b0d1 docs: handoff — основная надпись готова (инкремент 2 чертежа); следующее — размеры на видах
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 17:32:22 +03:00
mikhail 56f6e0b45a Merge feat/drawing-title-block: основная надпись чертежа (оформление, инкремент 2)
drawing_fill_title_block — заполнение граф штампа (обозначение/наименование/
материал) активного чертежа через API7 (IStamp.Text[id].Str + Update).
74 инструмента, 188 тестов (123 unit + 65 integration). Спек + ревью Codex
(спека и реализации) учтены.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 17:31:31 +03:00
mikhail 034e9aee24 docs: drawing_fill_title_block — оформление чертежа (74 инструмента, 188 тестов)
README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation.html: счётчики 73→74,
177→188; drawing_fill_title_block в группе Drawing; факты основной надписи
(LayoutSheets.ItemByNumber[1].Stamp, Text[id].Str индексировано, StampField→графы).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 17:31:31 +03:00
mikhail eaa4a56708 feat: drawing_fill_title_block — упрочнение по ревью Codex реализации
#3/#6: доступ к графе через RequireStampCell(stamp,columnId) — null-check ячейки
+ единое место валидации (запись и чтение). #4: проверка columnId>0 в helper
(защищает и ReadStampCellAsync). #2/#5: нетранзакционность записи зафиксирована
комментарием (откат при Update()==FALSE спекулятивен, не делаем). RCW — долг v2-2.

Тесты без изменений в числе: 123 unit + 65 integration = 188 зелёных.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 17:25:41 +03:00
mikhail 742a97177b feat: drawing_fill_title_block — основная надпись чертежа (API7)
Веха 2D-ЧЕРТЁЖ, инкремент 2 (оформление). DrawingService.FillTitleBlockAsync:
LayoutSheets.ItemByNumber[1].Stamp.Text[id].Str = text → Update(). Enum StampField
→ номер графы ГОСТ (designation=2, name=1, material=3). Заполнение нескольких
граф за вызов; перезапись (Str замещает, Clear не нужен — подтверждено спайком).
Новый инструмент drawing_fill_title_block; ReadStampCellAsync для проверки.

Ревью Codex спека учтено: Update() результат проверяется; null-checks
(LayoutSheets/sheet/Stamp); RequireActiveDrawing выделен (сохраняет cast-проверку);
ColumnId switch с дефолтным throw; счётчик = непустые поля; name=графа 1 однозначно.

Валидация — чистый StampFields (ColumnId + Collect). Тесты: +7 unit (StampFields),
+4 integration (DrawingStampTests: заполнение+reread 3 граф, перезапись, пустой
ввод, не-чертёж). Итого 123 unit + 65 integration = 188.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 17:20:16 +03:00
mikhail db23a1a748 docs: спек drawing_fill_title_block — основная надпись чертежа (API7)
Веха 2D-ЧЕРТЁЖ, инкремент 2. Спайк подтвердил round-trip графы: LayoutSheets.
ItemByNumber[1].Stamp.Text[id].Str + Update(). Enum StampField→номер графы ГОСТ
(designation=2, name=1, material=3). Заполнение нескольких граф за вызов.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 17:07:35 +03:00
mikhail 23d245fd78 docs: handoff — веха 2D-чертёж начата (drawing_create_standard_views готов)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 14:45:48 +03:00
mikhail ddbb46196e Merge feat/drawing-standard-views: стандартные виды чертежа (веха 2D-чертёж)
drawing_create_standard_views (инкремент 1 вехи 2D-ЧЕРТЁЖ): стандартные
ассоциативные виды детали/сборки на чертеже (API7 IViews.AddStandartViews).
73 инструмента, 177 тестов (116 unit + 61 integration). Спек + ревью Codex
(спека и реализации) учтены.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 14:44:28 +03:00
mikhail 6c6add72e2 docs: drawing_create_standard_views — веха 2D-чертёж начата (73 инструмента, 177 тестов)
README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation.html: счётчики 72→73,
156→177; новая группа инструментов Drawing; факты DrawingService (AddStandartViews,
ProjectionsTypes=object[]{1,3,5} SAFEARRAY VT_I4, created==3, непустота по новым
видам, откат IView.Delete).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 14:44:28 +03:00
mikhail 5aa4221a37 feat: drawing_create_standard_views — упрочнение по ревью Codex реализации
#1: непустота проверяется у ВНОВЬ созданных видов (разница IView.Number), не по
всей коллекции — прежняя геометрия чертежа не маскирует пустые новые виды.
#3: откат созданных видов (IView.Delete) при created!=3 или пустых видах.
#7: unit-тест нормализации кириллического пути. #4: повторный вызов (дубликаты)
отражён в описании инструмента. #5/#6/#2 — по обоснованию (release RCW отклонён v2-2).

Тесты: 116 unit + 61 integration = 177 зелёных.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 14:37:35 +03:00
mikhail de063290f4 feat: drawing_create_standard_views — стандартные виды чертежа (API7)
Веха 2 (2D-ЧЕРТЁЖ), инкремент 1. Новый DrawingService (API7, namespace
Kompas.Mcp.Core.Drawings): doc2d.ViewsAndLayersManager.Views.AddStandartViews(
path, "#Спереди", {1,3,5}=front/top/left, x, y, scale, 20, 20). Новый DrawingTools
(инструмент drawing_create_standard_views), регистрация в DI.

Подтверждено спайком: object[]→SAFEARRAY VT_I4 ОК, 3 вида создаются (Count 1→4).
Ревью Codex спека учтено: File.Exists+Length>0; created==3 строго; гарантия
непустоты (сумма ObjectCount>0); опц. x,y (повторный вызов не стопкой); record
DrawingViewsResult{Created,Total}. Точечный release RCW отклонён (v2-2).

Валидация — чистый DrawingValidation (расширение .m3d/.a3d, scale>0).
Тесты: +16 unit (DrawingValidation), +3 integration (DrawingTests: создание 3 видов,
отклонение не-чертежа, несуществующий файл). Итого 114 unit + 61 integration = 175.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 14:30:25 +03:00
mikhail 46648f7635 docs: спек drawing_create_standard_views — стандартные виды чертежа (API7)
Веха 2 (2D-ЧЕРТЁЖ), инкремент 1. Механизм подтверждён спайком: doc2d.
ViewsAndLayersManager.Views.AddStandartViews(path, "#Спереди", {1,3,5}, ...);
object[]→SAFEARRAY VT_I4 ОК, 3 вида создаются (Count 1→4). Новый DrawingService.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 14:09:43 +03:00
mikhail cb1984f227 docs: handoff — инкремент 2 (assembly_add_mate) готов; далее — компоненты/чертёж
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 13:53:56 +03:00
mikhail 7a4370907a Merge feat/assembly-add-mate: сопряжения компонентов сборки + IntegrationTestBase
assembly_add_mate (инкремент 2 вехи СБОРКИ): сопряжения coincidence/distance
между гранями компонентов (API7 IMateConstraints3D). + рефакторинг тестов на
IntegrationTestBase (per-test очистка документов). 72 инструмента, 156 тестов
(98 unit + 58 integration). Спек + ревью Codex (спека и реализации) учтены.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 13:52:45 +03:00
mikhail 1493eaa776 docs: assembly_add_mate — сопряжения сделаны (72 инструмента, 156 тестов)
README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation.html: счётчики 71→72,
138→156; группа Assembly +assembly_add_mate; факты AddMateAsync (IMateConstraints3D,
FindObjectsByPoint FirstLevel=false, MateType, Valid-проверка); упомянут
IntegrationTestBase (per-test очистка).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 13:52:35 +03:00
mikhail 3fe06f61dc feat: assembly_add_mate — упрочнение по ревью Codex реализации
#1: Valid==false → ошибка (откат), а не «успех с valid=false»; косвенно отсекает
грани одного компонента (вырожденный мат). #6/#7: distance value строго > 0
(нулевой зазор = coincidence) + unit-кейс value=0 бросает. #8: негативный
интеграционный тест — точка в пустоте → грань не найдена → ошибка.
#2/#3/#4 оставлены по обоснованию (best-effort откол, Add??throw, первый IFace —
консистентно с HoleService). #9 точечный release RCW отклонён (конвенция v2-2).

Тесты: 98 unit + 58 integration = 156 зелёных.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 13:45:35 +03:00
mikhail 8282716773 feat: assembly_add_mate — сопряжения компонентов сборки (API7)
Веха СБОРКИ, инкремент 2. AssemblyService.AddMateAsync (API7): top.MateConstraints
→ Add(MateConstraintType) → BaseObject1/2 (грани через FindObjectsByPoint
FirstLevel=false) → ParamValue → Update → RebuildModel. Свой enum MateType
(Coincidence/Distance) → MateConstraintType. MCP-инструмент assembly_add_mate.

Подтверждено спайком и тестами: coincidence сводит грани заподлицо (ширина 120→40),
distance(30) держит зазор 30 (→70); Update=True Valid=True. Решатель может двигать
любой компонент → проверка по ширине габарита.

Ревью Codex учтено: scope урезан до coincidence/distance (только геометрически
проверенные); валидация value по типу (RequireMateValue); полный откат при любой
ошибке после Add (mate.Owner.Delete); возврат AddedMate{Type,Valid}; усиленные
ассерты (Valid, размеры компонентов неизменны). Точечный release RCW отклонён
(конвенция v2-2). Прочие типы (parallel/concentric/angle/…) — будущие инкременты.

Тесты: +14 unit (Mates.Parse/RequiresValue, RequireMateValue), +2 integration
(AssemblyMateTests). Итого 97 unit + 57 integration = 154 зелёных.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 13:39:04 +03:00
mikhail 8afad88241 test: per-test очистка документов через IntegrationTestBase (CloseAllAsync)
Базовый класс IntegrationTestBase (IAsyncLifetime) закрывает все открытые
документы КОМПАС после КАЖДОГО теста (DocumentService.CloseAllAsync) — чтобы не
копились вкладки-пустышки и упавший Assert не оставлял открытый документ. Все
интеграционные тест-классы переведены на него (: base(fx)); индивидуальные
finally CloseAsync сохранены как первичная очистка.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 13:38:48 +03:00
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 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