# v0.1.262 — 40th Stable Seal (SignalSimulator UX + CoilEnable + critic PASS)

**날짜**: 2026-05-21
**범위**: v0.1.258 ~ v0.1.262 5 사이클
**Ribbon 8 탭 명령 누계**: 46 (39th seal 동일, sim-play +1 v0.1.248 이후 변경 0)

## 사이클별 변경

### v0.1.258 — critic 중간-1 fix · Actuator Color helper

`RenderServoAxisCard` + `RenderRotaryCard`의 `ActuatorState switch` + `new Color(...)` 4개 반복 생성 -> `GetActuatorStateColor` 정적 helper + Color 인스턴스 4개 캐시. Inspector 0.25s 주기 호출 시 alloc 0.

### v0.1.259 — QA-040/039 SignalSimulator UX 개편 P1

- **QA-040**: 메인 패널 = read-only 모니터 (컴포넌트 이름 + 상태 텍스트 표시). 컴포넌트 이름 click -> `SignalControlPopup` 별도 창 (코일 토글 + Reg 입력)
- **QA-039**: 100ms 폴링 자동 갱신 (`IVisualElementScheduledItem`)
- Rotary actuator 추가 (Servo / Pneumatic / Rotary 3종)
- 291 -> 430+라인 전면 재작성 + SignalControlPopup class 신설

### v0.1.260 — QA-038 ServoAxisActuator.CoilEnable

- `CoilEnable` 직렬화 필드 + `Enabled` 런타임 상태 (default true)
- `ActuatorPlcBridge` level 추적 (`_lastEnable`) + falling edge 시 강제 정지 + Enabled 가드
- Inspector `RenderServoAxisCard` "Coil Enable" 행 추가
- SignalControlPopup `BuildServoControls` "Enable" 토글 추가
- .twn 호환: 신규 필드 default 0 -> JsonUtility migration 불필요

### v0.1.261 — QA-046 Delete/Duplicate 버튼 selection 의존 활성화

- `Button` ref 저장 (`_editDeleteBtnRef`, `_editDupBtnRef`)
- `UpdateEditButtonsEnabled` helper (selection 변경 시만 SetEnabled)
- `Update()` 폴링 — 비교 후 변화 시만 호출 (오버헤드 0)
- QA-062 답변 (tooltip 이미 존재), QA-063 답변 (BatchDelete v0.1.252 fix 완료)

### v0.1.262 — critic 치명 0 / 중대 3 fix

- **중대-1**: SignalSim 폴링 단일 인스턴스 Pause/Resume 재사용 (중복 발화 차단)
- **중대-2**: `PruneDanglingPopup` — 부품 삭제 후 SignalControlPopup 자동 닫힘 (100ms 폴링 시 검증)
- **중대-3**: `ActuatorPlcBridge` Enable ReadBit 실패 시 continue (stale edge 방지)

## 협업자 PM 회신 처리 (v0.1.258~262)

| QA | 우선순위 | 처리 사이클 | 상태 |
|----|---------|-------------|------|
| QA-040 | [P2] | v0.1.259 | [완료] |
| QA-039 | [P2] | v0.1.259 | [완료] |
| QA-038 | [P1] | v0.1.260 | [완료] |
| QA-046 | [P2] | v0.1.261 | [완료] |
| QA-062 | [P2] | v0.1.261 (답변) | [완료] |
| QA-063 | [P1] | v0.1.252 (이전 fix · 답변) | [완료] |

**처리 총 6건** (38th 12 + 39th 7 + 본 6 = 누적 25건).

**잔존**:
- QA-014 Persp/Ortho 회귀 (PM 회신 대기)
- QA-067 리스트 갱신 시 스크롤 초기화
- QA-068 다중 선택 Gizmo 이동 시 마지막 1개만
- QA-030 부품 리스트 필터링 P2 (별도 spec 사이클)
- QA-042~ QA-065 P2 개선 제안 다수

## critic 코드리뷰 결과

| 등급 | 건수 | 처리 |
|---|---|---|
| 치명 | 0 | — |
| 중대 | 3 | 본 사이클 모두 fix |
| 중간 | 3 | 다음 사이클 (CoilEnable 안내·_lastHasSelection 주석·중간-3 Render 코드 추적) |
| 사소 | 2 | 다음 사이클 |

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

## 핵심 패턴 SSOT 강화

### Actuator state color SSOT

`GetActuatorStateColor` + 정적 Color 4개 -> Servo / Rotary Inspector 일관 + alloc 0.

### SignalControlPopup 패턴

read-only 메인 + 제어 팝업 분리 + 100ms 폴링 + dangling reference 자동 prune. UX/메모리 안전성 둘 다 확보.

### CoilEnable 가드 패턴

`Enabled` 런타임 flag + Bridge level 추적 + Coil polling 가드. PLC 표준 Enable/Disable 게이트 패턴.

### Update polling button enabled 비교 캐시

`_lastHasSelection` 비교 후 변화 시만 SetEnabled -> frame당 비교 1회만. selection 진입점 다수 환경의 일관 처리.

## 다음 단계

- v0.1.263 — 40th stable seal 영구 보존 + commit
- v0.1.264 — critic 중간/사소 잔존 fix
- v0.1.265 — QA-067/068 (P2 부품 리스트/Gizmo)
- v0.1.266+ — QA-014 (PM 회신 받으면)
