# 초기 구동 기본값 변경 — 좌측패널 OFF + 시설등급 1·2종만 체크

**소요 시간**: 약 20분
**Context 사용량**: input ~48k / output ~7k tokens

## 요청

> 처음 플레이어가 구동되면 "좌측패널 OFF"이고, 시설등급은 1종·2종만 체크된 상태여야 한다.

(같은 세션에서 앞서 "로컬 실행 가능 여부", "지도 나침반 가운데버튼 패닝 가능 여부"는 코드 변경 없이 질의응답만 진행.)

## 변경 파일

- `client/src/store/settingsStore.ts`

## 변경 내용

1. **좌측 노선 패널 기본값**: `showRoutePanel: true → false` (초기 OFF)
2. **시설등급 기본 필터**: `DEFAULT_GRADE_FILTER['기타'] true → false`
   - 결과: 1종☑ 2종☑ 3종☐ 기타☐ → "1종·2종만 체크" 충족
3. **persist 마이그레이션 추가**: `version: 1` + `migrate()` 신설
   - 사유: 설정이 localStorage(`ghivideo.settings`)에 지속되므로, 기본값만 바꾸면 이미 실행해본 브라우저의 옛 저장값(showRoutePanel:true, 기타:true)이 `merge`에서 우선되어 안 바뀜.
   - 처리: 과거 저장본(version 0)은 최초 1회 `showRoutePanel:false` + `gradeFilter=기본값`으로 강제 재설정. 이후 사용자의 토글 변경은 정상적으로 지속됨.
   - 신규 브라우저(저장값 없음)는 initializer 기본값이 그대로 적용됨.
4. 관련 주석 2곳 갱신.

## 검증

- `npm run build -w client` (tsc + vite build) 성공 — 타입 에러 없음, 220 모듈 변환, dist 재생성.
- Node 20.20.2(nvm)로 빌드.

## 반영 방법

- 프로덕션(55000, PM2): 정적 dist를 서빙하므로 브라우저 **하드 리로드**로 반영(에셋 해시 변경됨). PM2 재시작 불필요.
- 개발(5173): dev 서버가 소스를 직접 읽으므로 즉시 반영.
- 기존 브라우저는 첫 로드 시 마이그레이션이 1회 동작해 좌측패널 OFF·시설등급 1·2종으로 재설정됨(수동 localStorage 삭제 불필요).

## 참고 / 판단 사항

- "처음 구동 시 OFF"를 "매 실행마다 강제 OFF"가 아니라 "초기 기본값 = OFF, 이후 사용자 토글은 기억"으로 해석함. 만약 매 실행마다 무조건 OFF로 시작하길 원하면 `showRoutePanel`을 persist 대상에서 제외(partialize)하는 추가 작업 필요.
- `기타` 등급은 이번에 기본 해제로 바뀌어, `isGradeVisible` 규칙상 '기타' 등급 구조물이 기본 화면에서 숨겨짐(요청 문구 "1종·2종만" 준수 결과).
