27 KiB
27 KiB
유저-크리에이터 채팅 날짜 구분선 PRD
문서 정보
| 항목 | 내용 |
|---|---|
| 문서 상태 | 구현 완료 / 실서버·접근성 QA 대기 |
| 작성일 | 2026-10-16 |
| 최종 수정일 | 2026-10-16 |
| 대상 제품 | SodaLive iOS 유저-크리에이터 DM 채팅 |
| 작성자·결정권자 | 작성: 에이전트 / 제품 결정: 사용자, 6차 인터뷰 완료 |
| 관련 API Contract | 해당 없음. 기존 메시지 timestamp 활용을 전제로 하며 API 변경 요청 없음 |
| 관련 구현 계획 | plan-task.md, P1-T1·T2 구현 완료, P1-GATE 외부 조건 대기 |
| 관련 review | Phase 1 리뷰 |
요구사항 상태
| 상태 | 의미 |
|---|---|
| 확정 | 사용자가 확인한 목표 또는 현재 코드에서 확인한 사실 |
| 미결 | 인터뷰에서 결정해야 하며 임의로 구현 기준 삼지 않음 |
| 제외 | 이번 문서 작성 세션의 제외 범위 |
1. 개요
유저-크리에이터 DM 대화에서 메시지 사이에 날짜 구분 항목을 표시해 사용자가 메시지가 오간 날짜를 파악할 수 있게 한다. 날짜 경계는 채팅을 보는 사람의 기기 현재 시간대를 따른다. 날짜 표기의 언어·지역은 앱 언어 설정에 대응하는 locale을 따르며, 항상 연·월·일·요일을 포함하고 오늘·어제 같은 상대 날짜 표현은 사용하지 않는다.
2. 문제와 배경
- 확정: 유저-크리에이터 채팅에는 날짜 표시가 없어 메시지가 언제 오갔는지 파악하기 어렵다.
- 확정: 다른 채팅 앱과 같이 대화 중 날짜 구분선 또는 항목을 추가하는 것이 요청된 개선 방향이다.
- 문서 작성 판단: 별도 정량 계측 목표는 두지 않고, 날짜별 메시지 구분과 아래 기능 수용 사례로 해결 여부를 판정한다. 사용자가 별도 계측 기능을 요청한 것은 아니다.
3. 목표
3.1 제품 목표
- 메시지 대화 흐름에서 날짜별 구분을 제공한다.
- 날짜 표기는 앱 언어 설정의 locale을 따른다. 현재 앱 매핑인 한국어
ko_KR, 영어en_US, 일본어ja_JP에 맞는 순서와 표현으로 항상 연·월·일·요일을 표시한다. 오늘·어제로 대체하지 않는다.
3.2 사용자 경험 목표
- 대화 내 날짜 구분 항목으로 메시지의 날짜를 확인할 수 있다.
- 기존 시간순 대화 열람과 이전 메시지 로드 흐름을 유지한다.
4. 이번 세션의 제외 범위
- 제품 코드, 테스트, 미리보기, 목업, UI 설계 변경을 하지 않는다.
- 위 문서 전용 제한은 초기 인터뷰 당시 범위다. 후속 사용자의
구현 진행요청에 따라 확정 계획 내 코드·테스트·프로젝트 등록 및 검증을 수행한다. 기존 기록은 당시 이력으로 보존한다. - 빌드, 의존성 변경, 커밋을 하지 않는다.
- 초기 인터뷰 세션에서는
plan-task.md를 작성하지 않았다. 요구사항 확정 후 2026-10-16 사용자 요청에 따라 현재 PRD와 같은 폴더에 구현 계획만 추가한다. 기능 구현은 이번 범위에 포함하지 않는다. - API Contract 문서는 작성하지 않는다. API 변경 요청은 없고 기존 timestamp가 존재한다.
- 기존 7월 DM 문서와 9월 수신자 문서는 별개 선행 기능 문서로 참조만 하며 수정하지 않는다.
- 향후 기능 범위에서도 날짜 고정 헤더와 음성 메시지 표시 추가는 제외한다. 음성 표시 제외는 기존 TEXT 표시 범위를 유지하기 위한 에이전트의 최소 범위 판단이며, 사용자 별도 결정으로 간주하지 않는다.
5. 대상 사용자와 흐름
| 사용자 | 목표 | 주요 작업 |
|---|---|---|
| SodaLive 유저-크리에이터 DM 사용자 | 메시지가 오간 날짜 파악 | 대화 진입, 메시지와 날짜 구분 항목 열람, 과거 메시지 탐색 |
핵심 흐름
- 사용자가 유저-크리에이터 DM 대화에 진입한다.
- 메시지를 시간순으로 읽으며 각 날짜의 구분 항목을 확인한다.
- 위로 스크롤해 과거 메시지를 로드하고 날짜별 흐름을 이어서 확인한다.
6. 현재 구현에서 확인한 사실
- 대화 화면은
TEXT메시지만 표시하며createdAt기준 오름차순으로 정렬된 메시지 목록을 사용한다. - 가장 첫 메시지가 나타날 때 이전 페이지를 로드하고, 화면 높이보다 콘텐츠가 짧으면 추가 로드를 시도한다.
UserCreatorChatDisplayMessage.createdAt은Int64이며 서버 메시지 timestamp를 보존한다.- 보류 메시지는 현재 epoch milliseconds로 생성되고, ACK 수신 시 서버 메시지로 교체된다. 실패한 보류 메시지도 존재할 수 있다.
- 각 텍스트 메시지 항목은
createdAt을 epoch milliseconds로 해석해 시각을 표시한다. - 기존 메시지 시각은
Date.convertDateFormat을 통해 기기 현재 시간대와 자동 갱신 locale을 사용한다. 새 날짜 구분선은 기기 현재 시간대와 앱 언어 locale을 따르기로 확정했다. 기존 메시지별 시각의 locale까지 변경하기로 결정한 것은 아니다. - 앱 언어 설정은 별도로 존재하며 한국어
ko_KR, 영어en_US, 일본어ja_JPlocale로 매핑한다. 새 날짜 구분선은 기기 언어·지역을 직접 따르는 대신 이 앱 언어 정책을 따른다.
7. 기능 요구사항
| ID | 상태 | 요구사항 | 수용 기준 | 추적 |
|---|---|---|---|---|
| DATE-001 | 확정 | 유저-크리에이터 DM 대화에 메시지 사이 날짜 구분 항목을 제공한다. | 대화에서 날짜 단위의 구분을 인식할 수 있으며, 삽입 위치는 DATE-005를 따른다. | 목표, OQ-004, DEC-009 |
| DATE-002 | 확정 | 날짜 표기의 언어·지역은 앱 언어 설정의 locale을 따른다. | 한국어는 ko_KR, 영어는 en_US, 일본어는 ja_JP 형식으로 표시한다. 기기 설정과 앱 언어가 다르면 앱 언어를 우선하며 시스템 기본 선택도 기존 앱 언어 해석 정책을 따른다. 포함 필드는 DATE-004를 따른다. |
OQ-002, OQ-003, DEC-007, DEC-008 |
| DATE-003 | 확정 | 날짜 구분과 일자 경계는 채팅을 보는 사람의 기기 현재 시간대를 따른다. | 기기 현지 날짜가 바뀌면 서로 다른 날짜로 구분한다. 같은 메시지도 열람자의 시간대에 따라 다른 날짜에 속할 수 있으며 한국 시간으로 고정하지 않는다. | OQ-001, DEC-006 |
| DATE-004 | 확정 | 날짜 구분 항목은 항상 연·월·일·요일을 표시한다. 오늘·어제 같은 상대 날짜 표현은 사용하지 않는다. | 한국어 예시는 2026년 10월 16일 금요일이다. 오늘과 어제에 해당하는 날짜도 같은 포함 필드를 유지하며, 영어·일본어는 동일 필드를 해당 locale의 순서와 표현으로 표시한다. 한국어 순서와 접미사를 다른 언어에 강제하지 않는다. |
OQ-003, DEC-008 |
| DATE-005 | 확정 | 현재 불러온 첫 메시지 위와 인접 메시지의 현지 날짜가 바뀌는 지점에 날짜 구분 항목을 표시한다. | 같은 날짜의 연속 메시지 사이에는 반복하지 않는다. 과거 페이지 병합 후 같은 날짜가 이어지면 페이지 경계의 구분선은 중복하지 않고 합쳐진 날짜 묶음의 첫 메시지 위에만 남긴다. 메시지가 없으면 날짜 항목도 표시하지 않는다. | OQ-004, DEC-009 |
| DATE-006 | 확정 | 날짜 구분 항목은 대화 목록 안에서 메시지와 함께 스크롤된다. | 화면 밖으로 스크롤되면 보이지 않고, 화면 상단에 고정하거나 별도 날짜 헤더로 중복 표시하지 않는다. | OQ-005, DEC-010 |
| DATE-007 | 확정 | 전송 중·실패 메시지는 로컬 생성 시각으로 날짜를 구분하고, 서버 메시지로 확정되면 서버 createdAt으로 날짜 구분을 갱신한다. | ACK 전후 현지 날짜가 달라지면 서버 날짜 묶음으로 이동한다. 이후 DATE-005를 다시 적용해 비어버린 날짜 항목과 중복 날짜 항목을 남기지 않는다. 실패 상태만으로는 로컬 생성 날짜를 바꾸지 않는다. | OQ-006, DEC-012 |
| DATE-008 | 확정, 에이전트 범위 판단 | 기존 화면에 표시하는 TEXT 메시지를 대상으로 날짜 구분을 추가한다. | 표시하지 않는 VOICE 메시지만 있는 날짜에는 날짜 항목을 만들지 않는다. 날짜 구분을 위해 음성 표시 기능을 새로 추가하지 않는다. 보류·실패 TEXT의 날짜 처리는 DATE-007을 따른다. | OQ-007, DEC-011 |
8. 기술 제약과 확인 범위
- 현재 대화 화면 파일:
SodaLive/Sources/V2/Main/Chat/UserCreatorChat/UserCreatorChatRoomView.swift - 표시 메시지 모델:
SodaLive/Sources/V2/Main/Chat/UserCreatorChat/Models/UserCreatorChatDisplayMessage.swift - 정렬, pagination 병합, 보류 메시지 및 ACK 교체:
SodaLive/Sources/V2/Main/Chat/UserCreatorChat/UserCreatorChatRoomViewModel.swift - 메시지별 시각 표시:
SodaLive/Sources/V2/Main/Chat/UserCreatorChat/Components/UserCreatorChatTextMessageItemView.swift - 기존 날짜 formatter:
SodaLive/Sources/Extensions/DateExtension.swift - 앱 언어 locale 정책:
SodaLive/Sources/Settings/Language/Services/LanguageService.swift - 현재 확인된 timestamp는 milliseconds 단위다. 새 날짜 구분선은 기기 현재 시간대와 앱 언어 locale에 따라 항상 연·월·일·요일을 표시한다. 기존 메시지별 시각 formatter 변경으로 범위를 확장하지 않는다.
- 초기 인터뷰에서는 기술 설계를 확정하지 않았다. 후속 구현 계획 요청에 따라 기술 구성과 검증 절차를 plan-task.md에 정리했다. API 변경은 없으며 계획 작성은 기능 구현 착수 승인이 아니다.
- 구현 시 세부 색상, 글꼴, 간격, 장식선 여부와 컴포넌트 분리는 기존 채팅 디자인 및 저장소 관례 안에서 구현자가 정한다. 이 문서는 해당 시각 상세를 사용자 확정 사항으로 간주하지 않으며, 목업이나 제품 코드를 만들지 않는다.
9. 성공 기준
9.1 문서 완료 기준, 이번 세션
- 초기 PRD가 샘플의 관련 구조를 따르고 확정 사실과 미결 결정을 구분한다.
- 요구사항, 기술 제약, 성공 기준, Open Questions, 추적성, Decision Log를 기록한다.
- 요청된 경로에 PRD 한 파일만 작성하고 계획 문서는 만들지 않는다.
- 인터뷰로 중요한 미결 사항을 해소하고 결정 근거를 누적한다.
- 확정 요구사항, 제외 범위, 수용 사례를 사용자가 확인할 수 있게 정리한다.
위 문서 완료 체크는 초기 인터뷰 세션의 이력이다. 후속 사용자 요청으로 구현 계획 문서를 추가한 현재 범위는 DEC-013과 plan-task.md를 따른다.
9.2 기능 수용 기준, 전체 사용자 흐름의 최종 QA 대기
- 확정된 날짜 경계에 따라 대화 중 날짜 구분 항목이 표시된다. (
DATE-001,DATE-003,DATE-005) - 날짜 문자열이 합의된 locale 및 표시 형식을 따른다. (
DATE-002,DATE-004) - 첫 메시지 위와 날짜 변경 지점에만 구분선이 표시되고, 같은 날짜의 과거 페이지를 붙이면 중복 날짜 항목이 남지 않는다. 빈 목록에는 날짜 항목이 없다. (
DATE-005) - 초기 로드, 과거 페이지 추가, 보류 메시지의 ACK 교체를 포함해 합의한 메시지 범위에서 날짜 구분이 일관된다. (
DATE-005~DATE-008) - 날짜 구분 항목은 메시지와 함께 스크롤되며 상단에 고정되지 않는다. 기존 화면에서 제외된 메시지 유형 때문에 빈 날짜 항목이 생기지 않는다. (
DATE-006,DATE-008)
위 기능 수용 기준의 미완료 표시는 초기 문서 작성 이력 및 아직 남은 실제 대화 QA를 반영한다. 후속 구현에서 날짜 계산 자동 검사와 컴포넌트 렌더링·두 타깃 빌드는 통과했지만, 전체 대화 사용자 흐름의 수용 완료와 동일하게 처리하지 않는다. 현재 증거와 남은 항목은 계획 및 리뷰 문서에 기록한다.
9.3 기능 검증 사례
날짜 계산·formatter 스냅샷 자동 검사는 통과했다. 실제 DM의 페이지 로드·ACK·스크롤 상호작용은 인증된 테스트 방 부재로 대기하며, 원본 날짜 컴포넌트의 네이티브 렌더링만 별도 확인했다.
| 사례 | 기대 결과 | 요구사항 |
|---|---|---|
| 빈 목록 / 메시지 1개 | 날짜 항목 없음 / 첫 메시지 위에 해당 날짜 항목 1개 | DATE-005 |
| 같은 날 연속 메시지 / 현지 자정 전후 메시지 | 날짜 묶음당 첫 메시지 위에 1개 / 날짜 변경 시 새 항목 | DATE-003, DATE-005 |
| 과거 페이지가 같은 날짜로 연결됨 / 다른 날짜로 연결됨 | 합쳐진 같은 날짜 묶음에는 1개만 유지 / 실제 날짜 경계에만 추가 | DATE-005 |
| 앱 한국어·영어·일본어, 기기 언어·지역과 불일치 | 앱 locale 형식으로 연·월·일·요일 모두 표시, 기기 시간대로 날짜 판정 | DATE-002~004 |
| 오늘·어제·과거 연도 메시지 | 상대 날짜로 대체하거나 연도·요일을 생략하지 않음 | DATE-004 |
| 전송 중 / 실패 / 같은 날짜의 서버 확정 | 로컬 생성 날짜 유지 / 로컬 생성 날짜 유지 / 같은 날짜 묶음 유지 | DATE-007 |
| 서버 확정 시 날짜가 변경됨 | 서버 createdAt 기준으로 다시 구분, 기존 날짜 묶음이 비면 항목 제거, 새 묶음의 날짜 항목 중복 없음 | DATE-005, DATE-007 |
| 날짜 항목을 화면 밖으로 스크롤 / VOICE만 있는 날짜 | 상단 고정 표시 없음 / 빈 날짜 항목 생성 없음 | DATE-006, DATE-008 |
10. Open Questions
| ID | 상태 | 결정 필요 사항 | 결정 시 확인할 내용 | 연결 요구사항 |
|---|---|---|---|---|
| OQ-001 | 해결 | 날짜 구분의 timezone 및 하루 경계는 무엇을 기준으로 할까? | 기기 현재 시간대 기준으로 확정. 첫 질문의 1번 선택, DEC-006 | DATE-003, DATE-005 |
| OQ-002 | 해결 | locale은 기기 언어+지역과 앱 언어 중 무엇을 따를까? | 앱 언어 설정 기준으로 확정. 두 번째 질문의 1번 선택, DEC-007 | DATE-002 |
| OQ-003 | 해결 | 날짜 문구에 연도·요일을 포함할까? 오늘·어제는 별도 표현할까? | 항상 연·월·일·요일을 표시하고 상대 날짜 표현은 사용하지 않기로 확정. 세 번째 질문의 1번 선택, DEC-008 | DATE-002, DATE-004 |
| OQ-004 | 해결 | 구분 항목은 어떤 경계에 삽입할까? | 현재 불러온 첫 메시지 위와 날짜 변경 지점에 표시하고 같은 날짜의 페이지 경계 중복은 제거. 네 번째 질문의 1번 선택, DEC-009 | DATE-001, DATE-005 |
| OQ-005 | 해결 | 구분 항목은 대화 안의 정적 항목인가, 스크롤 중 고정 표시인가? | 메시지와 함께 스크롤하고 상단에 고정하지 않기로 확정. 다섯 번째 질문의 1번 선택, DEC-010 | DATE-006 |
| OQ-006 | 해결 | 보류·실패 메시지와 ACK 뒤 서버 timestamp가 달라 날짜가 바뀌면 어떻게 할까? | 전송 중·실패는 로컬 생성 시각, 전송 완료 후 서버 시각으로 날짜를 다시 구분. 여섯 번째 질문의 1번 선택, DEC-012 | DATE-007 |
| OQ-007 | 해소, 에이전트 범위 판단 | 날짜 구분은 TEXT 이외의 메시지 유형에도 적용할까? | 기존 TEXT 표시 범위를 유지하고 VOICE 표시 추가는 제외한다. 요청하지 않은 신규 메시지 표시를 만들지 않는 최소 범위 판단이며 사용자 별도 결정 아님, DEC-011 | DATE-008 |
현재 열린 제품 결정은 없다. OQ-007의 범위 유지와 시각 상세의 구현자 위임은 사용자 답변과 구별된 에이전트 판단이다. 후속 사용자 요청으로 구현했으며, 현재 대기는 제품 결정이 아닌 실서버·접근성 QA 환경이다.
11. 요구사항 추적성
| 요구사항 | 근거 / 미결 결정 | 문서 완료 증거 | 기능 검증 |
|---|---|---|---|
| DATE-001 | 사용자 확인 목표, DEC-009 | 문제, 목표, 요구사항과 확정 삽입 규칙 기록 | P1-T2: 첫 메시지·날짜 변경 자동 검사와 컴포넌트 표시 확인, 실제 DM 대기 |
| DATE-002 | OQ-002, DEC-007 | 앱 언어 locale 기준 반영 | P1-T1·T2: ko/en/ja 자동 검사 및 환경 주입 코드 확인, 실제 앱 System 설정 QA 대기 |
| DATE-003 | OQ-001, DEC-006 | 열람자 기기 시간대 기준을 요구사항과 결정 기록에 반영 | P1-T1·T2: 서울/UTC 경계, LA DST 자동 검사 통과 |
| DATE-004 | OQ-003, DEC-008 | 연·월·일·요일 필수 및 상대 날짜 표현 제외 반영 | P1-T1: 오늘·어제·과거 연도 전체 필드 검사 통과 |
| DATE-005 | OQ-004, DEC-009 | 첫 메시지, 날짜 전환, 과거 페이지 중복 제거 규칙 반영 | P1-T2: 빈/단일/연속·prepend 스냅샷 검사 통과, 실제 paging 대기 |
| DATE-006 | OQ-005, DEC-010 | 목록 내부에서 함께 스크롤하고 고정하지 않는 동작 반영 | P1-T2: 비고정 구조 코드 리뷰 승인, 실제 스크롤 제스처 QA 대기 |
| DATE-007 | OQ-006, DEC-012 | 전송 상태별 시각 출처와 서버 확정 후 날짜 재구분 반영 | P1-T2: pending/failed/server 교체 스냅샷 검사 통과, 실제 ACK 대기 |
| DATE-008 | OQ-007, DEC-011 | 기존 TEXT 표시 범위를 유지하는 에이전트 판단 명시 | P1-T2: VOICE-only·TEXT 혼합 날짜 검사 통과 |
12. Decision Log
| 날짜 | ID | 상태 | 결정 또는 확인 사실 | 근거 | 영향 |
|---|---|---|---|---|---|
| 2026-10-16 | DEC-001 | 확정 | 유저-크리에이터 채팅에서 날짜가 없어 메시지 시점을 파악하기 어렵고, 대화에 날짜 구분 항목을 추가한다. | 사용자 확인 | DATE-001, DATE-002 |
| 2026-10-16 | DEC-002 | 확정 | 이번 세션은 인터뷰와 문서 작성만 수행한다. 제품 코드, 빌드, 의존성, 커밋은 수행하지 않는다. 초기 PRD 이후 인터뷰 결과를 같은 문서에 보강하고, 계획 문서는 필요 시 요구사항 확정 후 작성한다. | 사용자의 문서 전용 지시, 저장소 문서 정책에 따른 에이전트 작업 방식 | 문서 상태 및 이번 세션 Non-Goals |
| 2026-10-16 | DEC-003 | 확정 | 현 단계에서 별도 API Contract 문서는 만들지 않는다. 기존 timestamp가 있으며 API 변경이 요청되지 않아 최소 문서로 진행한다. | 확인된 모델과 저장소 최소 문서 정책에 따른 에이전트 판단, 사용자 별도 결정 아님 | 기술 제약 |
| 2026-10-16 | DEC-004 | 확정 | 기존 7월 DM 문서와 9월 수신자 문서는 선행 기능 맥락으로 참조하고, 이번 신규 날짜 구분선 요구사항은 별도 PRD로 관리한다. | 기존 문서 범위 확인 및 에이전트 문서 구성 판단, 사용자 별도 결정 아님 | 이번 세션 Non-Goals |
| 2026-10-16 | DEC-005 | 미결 | timezone, locale 출처, 날짜 필드와 표현, 삽입 경계, 고정 여부, ACK 처리, 메시지 유형 범위는 미확정이다. | 사용자 인터뷰 전 | OQ-001 |
| 2026-10-16 | DEC-006 | 확정 | DEC-005 중 timezone 결정을 해소한다. 날짜 경계는 채팅을 보는 사람의 기기 현재 시간대를 따르고, 한국 시간으로 고정하지 않는다. locale 출처 등 나머지 사항은 미결이다. | 첫 인터뷰에서 사용자가 1번 선택 | DATE-003, OQ-001 |
| 2026-10-16 | DEC-007 | 확정 | DEC-005와 DEC-006에 남은 locale 출처 결정을 해소한다. 날짜 구분선은 앱 언어 설정의 locale을 따른다. 현재 앱 정책인 한국어 ko_KR, 영어 en_US, 일본어 ja_JP를 적용한다. 기기 시간대 기준은 유지하며 포함 필드와 상대 날짜 표현은 아직 미결이다. |
두 번째 인터뷰에서 사용자가 1번 선택 | DATE-002, OQ-002 |
| 2026-10-16 | DEC-008 | 확정 | DEC-005와 DEC-007에 남은 포함 필드와 상대 날짜 표현 결정을 해소한다. 항상 연·월·일·요일을 앱 언어 locale에 맞게 표시하고 오늘·어제 표현은 사용하지 않는다. 삽입 경계, 표시 방식, ACK 처리와 메시지 유형 범위는 아직 미결이다. | 세 번째 인터뷰에서 사용자가 1번 선택 | DATE-004, OQ-003 |
| 2026-10-16 | DEC-009 | 확정 | DEC-005와 DEC-008에 남은 삽입 경계 결정을 해소한다. 현재 불러온 첫 메시지 위와 날짜가 바뀌는 지점에 표시하고 같은 날짜의 연속 메시지에는 반복하지 않는다. 과거 페이지를 붙여도 같은 날짜 구분선은 중복하지 않는다. 빈 목록에 날짜 항목을 만들지 않는 것은 이 규칙에 따른 에이전트의 파생 기준이다. | 네 번째 인터뷰에서 사용자가 1번 선택 | DATE-001, DATE-005, OQ-004 |
| 2026-10-16 | DEC-010 | 확정 | DEC-005 등에 남은 고정 여부를 해소한다. 날짜 구분 항목은 메시지와 함께 스크롤되며 화면 상단에 고정하지 않는다. | 다섯 번째 인터뷰에서 사용자가 1번 선택 | DATE-006, OQ-005 |
| 2026-10-16 | DEC-011 | 확정, 에이전트 범위 판단 | 기존 TEXT 표시 범위를 유지하며 VOICE 메시지 표시 추가는 제외한다. 날짜 그룹은 실제 표시 대상 메시지를 기준으로 하므로 숨겨진 메시지만 있는 날짜에 빈 날짜 항목을 만들지 않는다. 기존 화면의 표시 유형을 확장하라는 요청이 없어 해소한 항목으로, 사용자에게 별도 승인받은 결정은 아니다. | 기존 View의 TEXT 필터와 최소 변경 원칙 | DATE-008, OQ-007 |
| 2026-10-16 | DEC-012 | 확정 | DEC-005 등에 남은 ACK 날짜 처리를 해소한다. 전송 중·실패는 로컬 생성 시각, 전송 완료 후는 서버 확정 시각을 사용한다. 날짜가 달라지면 날짜 묶음을 다시 계산하고 DATE-005에 따라 빈 날짜 및 중복 날짜 항목을 남기지 않는다. | 여섯 번째 인터뷰에서 사용자가 1번 선택 | DATE-005, DATE-007, OQ-006 |
| 2026-10-16 | DEC-013 | 확정 | 앞선 문서 전용 인터뷰 세션의 계획 작성 보류(DEC-002)는 당시 범위의 기록으로 보존한다. 사용자의 최신 명시 요청에 따라 이번 범위는 plan-task.md 작성과 PRD 연결 및 추적성 갱신으로 변경하며, 기능 구현은 계속 제외한다. |
사용자 직접 요청, 문서 정책에 따른 인터뷰 완료 후 계획 작성 | plan-task.md, DATE-001~008 |
| 2026-10-16 | DEC-014 | 확정 | 후속 사용자 요청 구현 진행, ulw에 따라 확정 계획 구현과 검증을 시작한다. 문서 전용 제한을 해제하되 제품 요구사항은 바꾸지 않는다. |
사용자 직접 요청 | P1-T1, P1-T2, P1-GATE |
13. 문서 검증 기록
- 2026-10-16: 문서 정책과 PRD 샘플을 읽고 초기 요구사항을 기록했다. 기존 대화 View, 표시 모델, ViewModel, 메시지 시각 컴포넌트, 날짜 extension과 언어 서비스의 해당 동작을 읽어 현재 사실과 신규 제품 결정을 분리했다.
- 제품 코드와 프로젝트 설정은 수정하지 않았다. 문서만 작성하므로 빌드, 자동 테스트, 앱 실행 검증은 수행하지 않았다. 날짜 구분선 기능은 미구현이며 인터뷰 진행 중이다.
- 2026-10-16, 인터뷰 1차: 사용자 답변
1을 기기 시간대 선택으로 반영했다. 개요, 현재 동작과 신규 결정 구분, DATE-003, OQ-001, 추적표, Decision Log의 일치 여부를 문서 검색으로 확인한다. 제품 코드는 변경하지 않는다. - 2026-10-16, 인터뷰 2차: 사용자 답변
1을 앱 언어 설정 선택으로 반영했다. 개요, 목표, 기존 동작과 신규 결정 구분, DATE-002, OQ-002, 기술 제약, 추적표, DEC-007의 정합성을 문서 검색으로 확인한다. 기존 메시지별 시각 표시 변경은 추가하지 않았다. - 2026-10-16, 인터뷰 3차: 사용자 답변
1을 항상 연·월·일·요일 표시로 반영했다. 개요, 목표, DATE-002·004, 기술 제약, OQ-003, 추적표와 DEC-008의 정합성을 문서 검색으로 확인한다. 코드 변경, 빌드 및 앱 실행 검증은 수행하지 않는다. - 2026-10-16, 인터뷰 4차: 사용자 답변
1을 첫 메시지 위와 날짜 변경 지점 표시 및 과거 페이지의 같은 날짜 중복 제거로 반영했다. DATE-001·005, 기능 수용 기준, OQ-004, 추적표와 DEC-009의 정합성을 문서 검색으로 확인한다. 표시 방식, ACK 처리, 메시지 유형 범위는 아직 미결이며 코드 변경 및 앱 검증은 수행하지 않는다. - 2026-10-16, 인터뷰 5차: 사용자 답변
1을 메시지와 함께 스크롤하고 상단에 고정하지 않는 방식으로 반영했다. 요청 범위를 확장하지 않도록 기존 TEXT 표시 유지도 에이전트 판단으로 구분해 기록했다. DATE-006·008, OQ-005·007, 추적표 및 DEC-010·011의 정합성을 문서 검색으로 확인한다. 남은 사용자 결정은 보류·실패 메시지와 서버 ACK의 날짜 처리다. 코드 변경 및 앱 검증은 수행하지 않는다. - 2026-10-16, 인터뷰 6차: 사용자 답변
1을 전송 완료 후 서버 확정 날짜로 갱신하는 규칙으로 반영했다. DATE-007, OQ-006, 추적표 및 DEC-012를 일치시키고 기능 검증 사례를 정리했다. 과거 미결 기록은 당시 이력으로 보존하고 현재 상태만 해소했다. 문서만 작성했으며 빌드, 테스트, 앱 실행은 하지 않았다. - 2026-10-16, 최종 문서 확인: 독립 검토자가 PRD만 읽고 향후 계획 수립에 중요한 미답변 질문이 없다고 판정했다(
nothing important left). 최초 일반 검토자 실행은 지원되지 않는 모델 오류로 시작하지 못했으며 문서 전문 검토자로 재시도해 확인했다. 요구사항 8개, 질문 7개의 현재 상태와 DEC-006~012 연결을rg -n '^\| DATE-|^\| OQ-|DEC-012' docs/20261016_유저_크리에이터_채팅_날짜_구분선/prd.md로 대조했다. 기능 테스트를 실행하거나 완료 처리한 것은 아니다. - 2026-10-16, 범위 변경 및 추적성 보강: 사용자 요청에 따라 plan-task.md를 작성하고 DATE-001→P1-T2, DATE-002→P1-T1/P1-T2, DATE-003→P1-T1/P1-T2, DATE-004→P1-T1, DATE-005→P1-T2, DATE-006→P1-T2/P1-GATE, DATE-007→P1-T2, DATE-008→P1-T2로 연결했다. 이 기록은 문서 작업만 허용하며 제품 코드, 테스트 파일, 프로젝트 설정, 빌드 및 앱 실행은 허용하지 않는다. 계획의 모든 구현 체크박스는 미실행 상태다.
14. 인터뷰 종료 판단
| 항목 | 최종 판단 |
|---|---|
| Goal | 1.00: 메시지가 오간 날짜를 대화에서 확인 |
| Scope | 0.95: 기존 DM의 표시 TEXT에 날짜 항목 추가, 이번 세션은 문서만 작성 |
| Constraints | 1.00: 기기 시간대, 앱 locale, 연·월·일·요일, 비고정 표시, 서버 시각 확정 정책 결정 |
| Success | 0.95: 삽입·병합·표기·전송 상태별 수용 사례를 명시, 실행 검증은 구현 이후 |
| Context | 0.95: 기존 View·모델·병합·시각·언어 정책 확인, 시각 상세는 기존 관례 내 구현자 결정 |
| 최종 모호성 | 0.03: 기존 코드베이스 가중식의 0.0275를 반올림한 주관적 점검값 |
| 열린 질문 | 제품 결정 없음. 후속 구현 완료, 실서버·접근성 QA 대기 |