# ADR-0005 — Phase 2 MVP 완성 선언

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

---

## 결정

Phase 2 MVP의 **Pro 차별화 4종 + 외부 신호 인터페이스 + 영어 로컬화 + 자동 검증**을 완성으로 선언한다.

ADR-0004에서 정의한 완성 기준 H 항목 (자동 검증 가능 영역) 모두 충족.
사용자 PC GUI에서만 가능한 시각 시연·UX 평가는 Phase 2 외 (사용자 검증 영역).

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

### A. Pro 시뮬레이션 — 시간 기반 시퀀스

- [x] `TimedSequence` 데이터 모델 (`Assets/Scripts/Sequence/TimedSequence.cs`)
- [x] `SequencePlayer` MonoBehaviour (Update tick + 시간 진행 + Step 발화 + loop)
- [x] `IPartLookup` 인터페이스 (Bootstrap이 구현)
- [x] StartMotor / StopMotor / SetSpeed 3종 액션 적용
- [x] 단위 테스트: Sort, StartMotor/StopMotor/SetSpeed, loop flag

### B. MeshCollider 정적 검증 모드

- [x] `MeshColliderBuilder` MonoBehaviour (`Assets/Scripts/Game/MeshColliderBuilder.cs`)
- [x] AABB ↔ Mesh 비파괴 토글 (BoxCollider enable/disable, 원본 보존)
- [x] 정적 검증 — Rigidbody 없이 OverlapBox/Mesh 가능 (ADR-0002 정책 준수)

### C. PLC/IO 어댑터 인터페이스

- [x] `IPlcAdapter` 추상 (`Assets/Scripts/Plc/IPlcAdapter.cs`)
- [x] `MockPlcAdapter` (메모리 기반, 시연 + 테스트용)
- [x] `PlcEventBridge` (PLC bit ↔ Part motor 매핑, OnBitChanged 콜백)
- [x] 단위 테스트: bit rising/falling 콜백, word R/W, bridge → motor on/off, 같은 값 콜백 차단

### D. AABB 충돌 토스트 UI

- [x] `CollisionToast` MonoBehaviour (`Assets/Scripts/Game/CollisionToast.cs`)
- [x] MainHUD UXML 토스트 컨테이너 추가
- [x] USS 토스트 스타일 3종 (info / warn / 기본)
- [x] 3초 + 0.4초 fade out, 동시 5개 한도

### E. Constraint 노드 그래프 1픽셀 PoC

- [x] `ConstraintGraphView` EditorWindow (`Assets/Editor/ConstraintGraphView.cs`)
- [x] 트리 깊이별 자동 레이아웃 (80개 노드 한도)
- [x] Constraint 4종 색상 직선 (Hinge=주황, Slider=보라, Fixed=청록, ParentChild=회색)
- [x] `Tools → factory00 → Constraint Graph (PoC)` 메뉴

### F. 영어 로컬화

- [x] `LocalizationManager` (`Assets/Scripts/Localization/LocalizationManager.cs`)
- [x] `Resources/Localization/ko.json` (35 키)
- [x] `Resources/Localization/en.json` (35 키)
- [x] `T(key)` + `T(key, args)` format 지원
- [x] 누락 키 → 키 자체 반환 (디버깅 친화)
- [x] `InjectForTest()` 테스트용 직접 주입 (Resources 우회)

### G. 자동 검증

- [x] **Phase 2 통합 테스트 10/10 PASS** (`Phase2IntegrationTest.cs`)
- [x] **Unit Tests 40/40 PASS** (Phase 1 20 + Phase 2 신규 20)
- [x] Unity batch -quit 컴파일 7차 누적 클린 (error CS 0 / warning CS 0)

### H. 협업자 자료

- [x] ADR-0004 Phase 2 범위 정의
- [x] **ADR-0005 Phase 2 완성 선언 (이 문서)**
- [ ] README Phase 2 섹션 추가 (다음 단계)
- [ ] 보고 페이지 R2 박스 Phase 2 행 추가 (다음 단계)
- [ ] PDF v2.x 재생성 (다음 단계)
- [ ] 영어 시연 시나리오 (Phase 3 자율 진행 후보)

## 메트릭 비교

| 지표 | Phase 1 | Phase 2 |
|---|---|---|
| 총 코드 라인 (MVP 추가분) | ~1500 | ~1500 + 800 |
| 컴파일 검증 차수 | 6차 | 7차 (누적 클린) |
| Unit Tests | 20/20 PASS | **40/40 PASS** |
| 통합 테스트 | 11/11 PASS | + Phase 2 **10/10 PASS** |
| 신규 시스템 | 5종 (Inspector/Bootstrap/Sim/Collision/Build) | + 6종 (Sequence/MeshCollider/PLC/Toast/Graph/i18n) |
| 자동화된 자료 | README+gitignore+Demo | + Phase 2 ADR-0004/0005 |

## Phase 2 외 (사용자 PC GUI 검증)

- Inspector 시퀀스 편집기 사용성 (현재 데이터 모델만, UI 편집 PoC 시점은 Phase 3)
- PLC 실 장비 연동 (현재 Mock + Bridge 검증, Modbus TCP는 Phase 3)
- 노드 그래프 편집 UX (현재 보기 PoC만)
- Play 모드 시퀀스 시연 (사용자 PC GUI 필요)
- 60fps 측정 (3500 GameObject + simulation + sequence + collider)
- 영어 UI 사용성 (영어권 협업자 시연 필요)

## Phase 3 입력 (Phase 2 사용자 검증 통과 후)

- 실 PLC 라이브러리 통합 (Modbus TCP NModbus, OPC UA OPCFoundation)
- 노드 그래프 편집 + 양방향 sync (PoC → 실용)
- 시퀀스 편집기 Inspector (드래그·시간 막대 UI)
- WebGL 빌드 검토
- 라이선스 모델 결정 + Free/Pro 기능 플래그
- DOTS/ECS 마이그레이션 (60fps 미달 시)

## 사용자 명시 자율 진행 흐름

- 2026-05-07 사용자: "phase1 완성 목표로 자율진행 계속하라" → Phase 1 ADR-0003
- 2026-05-08 사용자: "다음 자율진행 phase2 달성시까지" → ADR-0004 범위 확정 → Phase 2 코드 + 검증 완성 → **ADR-0005 (이 문서)**

## 참고

- ADR-0001 — 제품 비전 (4원칙)
- ADR-0002 — 물리 정책 (운동학 + 토크 후처리)
- ADR-0003 — Phase 1 MVP 완성
- ADR-0004 — Phase 2 범위
- ADR-cad-0002 — 변환 옵션 default
- ADR-ui-0001 — Inspector UX
