docs(event): 상세 연동과 목록 이미지 리뷰를 보존한다

This commit is contained in:
Yu Sung
2026-10-29 12:03:25 +09:00
parent e427641915
commit ed92dfbe40
2 changed files with 85 additions and 0 deletions
@@ -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개 회귀·프로젝트 의미 동일성·검증 제외 범위를 누적했다.