# Release Notes — v0.1.199 (29th stable seal)

**날짜**: 2026-05-17 17:38 KST
**스코프**: Modbus Mapping P2.5~7 + .twn 직렬화 통합 + 카메라 키 매핑 + critic 치명 2건 fix
**누적 사이클**: 6 (v0.1.194 -> v0.1.199)
**zip**: [factory00-windows-x64-v0.1.199-modbus-mc-stable.zip](../../downloads/stable/factory00-windows-x64-v0.1.199-modbus-mc-stable.zip) (50 MB)

---

## 핵심 변경

### Modbus Mapping P2.5 — SignalRolePopup (v0.1.194)
- 후보 행 클릭 -> Popup 열림. 6가지 SignalRole 옵션 (E-Stop / 광센서 / 서보 토크 / 보호회로 / 안전 인터록 / 일반)
- 사용자 선택 -> 매핑 자동 등록 + 토스트 안내

### Modbus Mapping P2.8 — DiscreteInput/InputRegister 후보 섹션 (v0.1.194)
- 기존 Coil + HoldingRegister 외 새 후보 섹션 2개
- 4종 RegisterType 모두 사용자 매핑 가능

### Modbus Mapping P2.6 — Play Mode 실시간 값 갱신 (v0.1.196)
- EventBus.OnModbusSignalChanged 구독 -> 값 변경 즉시 entry row 갱신
- Coil/DiscreteInput -> ON/OFF, Register -> 정수 표시
- **200ms throttle scheduler** (v0.1.199 critic 치명 #2 fix) — 폴링 tick 마다 UI 전체 rebuild 회피

### Modbus Mapping P2.7 — .twn 직렬화 통합 (v0.1.197)
- ExtensionBlock key `modbus-address-map:v1` + JsonUtility wrapper class
- SaveProject / LoadProject 양방향 자동 직렬화
- 빈 entries 시 block 생략 (파일 크기 절약)

### 카메라 하강 키 LCtrl -> C 변경 (v0.1.198)
- 사용자 명시 (2026-05-17): "하강은 컨트롤 대신 C로 변경한다"
- Orbit/Default 모드 `CameraViewController.cs` L355 KeyCode.C
- 1인칭 모드 E/Q 보존 (JP UX 디자인 의도)
- 이력: v0.1.092 LShift -> v0.1.164 LCtrl -> v0.1.198 C
- 사유: LCtrl이 Inspector / Modbus scrubber modifier와 충돌 위험 0

### publish-build-auto.sh stale zip 회피 fix (v0.1.195)
- 매 빌드마다 zip 강제 갱신 (`rm -f` + `Compress-Archive -Force`)
- 직전 빌드 산출물이 같은 버전 이름으로 영구 게시되는 회귀 차단

### critic 치명 2건 fix (v0.1.199)
1. **EventBus.Reset()** — Modbus 5종 + MC Protocol 3종 이벤트 필드 null 처리 누락 보강. Play Mode 재진입 / 씬 재로드 시 dead handler 누적 회피.
2. **ModbusAddressMappingPanel.OnSignalChanged** — 200ms throttle scheduler 패턴으로 폴링 tick 마다 UI 전체 rebuild 회피. dirty flag + `IVisualElementScheduledItem.Every(200)`.

---

## 협업자 spec 진행도

| 카테고리 | 완료 | 잔존 |
|---|---|---|
| Tier A (3 모듈) | [완료] 3/3 | — |
| Tier B (3 탭) | [완료] 3/3 | — |
| Tier C (6 모듈) | [완료] 5/6 | [!] Modbus Serial 실 활성 (ApiCompatibilityLevel 합의 필요) |
| **즉시 가능 합계** | **13 / 14 = 93%** | — |
| SDK 대기 (제외) | — | MxBridge + 위치결정 |

---

## 자가 검증
- 외부 URL HTTP 200 검증: index.html / latest-builds.html / zip [완료]
- 1920x1080 캡처: 회귀 0건 (좌측 부품 트리 / 모터 테이블 / 3D 뷰 / AxisIndicator 모두 정상)
- critic 치명 0건 (2건 fix 완료) / 중대 4건 (v0.1.200+ 처리 예약)

## critic 중대 4건 (다음 사이클 큐)
1. `ModbusTcpInspectorPanel.Unsubscribe()` Bootstrap 호출 의무 누락 — 패널 destroy 시 dead handler 위험
2. `ModbusAddressMapWrapper` Bootstrap inline -> SSOT 분열 — `TwnProjectFile.cs` 또는 Modbus 네임스페이스로 이동
3. `KeyCode.C` 충돌 detection 부재 — B/L/G/T 단축키 공간 conflict 가드 필요
4. EventBus McProtocol 이벤트 선언 vs McProtocolClient 파일 미존재 (false alarm 가능성 — 실제 빌드 PASS) — 추적 필요
