docs(event): 상세 연동과 목록 이미지 리뷰를 보존한다
This commit is contained in:
@@ -0,0 +1,55 @@
|
|||||||
|
# 이벤트 상세 API 연동 리뷰
|
||||||
|
|
||||||
|
## 1. 리뷰 정보
|
||||||
|
| 항목 | 내용 |
|
||||||
|
|---|---|
|
||||||
|
| 리뷰 대상 | Phase 1, 현재 브랜치의 미커밋 변경 |
|
||||||
|
| 리뷰 일자 | 2026-10-29 |
|
||||||
|
| 리뷰어 | Oracle 단일 읽기 전용 리뷰, Sisyphus 검증 |
|
||||||
|
| 기준 문서 | ../prd.md, ../api-contract.md, ../plan-task.md |
|
||||||
|
| 리뷰 상태 | 코드 승인, 비차단 항목 수정 검증 완료 |
|
||||||
|
|
||||||
|
## 2. 리뷰 목적과 범위
|
||||||
|
ID-only 라우팅 7개 호출, 기존 EventApi/Repository, 신규 V2 EventDetailViewModel, 기존 상세 View, 양 타깃 등록과 집중 테스트를 검토했다. 딥링크 parser 추가, 공통 인증 변경, 다른 화면 URL 정책 변경은 제외했다. 실서버 테스트는 사용자 지시로 제외한다.
|
||||||
|
|
||||||
|
## 3. 판정 기준
|
||||||
|
사용자 계약 위반·화면 오동작·인증 회귀는 차단 문제로, 반복 QA/문서 정합성은 별도 정리 항목으로 판정한다. HTTP200만으로 성공 처리하지 않고 success 및 단일 유효 data를 요구하며 false는 해당 화면으로 범위를 제한해 복귀해야 한다.
|
||||||
|
|
||||||
|
## 4. 검토한 근거
|
||||||
|
- EventApi.swift/Repository.swift의 GET·requestPlain·optional bearer 및 기존 provider plugin 유지.
|
||||||
|
- EventDetailViewModel.swift의 status → success → DTO 순서, 양수/일치 ID, nullable 이미지·link-only, HTTP(S)+host 경계, 요청 취소·중복·지연 응답 억제.
|
||||||
|
- EventDetailView.swift의 StateObject, View-scoped dismiss, loading/toast, 이미지 주소·기존 레이아웃 보존.
|
||||||
|
- AppStep.swift와 ContentView.swift 및 7개 진입 호출, project.pbxproj의 양 타깃 source membership.
|
||||||
|
- work/tests/EventDetailCheck.swift의 production API/repository/VM/DTO 및 실제 Combine 드라이버. Moya/provider 대역은 실제 공통 plugin 실행이나 HTTP 전송을 증명하지 않는다.
|
||||||
|
|
||||||
|
| 검증 | 결과 | 증거 |
|
||||||
|
|---|---|---|
|
||||||
|
| 집중 이벤트 검사 | PASS | parent 직접 재실행 exit 0 |
|
||||||
|
| 전체 work/tests/check-*.sh | PASS | parent 14개 실행, 실패 0 |
|
||||||
|
| SodaLive / SodaLive-dev Debug 시뮬레이터 빌드 | PASS | 양 스킴 BUILD SUCCEEDED, exit 0 |
|
||||||
|
| 프로젝트 순서 정리 | PASS | 정리 전후 canonical JSON SHA-256 동일 |
|
||||||
|
| TMPDIR 없는 runner 실행 | FAIL 재현 | env -u TMPDIR bash work/tests/check-event-detail.sh, 5행 unset variable |
|
||||||
|
| 네이티브 화면/VoiceOver/LSP | 미실행 | 조작·LSP 도구 부재, 시각 검증 통과를 주장하지 않음 |
|
||||||
|
| 구현 후 실서버 연결 | 제외 | 사용자 지시 |
|
||||||
|
|
||||||
|
## 5. 발견 사항 요약
|
||||||
|
**앱 계약 위반의 확정 차단 사항 없음. Oracle 판정: APPROVE.**
|
||||||
|
|
||||||
|
| ID | 심각도 | 상태 | 제목 | 소유 Task |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| REV-P1-001 | Low | 수정 완료 | 검사 runner의 TMPDIR 의존 및 임시 디렉터리 미정리 | P1-T3 |
|
||||||
|
| REV-P1-002 | Low | 수정 완료 | 구현자 기록 이후 빌드·전체 회귀·재정렬 소유권 정정 필요 | P1-T3 |
|
||||||
|
|
||||||
|
## 6. 발견 사항 상세
|
||||||
|
REV-P1-001: `work/tests/check-event-detail.sh:5`는 `set -u`에서 TMPDIR를 직접 참조한다. TMPDIR 제거 실행은 컴파일 전 exit 1이고, trap이 없어 성공/실패 산출물이 누적된다. 기존 notice runner의 `mktemp -d` 및 생성한 디렉터리만 제거하는 EXIT trap으로 맞춘다.
|
||||||
|
|
||||||
|
REV-P1-002: 이전 구현자의 미실행 빌드 및 비소유 재정렬 기록은 당시 관찰이다. 상위 실행자가 양 빌드/14개 회귀 PASS와 Xcode에 의한 자동 재정렬 정리·의미 동일성을 후속 Progress로 누적하여 정정했다. 기존 검증 기록은 삭제하지 않았다.
|
||||||
|
|
||||||
|
## 7. 확정 항목의 plan 전환
|
||||||
|
P1-T3에서 runner 실패 재현 → 최소 수정 → 정상/실패 경로 cleanup 검증 → 문서 완료 상태 갱신을 수행한다. 앱 production 코드는 추가 변경하지 않는다.
|
||||||
|
|
||||||
|
## 8. 리뷰 종료 판정
|
||||||
|
코드·확정 계약 기준 APPROVE. 비차단 항목도 수정·검증했으며 실서버 및 네이티브 UI 검증을 수행했다고 주장하지 않는다.
|
||||||
|
|
||||||
|
## 9. 수정 후 검증 기록
|
||||||
|
2026-10-29: runner를 기존 notice 패턴의 `mktemp -d`와 EXIT trap으로 변경했다. `env -u TMPDIR bash work/tests/check-event-detail.sh` exit 0. 정상 실행 및 swiftc 함수 대역의 강제 실패(exit 42) 모두 EXIT trap이 생성한 임시 디렉터리만 제거했고 `test ! -e`로 부재를 확인했다. `bash -n`도 exit 0. 앱 production 코드는 승인 후 변경하지 않았다. 문서에는 양 빌드·14개 회귀·프로젝트 의미 동일성·검증 제외 범위를 누적했다.
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# 이벤트 목록 원본 이미지 비율 리뷰
|
||||||
|
|
||||||
|
## 1. 리뷰 정보
|
||||||
|
- 대상: Phase 2 / P2-T1, 현재 브랜치 미커밋 변경 중 EventListView 이미지 modifier와 후속 문서.
|
||||||
|
- 일자: 2026-10-29. 리뷰어: 구현자와 별개인 visual-engineering 검증자. 판정: APPROVE.
|
||||||
|
- 기준: [PRD EVT-005](../prd.md), [계획 Phase 2](../plan-task.md).
|
||||||
|
|
||||||
|
## 2. 목적과 범위
|
||||||
|
기존 너비에서 원본 비율로 이미지 전체를 표시하고 간격·내비게이션·탭·API는 유지하는지 확인했다. 이전 Phase 1의 ID-only 변경은 이번 검토에서 제외했다.
|
||||||
|
|
||||||
|
## 3. 판정 기준
|
||||||
|
고정 높이 및 fill 확대가 없어야 하며, 가로형·정사각형·세로형 모두 원본 비율과 상하단 내용을 유지해야 한다. 새 구성 요소·의존성·서버 요청 추가는 금지한다.
|
||||||
|
|
||||||
|
## 4. 검토 근거와 검증
|
||||||
|
- EventListView.swift:32의 `resizable → scaledToFit → frame(width:)`. 고정 표시 높이만 제거했고 간격·탭 분기는 그대로다.
|
||||||
|
- 로컬 Kingfisher의 downsampling 구현은 최대 픽셀 크기만 지정하므로 기존 downsampling의 300/1000 값이 표시 비율을 강제하지 않음을 확인했다.
|
||||||
|
- 실제 native ImageRenderer 측정과 비교 PNG 두 장을 parent와 검증자가 직접 읽었다. 363.3/717.3pt 너비 x 3개 원본 비율, 6/6 PASS; 상하단 색상 밴드 보존 assertion PASS.
|
||||||
|
- parent 실행: 양 앱 Debug 시뮬레이터 빌드 exit 0, 회귀 스크립트 14개 PASS, diff 공백 검사 exit 0. 명령과 timeout 후 재실행 경위는 계획 문서에 기록했다.
|
||||||
|
|
||||||
|
## 5. 발견 사항
|
||||||
|
확정 발견 사항 없음. 기존 ID-only 탐색·API 범위 확장 없음.
|
||||||
|
|
||||||
|
## 6. 검증 한계
|
||||||
|
이미지 probe는 macOS SwiftUI의 격리된 modifier 검증이다. 실제 iOS ScrollView·탭·내비게이션·Kingfisher 다운로드는 미검증이며 전체 앱 시각 QA로 표현하지 않는다. 실서버/CDN 테스트는 사용자 지시로 하지 않았다.
|
||||||
|
|
||||||
|
## 7. plan 전환
|
||||||
|
수정 Task 전환 항목 없음.
|
||||||
|
|
||||||
|
## 8. 종료 판정
|
||||||
|
APPROVE. 요청한 원본 비율 표시와 최소 변경 범위를 충족한다.
|
||||||
Reference in New Issue
Block a user