# ADR-0003 — Phase 1 MVP 완성 선언

상태: **Accepted (2026-05-08)**

---

## 결정

Phase 1 MVP의 **코드 골격 + 자동 검증 + 협업자 산출물**을 완성으로 선언한다. 잔여는 사용자 PC GUI에서만 확인 가능한 항목 (Play 모드 60fps, Inspector 사용성, 협업자 시연)이다.

## 배경

- 2026-05-07 사용자 명시: "phase1 완성 목표로 자율진행 계속하라. 모든 검증은 phase1 완성 후 한다."
- Phase 0 (R1~R4 핵심 리스크 해소) 모두 완료된 시점에서 Phase 1 진입
- 자율 진행 1세션 안에 코드 골격 + 자동 검증 + 보고/배포 자료 모두 작성

## 완성 기준 (체크리스트)

### A. 도메인 모델·이벤트 버스

- [x] `Part`/`MovementSpec`/`Axis`/`MovementType` 직렬화 가능 데이터 모델
- [x] `Constraint` 4종 (Fixed / ParentChild / Hinge / Slider)
- [x] `ConstraintGraph` + `EventBus` (재귀 publish 큐잉, hopCount cycle 차단)
- [x] `MotionEvent` / `CollisionEvent` 단일 직렬화 타입

### B. 임포트 파이프라인

- [x] STEP → stage1.glb (cadquery-ocp + 인스턴스/재질/색/face-level 보존)
- [x] stage1.glb → factory.glb (Blender Draco level=6, 사용자 ratio)
- [x] glTFast Editor 임포트 PoC 6/6 PASS (8763 부품)
- [x] 변환 옵션 default 채택 (v4-face-color, ADR-cad-0002)

### C. Editor UI

- [x] `Factory00InspectorWindow` (UI Toolkit TreeView + SearchField + 속성 편집기)
- [x] 검색 매칭 노란 강조 + 조상 자동 펼침
- [x] `×N` 인스턴스 배지, 그룹/부품 색 구분
- [x] type/movable/movement PopupField/Toggle/FloatField

### D. Runtime

- [x] `Factory00Bootstrap` (lazy init 안전, async glb 로드 → ConstraintGraph 자동 빌드)
- [x] `SimulationLoop` (Update tick + EventBus.Publish + Part→Transform 동기화)
- [x] `CollisionReporter` (OnCollisionEnter → EventBus.PublishCollision)
- [x] BoxCollider 자동 부착 (ADR-0002 AABB 1차 정책)
- [x] MainHUD UXML/USS (topbar + 좌 ListView + 우 detail-pane)
- [x] `SceneBuilder` (MainScene 자동 생성)

### E. 데이터 영속성

- [x] `ProjectFile` JSON Save/Load (parts + constraints, JsonUtility 호환)
- [x] InspectorWindow 툴바에 Save/Load 버튼
- [x] `Factory00Bootstrap.SaveProject/LoadProject` Runtime API

### F. 빌드

- [x] `BuildScript` (Tools→factory00→Build, BuildBatch CLI 호환)
- [x] StreamingAssets에 .glb·project.json 자동 복사
- [x] `Builds/Win64/factory00.exe` 출력 경로 표준

### G. 자동 검증

- [x] **Phase 1 통합 테스트 11/11 PASS** (Bootstrap.LoadAndInitialize + Constraint 자동 + JSON 라운드트립)
- [x] **Editor Unit Tests 20/20 PASS** (EventBus·ConstraintGraph 4종·ProjectFile·Part defaults·Cycle hop limit)
- [x] Unity batch -quit 컴파일 검증 6회 (error CS / warning CS 0건 누적)

### H. 협업자 산출물

- [x] `README.md` (개발자/협업자 가이드)
- [x] `.gitignore` (Unity/Python/외부 도구/빌드/PDF)
- [x] `wiki/topics/demo/0001-collaborator-demo-scenario.md` (10분 시연 흐름 + Q&A)
- [x] 보고 페이지 PDF v1.9 (1.15MB, Funnel HTTP 200)
- [x] 외부 영구 URL https://os-file-server.tail2b816d.ts.net/

## Phase 1 미완 (사용자 PC GUI 필요)

- [ ] Unity Editor에서 InspectorWindow 직접 사용 → UX 만족도 확인
- [ ] Play 모드 60fps 측정 (3500 GameObject + collider + simulation)
- [ ] 협업자 시연 1회 (Inspector + 변환 + 시뮬 회전)
- [ ] Production .exe 빌드 검증 (Windows Build Support 모듈 필요)

이 항목들은 사용자 GUI 환경 없이는 자율 검증 불가. 사용자 검증 후 Phase 2 진입.

## Phase 2 입력 — 우선순위 후보

P1 (사용자 검증 통과 후 즉시):
- 회전·이동 시뮬레이션 시각 검증 (Inspector에서 motor 부여 → Play → 어셈블리 동기 회전 시연)
- AABB 충돌 토스트 UI (CollisionEvent → 화면 우상단 알림)
- 60fps 미달 시 LOD/Culling 처리 — DOTS/Job 도입 검토

P2 (Pro 차별화):
- MeshCollider 정적 검증 모드
- Constraint 노드 그래프 UI
- 시간 기반 시퀀스 시뮬레이션
- PLC/IO 연동 (Modbus TCP, OPC UA)

P3 (출시 후):
- WebGL 빌드 (잠재 — 산업용 트윈에서 사용성 별도 검증 필요)
- 다국어 (영어 1차)
- 라이선스 모델 결정

## 결과 메트릭

| 지표 | 값 |
|---|---|
| 컴파일 | error CS 0 · warning CS 0 (6차 누적) |
| 통합 테스트 | 11/11 PASS |
| Unit Tests | 20/20 PASS |
| 코드 라인 (Phase 1 MVP 추가분) | ~1500 |
| 협업자 어셈블리 임포트 | 8763 부품 / 자동 Constraint 8762 / 2.00초 |
| 외부 영구 URL | HTTP 200 (Tailscale Funnel, 만료 없음) |
| PDF 보고서 | 1.15MB (v1.9) |

## 참고

- `wiki/INDEX.md` — 체크리스트 SSOT
- `wiki/journal/2026-05-07.md` — 자율 진행 세션 기록
- `wiki/topics/cad-pipeline/0002-conversion-options-default.md` — 변환 옵션 ADR
- `wiki/topics/ui/0001-inspector-ux.md` — Inspector UX ADR
