13 KiB
CapsuleTabBar 선택 색상 변경 계획
| 문서 항목 | 내용 |
|---|---|
| 상태 | 구현 및 사용자 수동 검증 완료 |
| 작성일 | 2026-08-18 |
| 요구사항 기준 | docs/20260818_CapsuleTabBar_선택_색상_변경/prd.md |
| API 기준 | 해당 없음 |
| 현재 Phase | Phase 2 완료 |
| 현재 활성 Goal | 없음 |
목표
공유 CapsuleTabBar를 사용하는 세 화면과 Preview에서 선택 탭을 흰색 배경, 검은색 텍스트, 흰색 테두리로 일관되게 표시한다.
현재 상태
| Phase | 상태 | 완료 Task | 활성/다음 Goal | 차단 또는 남은 조건 |
|---|---|---|---|---|
| 1 | 완료 | 1/1 |
없음 | 문서 작성만 완료 |
| 2 | 완료 | 1/1 |
없음 | 없음 |
범위
포함
- 공유
CapsuleTabBar의 선택 상태 배경, 텍스트, 테두리 색상 변경 CreatorChannelAudioTabView,MainChatView,MainContentAllView,CapsuleTabBar_Previews에서의 수동 확인- focused 정적 확인과
SodaLiveDebug 빌드
제외
- 미선택 상태의 배경
Color.black, 텍스트Color.white, 테두리Color.gray700변경 - 크기, 간격, typography, 가로 스크롤, 선택 바인딩, action 변경
- API, 데이터 동작, 프로젝트 파일, 의존성, 테스트 타깃, 디자인 토큰, 공통 abstraction, 기존 기능 문서 변경
기술적 제약
- 수정 파일은
SodaLive/Sources/V2/Component/CapsuleTabBar.swift하나다. - 현재 테스트 번들 타깃이 없으므로 XCTest 파일이나 타깃을 새로 만들지 않는다.
- 공식 빌드 명령은
xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build다. - 공식 lint와 formatter 실행 스크립트는 없다. 구현 검증은 focused 정적 확인, 빌드, 수동 확인으로 한다.
- Phase 1 문서화 세션에서는 Swift source, 프로젝트 파일, API, 기존 기능 문서를 변경하지 않는다.
Phase 1 문서화
Phase 결과: 승인된 선택 색상, 적용 화면, 제외 범위, 미래 구현 파일과 검증 기준이 결정됐다.
선행조건: 없음.
Phase 완료 조건: P1-T1 완료와 문서 생성 검증 기록 누적.
구현 항목
Task 1.1 문서 기준 확정
Goal 실행 P1-T1: 코드 변경 없이 구현 가능한 PRD와 계획을 작성한다.
- 시작 조건: 승인된 선택 상태 색상과 적용 범위가 제공됨.
- 완료 증거:
prd.md와plan-task.md가 생성되고, 요구사항과 계획에 placeholder가 없으며 문서 생성 검증 기록이 남음. - 범위 밖: Swift source, 프로젝트 파일, API, 기존 기능 문서 수정.
- TDD 예외 사유: production 동작을 변경하지 않는 문서화 Task다.
- 대체 검증 방법: 생성 파일 경로와 필수 문구를 확인하고
git diff --check로 문서 diff 공백 오류를 확인한다.
Files:
-
Create:
docs/20260818_CapsuleTabBar_선택_색상_변경/prd.md -
Create:
docs/20260818_CapsuleTabBar_선택_색상_변경/plan-task.md -
Confirm:
docs/agent-guides/documentation-policy.md -
Confirm:
docs/sample/sample-prd.md -
Confirm:
docs/sample/sample-plan-task.md -
승인된 범위와 현재 공유 컴포넌트 호출부를 확인한다.
-
PRD에 선택 상태 세 색상, 유지 항목, 세 화면과 Preview 수용 기준을 기록한다.
-
계획에 문서 완료 Task, 미래 구현 Task, 완료 증거, 검증 방법과 미시작 상태를 기록한다.
-
문서 생성만 검증하고 검증 기록을 누적한다.
완료 조건
P1-T1의 완료 증거를 충족했다.- 문서가 구현 범위를 벗어나지 않는다.
Phase 2 미래 구현
Phase 결과: 세 production 화면과 Preview의 선택 탭이 승인된 세 색상으로 표시되고, 미선택 상태와 기존 동작은 유지된다.
선행조건: P1-T1 완료.
Phase 완료 조건: P2-T1과 P2-GATE 완료, 구현 검증 기록 누적.
구현 항목
Task 2.1 공유 선택 상태 색상 변경
Goal 실행 P2-T1: CapsuleTabBarItem의 선택 상태 색상만 승인된 값으로 교체한다.
- 시작 조건:
P1-T1완료와CTB-001~CTB-004확인. - 완료 증거: 선택 상태가 배경
Color.white, 텍스트Color.black, 테두리Color.white이고 focused 정적 확인과 Debug 빌드가 성공함. - 범위 밖: 호출부 파일 수정, 미선택 색상 변경, 레이아웃과 상호작용 변경, 테스트 타깃 추가.
- TDD 예외 사유: 현재 저장소에 XCTest 번들 타깃이 없어 focused XCTest를 실행할 수 없다. 이 Task에서 테스트 인프라를 추가하지 않는다.
- 대체 검증 방법: 선택과 미선택 색상 표현식을 정적으로 확인하고 빌드 및 네 화면 수동 확인으로 결과를 판정한다.
Files:
- Modify:
SodaLive/Sources/V2/Component/CapsuleTabBar.swift - Confirm:
SodaLive/Sources/V2/CreatorChannel/Audio/CreatorChannelAudioTabView.swift - Confirm:
SodaLive/Sources/V2/Main/Chat/MainChatView.swift - Confirm:
SodaLive/Sources/V2/Main/Content/All/MainContentAllView.swift - Confirm:
SodaLive/Sources/V2/Component/CapsuleTabBar.swift의CapsuleTabBar_Previews - Confirm:
docs/agent-guides/build-test-verification.md
Interfaces:
-
Consumes: 기존
items,selectedItem,title,action계약. -
Produces: 기존 API와 동작을 유지한 선택 상태 색상 표현.
-
RED: 임시 정적 계약 검사에서 선택 상태의 배경·텍스트·테두리와 미선택 상태를 함께 검증한다.
-
RED 확인: 변경 전 검사에서
.foregroundColor(isSelected ? Color.black : Color.white)가 없어FAIL [selected-text]로 종료됨을 확인한다. -
GREEN:
SodaLive/Sources/V2/Component/CapsuleTabBar.swift에서 선택 상태 표현식만Color.white배경,Color.black텍스트,Color.white테두리로 바꾼다. -
GREEN 확인: 같은 정적 계약 검사가
PASS: CapsuleTabBar selected and unselected color contract로 종료됨을 확인한다. -
REFACTOR: 변경이 세 색상 표현식에 한정되어 리팩터링하지 않았다.
xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build에서** BUILD SUCCEEDED **를 확인했다.
검증 방법
Phase 2 Gate
Goal 실행 P2-GATE: 승인된 색상, 유지 범위, 세 production 화면과 Preview를 최종 판정한다.
- 시작 조건:
P2-T1의 모든 체크박스 완료. - 완료 증거: focused 정적 확인, Debug 빌드, 아래 수동 확인이 모두 성공하고 Progress에 기록됨.
- 범위 밖: 실패를 숨기기 위한 test 삭제, 호출부별 예외 스타일, 관련 없는 코드 수정.
rg -n 'Color\.(white|black|gray700|soda400)' SodaLive/Sources/V2/Component/CapsuleTabBar.swift
xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build
Expected: 선택 상태는 Color.white, Color.black, Color.white이고, 미선택 상태는 Color.black, Color.white, Color.gray700이다. 빌드는 ** BUILD SUCCEEDED **로 끝난다.
수동 검증:
CreatorChannelAudioTabView에서 테마를 선택하고 선택 탭의 세 색상과 미선택 탭 색상을 확인한다.MainChatView에서 채팅 필터를 전환하고 선택 탭의 세 색상과 기존 필터 전환 동작을 확인한다.MainContentAllView에서 콘텐츠 유형을 전환하고 선택 탭의 세 색상과 기존 목록 전환 동작을 확인한다.CapsuleTabBar_Previews에서 선택 탭의 세 색상을 확인한다.
visual-qa는 사용자 요청에 따라 수행하지 않았다. 위 네 항목은 사용자의 실제 앱 또는 Preview 수동 확인 결과를 반영해 완료 처리했다.
실행 순서와 의존성
| 순서 | Goal | 선행조건 | 병행 가능 | 차단 시 다음 행동 |
|---|---|---|---|---|
| 1 | P1-T1 |
없음 | 아니요 | 없음 |
| 2 | P2-T1 |
P1-T1 |
아니요 | 실패한 색상 표현식만 원복하고 PRD 기준과 대조 |
| 3 | P2-GATE |
P2-T1 |
아니요 | 실패 소유 Task의 회귀 수정 Task를 추가 |
P1-T1 → P2-T1 → P2-GATE
변경 금지 항목
SodaLive/Sources/V2/Component/CapsuleTabBar.swift외의 Swift source를 수정하지 않는다.- Swift source와 무관한 프로젝트 파일, API, 기존 기능 문서를 수정하지 않는다.
- 미선택 상태 색상, 크기, 간격, typography, 가로 스크롤, 선택 바인딩, action을 변경하지 않는다.
- 새 테스트 타깃, 의존성, 디자인 토큰, abstraction을 추가하지 않는다.
검증 기록
P1-T1 1차 실행, 2026-08-18
- 상태: 완료
- 무엇을:
docs/20260818_CapsuleTabBar_선택_색상_변경/prd.md와docs/20260818_CapsuleTabBar_선택_색상_변경/plan-task.md를 생성했다. - 왜: 승인된 선택 상태 색상 변경을 코드 구현 전에 결정 완료된 PRD와 실행 가능한 계획으로 남기기 위해서다.
- 어떻게:
rg --files docs/20260818_CapsuleTabBar_선택_색상_변경—prd.md,plan-task.md두 경로 확인.rg -n 'Color.white|Color.black|Color.gray700|CreatorChannelAudioTabView|MainChatView|MainContentAllView|CapsuleTabBar_Previews' docs/20260818_CapsuleTabBar_선택_색상_변경— 필수 색상 결정, 세 production 사용처와 Preview 수용 기준 확인.rg -n 'TBD|TODO|<[^>]+>|적절한|필요 시|추후 결정' docs/20260818_CapsuleTabBar_선택_색상_변경 | rg -v 'rg -n'— 출력 없음.rg -n '[[:blank:]]+$' docs/20260818_CapsuleTabBar_선택_색상_변경— 출력 없음.xcodebuild -workspace "SodaLive.xcworkspace" -list— 종료 코드 0,SodaLive와SodaLive-dev스킴 확인.
- 결과: placeholder와 줄 끝 공백 없이 문서 두 개를 생성했다. Swift source, 프로젝트 파일, API, 기존 기능 문서는 변경하지 않았다.
- 남은 항목:
P2-T1,P2-GATE의 모든 체크박스. - 다음 행동: 미래 구현 세션에서
P2-T1을 시작한다.
P2-T1 1차 실행, 2026-08-18
- 상태: 완료
- 무엇을: 공유
CapsuleTabBarItem의 선택 상태만 배경Color.white, 텍스트Color.black, 테두리Color.white로 변경했다. - 왜: 모든
CapsuleTabBar사용 화면에서 승인된 선택 상태를 일관되게 적용하기 위해서다. - 어떻게:
- 임시 정적 계약 검사 변경 전 실행 —
FAIL [selected-text]로 RED 확인. - 같은 검사 변경 후 실행 —
PASS: CapsuleTabBar selected and unselected color contract로 GREEN 확인. rg -n "CapsuleTabBar\\(" SodaLive/Sources/V2/CreatorChannel/Audio/CreatorChannelAudioTabView.swift SodaLive/Sources/V2/Main/Chat/MainChatView.swift SodaLive/Sources/V2/Main/Content/All/MainContentAllView.swift— 세 production 사용처 확인.git diff --check— 출력 없이 종료 코드 0.xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build—** BUILD SUCCEEDED **.
- 임시 정적 계약 검사 변경 전 실행 —
- 남은 항목:
P2-GATE의 사용자 수동 검증 4개. - 다음 행동: 사용자가 세 production 화면과
CapsuleTabBar_Previews에서 선택·미선택 색상과 기존 탭 전환 동작을 확인한다.
P2-GATE 1차 실행, 2026-08-18
- 상태: 완료
- 무엇을: 세 production 화면과
CapsuleTabBar_Previews의 선택·미선택 색상 및 기존 탭 전환 동작을 최종 확인했다. - 왜:
CTB-001~CTB-004의 화면 수용 기준을 완료 판정하기 위해서다. - 어떻게:
- 자동 검증: 정적 색상 계약 통과,
SodaLiveDebug 빌드 성공,git diff --check성공. - 수동 검증: 사용자가 네 수동 검증 항목의 완료를 확인했다.
- 자동 검증: 정적 색상 계약 통과,
- 남은 항목: 없음.
- 다음 행동: 없음.
Decision Log
| 날짜 | ID | 상태 | 결정 | 근거 | 영향 Goal/문서 |
|---|---|---|---|---|---|
| 2026-08-18 | DEC-CTB-PLAN-001 |
확정 | 문서 작성 Task만 완료 처리하고 코드 구현 Task는 모두 미완료로 둔다. | 이번 세션은 문서 생성만 승인됨. | P1-T1, P2-T1, P2-GATE |
| 2026-08-18 | DEC-CTB-PLAN-002 |
확정 | 미래 구현은 공유 컴포넌트 파일 하나만 수정하고, 세 화면과 Preview는 검증 대상으로 둔다. | CapsuleTabBar의 확인된 호출 관계. |
P2-T1, P2-GATE |
| 2026-08-18 | DEC-CTB-PLAN-003 |
확정 | 현재 브랜치에서 구현하고 visual-qa 대신 사용자 수동 검증을 남긴다. |
사용자 실행 지시. | P2-T1, P2-GATE |
| 2026-08-18 | DEC-CTB-PLAN-004 |
확정 | 사용자 수동 확인 결과를 반영해 P2-GATE를 완료 처리한다. |
사용자 수동 확인 완료 결과. | P2-GATE |