Files
sodalive-ios/docs/20261029_이벤트_상세_API_연동/reviews/phase1-event-detail-api.md
T

4.4 KiB

이벤트 상세 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개 회귀·프로젝트 의미 동일성·검증 제외 범위를 누적했다.