Set up AI dev environment for recordingtest (#2)

- CLAUDE.md with collaboration rules and Planner/Generator/Evaluator cycle
- .claude/ agents, commands, skills, hooks per Claude Code conventions
- Sprint Contracts for sut-prober, normalizer, recorder, player, diff-reporter
- SUT catalog (EG-BIM Modeler, 187 plugins) and .gitignore excluding SUT tree
- PROGRESS.md / PLAN.md as shared agent handoff state
- Solution scaffold targeting sut-prober PoC

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
minsung
2026-04-07 13:57:20 +09:00
parent a48a8a2d1d
commit 7ffbb1f757
47 changed files with 1886 additions and 11 deletions

100
docs/sut-catalog/catalog.md Normal file
View File

@@ -0,0 +1,100 @@
# SUT Catalog (v0, 정적 분석)
> 수동 관찰 기반 초기 카탈로그. `sut-prober` PoC 완료 시 기계 생성 파일로 교체된다.
> 마지막 갱신: 2026-04-07
## 개요
- **이름**: EG-BIM Modeler
- **위치**: `EG-BIM Modeler/` (git 제외)
- **실행파일**: `EG-BIM Modeler.exe` (.NET / WPF)
- **구성**: `.deps.json`, `.runtimeconfig.json`, `.pdb` 동봉
## 핵심 어셈블리
| 이름 | 역할 | PDB |
|------|------|-----|
| `HmEG.dll` | 자체 3D 엔진 | ✅ (`HmEG.pdb`, `HmEG.xml`) |
| `HmGeometry.dll` / `HmGeometry.V2.dll` | 지오메트리 커널 | ✅ |
| `HmTriangle.dll` | 삼각분할 | ✅ |
| `HmPG.dll` | (추정) 페러미터 그래프/프로파일 | - |
| `HmCommonUI.dll`, `HmCommonBridge.dll` | 공통 UI / 네이티브 브릿지 | - |
| `Editor02.HmEGAppManager.dll` | 앱 생명주기 / plugin 매니저 (MEF 로드 추정) | ✅ |
| `Editor03.PluginInterface.dll` | Plugin 기본 계약 | ✅ |
| `Editor04.CommandControl.dll` | 명령 파이프라인 UI | ✅ |
| `Editor05.CommandCore.dll` | 명령 실행 코어 | ✅ |
| `Editor06.CommandCustom.dll` | 커스텀 명령 | ✅ |
| `Editor07.WidgetPluginInterface.dll` | 위젯 플러그인 계약 | ✅ |
| `EditorCore.dll` | Editor 코어 | ✅ |
| `Editor01.Localization.dll` | 다국어 | ✅ |
| `Editor.AI01.HttpConnector.dll` | AI 연동 | ✅ |
## 렌더링
- **SharpDX** (D3D9/D3D11/DXGI/Direct2D, Mathematics, D3DCompiler)
- 3D 뷰포트는 D3D surface → **UIA 사각지대**
- `assimp.dll` / `AssimpNet.dll` → 메시 임포트
- `freetype6.dll`, `SharpFont.dll` → 폰트
- `SharpVectors.*` → SVG 지원
## UI 스택
- `MahApps.Metro`, `ControlzEx`, `Dragablz`
- `CommunityToolkit.Mvvm`
- `Microsoft.Xaml.Behaviors`, `System.Windows.Interactivity`
- `System.Windows.Controls.WpfPropertyGrid`
- `Microsoft.Web.WebView2.*` (WebView2 패널)
## 유틸/공용
- `Serilog` + `Serilog.Sinks.File`, `log4net`
- `Newtonsoft.Json`, `Google.Protobuf`, `MemoryPack.Core`
- `UnitsNet`, `FluentScheduler`, `System.Reactive`, `Flurl.Http`
- `BaronSoftware.Auth.dll` — 인증/라이선스 추정 (**레코딩 시 민감정보 주의**)
## Json 설정 (텍스트 golden-file 1차 타깃)
`EG-BIM Modeler/Json/`:
- `Settings.json`, `DefaultSettings.json`
- `CategoryCommands.json`, `DefaultCategoryCommands.json`
- `CommandAlias.json`, `DefaultCommandAlias.json`
- `KeyShortCut.json`, `DefaultKeyShortCut.json`
- `MouseSnap.json`, `DefaultMouseSnap.json`
- `StartupCommand.json`, `DefaultStartupCommand.json`
- `Units.json`, `DefaultUnits.json`
- `Materials.json`
- `RecentFiles.json`**확실히 비결정적** (최근 사용 파일 경로)
### 비결정성 후보 필드 (정규화 대상)
- `RecentFiles.json` 전체
- 모든 `Settings.json` 내부의 경로·창 크기·마지막 실행 시간
- GUID·타임스탬프 (포맷 확인 필요)
## 저장 파일 포맷
- `lmd.hme` — 자체 모델 포맷 (`.hme`)
- `jversion.egm` — 버전/메타 파일
- **바이너리 추정** — 별도 포맷 분석 contract 필요
## 로컬라이제이션
- `ko-KR`, `en-US`, `ja-JP`, `es-ES` 리소스 폴더
- `Editor01.Localization.dll` 경유
## MEF Plugin
- 위치: `EG-BIM Modeler/Plugins/Eg*Plugin/`
- **총 187개** (2026-04-07 스냅샷)
- 카테고리: 생성(Box, Circle, Arc, Curve, Cone, Cylinder …), Boolean(Union/Intersection/Difference), Array(Linear/Polar/Crv), Align, Check(Border/Disjointed/Duplicated/NonManifold/Self-Intersection/Overlap/ZeroArea/ZeroCurve), Audit, Block(Edit), Chamfer, Clash, Cap, Cut, DeleteFaces, Import/Export 등
- 전체 목록: [plugins.md](plugins.md)
## recordingtest 영향 요약
1. **1차 검증 타깃**: `Json/` 텍스트 파일 (정규화 쉬움)
2. **2차**: `.hme`/`.egm` 파서 필요
3. **3D 뷰포트**: 좌표 입력 + engine-bridge
4. **Plugin 카탈로그**: sut-prober 자동 덤프
5. **PDB 풍부** → engine-bridge 리플렉션 비용 낮음
6. **인증/라이선스**: 자동화 테스트 환경에서 로그인 상태 유지/마스킹 필요

199
docs/sut-catalog/plugins.md Normal file
View File

@@ -0,0 +1,199 @@
# EG-BIM Modeler Plugin List
- **스냅샷 일시**: 2026-04-07
- **총 개수**: 187
- **경로**: `EG-BIM Modeler/Plugins/`
> 자동 생성 전 수동 덤프. `sut-prober` PoC 완료 시 `plugins.json`으로 교체된다.
## 전체 목록 (사전순)
```
Eg3DFacePlugin
Eg3DMImportExporter
EgAddToGroupPlugin
EgAlignPlugin
EgAlignSelectedVerticesPlugin
EgAlignVerticesPlugin
EgAnglePlugin
EgArcPlugin
EgAreaCentroidPlugin
EgAreaPlugin
EgArrayCrvPlugin
EgArrayLinearPlugin
EgArrayPlugin
EgArrayPolarPlugin
EgAuditPlugin
EgBlockEditPlugin
EgBlockPlugin
EgBooleanDifferencePlugin
EgBooleanIntersectionPlugin
EgBooleanUnionPlugin
EgBoundingBoxPlugin
EgBoxPlugin
EgBuildSectionPlugin
EgCPlanePlugin
EgCapPlugin
EgChamferPlugin
EgChangeColorPlugin
EgCheckBorderEdgePlugin
EgCheckDisjointedMeshPlugin
EgCheckDuplicatedVertexPlugin
EgCheckNonManifoldEdgePlugin
EgCheckSelfIntersectionPlugin
EgCheckSelfOverlapPlugin
EgCheckZeroAreaPlugin
EgCheckZeroCurvePlugin
EgCirclePlugin
EgClashPlugin
EgCloseCrvPlugin
EgClosestPtPlugin
EgConePlugin
EgConvertTextToBlockAttributePlugin
EgCopyPlugin
EgCopyToClipboardPlugin
EgCrvEndPlugin
EgCrvStartPlugin
EgCurvePlugin
EgCurveThroughPtPlugin
EgCutPlugin
EgCylinderPlugin
EgDeleteFacesPlugin
EgDeletePlugin
EgDeleteSubCrvPlugin
EgDeselByUidsPlugin
EgDimAnglePlugin
EgDirPlugin
EgDistancePlugin
EgDividePlugin
EgDomainPlugin
EgDotPlugin
EgDupBorderPlugin
EgDupEdgePlugin
EgDupMeshHoleBoundaryPlugin
EgEditTheGradingElevationPlugin
EgEllipsePlugin
EgEllipsoidPlugin
EgEvaluatePtPlugin
EgExplodeBlockPlugin
EgExplodePlugin
EgExportByPathPlugin
EgExtendPlugin
EgExtractMeshFacePlugin
EgExtractNonManifoldMeshEdgesPlugin
EgExtractPtPlugin
EgExtrudeAlongCrvPlugin
EgExtrudePlugin
EgFillMeshHolePlugin
EgFilletEdgePlugin
EgFilletPlugin
EgFilterByFaceCountPlugin
EgFilterByLayerPlugin
EgFilterByLengthPlugin
EgFilterByModelTypePlugin
EgFilterBySpatialBoxPlugin
EgFilteringWithXYPlanePlugin
EgFindTextPlugin
EgFlipPlugin
EgGroupPlugin
EgHandleCurvePlugin
EgHidePlugin
EgHyperbolaPlugin
EgImportByPathPlugin
EgInsertPlugin
EgInterpCrvPlugin
EgIsolatePlugin
EgJoinPlugin
EgLengthPlugin
EgLinePlugin
EgLineSmoothPlugin
EgLoftPlugin
EgMarginLinePlugin
EgMatchPropertiesPlugin
EgMergeFacesPlugin
EgMeshIntersectPlugin
EgMeshPatchPlugin
EgMeshPolylinePlugin
EgMirrorPlugin
EgModelClearPlugin
EgMovePlugin
EgObjectDescriptionPlugin
EgOffsetMeshPlugin
EgOffsetPlugin
EgOneLayerOffPlugin
EgOneLayerOnPlugin
EgOpenURLPlugin
EgOrientPlugin
EgParabolaPlugin
EgPastePlugin
EgPatchPlugin
EgPipePlugin
EgPlanarDifferencePlugin
EgPlanarIntersectionPlugin
EgPlanarUnionPlugin
EgPlanePlugin
EgPlaneThroughPtPlugin
EgPointPlugin
EgPointsOffPlugin
EgPointsOnPlugin
EgPointsPlugin
EgPolygonCountPlugin
EgPolygonPlugin
EgPolylinePlugin
EgProfileSweepPlugin
EgProjectPlugin
EgProjectionPointPlugin
EgPyramidPlugin
EgRLeaderEditPlugin
EgRebuildPlugin
EgRectanglePlugin
EgReduceMeshPlugin
EgRemoveFromGroupPlugin
EgRemoveSelfIntersectionPlugin
EgRepairCrvTopologyPlugin
EgRevolvePlugin
EgRibbonPlugin
EgRoadSectionPlugin
EgRotate3DPlugin
EgRotatePlugin
EgScale1DPlugin
EgScale2DPlugin
EgScalePlugin
EgScreenShotPlugin
EgSelBoxPlugin
EgSelByUidsPlugin
EgSelColorPlugin
EgSelLayerPlugin
EgSelNamePlugin
EgSelectedLayersOffPlugin
EgSetDisplayModePlugin
EgSetFocusedViewportPlugin
EgSetGroupNamePlugin
EgSetObjectNamePlugin
EgSetViewmodePlugin
EgShearPlugin
EgShowPlugin
EgSlabPlugin
EgSlopePlugin
EgSnipCrvPlugin
EgSpherePlugin
EgSplitDisjointMeshPlugin
EgSplitPlugin
EgSrfPtPlugin
EgSubCrvPlugin
EgSurfaceQuadRemeshPlugin
EgSweep1Plugin
EgSweep2Plugin
EgTextPlugin
EgTorusPlugin
EgTrimPlugin
EgTruncatedPyramidPlugin
EgTubePlugin
EgUnGroupPlugin
EgUngroupAllPlugin
EgUnifyNormalPlugin
EgVerticalScalePlugin
EgVolumeCentroidPlugin
EgZoomPlugin
HMEGImportExport
```