# Release Notes — v0.1.154 (22nd Stable Seal · Servo Axis P1+P2)

> **봉인일**: 2026-05-12
> **사이클 범위**: v0.1.152 ~ v0.1.154 (3 사이클)
> **봉인 zip**: `downloads/stable/factory00-windows-x64-v0.1.154-servo-axis-stable.zip` (51 MB)
> **이전 stable**: v0.1.151 (21st — Photosensor P3)

## 한 줄 요약

서보 구동 축 (ServoAxisActuator) P1+P2 완성 — 데이터/구동 로직 + 매 프레임 폴러 + Inspector UI + Persistence + 양방향 Modbus sync. spec `2026-05-12-actuator-servo-axis.md` (456라인) §1~§7 구현.

## 사이클별

| 사이클 | 단계 | 핵심 |
|---|---|---|
| v0.1.152 | P1.1 데이터 | IActuator + 4 enum (ActuatorType/State/AccelMode/LimitType) + LocalActuatorAxis + ServoAxisActuator 데이터 fields + UpdateActuator 본문 (Mathf.MoveTowards/SmoothStep + float 비교 1회 리미트 + CurrentPos m->mm 변환) + 이벤트 3종 (LimitReached/AxisHomed/AxisPositionChanged) + EventBus 갱신 + Part.Actuators 필드 |
| v0.1.153 | P1.2+P1.3 | ActuatorDriver MonoBehaviour (매 프레임 UpdateActuator) + Bootstrap 부착 + LoadProject Actuators 복원 + RenderActuatorBlock Inspector 카드 (타입/방향/RPM/정격토크/리드/Home·RLS·FLS/가속모드·시간/Command 4 버튼/Modbus 5 매핑/4 런타임 진단) + spec §4 부품당 1개 제한 |
| v0.1.154 | P2 ActuatorPlcBridge | 양방향 PLC sync — Coil 폴링 (Forward/Backward/Stop/Home rising edge -> Command*) + Actuator.CurrentPos -> RegisterPos write (mm 정수, +32768 shift) -> 22nd stable |

## 신규 산출물

### 신규 파일 (4)
- `Assets/Scripts/Actuators/IActuator.cs` (~50 라인)
- `Assets/Scripts/Actuators/ServoAxisActuator.cs` (~180 라인)
- `Assets/Scripts/Actuators/ActuatorDriver.cs` (~55 라인)
- `Assets/Scripts/PLC/ActuatorPlcBridge.cs` (~70 라인)
- `Assets/Scripts/Events/AxisEvents.cs` (~45 라인)

### 수정 파일
- `Assets/Scripts/Core/Part.cs` — `List<ServoAxisActuator> Actuators` 필드 (Persistence 자동)
- `Assets/Scripts/Events/EventBus.cs` — OnLimitReached / OnAxisHomed / OnAxisPosition + Publish overload + Reset 초기화
- `Assets/Scripts/Game/Factory00Bootstrap.cs` — _actuatorDriver / _actuatorPlcBridge 멤버 + 부착 + LoadProject Actuators 복원 + RenderActuatorBlock + AddServoAxisToPart / RemoveServoAxisFromPart

## 사용자 영향

| 영역 | 변경 | 효과 |
|---|---|---|
| Inspector | "구동부" 섹션 신규 (부품당 1개 제한, "+ 구동부 추가" 버튼) | 비코딩 사용자가 부품에 서보 축 부착·편집 가능 |
| 시뮬 | 매 프레임 UpdateActuator (사다리꼴/S-커브 프로파일 + float 비교 1회 리미트) | 직선 왕복 운동 자동 + 자식 Transform 자동 추종 |
| Command | 4 버튼 (◀▶■⌂) Inspector 직접 또는 PLC Coil -> 자동 | PLC 통합 시 외부 신호로 구동 가능 |
| PLC sync | 양방향 (Coil -> Command rising edge / Position -> Register write mm 정수) | Modbus 어댑터 + 외부 PLC 시뮬레이터와 즉시 연동 |
| 저장 | Actuators 자동 JSON 직렬화 + LoadProject 복원 | 프로젝트 저장 시 구동부 영구 보존 |

## critic 자체 검토

| 등급 | 건수 |
|---|---|
| 치명 | 0 |
| 중대 | 1 — 드래그 핸들 부재 (spec §7 LocalPosition 뷰포트 조정, P3 polish 예약) |
| 중간 | 3 — RegisterPos signed/unsigned shift 가독성 / Bootstrap 누적 ~4100라인 / ActuatorPlcBridge Update 매 프레임 ReadBit (50ms 폴링 권장) |
| 사소 | 4 — Sensor* 헬퍼 재사용 (DRY) / RPM TextField -> Slider 권장 / Command 버튼 색상 분기 / LocalActuatorAxis vs LocalAxisDir 중복 |

판정: **PASS** — 22nd stable seal 봉인.

## 알려진 한계 (P3+ polish 예약)

- 드래그 핸들 (spec §7 뷰포트 LocalPosition 조정) — Gizmo 패턴 재활용 필요
- 시각화 (구동 범위 라인 시각화) — PhotoSensor Visualizer 패턴 응용 가능
- 메이커 프리셋 (서보 모델별 RPM·Lead 사양) — Photosensor 패턴 응용
- Bootstrap 누적 ~4100라인 -> ActuatorInspectorViewModel 분리 (task #39 폴리시 사이클)

## 외부 URL

- 캡처: `os-file-server.tail2b816d.ts.net/qa-screenshots/v0.1.154/servo-plc.png`
- 빌드 zip: `os-file-server.tail2b816d.ts.net/downloads/factory00-windows-x64-v0.1.154.zip`
- 봉인 zip: `os-file-server.tail2b816d.ts.net/downloads/stable/factory00-windows-x64-v0.1.154-servo-axis-stable.zip`

## 누적 모듈 진척 (2026-05-12)

| 모듈 | 사이클 범위 | stable | spec |
|---|---|---|---|
| 회전 기즈모 polish | v0.1.137~142 | (commit 만) | — |
| Photosensor | v0.1.143~151 (9) | v0.1.148 (20th) + v0.1.151 (21st) | 362라인 |
| Servo Axis | v0.1.152~154 (3) | v0.1.154 (22nd) | 456라인 |

**총 17 사이클 / 누적 코드 신규 ~1500라인 / 3 stable seal / 2 모듈 spec 구현.**

## 다음 사이클 후보

- **인터페이스 에뮬레이팅** (개발계획서 1번 항목) — Sensor+Actuator+Modbus 통합 시연 시나리오 (PLC ladder 또는 mock controller)
- **polish**: 드래그 핸들 / 메이커 프리셋 (서보) / Bootstrap 슬림화
- **새 모듈** spec 작성 (제어 컨트롤러, 토크 후처리, 충돌 감지 확장 등)
