# v0.1.250 — 38th Stable Seal (협업자 PM 회신 일괄 처리)

**날짜**: 2026-05-21
**범위**: v0.1.241 ~ v0.1.250 10 사이클
**Ribbon 8 탭 명령 누계**: 46 (37th seal 45 -> 38th seal 46, sim-play +1)

## 사이클별 변경

### v0.1.241 — QA-051 .twn Open ClearScene 누락 fix

- ApplyTwnPayload 안 Vacuum 3종 (Ejector/Unit/Blower) 누락 처리 추가
- Transform 복원 (Position/Rotation/Scale) 명시 호출
- ClearAllRuntimeComponents() 헬퍼 신설 — 7 컴포넌트 타입 일괄 정리

### v0.1.242 — QA-044 Recent/Open 세션 1회 무력화 fix

- ApplyTwnPayload try-catch wrapper 추가 (silent throw 차단)
- Parts.ToDictionary id 중복 가드 (LINQ ArgumentException 방어)
- Recent Files 메뉴 click 후 다음 click 무력화 회귀 차단

### v0.1.243 — QA-021 Edit Duplicate 정책 정정

- DuplicateMaterials: `Material.Instantiate` 로 sharedMaterials 독립 복사
- DuplicateSensors/Servo/Rotary/Pneumatic: JsonUtility 기반 deep copy
- 복제 후 Modbus 주소 -1 reset + DriverInstanceId null
- RegisterDuplicatedComponents -> ActuatorDriver/Sensor 매 프레임 update 활성화

### v0.1.244 — QA-009/031 UI 이벤트 전파 일괄 fix

- ribbonRoot KeyDown(Space) TrickleDown StopPropagation
- Ribbon 안 모든 Button click 후 Blur (focus 누적 차단)
- CameraViewController WASD 분기에 Ctrl/Alt 수식키 가드

### v0.1.245 — QA-036/037 Inspector 주기 RenderInspector 가드

- `IsInspectorEditFocused()` 헬퍼 신설 — _detailPane 자손 focus 추적
- 0.25s 주기 RenderInspector 가드 (TextField/DropdownField 입력 중 Clear 차단)
- DropdownField popup 즉시 닫힘 + TextField 입력 무효 회귀 fix

### v0.1.246 — QA-047 Delete Undo + QA-041 설정창 수치 필드

- DeleteCommand : IEditCommand class 신설 (VisibilityCommand 패턴 미러)
- DeleteSelectedPart() 헬퍼 — editDeleteBtn / Delete 키 통합 진입점
- UndoStack push -> Ctrl+Z 부품 복원 가능
- 설정창: `<ui:Label>` -> `<ui:FloatField>` 3건 (mouse/pan/fp sens)
- BindSlider 양방향 sync (Slider ↔ FloatField with low/high clamp)
- USS .c-settings__numfield (width 60px + margin-left 6px)

### v0.1.247 — QA-007/052 드래그 누수 fix

- 단순 click 분기에 `overUIAtDown = IsPointerOverUI(_lmbDownPos)` 가드 추가
- 단일 가드 추가로 4건 cascade 차단:
  - QA-007 splitter 빠른 drag
  - QA-007 확장 감도 슬라이더 3종
  - QA-052 프로퍼티 스크롤바
  - QA-009/031 잔존 UI 위 5px 미만 drag

### v0.1.248 — QA-033/035 Simulation Play 버튼 + 자동 시작 차단

- Ribbon.uxml sim-play 버튼 신설 (Signal Simulator 좌측)
- sim-play 핸들러: Time.timeScale=1 + simPauseBtn.text="Pause"
- QA-035 root cause: Play 부재로 인한 Interface Emulation 오인 click -> Phase A 자동 어셈블리 -> "Scenario Play 자동 시작" 오보고. Play 명시 추가로 진입점 분리.

### v0.1.249 — QA-009 hud-root Space 가드 확장

- v0.1.244 ribbon 한정 -> hud-root 전체 확장
- `evt.target is Button` 한정 TrickleDown Space StopPropagation
- 모든 Button click 후 Blur (좌측 패널 ≡·검색 X·트리 row 등 cascade)

### v0.1.250 — critic 중대 2건 fix

- 중대-3: QA-006 진단 Debug.Log 제거 (v0.1.218 AC 위반 잔재 정리)
- 중간-2: 다중 선택 Delete 정직 안내 (첫 부품만 삭제됨 + v0.1.251 예정 표시)

## 협업자 PM 회신 처리 (handshake.md)

| QA | 우선순위 | 처리 사이클 | 상태 |
|----|---------|-------------|------|
| QA-051 | [P0] | v0.1.241 | [완료] |
| QA-044 | [P0] | v0.1.242 | [완료] |
| QA-021 | [P1] | v0.1.243 | [완료] |
| QA-009 | [P0] | v0.1.244 -> v0.1.249 | [완료] |
| QA-031 | [P1] | v0.1.244 | [완료] |
| QA-036/037 | [P0] | v0.1.245 | [완료] |
| QA-047 | [P0] | v0.1.246 | [완료] |
| QA-041 | [P1] | v0.1.246 | [완료] |
| QA-007 | [P1] | v0.1.247 | [완료] |
| QA-052 | [P1] | v0.1.247 | [완료] |
| QA-033 | [P1] | v0.1.248 | [완료] |
| QA-035 | [P0] | v0.1.248 | [완료] |

**처리 총 12건 ([P0] 6 / [P1] 6).** 잔존: QA-014 Persp/Ortho (PM 회신 대기).

## critic 코드리뷰 결과

| 등급 | 건수 | 처리 |
|---|---|---|
| 치명 | 0 | — |
| 중대 | 3 | 중대-3 fix · 중대-1/2 다음 사이클 |
| 중간 | 3 | 중간-2 fix · 나머지 다음 사이클 |
| 사소 | 2 | 다음 사이클 |

판정: **PASS** (v0.1.250 fix 후).

## 핵심 패턴 SSOT 강화

### IEditCommand 패턴 일관

- DuplicateCommand (v0.1.237/238) — 단일 leaf 복제 + UndoStack push
- DeleteCommand (v0.1.246) — 단일 leaf 삭제 + UndoStack push + 복원 가능
- VisibilityCommand (이전) — 가시성 토글 + UndoStack push

### overUIAtDown 가드 SSOT

DOWN 시점 IsPointerOverUI 가드를 모든 UI drag 누수 케이스에 적용. drag-select 분기 (이미 있었음) + 단순 click 분기 (v0.1.247 신설).

### hud-root TrickleDown Space 가드 SSOT

`evt.target is Button` 한정 + `btn.Blur()` 후속 처리 = 좌측 패널 / Ribbon / Inspector 모든 Button cascade 통합 차단.

## 다음 단계

- v0.1.251 — 38th stable seal 영구 보존 + commit + push
- v0.1.252 — critic 보류 결함 (중대-1/2 주석 보강 + 사소-1 rename + 중간-1/3)
- v0.1.253 — BatchDeleteCommand 신설 (중간-2 풀 fix)
- v0.1.254 — QA-014 Persp/Ortho 회귀 (PM 회신 받으면)
