engine-bridge PoC v1 (정적 분석 + API 초안) #9

Closed
opened 2026-04-07 15:42:06 +09:00 by kimminsung · 1 comment
Owner

목표

Sprint Contract: docs/contracts/engine-bridge.md

HmEG 내부(선택/카메라/씬/렌더)에 접근할 경로 확보. v1은 정적 분석 + API 초안 + probe 설계 문서까지. 실제 attach는 v2.

범위

  • Recordingtest.EngineBridge 라이브러리 + Recordingtest.EngineBridge.Probe exe
  • MetadataLoadContext로 HmEG/Editor/HmGeometry 어셈블리 정적 분석
  • Select/Camera/Scene/Render 후보 카탈로그화 (docs/engine-catalog/*.json)
  • IEngineSnapshot 인터페이스 + CameraState/SceneSummary DTO 초안
  • docs/engine-bridge-probe-design.md — in-process injection 옵션 비교
  • xUnit 테스트 ≥ 5
  • SUT 실행 금지 (정적 분석만)

사이클

  1. Generator 세션
  2. Evaluator 세션 → /evaluate engine-bridge

Related: #2, #8

## 목표 Sprint Contract: `docs/contracts/engine-bridge.md` HmEG 내부(선택/카메라/씬/렌더)에 접근할 경로 확보. v1은 **정적 분석 + API 초안 + probe 설계 문서**까지. 실제 attach는 v2. ## 범위 - `Recordingtest.EngineBridge` 라이브러리 + `Recordingtest.EngineBridge.Probe` exe - `MetadataLoadContext`로 HmEG/Editor/HmGeometry 어셈블리 정적 분석 - Select/Camera/Scene/Render 후보 카탈로그화 (`docs/engine-catalog/*.json`) - `IEngineSnapshot` 인터페이스 + `CameraState`/`SceneSummary` DTO 초안 - `docs/engine-bridge-probe-design.md` — in-process injection 옵션 비교 - xUnit 테스트 ≥ 5 - **SUT 실행 금지** (정적 분석만) ## 사이클 1. Generator 세션 2. Evaluator 세션 → `/evaluate engine-bridge` Related: #2, #8
Author
Owner

engine-bridge PoC v1 — Verdict: pass

Generator (2a4f1d3)

  • Recordingtest.EngineBridge + Recordingtest.EngineBridge.Probe + xUnit tests
  • MetadataLoadContext + PathAssemblyResolver 사용 — 정적 전용, 실행 경로 제로
  • 13개 어셈블리 로드, 후보 select=726, camera=4226, scene=3081, render=3602
  • docs/engine-catalog/{hmeg-types,hmeg-candidates}.json 결정적 생성 (2회 diff 0)
  • IEngineSnapshot 인터페이스 + HmEgSnapshot skeleton + 상수 cross-check
  • docs/engine-bridge-probe-design.md — 5개 injection 옵션 비교 + MEF plugin masquerade 권고

Evaluator DoD (전부 pass)

# DoD Score
1 Library + Probe exe pass
2 MetadataLoadContext + PathAssemblyResolver pass
3 4 카테고리 키워드 (select/camera/scene/render) pass
4 Sorted deterministic JSON pass
5 IEngineSnapshot + DTO shape pass
6 Skeleton + 상수 cross-check (HmEGAppManager x8) pass
7 Probe design doc (≥3 옵션 + 권고) pass
8 xUnit tests ≥ 5 (실제 6) pass
9 Build + tests green pass
10 SUT 폴더 쓰기 없음 pass
11 CLI 인자 + exit 0/2 pass
12 런타임 실행 경로 0 (Activator.CreateInstance, Assembly.Load( 등) pass

핵심 발견

  • HmEG에 이미 select/camera/scene/render 관련 멤버 수천 개 존재 → obfuscation 없음, v2 접근 가능성 매우 높음
  • HmEGAppManager 타입이 카탈로그에 다수 등장 → MEF plugin 로드 entry point 후보로 확인됨
  • Plugin masquerade 경로: recordingtest 전용 MEF plugin을 EG-BIM Modeler/Plugins/에 drop-in → Editor03.PluginInterface 계약 구현 → HmEG 상태를 로컬 HTTP/pipe로 노출

비용

단계 Tokens
Generator (engine-bridge) ~66k
Evaluator ~40k
Orchestrator 분담 ~15k
합계 ~121k

다음 단계

engine-bridge v2: MEF plugin masquerade 구현. 필요한 것:

  1. Editor03.PluginInterface.dll 계약 분석 (sut-prober 확장 or 별도)
  2. recordingtest 전용 plugin 프로젝트
  3. plugin 내부에서 HmEG 리플렉션 → 상태 직렬화 → 로컬 HTTP 노출
  4. recordingtest-side 클라이언트 (HmEgHttpSnapshot 구현)

closing v1.

## engine-bridge PoC v1 — Verdict: **pass** ✅ ### Generator (`2a4f1d3`) - `Recordingtest.EngineBridge` + `Recordingtest.EngineBridge.Probe` + xUnit tests - `MetadataLoadContext` + `PathAssemblyResolver` 사용 — **정적 전용**, 실행 경로 제로 - 13개 어셈블리 로드, 후보 **select=726, camera=4226, scene=3081, render=3602** - `docs/engine-catalog/{hmeg-types,hmeg-candidates}.json` 결정적 생성 (2회 diff 0) - `IEngineSnapshot` 인터페이스 + `HmEgSnapshot` skeleton + 상수 cross-check - `docs/engine-bridge-probe-design.md` — 5개 injection 옵션 비교 + **MEF plugin masquerade** 권고 ### Evaluator DoD (전부 pass) | # | DoD | Score | |---|-----|-------| | 1 | Library + Probe exe | pass | | 2 | MetadataLoadContext + PathAssemblyResolver | pass | | 3 | 4 카테고리 키워드 (select/camera/scene/render) | pass | | 4 | Sorted deterministic JSON | pass | | 5 | IEngineSnapshot + DTO shape | pass | | 6 | Skeleton + 상수 cross-check (`HmEGAppManager` x8) | pass | | 7 | Probe design doc (≥3 옵션 + 권고) | pass | | 8 | xUnit tests ≥ 5 (실제 6) | pass | | 9 | Build + tests green | pass | | 10 | SUT 폴더 쓰기 없음 | pass | | 11 | CLI 인자 + exit 0/2 | pass | | 12 | 런타임 실행 경로 0 (`Activator.CreateInstance`, `Assembly.Load(` 등) | pass | ### 핵심 발견 - **HmEG에 이미 `select`/`camera`/`scene`/`render` 관련 멤버 수천 개** 존재 → obfuscation 없음, v2 접근 가능성 매우 높음 - `HmEGAppManager` 타입이 카탈로그에 다수 등장 → MEF plugin 로드 entry point 후보로 확인됨 - **Plugin masquerade 경로**: recordingtest 전용 MEF plugin을 `EG-BIM Modeler/Plugins/`에 drop-in → `Editor03.PluginInterface` 계약 구현 → HmEG 상태를 로컬 HTTP/pipe로 노출 ### 비용 | 단계 | Tokens | |------|--------| | Generator (engine-bridge) | ~66k | | Evaluator | ~40k | | Orchestrator 분담 | ~15k | | **합계** | **~121k** | ### 다음 단계 **engine-bridge v2**: MEF plugin masquerade 구현. 필요한 것: 1. `Editor03.PluginInterface.dll` 계약 분석 (sut-prober 확장 or 별도) 2. recordingtest 전용 plugin 프로젝트 3. plugin 내부에서 HmEG 리플렉션 → 상태 직렬화 → 로컬 HTTP 노출 4. recordingtest-side 클라이언트 (`HmEgHttpSnapshot` 구현) closing v1.
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: kimminsung/recordingtest#9