docs(gift): 전달 불가 안내 결정을 기록한다

This commit is contained in:
Yu Sung
2026-10-08 19:13:07 +09:00
parent f093194820
commit 9a21aba052
2 changed files with 29 additions and 1 deletions
@@ -715,6 +715,24 @@ xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configurati
- [x] **GREEN 확인:** Debug build를 실행한다. - [x] **GREEN 확인:** Debug build를 실행한다.
- [x] **REFACTOR:** 전달 불가 정책 action은 임의 URL을 열지 않는지 확인한다. - [x] **REFACTOR:** 전달 불가 정책 action은 임의 URL을 열지 않는지 확인한다.
#### Task 7.R1 전달 불가 안내 문구 보정
**Goal 실행 `P7-R1`:** 발신·수신 전달 불가 상세의 사유 아래 붉은 안내 문구를 Figma 문구로 교체한다.
**Files:**
- Modify: `SodaLive/Sources/V2/Gift/Detail/Components/SentGiftDetailContentView.swift`
- Modify: `SodaLive/Sources/V2/Gift/Detail/Components/ReceivedGiftDetailContentView.swift`
- Modify: `work/tests/check-received-gift-detail.sh`
- Modify: `docs/20261006_선물_UI_추가/prd.md`
- Modify: `docs/20261006_선물_UI_추가/plan-task.md`
- [x] **RED:** `work/tests/check-received-gift-detail.sh`의 전달 불가 안내 문구 기대값을 Figma 문구로 바꾼다.
- [x] **RED 확인:** `bash work/tests/check-received-gift-detail.sh received-states`가 기존 화면 문구 때문에 `FAIL received-states: disposal warning`으로 실패하는지 확인한다.
- [x] **GREEN:** 발신·수신 상세의 기존 `해당 선물은 정책에 따라 폐기되며 반송되지 않습니다.` 문구를 `해당 선물은 보관기간(입고일 포함 최대 7일) 내에 반송 등 필요한 조치가 완료되지 않을 경우, 사전에 동의한 약관 및 폐기 등의 내용에 따라 폐기될 수 있습니다. 자세한 내용은 고객센터로 문의해 주세요.`로 교체한다.
- [x] **GREEN 확인:** `bash work/tests/check-received-gift-detail.sh received-states`, `bash -n work/tests/check-received-gift-detail.sh`, `git diff --check`를 실행해 성공을 확인한다.
- [x] **REFACTOR:** 추가 추상화 없이 기존 폰트·색상·조건부 표시를 유지했는지 diff로 확인하고 Progress에 검증 결과를 남긴다.
### 검증 방법 ### 검증 방법
#### Phase 7 Gate #### Phase 7 Gate
@@ -1150,6 +1168,7 @@ P2 -> P3/P4/P5 -> P6/P7 -> P8/P9/P10 -> P11
| 2026-10-08 | `P11-T2` | profile/policy source contract가 각각 route 값과 파손 정책 URL 부재로 RED임을 확인했다. 프로필 URL을 표시 전용 route 값으로 전달해 38pt 원형 `DownsampledKFImage`를 표시하고, 파손 행만 새 정책 URL을 사용하도록 보정했다. Phase 11 profile/policy, address, contact 80 assertions, recipient 280 assertions, recipient-form, received-states 회귀와 shell parse가 GREEN이다. | | 2026-10-08 | `P11-T2` | profile/policy source contract가 각각 route 값과 파손 정책 URL 부재로 RED임을 확인했다. 프로필 URL을 표시 전용 route 값으로 전달해 38pt 원형 `DownsampledKFImage`를 표시하고, 파손 행만 새 정책 URL을 사용하도록 보정했다. Phase 11 profile/policy, address, contact 80 assertions, recipient 280 assertions, recipient-form, received-states 회귀와 shell parse가 GREEN이다. |
| 2026-10-08 | `P11-T3` | button source contract가 기존 text-only outline UI에서 RED임을 확인했다. 기존 predicate와 세 recipient route 값을 유지하면서 20pt `ic_send_gift`, 검은 문구, 흰색 capsule을 적용했고 button mode와 전체 Phase 11 source contract, shell parse가 GREEN이다. Talk/DM UI는 변경하지 않았다. | | 2026-10-08 | `P11-T3` | button source contract가 기존 text-only outline UI에서 RED임을 확인했다. 기존 predicate와 세 recipient route 값을 유지하면서 20pt `ic_send_gift`, 검은 문구, 흰색 capsule을 적용했고 button mode와 전체 Phase 11 source contract, shell parse가 GREEN이다. Talk/DM UI는 변경하지 않았다. |
| 2026-10-08 | `P11-GATE` | 계획된 경로형 누락 identifier 거부와 path splash pending coverage를 보강해 deep-link harness 22 assertions가 GREEN이다. Phase 11 profile/policy/button, address, contact 80, recipient 280, recipient-form, received-states, decoding 22 assertions와 shell parse, `git diff --check`가 성공했다. `SodaLive-dev`, `SodaLive` generic iOS Debug build는 각각 `BUILD SUCCEEDED`다. 독립 기능 리뷰는 `APPROVE`, Critical/Important/Minor 없음이며 정적 시각 구현도 제품 결함 없이 승인됐다. 인증 화면 screenshot·링크 탭·VoiceOver·좁은 화면/Dynamic Type은 실행 환경 부재로 미완료다. | | 2026-10-08 | `P11-GATE` | 계획된 경로형 누락 identifier 거부와 path splash pending coverage를 보강해 deep-link harness 22 assertions가 GREEN이다. Phase 11 profile/policy/button, address, contact 80, recipient 280, recipient-form, received-states, decoding 22 assertions와 shell parse, `git diff --check`가 성공했다. `SodaLive-dev`, `SodaLive` generic iOS Debug build는 각각 `BUILD SUCCEEDED`다. 독립 기능 리뷰는 `APPROVE`, Critical/Important/Minor 없음이며 정적 시각 구현도 제품 결함 없이 승인됐다. 인증 화면 screenshot·링크 탭·VoiceOver·좁은 화면/Dynamic Type은 실행 환경 부재로 미완료다. |
| 2026-10-08 | `P7-R1` | source check 기대값을 Figma 전달 불가 안내 문구로 먼저 바꿔 `bash work/tests/check-received-gift-detail.sh received-states`가 `FAIL received-states: disposal warning`으로 실패하는 RED를 확인했다. 이후 발신·수신 상세의 사유 아래 붉은 안내 문구만 교체했고 기존 폰트·색상·조건부 렌더링은 유지했다. received-states 구조 검사, `bash -n work/tests/check-received-gift-detail.sh`, Swift parse, `git diff --check`, `SodaLive-dev` generic iOS Debug build가 성공했다. 인증 runtime screenshot, 좁은 화면 실제 줄바꿈, Dynamic Type·VoiceOver QA는 실행 환경 부재로 미수행이다. |
## Decision Log ## Decision Log
@@ -1168,6 +1187,7 @@ P2 -> P3/P4/P5 -> P6/P7 -> P8/P9/P10 -> P11
| 2026-10-08 | `DEC-011` | 확정 | `gift-detail/{applicationNo}` 경로형 딥링크는 기존 scheme/parser/navigation을 최소 확장한다. | 사용자 제공 예시 및 설계 승인 | `P11-T1`, PRD `COMMON-006` | | 2026-10-08 | `DEC-011` | 확정 | `gift-detail/{applicationNo}` 경로형 딥링크는 기존 scheme/parser/navigation을 최소 확장한다. | 사용자 제공 예시 및 설계 승인 | `P11-T1`, PRD `COMMON-006` |
| 2026-10-08 | `DEC-012` | 확정 | 파손 면책 행만 새 정책 URL을 사용하고 기존 약관 URL은 유지한다. | 사용자 제공 URL 및 설계 승인 | `P11-T2`, PRD `COMMON-007` | | 2026-10-08 | `DEC-012` | 확정 | 파손 면책 행만 새 정책 URL을 사용하고 기존 약관 URL은 유지한다. | 사용자 제공 URL 및 설계 승인 | `P11-T2`, PRD `COMMON-007` |
| 2026-10-08 | `DEC-013` | 확정 | Gift source의 브랜드 문구는 이미 `소다라이브`이므로 변경하지 않는다. | source 검색과 사용자 선택 A | Phase 11, PRD `DEC-013` | | 2026-10-08 | `DEC-013` | 확정 | Gift source의 브랜드 문구는 이미 `소다라이브`이므로 변경하지 않는다. | source 검색과 사용자 선택 A | Phase 11, PRD `DEC-013` |
| 2026-10-08 | `DEC-014` | 확정 | 전달 불가 상세의 붉은 안내 문구는 서버 필드 추가 없이 앱 내 고정 문구로 교체한다. | 사용자 확인: “동일하게 앱 내에 심으면 된다.” | `P7-R1`, PRD `RECV-008` |
## 발견된 문제 ## 발견된 문제
+9 -1
View File
@@ -176,6 +176,7 @@ DeepLink gift-detail/applicationNo
| `RECV-005` | 확정 | `recipientAddress=null`이면 받는 주소 섹션 전체를 숨긴다. | 빈 섹션, skeleton, `-` 값을 표시하지 않는다. | `P7-T4` | | `RECV-005` | 확정 | `recipientAddress=null`이면 받는 주소 섹션 전체를 숨긴다. | 빈 섹션, skeleton, `-` 값을 표시하지 않는다. | `P7-T4` |
| `RECV-006` | 확정 | `status=UNDELIVERABLE`이면 배송지 입력과 주소 섹션을 숨긴다. | 전달 불가 hero, 문의/정책 action, 사유/폐기 안내만 표시한다. | `P7-T4` | | `RECV-006` | 확정 | `status=UNDELIVERABLE`이면 배송지 입력과 주소 섹션을 숨긴다. | 전달 불가 hero, 문의/정책 action, 사유/폐기 안내만 표시한다. | `P7-T4` |
| `RECV-007` | 확정 | 받는 크리에이터 배송지의 이름과 휴대폰 번호에 보내는 사람과 같은 규칙을 적용한다. | 이름은 한글·영문 1~12자이며 한글 조합을 보존한다. 휴대폰은 편집 중 ASCII 숫자 최대 11자, 제출 시 `010`으로 시작하는 정확히 11자리만 허용한다. | `P10-T1`~`P10-T4` | | `RECV-007` | 확정 | 받는 크리에이터 배송지의 이름과 휴대폰 번호에 보내는 사람과 같은 규칙을 적용한다. | 이름은 한글·영문 1~12자이며 한글 조합을 보존한다. 휴대폰은 편집 중 ASCII 숫자 최대 11자, 제출 시 `010`으로 시작하는 정확히 11자리만 허용한다. | `P10-T1`~`P10-T4` |
| `RECV-008` | 확정 | 전달 불가 사유 아래 붉은 안내 문구는 앱 내 고정 문구로 표시한다. | 발신·수신 상세 모두 `해당 선물은 보관기간(입고일 포함 최대 7일) 내에 반송 등 필요한 조치가 완료되지 않을 경우, 사전에 동의한 약관 및 폐기 등의 내용에 따라 폐기될 수 있습니다. 자세한 내용은 고객센터로 문의해 주세요.`를 표시하고 서버 응답 필드는 추가하지 않는다. | `P7-R1` |
### 8.7 약관, 딥링크, 날짜 ### 8.7 약관, 딥링크, 날짜
@@ -332,7 +333,7 @@ DeepLink gift-detail/applicationNo
| `LIST-001~005` | §11.2 | 2, 4 | pagination/build | 선물함 상태별 화면 | | `LIST-001~005` | §11.2 | 2, 4 | pagination/build | 선물함 상태별 화면 |
| `DETAIL-001~006` | §11.2 | 2, 5 | status mapping/build | 보낸 상세/취소 | | `DETAIL-001~006` | §11.2 | 2, 5 | status mapping/build | 보낸 상세/취소 |
| `TRACK-001~007` | §11.2 | 2, 6, 10 | validation/build | 운송장 등록·신청 취소 | | `TRACK-001~007` | §11.2 | 2, 6, 10 | validation/build | 운송장 등록·신청 취소 |
| `RECV-001~007` | §11.2 | 2, 7, 10 | privacy/validation/build | 받은 상세/배송지 | | `RECV-001~008` | §11.2 | 2, 7, 10 | privacy/validation/build | 받은 상세/배송지 |
| `COMMON-001~007` | §11.2 | 2, 8, 11 | deeplink parsing/link source/build | 푸시/딥링크·약관 링크 | | `COMMON-001~007` | §11.2 | 2, 8, 11 | deeplink parsing/link source/build | 푸시/딥링크·약관 링크 |
## 17. Decision Log ## 17. Decision Log
@@ -352,6 +353,7 @@ DeepLink gift-detail/applicationNo
| 2026-10-08 | `DEC-011` | 확정 | 경로형 선물 상세 딥링크는 `gift-detail/{applicationNo}`를 사용하고 `voiceon`, `voiceon-test`는 기존 scheme 지원만 재사용한다. | 사용자 제공 딥링크 예시 및 설계 승인 | `COMMON-006`, `P11-T1` | | 2026-10-08 | `DEC-011` | 확정 | 경로형 선물 상세 딥링크는 `gift-detail/{applicationNo}`를 사용하고 `voiceon`, `voiceon-test`는 기존 scheme 지원만 재사용한다. | 사용자 제공 딥링크 예시 및 설계 승인 | `COMMON-006`, `P11-T1` |
| 2026-10-08 | `DEC-012` | 확정 | 파손 면책 `(필수)`에만 별도 파손 정책 URL을 사용하고 기존 약관 링크는 유지한다. | 사용자 제공 URL 및 설계 승인 | `COMMON-007`, `P11-T2` | | 2026-10-08 | `DEC-012` | 확정 | 파손 면책 `(필수)`에만 별도 파손 정책 URL을 사용하고 기존 약관 링크는 유지한다. | 사용자 제공 URL 및 설계 승인 | `COMMON-007`, `P11-T2` |
| 2026-10-08 | `DEC-013` | 확정 | Gift 모듈의 브랜드 문구는 이미 모두 `소다라이브`이므로 추가 문자열 변경 없이 충족 처리한다. | 코드 검색 결과와 사용자 선택 A | Phase 11 | | 2026-10-08 | `DEC-013` | 확정 | Gift 모듈의 브랜드 문구는 이미 모두 `소다라이브`이므로 추가 문자열 변경 없이 충족 처리한다. | 코드 검색 결과와 사용자 선택 A | Phase 11 |
| 2026-10-08 | `DEC-014` | 확정 | 전달 불가 상세의 붉은 안내 문구는 서버 필드 추가 없이 앱 내 고정 문구를 Figma 문구로 교체한다. | 사용자 확인: “동일하게 앱 내에 심으면 된다.” | `RECV-008`, `P7-R1` |
## 18. 변경 관리 ## 18. 변경 관리
@@ -380,6 +382,12 @@ DeepLink gift-detail/applicationNo
- 선물 보내기 버튼은 기존 노출 조건과 action을 유지하면서 사용자 제공 `ic_send_gift` asset, 흰색 배경, 검은색 문구를 적용한다. - 선물 보내기 버튼은 기존 노출 조건과 action을 유지하면서 사용자 제공 `ic_send_gift` asset, 흰색 배경, 검은색 문구를 적용한다.
- Gift 모듈의 브랜드 문구는 이미 `소다라이브`로 확인되어 변경하지 않는다. - Gift 모듈의 브랜드 문구는 이미 `소다라이브`로 확인되어 변경하지 않는다.
### Phase 7 후속 전달 불가 안내 문구 보정 (2026-10-08 확정)
- 전달 불가 사유 아래 붉은 안내 문구는 서버에서 받지 않고 앱 내 고정 문구로 유지한다.
- 발신·수신 상세 모두 Figma 기준 문구 `해당 선물은 보관기간(입고일 포함 최대 7일) 내에 반송 등 필요한 조치가 완료되지 않을 경우, 사전에 동의한 약관 및 폐기 등의 내용에 따라 폐기될 수 있습니다. 자세한 내용은 고객센터로 문의해 주세요.`를 사용한다.
- `delivery.undeliverableReason`은 기존처럼 상단 흰색 사유에만 사용하고 API schema는 변경하지 않는다.
- 요구사항 변경 시 Decision Log에 정정 행을 추가한다. - 요구사항 변경 시 Decision Log에 정정 행을 추가한다.
- 구현 범위가 바뀌면 이 PRD를 먼저 갱신하고 `plan-task.md`의 Phase/Task를 갱신한 뒤 코드를 수정한다. - 구현 범위가 바뀌면 이 PRD를 먼저 갱신하고 `plan-task.md`의 Phase/Task를 갱신한 뒤 코드를 수정한다.
- 기존 완료된 Phase 1 기록은 삭제하지 않는다. - 기존 완료된 Phase 1 기록은 삭제하지 않는다.