<!-- FILE: _St/검증목록_v296.md | ROLE: v296 shortcode 실제확장자·DB·8780 로컬 미디어 검증 -->
# v296 검증목록

| 번호 | 상태 | 테스트 ID | 검증 내용 | 완료 기준 |
|---|---|---|---|---|
| 01 | [코드반영] | `T-V296-PATH-CONTRACT-001` | 신규 이미지 파일명 규약 | `{shortcode}.{실제확장자}`로 저장 |
| 02 | [코드반영] | `T-V296-EXTENSION-001` | 실제 이미지 형식 유지 | JPEG·PNG·WebP·AVIF 확장자를 변환 없이 유지 |
| 03 | [코드반영] | `T-V296-SOURCE-MODE-001` | Shared source mode | `CACHE8701_CDP`, `AUTO_SEEN_JPG` 등록 허용 |
| 04 | [코드반영] | `T-V296-DUPLICATE-REGISTER-001` | 동일 파일 재관찰 | 파일 재기록 없이 누락 DB 등록 수행 |
| 05 | [코드반영] | `T-V296-IDEMPOTENT-EVENT-001` | 저장 이벤트 중복 방지 | shortcode·확장자·SHA256 기반 event UUID 재사용 |
| 06 | [코드반영] | `T-V296-DB-TARGET-001` | 선택 DB 등록 | Cache는 현재 선택 DB, Analyze 복구는 현재 열린 DB 사용 |
| 07 | [코드반영] | `T-V296-LEGACY-FIND-001` | 기존 파일 호환 | `_thumbnail.*`, `_auto_seen.*`를 검색해 DB 복구 |
| 08 | [코드반영] | `T-V296-ANALYZE-LOCAL-001` | 8780 로컬 우선 표시 | AVAILABLE 실제 파일을 CDN URL보다 우선 사용 |
| 09 | [코드반영] | `T-V296-STALE-ASSET-001` | 누락 파일 처리 | DB 행만 있고 실제 파일이 없으면 CDN fallback |
| 10 | [코드반영] | `T-V296-BADGE-001` | 저장 표시 | JPG 고정 문구가 아니라 실제 확장자 표시 |
| 11 | [코드반영] | `T-V296-STATS-UNCHANGED-001` | 통계 로직 보존 | 이미지 등록이 `post_stat_10m`을 새로 만들지 않음 |
| 12 | [검증대기] | `T-V296-CI06-001` | 실제 SQLite 등록 로그 | CI-06에 db·post_id·asset_id·file 표시 |
| 13 | [검증대기] | `T-V296-WIN-FILENAME-001` | Windows 신규 파일명 | `_thumbnail` 없이 shortcode+실제확장자 생성 |
| 14 | [검증대기] | `T-V296-8780-DISPLAY-001` | 실제 8780 화면 | 로컬 `/api/posts/.../media/...`와 실제 확장자 배지 표시 |
| 15 | [검증대기] | `T-V296-LEGACY-REPAIR-001` | 기존 파일 DB 복구 | 기존 `_thumbnail` 파일이 8780 조회 시 media_assets에 등록 |
