# task-1462.1 완료 보고서: 배너비교 탭 실제 비교 가능하게 수정

## S - Situation
배너비교 탭(BannerCompareView)이 v1454/v1455/v1456 3버전 비교를 지원하도록 구현되어 있으나, v1454/v1455는 빈 placeholder 폴더(파일 유실)이고 task-1460.1 피드백 수정 결과(cell-* 최신 배너)가 버전 관리에 반영되지 않아 실제 비교가 불가능했다.

## C - Complication
available 버전이 v1456 1개뿐이어서 나란히 비교 기능이 무의미했다. 비교 뷰에서 v1454/v1455는 "버전 미등록"으로 표시되어 UX가 열악했다.

## Q - Question
v1456(원본)과 v1460(피드백 수정본) 2개 available 버전을 확보하여 실제 나란히 비교가 가능한가?

## A - Answer
v1460 폴더 생성(9셀 × 2포맷 = 18 PNG 복사), banner-versions.json 갱신, server.py 동적 스캔 로직 추가로 해결. API 테스트 결과 2개 버전 모두 available=true, 이미지 서빙 HTTP 200 확인. 서버 재시작 완료.

## 수행 작업

### 1. v1460 버전 폴더 생성
- `output/banners/cell-*/` → `output/banners/versions/v1460/` 복사
- 9개 셀 디렉토리, 각 셀당 meta-feed-1080x1080.png + google-resp-1200x628.png 확인

### 2. banner-versions.json 수정
- v1454, v1455 엔트리 제거 (빈 placeholder)
- v1460 엔트리 추가: label="피드백 수정 버전 (task-1460.1)", available=true

### 3. server.py 동적 스캔 로직 추가 (line 765-782)
- JSON에 없는 versions 디렉토리 자동 감지
- PNG 존재 여부로 available 판정
- 빈 폴더(PNG 없음)는 자동 제외

### 4. 빈 v1454/v1455 디렉토리 삭제

### 5. 서버 재시작 + API 검증

## 발견 이슈 및 해결

### 자체 해결 (3건)
1. **v1454/v1455 빈 폴더 잔류** — 디렉토리 삭제로 정리. 동적 스캔에서도 PNG 없으면 자동 제외되지만 불필요한 디스크 잔류물 방지.
2. **동적 스캔 시 빈 버전 노출 가능성** — `if any(c["available"] for c in per_cell.values())` 조건으로 PNG 없는 버전은 API 응답에서 제외되도록 구현.
3. **v1460 dq_scores 미설정** — 아직 DQ 평가 전이므로 빈 객체(`{}`)로 설정. API 응답에서 각 셀 dq_score=null로 정상 표시됨.

## 테스트 증거

### API 응답 검증
```
versions: 2
  v1456: available=True, label=버전 C (task-1456.1)
  v1460: available=True, label=피드백 수정 버전 (task-1460.1)
cells: 9
```

### 이미지 서빙 검증 (HTTP 200)
- v1456/cell-1-incar-fair/meta-feed-1080x1080.png → 200
- v1460/cell-1-incar-fair/meta-feed-1080x1080.png → 200
- v1456/cell-5-ga-leader/google-resp-1200x628.png → 200
- v1460/cell-5-ga-leader/google-resp-1200x628.png → 200

## 산출물

### 생성 파일
- `output/banners/versions/v1460/cell-1-incar-fair/meta-feed-1080x1080.png`
- `output/banners/versions/v1460/cell-1-incar-fair/google-resp-1200x628.png`
- `output/banners/versions/v1460/cell-2-incar-leader/meta-feed-1080x1080.png`
- `output/banners/versions/v1460/cell-2-incar-leader/google-resp-1200x628.png`
- `output/banners/versions/v1460/cell-3-incar-support/meta-feed-1080x1080.png`
- `output/banners/versions/v1460/cell-3-incar-support/google-resp-1200x628.png`
- `output/banners/versions/v1460/cell-4-ga-fair/meta-feed-1080x1080.png`
- `output/banners/versions/v1460/cell-4-ga-fair/google-resp-1200x628.png`
- `output/banners/versions/v1460/cell-5-ga-leader/meta-feed-1080x1080.png`
- `output/banners/versions/v1460/cell-5-ga-leader/google-resp-1200x628.png`
- `output/banners/versions/v1460/cell-6-ga-support/meta-feed-1080x1080.png`
- `output/banners/versions/v1460/cell-6-ga-support/google-resp-1200x628.png`
- `output/banners/versions/v1460/cell-7-snu-fair/meta-feed-1080x1080.png`
- `output/banners/versions/v1460/cell-7-snu-fair/google-resp-1200x628.png`
- `output/banners/versions/v1460/cell-8-snu-leader/meta-feed-1080x1080.png`
- `output/banners/versions/v1460/cell-8-snu-leader/google-resp-1200x628.png`
- `output/banners/versions/v1460/cell-9-snu-support/meta-feed-1080x1080.png`
- `output/banners/versions/v1460/cell-9-snu-support/google-resp-1200x628.png`

### 수정 파일
- `dashboard/data/banner-versions.json` — v1454/v1455 제거, v1460 추가
- `dashboard/server.py` (line 765-782) — 동적 버전 스캔 로직 추가

### 삭제 파일
- `output/banners/versions/v1454/` (빈 디렉토리 트리)
- `output/banners/versions/v1455/` (빈 디렉토리 트리)

## 모델 사용 기록
- 카르티케야(백엔드) / server.py + JSON 수정 / sonnet
- 하누만(테스터) / v1460 파일 복사 검증 / haiku / 정당성: 단순 파일 존재 확인 (판단 불필요)
