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

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

---

## 협업자 PM 명시 root cause (handshake.md QA-051)
"Open이 씬 교체가 아닌 컴포넌트 추가 스폰 — Transform 미복원 + New 미정리"
- ProjectLoader.Load()가 씬 초기화 없이 컴포넌트만 추가 스폰- 프로젝트 저장·열기 기능 실질적 무효화 ([P0] 최우선)
## root cause 분석
ApplyTwnPayload (Bootstrap.cs:2323):- byId.TryGetValue(p.id, ...) 매칭만 — payload.parts에 있는 부품만 처리- Sensors / Actuators / RotaryActuators / PneumaticActuators는 Clear + re-add- **Vacuum 3종 (v0.1.239 신규)** — Clear 누락 [X]- **Transform 복원** (position / rotation / scale) — 누락 [X]- **payload에 없는 기존 부품의 컴포넌트** — 잔존 [X]BindRibbonFileNewCommand (Bootstrap.cs:1952):- Sensors / Actuators / RotaryActuators만 Clear- Pneumatic / Vacuum 3종 누락 [X]
## fix

### 신규 헬퍼 `ClearAllRuntimeComponents()` (line 2323~)
7 컴포넌트 타입 일괄 Driver Unregister + 리스트 Clear:
- Sensors (PhotoSensorComponent)- Actuators (ServoAxisActuator)- RotaryActuators- PneumaticActuators- VacuumEjectors (v0.1.239 신규 — 기존 누락)- VacuumUnits (v0.1.239 신규 — 기존 누락 + Uninitialize() 자동 호출 via UnregisterActuator)- AirBlowers (v0.1.239 신규 — 기존 누락)
### `ApplyTwnPayload` 진입 시 호출
`csharpClearAllRuntimeComponents();   // 신규
var byId = Parts.ToDictionary(p => p.id);
foreach (var p in pf.parts) {
    if (byId.TryGetValue(p.id, out var existing)) {
        // ... 기존 컴포넌트 추가 로직
        // v0.1.241 신규: Transform 복원
        existing.cachedTransform.localPosition = p.position;
        existing.cachedTransform.localEulerAngles = p.rotation;
        existing.cachedTransform.localScale = p.scale;
        existing.position = p.position;
        existing.rotation = p.rotation;
        existing.scale = p.scale;
    }
}
`
### `BindRibbonFileNewCommand` 통일
기존 inline foreach (~20라인) -> ClearAllRuntimeComponents() 호출로 단순화. Vacuum 누락 자동 fix.
## 검증 시나리오 (PM checklist)
1. 부품 1개에 Servo + 진공 Ejector 부착 -> Save .twn
2. 부품 위치/회전 변경 -> Save .twn (덮어쓰기)
3. 다른 .twn Open -> Servo만 1개 부착된 다른 상태
4. **검증**: payload .twn의 컴포넌트 / Transform이 정확히 복원되어야
   - 이전 (v0.1.240): Vacuum Ejector 잔존 + 위치 미복원
   - 신규 (v0.1.241): Vacuum 정리 + 위치 복원

## 변경 파일
- Assets/Scripts/Game/Factory00Bootstrap.cs (+50라인)- ClearAllRuntimeComponents() 신규 헬퍼 (50라인)- ApplyTwnPayload 시작에 호출 추가 (1라인)- ApplyTwnPayload Transform 복원 분기 (7라인)- BindRibbonFileNewCommand 통일 (~20라인 -> 1라인)
## 다음 사이클
- v0.1.242 — QA-044 Recent/Open 세션 1회 무력화 추적- v0.1.243 — QA-021 Edit Duplicate 정책 정정 (머티리얼 독립 + 컴포넌트 포함)


---

## 봉인 참조

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