# v0.1.497 — QA-103 M-01 종료 시 미저장 변경 확인 팝업 (Windows 표준)

- 버전: v0.1.497
- 날짜: 2026-05-31
- 다운로드: [factory00-windows-x64-v0.1.497.zip](../../downloads/factory00-windows-x64-v0.1.497.zip) (170 MB)
- 캡처: [qa-screenshots/v0.1.497/](../../qa-screenshots/v0.1.497/)

---

## 핵심 변경
- **QA-103 M-01 (종료 시 미저장 변경 확인)**: 직전까지 파일>종료 메뉴 → 경고 없이 즉시 종료(데이터 손실 위험). Windows 표준 확인 팝업 구현.
- **dirty 추적** (UndoStack): `IsDirty` = 저장 시점 top 커맨드 vs 현재 top 참조 비교. undo로 저장 시점까지 되돌리면 자동 clean. 저장/신규/로드 시 `MarkSaved()` 호출.
- **확인 팝업** (3버튼): "저장 후 종료 / 저장 안 함 / 취소". full-screen 모달 backdrop + 다크 테마. ESC/backdrop 클릭 = 취소.
- **SaveCurrentProject(bool):bool 추출** (DRY): 옛 cmd-save 클로저를 메서드화 → cmd-save / cmd-save-as / 종료팝업 "저장 후 종료" 공유.
## critic 결과 (CONDITIONAL → 치명 해소)
- **치명 1 → 해소**: "저장 후 종료" close() 선행 → Save As 취소 시 팝업 유실 → 저장 성공 시에만 close+quit, 취소/실패 시 팝업 유지(Windows 표준).
- **중대 (재분류·처리)**: ESC cascade 충돌 → ESC를 Bootstrap.Update polling + 다이얼로그 가드로 통일(해소) / MouseDownEvent → PointerDownEvent(해소) / 트림 후 false dirty = 100+ 편집 edge, 데이터 손실 아닌 보수적 경고(v1 수용).
- **deferred (follow-up)**: OS window X 버튼(Application.wantsToQuit) 미처리 — 이유: wantsToQuit가 dirty 시 autoQA capture 빌드 종료를 차단 → 빌드 hang 위험 + Stage 2 검증 불가. 안전을 위해 별도 사이클(BUG/SPEC 명시) 예약. 현재 = 파일>종료 메뉴 경로만 커버.
- **v1 scope**: 비-커맨드 편집(슬라이더 드래그 등 UndoStack 미경유)은 dirty 미반영 — 대부분 의미있는 편집은 커맨드 경유. 향후 보완 가능.
- 판정: 치명 0 / 실 중대 0 → PASS (X버튼·edge는 follow-up 명시).
## 검증
- 컴파일 + 캡처 회귀. 팝업 실 동작(파일>종료 → dirty 시 팝업 → 저장/취소)은 Stage 2 사용자 PC(마우스 클릭).
## 영향 파일
- `Assets/Scripts/Game/UndoStack.cs` — IsDirty/MarkSaved/_cleanMarker + Clear 리셋
- `Assets/Scripts/Game/Factory00Bootstrap.cs` — RequestQuit/ShowQuitConfirmDialog/CloseQuitDialog + SaveCurrentProject 추출 + MarkSaved 3곳 + cmd-quit 배선 + ESC cascade 가드
