diff --git a/docs/20261006_선물_UI_추가/reviews/phase10-contact-tracking-validation.md b/docs/20261006_선물_UI_추가/reviews/phase10-contact-tracking-validation.md new file mode 100644 index 00000000..3982bf12 --- /dev/null +++ b/docs/20261006_선물_UI_추가/reviews/phase10-contact-tracking-validation.md @@ -0,0 +1,85 @@ +# Phase 10 연락처·운송장 검증 리뷰 + +## 1. 리뷰 정보 + +| 항목 | 내용 | +|---|---| +| 리뷰 대상 | Phase 10 / `P10-T1`~`P10-T5` 코드·정적 범위 | +| 기준 commit 또는 working tree | working tree | +| 리뷰 일자 | 2026-10-08 | +| 리뷰어 | Oracle 요구사항 리뷰, Oracle UI 정적 리뷰 | +| 기준 문서 | `prd.md`, `plan-task.md` | +| 리뷰 상태 | 수정 검증 완료, runtime visual gate 미완료 | + +## 2. 리뷰 목적과 범위 + +- 이름의 한글 IME 보호, 휴대폰 `010` 11자리 제출, 운송장 숫자 10~14자리 제출 계약을 검토한다. +- 기존 request·mutation·navigation과 입력 화면의 layout·copy·타이포그래피 정책 보존 여부를 검토한다. +- 실제 한글 조합, 키보드, 붙여넣기, Dynamic Type, VoiceOver, screenshot fidelity는 부팅된 인증 실행 환경 부재로 제외한다. + +## 3. 검토한 근거 + +| 검증 | 결과와 근거 | +|---|---| +| `bash work/tests/check-gift-contact-input.sh` | 80 assertions와 양 폼·ViewModel source contract 성공 | +| `bash work/tests/check-gift-recipient-address.sh` | 실제 recipient ViewModel 280 assertions 성공 | +| `GiftTrackingRegistrationCheck.swift` harness | 142 assertions 성공 | +| address/recipient-form 회귀, Swift/shell parse, project lint, `git diff --check` | 성공 | +| `SodaLive-dev`, `SodaLive` generic iOS Debug build | 각각 `BUILD SUCCEEDED` | +| 기능 독립 리뷰 | `APPROVE`, 차단 결함 없음 | +| UI 정적 리뷰 | `REQUEST_CHANGES`, `REV-P10-001` 확정 | + +## 4. 발견 사항 요약 + +| ID | 심각도 | 상태 | 제목 | 소유 Task | +|---|---|---|---|---| +| `REV-P10-001` | Medium | 수정 완료 | 연락처 UIKit 필드가 기존 언어별 폰트 정책을 우회함 | `P10-R1` | + +## 5. 발견 사항 상세 + +### REV-P10-001 — 연락처 UIKit 필드가 기존 언어별 폰트 정책을 우회함 + +- **심각도:** Medium +- **상태:** 수정 완료 +- **관련 요구사항:** `SEND-007`, `RECV-007` +- **소유 Task:** `P10-R1` + +**관찰 내용** + +`GiftContactTextField`가 `Pretendard-Regular`를 직접 지정해, 한국어는 Pretendard, 일본어는 NotoSansJP, 기타 언어는 system font를 선택하는 기존 `.appFont(.body3)` 정책을 따르지 않는다. + +**근거** + +- 코드: `SodaLive/Sources/V2/Gift/Components/GiftContactTextField.swift`의 `UIFont(name: Font.preRegular.rawValue, ...)`. +- 비교 기준: `SodaLive/Sources/Extensions/FontModifier.swift`의 localized `fontName` 해석과 `FontModifier.body`. +- 테스트: `work/tests/check-gift-contact-input.sh`에는 IME·키보드·폼 연결 검사는 있으나 localized font 사용 검사가 없다. + +**영향** + +일본어와 기타 언어에서 이름·휴대폰 입력란만 주변 SwiftUI 입력/텍스트와 다른 font family를 사용할 수 있다. 입력 검증 자체와 데이터 전송에는 영향이 없다. + +**권장 조치** + +기존 `FontModifier`의 언어 해석을 UIKit에서도 재사용할 최소 진입점을 제공하고, 연락처 필드가 `.body3` 크기·weight로 이를 사용하도록 한다. 다른 UIKit wrapper와 전역 폰트 정책은 변경하지 않는다. + +## 6. plan·goal 전환 + +확정 항목을 구현 전에 `plan-task.md`의 `P10-R1`로 전환했다. focused RED/GREEN과 양 스킴 build 후 이 문서에 수정 검증 결과를 누적한다. + +### 수정 검증 — 2026-10-08 + +- source contract에서 `Font.preRegular` 직접 사용과 공용 resolver 미연결을 RED로 확인했다. +- `SodaTypography.localizedFontName`이 기존 localized `fontName`에 위임하고, `GiftContactTextField`가 `.body3` 이름·크기와 system regular fallback을 사용하도록 수정했다. +- contact 80 assertions와 localized typography contract, recipient 280 assertions, tracking 142 assertions, Swift/shell parse, `git diff --check`, 양 스킴 generic iOS Debug build가 성공했다. +- Oracle 정적 재리뷰 결과 `APPROVE_STATIC`, 추가 코드 수정 사항 없음. + +## 7. 리뷰 종료 판정 + +| 판정 항목 | 결과 | 근거 | +|---|---|---| +| 요구사항·검증 로직 | 충족 | 기능 리뷰 `APPROVE`, focused checks | +| 확정 결함 plan 반영 | 충족 | `P10-R1` | +| 확정 결함 수정 | 충족 | `P10-R1`, focused RED/GREEN, 재리뷰 `APPROVE_STATIC` | +| runtime visual/accessibility QA | 미충족 | 부팅된 인증 실행 환경과 fresh screenshot 부재 | + +**최종 결론:** Phase 10 코드·정적 gate와 `REV-P10-001` 수정 검증은 완료했다. 실제 입력·시각·접근성 gate는 실행 환경 확보 후 재개한다.