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

- 버전: v0.1.259
- 분류: 48th stable seal (v0.1.366) 일괄 봉인 사이클
- 다운로드: [factory00-windows-x64-v0.1.259.zip](../../downloads/archive/factory00-windows-x64-v0.1.259.zip) (archive 보존)
- 캡처: [qa-screenshots/v0.1.259/](../../qa-screenshots/v0.1.259/)

---

## 협업자 PM 회신
QA-040 [P1] — Signal Simulator 메인 창 = read-only 모니터 / 컴포넌트 이름 클릭 -> 제어 창 팝업 분리 (PM spec r003).
QA-039 [P2] — 100ms 폴링 자동 갱신 요청.

## 설계

### 메인 패널 (read-only 모니터)
기존 단일 패널에서 토글/입력 위젯 모두 제거. 컴포넌트 단위 행:
- 이름 (클릭 가능 Button — 클릭 시 SignalControlPopup 열림)- 현재 상태 텍스트 (read-only Label)- Sensor: FinalOutput -> "DETECT" / "—"- Servo: State + "{CurrentPos:F2}m"- Pneumatic: State (Forward/Backward/AtA/AtB)- Rotary: State + "{CurrentAngle:F0}°"
### 제어 창 팝업 (SignalControlPopup class)
`csharppublic class SignalControlPopup
{
    public enum ComponentKind { Sensor, Servo, Pneumatic, Rotary }
    public void Show(VisualElement parent) { ... }
    public void Close() { ... }
}
`- 메인 패널 좌측 (right: 410px) 280x480 위젯- 헤더: "{Kind} · {componentId}" + X 닫기 버튼- ScrollView 안에 코일 토글 + Reg 입력 (기존 동작 그대로 이양)- 다른 컴포넌트 click 시 자동 close + reopen (CloseActivePopup)
### 100ms 폴링 (QA-039)
`csharp_pollSchedule = _root.schedule.Execute(() => { if (IsVisible) Render(); }).Every(100);
`Toggle()/Show()에서 시작, Hide()/Close()에서 Pause.

### Rotary 추가
기존 코드는 Servo / Pneumatic만 렌더. v0.1.161+ RotaryActuator도 추가.

## QA-038 별도 사이클
ServoAxisActuator.CoilEnable 데이터 필드 신설 필요 (현재 4개 — Forward/Backward/Stop/Home). .twn 직렬화 영향 분석 필요. v0.1.260+ 별도 사이클 예약.
## 변경 파일
- Assets/Scripts/Communication/Modbus/SignalSimulatorPanel.cs (291 -> 430+ 라인 전면 재작성 + SignalControlPopup class 신설)- ProjectSettings/ProjectSettings.asset — bundleVersion 0.1.258 -> 0.1.259
## 검증 시나리오

### QA-040 분리
1. Signal Simulator 패널 열기 -> 컴포넌트 목록 read-only 표시
2. 컴포넌트 이름 click -> 우측에 제어 팝업 열림
3. 팝업 코일 토글 -> ModbusSignalChangedEvent 발행 (기존 동작)
4. 다른 컴포넌트 click -> 기존 팝업 close + 새 팝업 open
5. X click -> 팝업 닫힘

### QA-039 자동 갱신
- 부품 추가 -> 100ms 이내 메인 패널에 표시- Sensor 감지 상태 변경 -> 100ms 이내 "DETECT" 토글- Servo 위치 갱신 -> "0.50m" 등 실시간 표시
### 코일 현재값 SSOT (v0.1.260 P2 예약)
현재는 컴포넌트 자체 상태만 표시. 코일 ON/OFF는 별도 ModbusDataModel SSOT 필요 — 다음 사이클에서 처리.

## 다음 사이클
- v0.1.260 — QA-038 ServoAxisActuator.CoilEnable 신설 (데이터 + Inspector + Bridge + .twn migration)- v0.1.261 — Signal Simulator 코일 현재값 SSOT (ModbusDataModel polling)- v0.1.262 — QA-014 (PM 회신 받으면)협업자 git origin/main = local.


---

## 봉인 참조

본 사이클은 **48th stable seal (v0.1.366, 2026-05-24)** 일괄 봉인에 포함됨.

- journal: [2026-05-24-v0.1.298-366-48th-stable-seal.md](../../journal/2026-05-24-v0.1.298-366-48th-stable-seal.md)
- alias zip: [factory00-windows-x64-v0.1.366-stable.zip](../../downloads/factory00-windows-x64-v0.1.366-stable.zip) (170 MB)
