ZZEM Sprints
Explore Clusters System
← Timeline

UGC Platform 001 — 프로필 & 네비게이션

in-progress #ugc-platform#phase-1#profile-navigation
ZZEM · MY 프로필 (app-003)

Prototypes

PRD

PRD — ugc-platform-001

원본

  • Notion (SSOT): AI UGC Platform 1 — 프로필 & 네비게이션
  • KB 미러: ~/.zzem/kb/products/ugc-platform/phase-1-profile/prd.md (Notion 동기화본)
  • Product Overview: ~/.zzem/kb/products/ugc-platform/prd.md
  • Notion ID: 33b0159c-6b59-8124-9f14-cbb4ac053ee5

스코프 요약

앱의 네비게이션 골격(하단 탭 바 3탭)과 프로필 시스템(MY 3탭, 프로필 편집, 타 유저 프로필, 설정)을 구축한다. UGC Platform 제품의 Phase 1에 해당하며, Phase 2(피드 인터랙션 & 페이백)와 Phase 3(소셜 & 알림)의 선행 조건이다.

포함

  • 하단 탭 바 3탭 네비게이션 (홈 / 탐색 / MY) — Figma icon-only, 라벨은 accessibilityLabel / route name / analytics key용 canonical
  • MY 탭: 3개 하위 탭 (좋아요 껍데기, 업로드, 저장) — 좋아요 실제 기능은 Phase 2, 소셜 실제 기능은 Phase 3
  • 프로필 편집 (닉네임, 프로필 이미지, 소개, 링크)
  • 타 유저 프로필 조회 화면
  • 설정 화면 진입점 — 차단 관리·알림 설정 등 실제 기능은 Phase 3

제외 (다른 Phase로 이월)

  • 팔로우/좋아요/알림 실제 동작 (Phase 2, 3)
  • 피드 세로 스와이프 인터랙션 (Phase 2)
  • 크레딧 페이백 시스템 (Phase 2)
  • 차단/신고 처리 (Phase 3)

KPI 기여

UGC 플랫폼 DAU, 프로필 방문율, 팔로우 전환율 상승 기반 마련.

설계 참조

이전 스프린트 히스토리

  • ugc-platform-001 (2026-03-29, completed) — 기존 단일 PRD 기반 7/7 PASS, 30/30 AC. 2026-04-09 orchestrator 전면 리셋으로 artifacts 삭제. 원격 브랜치 wrtn-backend origin/zzem/ugc-platform-001만 잔존.
  • ugc-profile-nav-001 (2026-04-07~09, completed → reset) — Phase 1 전용 재시도. 3그룹 PASS, Figma 보정 완료. 2026-04-09 reset에 포함.

본 스프린트(ugc-platform-001 v2)는 전면 리셋 후 KB two-axis 마이그레이션 및 Harness v4 개선사항을 반영한 Phase 1 재실행이다. 브랜치 네임스페이스는 sprint/ 전환 (sprint/ugc-platform-001)으로 과거 zzem/ugc-platform-001과 격리.

Report

Sprint Report: ugc-platform-001

Generated: 2026-04-22 Architecture: Planner-Generator-Evaluator (Harness Design v4) PRD: AI UGC Platform 1 — 프로필 & 네비게이션

Executive Summary

UGC Platform Phase 1 (프로필 & 네비게이션) 구현 완료 — 하단 3탭 + MY 프로필 (편집/공유/3탭/랜딩 로직) + 타유저 프로필 + 콘텐츠 가시성 필터 API. 17 AC 중 15 fulfilled / 2 partially (Maestro 자동화 불가 AC-2.3, 7.4 — 수동 QA deferred). PRD amendment 4건 (DRIFT-01~04) 전부 반영. 2 PR 생성 (Backend #794, App #555).

PRD Coverage

PRD Section AC 수 충족 미충족
PRD 1 (기본 탐색 & 홈) 4 4 0
PRD 2 (프로필) 8 7 1 (AC-2.3 partial)
PRD 7 (타유저 프로필) 5 4 1 (AC-7.4 partial)

Fulfillment Rate: 88.2% (15 fulfilled + 2 partially_fulfilled / 17 total). Unfulfilled 0.

PRD Amendments: 4/4 applied (DRIFT-01 고객센터 / DRIFT-02 카운트 라벨 / DRIFT-03 disabled 토큰 / DRIFT-04 canonical 탭 라벨).

Build Results

Group Feature BE Tasks FE Tasks Eval Result Fix Loops
001 Backend — profile + visibility endpoints be-001/002/003/004 PASS (Round 2 + inline fix) 3
002 App Foundation — bottom tabs + MY profile + Settings app-001/002/003/004 PASS (Round 1 + Fix R1) 1
003 App Features — ProfileEdit + OtherUser + Share + SwipeFeed app-005/006/007/008 PASS (Round 1 + Fix R1) 1

Quality Metrics

Metric Value
Total groups 3
First-pass rate 0% (전 그룹 Round 1 에서 issue 발견, 단 배포 차단 없음)
Avg fix cycles 1.67
Critical issues 0
Major issues found 5
Minor issues found 6
Issues fixed 8
Issues deferred 5

Issues Found by Evaluator

Critical

없음.

Major

Group Issue Root Cause Resolution
001 E2E 테스트가 nx testMatch 미매치로 실제 실행 안 됨 spec_ambiguity (contract §공통빌드품질 bullet 4 의 "실행" 요구 모호) Fix R2 — jest-e2e.json moduleNameMapper + project.json test-e2e target 추가
001 me-contents e2e cursor=anyjunk@IsBase64() 에서 400 — 시나리오 논리 오류 spec_ambiguity Fix R2 — 유효 base64 aWdub3JlZA== 로 교체
002 generating-failed.screen.tsx:45 tag:'all' — Home route 타입 변경 후 TS2353 regression spec_ambiguity (completeness-003 grep scope 부족) Fix R1 — nested screen:"HomeTab", params:{tag:"all"}
002 screen-params.ts::withGlobalScreenConfig 제네릭 incompat (nested path config) dependency Fix R1 — 제네릭 제약 PathConfigMap<object> 로 완화
003 SwipeFeed 양쪽 queryFn 무조건 fire (discriminated union variant 별 gate 부재) spec_ambiguity Fix R1 — enabled: isProfileVariant / !isProfileVariant 가드

Minor

Group Issue Status
002 Home 헤더 gear icon 잔존 — Settings 진입 dual entry point Deferred (의도적 유지 가능)
002 profile.screen useEffect([landingTab]) race Deferred (UX follow-up)
002 Domain 레이어 react-query import +2 파일 Deferred (Clean Architecture 별도 스프린트)
003 OtherUserProfile contents query enable guard 부재 Fix R1 — enabled: !!userProfile
003 Clipboard from react-native deprecated Deferred (package migration)
003 SwipeFeed initialContentId fallback UX Deferred (경계 케이스)

Also — BE inline fix

Group Issue Resolution
001 content.repository.ts:225 cursor $lt 사용 → CursorResponseDto 규약(extra item as cursor)과 불일치, page 2 마지막 항목 누락 inline $lte 1-char fix (commit 000fc8fd)

Systemic Patterns

5건 식별 — 다음 스프린트 Contract 드래프팅 시 반영 필요:

  1. Cursor $lt → $lte 규약 (frequency 2, correctness): Repository 커서 쿼리는 $lte 필수. Contract V-method 에 rg '_id:\\s*\\{\\s*\\$lt\\s*:' → 0 hit grep 추가.

  2. Nx testMatch 누락 탐지 (frequency 1, completeness): 신규 e2e-spec.ts 추가 시 project.json + jest-e2e.json 검증 — nx test --listTests | grep e2e-spec 로 discovery 확인.

  3. Route param 타입 변경 시 callsite 누락 (frequency 2, completeness): FE typecheck 결과를 grep -v '@wrtn/' 로 clean 측정. completeness-003 grep scope 를 src/ 전체로 widening.

  4. Conditional query enabled gate 부재 (frequency 2, completeness): Discriminated union / parent-dependent query 는 반드시 enabled 옵션 필수. Contract completeness-002 에 명시.

  5. Parent context 의존 payload 의 prop threading 누락 (frequency 1, completeness): Planner 가 Ground Rule 에서 "상위 컨텍스트 필요 여부" 명시 + Evaluator contract review 에서 Prop flow 수동 trace.

Deliverables

Code

Repository Branch Base Files Lines
wrtn-backend sprint/ugc-platform-001 apple 7 commits (48 files changed, backend 도메인 확장) ≈ +1500 / -20
app-core-packages sprint/ugc-platform-001 epic/ugc-platform-final 13 commits (76 files changed, navigation + profile/ + settings/ + edit/ + other/ + swipe-feed + data/domain 신규) ≈ +2000 / -120

New Modules / Screens / Components (App)

  • presentation/profile/ — ProfileScreen (landing + 3 tabs + header + count row + action buttons)
  • presentation/profile/edit/ — ProfileEditScreen + ImagePickerSheet
  • presentation/profile/other/ — OtherUserProfileScreen (탭바 없이 그리드 단일)
  • presentation/coming-soon/ — ComingSoonScreen (placeholder 3개 메뉴)
  • presentation/settings/ — 8 canonical 메뉴 + ComingSoonSettingsSection
  • app/navigation/root-tab-navigator.tsx — 3 탭 + testID (home-tab / explore-tab / my-tab)
  • shared/routes/route.types.ts::SwipeFeed — discriminated union (legacy | profile variant)
  • shared/hooks/useShareMyProfile.ts, shared/lib/url/profile-share-url.ts
  • shared/lib/format/korean-count.ts (AC 2.2 포맷)
  • shared/lib/validation/nickname-validator.ts
  • data/profile/, data/me-contents/, data/user-profile/ (model/mapper/query-key/repo-impl)
  • domain/profile/, domain/me-contents/, domain/user-profile/ (entity/repository/usecase)

New API Endpoints (Backend)

  • GET /v2/me/profile — MY profile + auto-nickname lazy bootstrap + persona flag
  • PATCH /v2/me/profile — partial update (nickname / profileImageFileUuid / bio / link)
  • GET /v2/me/contents?visibility={public|private|liked}&cursor=&limit= — visibility filter
  • GET /v2/me/contents/counts — counts per visibility (landing tab 결정용)
  • GET /v2/users/:userId/profile — 404 gate + public projection (isPersona 필드 부재)
  • GET /v2/users/:userId/contents?cursor=&limit= — public contents only

API contract: sprint-orchestrator/sprints/ugc-platform-001/contracts/api-contract.yaml (351 lines).

Sprint Artifacts

종류 개수 경로
Sprint Contract 3 contracts/group-001.md, group-002.md, group-003.md
Contract Review 2 contracts/group-002-review.md, group-003-review.md
Evaluation Report 3 evaluations/group-001-evaluation.md, group-002-evaluation.md, group-003-evaluation.md
Checkpoint 4 checkpoints/group-001-summary.md, group-002-summary.md, group-003-summary.md, phase-5-summary.md
E2E Flow Plan 1 contracts/e2e-flow-plan.md
E2E Seed Plan 1 contracts/e2e-seed-plan.md
PRD Amendment 1 phase-3.4-prd-amendments.md (DRIFT-01~04)
Retrospective 4 retrospective/gap-analysis.yaml, pattern-digest.yaml, deferred-items.yaml, REPORT.md (본 파일)

New Maestro Flows (8 신규 + 1 업데이트)

  • bottom-tab-nav.yaml, explore-tab.yaml, my-profile-default-landing.yaml, settings-menu-full.yaml (Group 002)
  • home-to-settings.yaml (업데이트 — MY 탭 경유 option b)
  • profile-edit.yaml, other-user-profile.yaml, profile-to-swipe-feed.yaml (Group 003)

PR Links

Repository Status Link
wrtn-backend Open https://github.wrtn.club/wrtn-tech/wrtn-backend/pull/794
app-core-packages Open https://github.com/wrtn-tech/app-core-packages/pull/555

E2E 풀스위트: --skip-e2e (리뷰어 merge 전 실행 권장, PR body 명시).

Improvements for Next Sprint

Priority Improvement Source
high Sprint Contract V-method 에 cursor $lt 패턴 grep → 0 hit 추가 pattern_digest
high nx e2e-spec 추가 시 project.json + jest-e2e.json moduleNameMapper 검증 V-method 포함 pattern_digest
high Discriminated union / parent-dependent query 는 enabled gate 필수 — Contract §Done Criteria 에 명시 pattern_digest
medium FE typecheck 결과를 grep -v '@wrtn/' 로 clean 측정 — pre-existing cascade 와 신규 에러 구분 pattern_digest
medium Planner (Contract drafting) 단계에서 parent context 의존 payload prop threading 수동 trace pattern_digest
medium Deferred AC (native sheet / 404 seed) 는 Phase 5 PR 전 수동 QA 체크리스트 의무화 pattern_digest
low Context Pressure Protocol 🟡 기준 재검토 — 계약 재발견 이슈 2건+ 추가 pattern_digest

Next Sprint Recommendation

--follow-up=ugc-platform-001 으로 ugc-platform-002 생성 권장 — UGC Platform Phase 2 (피드 인터랙션 & 페이백) 스프린트 예상. 본 스프린트의 follow-up 은 2건 partially_fulfilled (수동 QA) + 5건 Minor deferred 로 small~medium 규모.

Regression Guard 필수:

  • 기존 22 flow + 신규 8 flow = 30 flow 전수 PASS 확인 (E2E 풀스위트 실행)
  • SwipeFeed discriminated union legacy variant 경로 (filter-list-item, trending-filter-section-item, swipe-feed.yaml) 회귀 검증
  • Visibility 필터 legacy 문서 ({isPublished: undefined} → $ne:true 매칭) 의 다음 스프린트 신규 쿼리 재활용 시 동일 규약 유지

Timeline

Phase Duration Notes
Phase 1 Init 짧음 2026-04-21 sprint 디렉토리 생성 + sprint-config.yaml
Phase 2 Spec 보통 API contract + 8 task 파일 + e2e flow/seed plan
Phase 3 Prototype 길음 프로토타입 4종 Figma 캐노니컬 리비전 + DRIFT 4건 해소
Phase 4 Build 길음 3 groups × (contract 2-round + impl + eval + fix loop)
Phase 5 PR 짧음 2 PR 생성 (E2E skip)
Phase 6 Retro 짧음 본 REPORT 포함 retrospective 산출물

Total: 2026-04-21 ~ 2026-04-22 (KB 기반 long-running 세션 기준).