engine-bridge v2 (MEF plugin masquerade) #10

Closed
opened 2026-04-07 16:01:50 +09:00 by kimminsung · 1 comment
Owner

목표

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

engine-bridge v1 probe design 권고안(MEF plugin masquerade)을 실제 구현. recordingtest 전용 플러그인이 SUT Plugins/에 drop-in되면 로컬 HTTP로 HmEG 상태 노출.

범위

  • Recordingtest.EgPlugin (MEF dll) — HttpListener + 엔드포인트 5개
  • Recordingtest.EngineBridge.ClientHmEgHttpSnapshot : IEngineSnapshot
  • Integration tests (fake HTTP server) + plugin 단위 테스트
  • 수동 배포 가이드 docs/guides/engine-bridge-deploy.md

비목표

  • SUT 실제 실행 (수동 smoke test)
  • HmEG 매핑 완성도 (error fallback 중심)

사이클

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

Related: #2, #9

## 목표 Sprint Contract: `docs/contracts/engine-bridge-v2.md` engine-bridge v1 probe design 권고안(MEF plugin masquerade)을 실제 구현. recordingtest 전용 플러그인이 SUT Plugins/에 drop-in되면 로컬 HTTP로 HmEG 상태 노출. ## 범위 - `Recordingtest.EgPlugin` (MEF dll) — HttpListener + 엔드포인트 5개 - `Recordingtest.EngineBridge.Client` — `HmEgHttpSnapshot : IEngineSnapshot` - Integration tests (fake HTTP server) + plugin 단위 테스트 - 수동 배포 가이드 `docs/guides/engine-bridge-deploy.md` ## 비목표 - SUT 실제 실행 (수동 smoke test) - HmEG 매핑 완성도 (error fallback 중심) ## 사이클 1. Generator 세션 2. Evaluator 세션 → `/evaluate engine-bridge-v2` Related: #2, #9
Author
Owner

engine-bridge v2 — Verdict: pass

Generator (b1c2383) — Editor03 discovery

MetadataLoadContext로 발견한 실제 plugin 계약:

  • HmEG.IPlugin (HmEG.dll) — 실제 타입 (members: Name, View, RethrowException, Run(object[]))
  • Editor.PluginInterface.EditorPlugin (Editor03.PluginInterface.dll) — 추상 베이스, IPlugin 구현
  • MEF [Export] 없음HmEG.PluginLoaderIPlugin 타입을 직접 발견 (EgBoxPlugin 샘플로 확인)
  • Editor07.WidgetPluginInterface는 별도 위젯 계약 (불필요)
  • MetadataLoadContext resolver에 Microsoft.WindowsDesktop.App.Ref 팩 추가 필요 (WindowsBase 의존성)

구현: HmEgBridgePlugin : EditorPlugin (Name/Description/Initialize override, 생성자에서 방어적으로 listener 부팅)

Evaluator DoD (전부 pass)

# DoD Score
1 Build pass (0/0)
2 Integration tests pass 6/6
3 Plugin tests pass 5/5 (≥3)
4 csproj TFM/HintPath/Private=false pass
5 HmEgBridgePlugin 인터페이스 상속 shape pass
6 StateRouter 5 엔드포인트 + 404 + error payload pass
7 PortResolver env+default+safe parse pass
8 HmEgHttpSnapshot timeout/exception pass
9 테스트 유의성 pass
10 Deploy guide + SUT-write 경고 pass
11 SUT 폴더 쓰기 없음 pass
12 DLL 복사 없음 pass

비용

단계 Tokens
Generator (engine-bridge v2) ~93k
Evaluator ~38k
Orchestrator 분담 ~20k
합계 ~151k

핵심 발견

  • SUT가 MEF가 아닌 자체 PluginLoader를 쓰므로 [Export] 속성 불필요 — 단순히 IPlugin 타입을 구현한 dll을 Plugins/ 폴더에 넣기만 하면 됨 → 배포 난이도가 예상보다 낮음
  • Editor03.PluginInterface 에 WPF 의존성 다수 → net8.0-windows 필수
  • HttpListener urlacl은 첫 실행 시 관리자 권한 필요할 수 있음 (가이드 트러블슈팅 기록)

다음 단계

v3: ReflectionEngineStateProvider 실매핑 (smoke test 이후). HmEG 내부에서 선택된 객체 ID, 카메라 상태를 실제로 읽어 반환.

closing v2.

## engine-bridge v2 — Verdict: **pass** ✅ ### Generator (`b1c2383`) — Editor03 discovery MetadataLoadContext로 발견한 실제 plugin 계약: - **`HmEG.IPlugin`** (HmEG.dll) — 실제 타입 (members: `Name`, `View`, `RethrowException`, `Run(object[])`) - **`Editor.PluginInterface.EditorPlugin`** (Editor03.PluginInterface.dll) — 추상 베이스, `IPlugin` 구현 - **MEF `[Export]` 없음** — `HmEG.PluginLoader`가 `IPlugin` 타입을 직접 발견 (`EgBoxPlugin` 샘플로 확인) - `Editor07.WidgetPluginInterface`는 별도 위젯 계약 (불필요) - MetadataLoadContext resolver에 `Microsoft.WindowsDesktop.App.Ref` 팩 추가 필요 (WindowsBase 의존성) 구현: `HmEgBridgePlugin : EditorPlugin` (`Name`/`Description`/`Initialize` override, 생성자에서 방어적으로 listener 부팅) ### Evaluator DoD (전부 pass) | # | DoD | Score | |---|-----|-------| | 1 | Build | pass (0/0) | | 2 | Integration tests | pass 6/6 | | 3 | Plugin tests | pass 5/5 (≥3) | | 4 | csproj TFM/HintPath/Private=false | pass | | 5 | HmEgBridgePlugin 인터페이스 상속 shape | pass | | 6 | StateRouter 5 엔드포인트 + 404 + error payload | pass | | 7 | PortResolver env+default+safe parse | pass | | 8 | HmEgHttpSnapshot timeout/exception | pass | | 9 | 테스트 유의성 | pass | | 10 | Deploy guide + SUT-write 경고 | pass | | 11 | SUT 폴더 쓰기 없음 | pass | | 12 | DLL 복사 없음 | pass | ### 비용 | 단계 | Tokens | |------|--------| | Generator (engine-bridge v2) | ~93k | | Evaluator | ~38k | | Orchestrator 분담 | ~20k | | **합계** | **~151k** | ### 핵심 발견 - SUT가 **MEF가 아닌 자체 PluginLoader**를 쓰므로 `[Export]` 속성 불필요 — 단순히 `IPlugin` 타입을 구현한 dll을 `Plugins/` 폴더에 넣기만 하면 됨 → **배포 난이도가 예상보다 낮음** - `Editor03.PluginInterface` 에 WPF 의존성 다수 → `net8.0-windows` 필수 - `HttpListener` urlacl은 첫 실행 시 관리자 권한 필요할 수 있음 (가이드 트러블슈팅 기록) ### 다음 단계 **v3**: ReflectionEngineStateProvider 실매핑 (smoke test 이후). HmEG 내부에서 선택된 객체 ID, 카메라 상태를 실제로 읽어 반환. closing v2.
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: kimminsung/recordingtest#10