# v0.1.239 — QA-019 에어 진공 패밀리 P1.1 데이터

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

---

## 사이클 사전 검토 (룰 spec-vs-codebase-pre-check.md 첫 적용)
| spec 가정 | codebase 실제 | 처리 |
|---|---|---|
| VacuumEjector/Unit/Blower (IActuator) | IActuator SSOT (UpdateActuator/CommandStop/CommandHome) | PASS |
| Part.VacuumEjectors/Units/Blowers | Part는 Servo/Rotary/Pneumatic 3종만 | 3 리스트 신규 추가 |
| VacuumGrasped/Released + BlowSignalChanged | EventBus Pneumatic 패턴 SSOT | 3 이벤트 신규 + Reset 보강 |
| ActuatorDriver 매 프레임 | ActuatorDriver.cs line 43 dt 캐시 | registration 만 추가 (P1.2 사이클) |
| Inspector UI 8 위젯 | PhotoSensor/Servo Inspector 패턴 | **P1.2 별도 사이클** |
| Modbus 코일 매핑 | ActuatorPlcBridge 패턴 | **P2 별도 사이클** |
**판정**: PASS — scope 분할 후 진행. v0.1.239 = 데이터+동작만.

## QA-019 P1.1 신규 산출물

### 1) `Assets/Scripts/Events/VacuumEvents.cs` (+76라인 신규)
- VacuumGraspedEvent (ActuatorId / Workpiece / Pad / PressureKpa / Timestamp)- VacuumReleasedEvent (ActuatorId / Workpiece / PressureKpa / Reason / Timestamp)- BlowSignalChangedEvent (ActuatorId / IsActive / Timestamp)- VacuumReleaseReason enum (BlowSignalOn / VacuumOffDecay / AirBlowerEvent)
### 2) `Assets/Scripts/Events/EventBus.cs` (+6라인)
- OnVacuumGrasped / OnVacuumReleased / OnBlowSignalChanged 3 event- 각각 Publish overload + Reset() 보강
### 3) `Assets/Scripts/Actuators/VacuumActuators.cs` (+275라인 신규 — 3 클래스 1 파일)
**VacuumEjectorActuator** (진공+파기 2신호):
- VacuumPads / CaptureDistanceMm (1mm) / TargetPressureKpa (-85) / ReleasePressureKpa (-10) / PressureDecayRate (20kPa/s)- IActuator 매핑: Forward=진공ON / Backward=파기ON / Stop=둘다OFF / Home=파기- UpdateActuator: 파기->즉시해제 / 진공->압력수렴+패드OverlapSphere워크검색 / OFF->자연감쇠- VacuumGraspedEvent + VacuumReleasedEvent 발행**VacuumUnitActuator** (진공만):
- VacuumEjector 동일 데이터 + 파기 신호 X- _bus.OnBlowSignalChanged += OnBlowSignal 구독 — AirBlower 이벤트 수신 시 해제 (spec §3 시나리오)- 직접 참조 금지 (spec §4 §1) — EventBus 경유만**AirBlowerActuator** (파기만):
- BlowSignal flag만 — BlowSignalChangedEvent 발행- Edge trigger (signal 변경 시만 발행)
### 4) `Assets/Scripts/Core/Part.cs` (+6라인)
- List VacuumEjectors- List VacuumUnits- List AirBlowers- Servo/Rotary/Pneumatic 와 동시 부착 가능 (구동부 ≠ 출력부 카테고리, spec §1)
## 협업자 spec 정합 (vacuum-ejector-summary §3 §4 시나리오)
1. **VacuumEjector 흐름**: 진공ON -> 패드↔워크 ≤1mm 검사 -> SetParent -> 압력 -85kPa 수렴 -> Grasped 발행 [OK]
2. **Ejector 파기**: 파기ON -> SetParent(SceneRoot) 즉시해제 -> 압력 0kPa 복귀 -> Released(BlowSignalOn) [OK]
3. **Ejector 진공OFF 자연감쇠**: 압력 0방향 dt × PressureDecayRate 감쇠 -> ReleasePressureKpa 도달 시 해제 -> Released(VacuumOffDecay) [OK]
4. **VacuumUnit + AirBlower 조합**: AirBlower 파기ON -> BlowSignalChangedEvent 발행 -> VacuumUnit 구독 -> 해제 -> Released(AirBlowerEvent) [OK]

## 4대 불변 원칙 검토
- ① 임포트 전용: 워크 Transform 제어 / 3D 편집 X [OK]- ② 경량 물리: OverlapSphere(radius mm) + SetParent / 리지드바디 X [OK]- ③ 비코딩 UX: VacuumPad List 슬롯 / P1.2 Inspector 슬롯 바인딩 (별도 사이클) [OK]- ④ 이벤트 기반: AirBlower -> VacuumUnit 직접 참조 X, EventBus 경유 [OK]
## 다음 단계
- **v0.1.240 P1.2**: Inspector UI (3 컴포넌트 분기, VacuumPad 슬롯 바인딩 / 압력 라이브 표시)- **v0.1.241 P2**: ActuatorDriver registration + Add 헬퍼 + Modbus 코일 매핑- 협업자 PM checklist 검증은 P1.2 완료 후 (UI 없이 검증 불가능)
## 변경 파일
- Assets/Scripts/Events/VacuumEvents.cs (신규 76라인)- Assets/Scripts/Events/EventBus.cs (+12라인)- Assets/Scripts/Actuators/VacuumActuators.cs (신규 275라인)- Assets/Scripts/Core/Part.cs (+6라인)


---

## 봉인 참조

본 사이클은 **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)
