ZZEM Sprints
Explore Clusters System
← Timeline

UGC Platform 002 — 피드 인터랙션 & 페이백

in-progress #ugc-platform#phase-2#feed-interaction#payback
app-001 · SwipeFeedActionBar Prototype

Prototypes

PRD

UGC Platform Phase 2 — 피드 인터랙션 & 페이백

선행 스프린트

원본 PRD

스코프 요약

세로 스와이프 피드의 모든 인터랙션 + 크레딧 페이백 시스템 구축. Phase 1 프로필/네비게이션 골격 위에서 피드 상세 인터랙션을 채운다.

구현 범위 (원본 PRD 기준)

US1 — 피드 공개 (8 AC)

  • AC 1.1: 공개 기본 정책 (자동 공개, 업데이트 전 콘텐츠는 비공개 유지, 워터마크 없음)
  • AC 1.2: 페이백 조건 (1%, sourceContentId 추적, 직전 1단계만)
  • AC 1.3: 비공개 전환 (확인 바텀시트)
  • AC 1.4: 커스텀 프롬프트 결과물 (공개 불가)
  • AC 1.5: CTA 분기 (템플릿 사용하기 / 다시 생성하기)
  • AC 1.6: 재생성 플로우 (MIXED 예외, 삭제된 필터 에러 모달)
  • AC 1.7: 액션 바 + 더보기 메뉴 (좋아요/재생성/공유/더보기, 소유자 분기)
  • AC 1.8: 게시 토글

US3 — 좋아요 (3 AC)

  • AC 3.1: 셀프 좋아요 허용
  • AC 3.2: 좋아요 탭 (최신순, 경로 통합)
  • AC 3.3: 좋아요 표시 (실제 숫자, 추천 시그널)

US4 — 크레딧 페이백 (4 AC)

  • AC 4.1: 페이백 조건 (Phase 1 MVP: 1% 무조건, 페르소나 제외)
  • AC 4.2: 크레딧 히스토리 (썸네일 + "크레딧 페이백" 타이틀)
  • AC 4.3: 세부 정책 (프로모션 크레딧, 올림, Config 조정)
  • AC 4.4: 최초 진입 UX (1회성 안내 모달)

Spec-out (원본 PRD 명시)

  • 댓글 기능
  • 공유 횟수 노출
  • 수익화/광고 로직
  • 콘텐츠 모더레이션
  • 신고하기 (Phase 3 소관)
  • 팔로우/알림 (Phase 3 소관)

이월 항목 (Deferred from ugc-platform-001)

Phase 1 에서 partially_fulfilled 또는 미충족 처리된 항목을 본 스프린트에서 마무리한다.

재검증 대상 — technical_limit (medium priority)

  • AC-2.3 프로필 공유 native 시트 — Phase 5 PR 전 수동 QA (iOS+Android)
  • AC-7.4 404 에러 화면 — Phase 5 PR 전 수동 QA (임의 userId 딥링크)

UX 보정 — follow-up scope (low~medium priority)

  • MINOR-G2-1 Home header gear 제거 + home-to-settings flow MY 경유 전환 (PRD 재확인)
  • MINOR-G2-2 profile.screen.tsx::useEffect([landingTab]) race — 1회 sync 플래그
  • MINOR-G3-3 Clipboard 모듈 교체 (@react-native-clipboard/clipboard)
  • MINOR-G3-4 SwipeFeed initialContentId fallback UX

별도 스프린트 이관 (본 스프린트 scope 아님)

  • MINOR-G2-3 Domain 레이어 react-query import (Clean Architecture refactor 전용)

Regression Guard

Phase 1 에서 fulfilled 된 15 AC 는 본 스프린트 작업으로 깨지지 않아야 한다:

  • AC-1.1 ~ AC-1.4 (탭바, 홈, 탐색)
  • AC-2.1 ~ AC-2.8 (MY 프로필 3탭, 편집, 공유, 스와이프, 닉네임 자동생성, 라우팅, 설정)
  • AC-7.1 ~ AC-7.5 (타유저 프로필, URL 복사, 스와이프, 페르소나 플래그)
  • korean-count.ts 포맷 유지 (좋아요는 축약 없음 — 본 스프린트 AC 3.3 규약)
  • SwipeFeed discriminated union — 새 variant 추가 시 legacy callsite 무회귀

시스템 개선 (Pattern Digest 기반)

Phase 1 retrospective 에서 도출된 systemic fix 를 본 스프린트 Sprint Contract / Evaluator V-method 에 반영한다:

  1. Cursor 쿼리 $lte 의무 — rg '_id:\s*\{\s*\$lt\s*:' repository/ → 0 hit
  2. 신규 e2e-spec 추가 시 nx project.json test-e2e target + moduleNameMapper 검증
  3. FE typecheck 는 grep -v '@wrtn/' clean 측정 의무
  4. Discriminated union / parent-dependent query 는 enabled 가드 필수
  5. Navigate payload 의 parent context 의존 → prop threading Done Criterion 명시
  6. Deferred AC (native sheet / 404) 는 Phase 5 PR 전 수동 QA 필수

Report

Sprint Report: ugc-platform-002

Generated: 2026-04-23 Architecture: Planner-Generator-Evaluator (Harness Design v4) PRD: UGC Platform Phase 2 — 피드 인터랙션 & 페이백 Follow-up of: ugc-platform-001

Executive Summary

UGC Platform Phase 2 — 세로 스와이프 피드 인터랙션 + 크레딧 페이백 시스템 전체를 구현했다. 15 PRD AC 전체 fulfillment, 3 그룹 모두 ACCEPTED. Phase 1 대비 first-pass rate 0.00 → 0.33, avg fix cycles 1.67 → 0.67 개선 — 누적 lessons 선제 반영 효과 입증.

PRD Coverage

User Story AC 수 충족 미충족 Rate
US1 피드 공개 8 8 0 100%
US3 좋아요 3 3 0 100%
US4 크레딧 페이백 4 4 0 100%
Total 15 15 0 100%

Phase 1 inherited (manual QA 대기): AC-2.3 / AC-7.4 — PR 머지 전 수동 QA 수행 권장.

Build Results

Group Feature BE Task FE Task Eval Result Fix Loops
001 Backend Foundation be-001~004 PASS 1
002 피드 인터랙션 핵심 app-001~004 PASS 1
003 좋아요 + 페이백 + 정리 app-005~009 PASS (first-try) 0

Quality Metrics

Metric Value Trend vs ugc-platform-001
First-pass rate 0.33 (1/3) +0.33 (0.00 → 0.33)
Avg fix cycles 0.67 -1.00 (1.67 → 0.67)
Critical issues 0 0 (유지)
Major issues found 10 +5 (5 → 10, 더 큰 scope)
Major issues resolved 10 (100%)
Minor issues 14 +8 (6 → 14)
Minor deferred 10 +5 (5 → 10)
Amendments applied 2 -2 (4 → 2, prototype 성숙)
Fulfillment rate 1.00 +0.12 (0.88 → 1.00, new AC)

Issues Found by Evaluator

Critical

없음.

Major

Group Issue Root Cause Resolution
001 sourceContentId Content document 미영구 저장 (createOne 미수용, setSourceContentId dead) spec_ambiguity (DTO vs behavior) Repository.createOne 에 ObjectId 저장
001 FeedResponseDto 에 Phase 2 5필드 누락 + FeedAppService LikeDS 미의존 scope_creep (Cross-component 전수 누락) DTO 확장 + LikeDomainService DI + resolveLikeContext batch
001 Custom-prompt 생성 경로 sourceContentId validation 미실행 (DTO 외 참조 0) spec_ambiguity (DTO vs behavior) custom-prompt-generation-app.service 에 validateSourceContent 호출
002 MY profile kind=me ownership threading 누락 (PublishToggle 미렌더 + CTA 오표시) technical_limit (mapper fallback) isOwnOverride prop threading
002 FilterDeletedErrorModal Toast fallback (Modal 요구) spec_ambiguity (DTO vs behavior) filter-deleted-error-modal.tsx 신규 + BottomSheetEventManager.emit
002 신규 e2e flow 3개 전부 미생성 scope_creep 3 flow 생성 (assertVisible 위주)
003 없음 (first-try PASS)

Minor (14건, 전부 deferred non-blocking)

  • Group 001: 5 (Like hard-delete, overfetch pagination, count O(N), payback regex, custom-prompt emit site)
  • Group 002: 1 (mapper unit test)
  • Group 003: 3 (useBottomConfirmSheet panDown, EARNED_CHIP dead constant, PaybackIntro trigger isPublished check)
  • Contract 단계: 5 (Minor 일괄 deferred)

Systemic Patterns

  1. Mapper fallback semantic 훼손 (2회): userProfile.id="", likeCount ?? 0, liked ?? false 패턴이 core feature stubbing 근접. Contract 에 grep 게이트 표준화로 Group 003 에서 선제 방지 성공.
  2. Dead hook / dead factory (2회): setSourceContentId, buildGenerationCompletedEvent 가 0 callsite. Contract Verification Method 에 callsite ≥ 1 grep 게이트 도입.
  3. Cross-component 적용 범위 누락 (2회): Contract 의 "모든 path" 언급에도 일부 반영. Entity/DTO 확장 시 영향 받는 endpoint/path 전수 나열 의무화.
  4. E2E flow 생성 누락 (1회): Contract §Scope 명시에도 3 파일 미생성. 체크리스트 도입 필요.
  5. Storage primitive 혼동 (1회): AsyncStorage vs MMKV. 실제 codebase 패턴 (createStorageBuilder) 참조 의무화.
  6. Contract 품질 누적 효과 (3회): Group 001 → 002 → 003 로 fix loop 감소 (1 → 1 → 0). Prior group lessons 선제 반영이 첫 시도 PASS 달성.

Deliverables

Code

Repository Branch Base Commits Files Changed
wrtn-backend sprint/ugc-platform-002 apple 6 ~30
app-core-packages sprint/ugc-platform-002 epic/ugc-platform-final 9 ~35

New Modules / Screens / Components

Backend (meme-api):

  • domain/like/* (신규 Like domain)
  • persistence/like/* (unique compound partial index)
  • controller/like/* (POST/DELETE /v2/contents/:id/likes)
  • application/regeneration/* (RegenerationEventListener)
  • application/payback/* (PaybackEventListener + unit test)
  • CREDIT_TRANSACTION_TYPE.PAYBACK enum 확장

App (MemeApp):

  • presentation/swipe-feed/components/publish-toggle-row.tsx (신규)
  • presentation/swipe-feed/components/filter-deleted-error-modal.tsx (신규)
  • presentation/credit/hooks/use-payback-intro.tsx (신규)
  • presentation/credit/componenets/.../my-credit-history-list-item.tsx (PaybackHistoryRow variant)
  • useUpdateMeContentVisibilityUseCase + useDeleteMyContentUseCase + usePaybackIntro 신설

API Contract

  • 5 신규 endpoints + 2 확장 (ContentSummary 5 필드 추가)
  • contracts/api-contract.yaml (api-contract v0.2.0-ugc-platform-002)

Sprint Artifacts

  • 3 Sprint Contracts (group-001, 002, 003 — 각 Round 2 APPROVED)
  • 3 Contract Reviews (R1 + R2)
  • 3 Evaluation Reports
  • 4 Checkpoint summaries (phase-2, phase-3, group-001/002/003, phase-4, phase-5)
  • 15 Task specs (4 backend + 11 app incl. revisions)

PR Links

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

Improvements for Next Sprint

Priority Improvement Source
high Contract 에 'Mapper fallback 금지 grep' 게이트 표준화 (?? 0, ?? false, `
high Contract 에 'Dead hook/method/factory grep' 게이트 표준화 (callsite ≥ 1) pattern_digest (2회)
high Contract Scope 에 'Entity/DTO 확장 영향 범위 전수 나열' 조항 + 매퍼 경유 trace 의무 pattern_digest (2회)
high Contract drafting 시 prior group checkpoint Lessons 필수 참조 pattern_digest (누적 효과 입증)
medium Manual QA 체크리스트 PR body 포함 유지 — 다음 스프린트 수행 결과를 PR comment 에 기록 user_feedback
medium Contract §Scope 에 E2E flows 섹션 + Done Criteria 에 flow 파일 존재 체크 pattern_digest (1회)
medium Custom-prompt GenerationCompleted emit site wiring (dead factory 해소) evaluator_suggestion
low Storage primitive (MMKV/AsyncStorage) 명시 의무 pattern_digest (1회)
low Minor deferred 10건 별도 스프린트 정리 evaluator_suggestion

Timeline

Phase Status Notes
Phase 1 Init Follow-up mode, 3 worktree (backend/app/tokens)
Phase 2 Spec 4 BE + 9 app tasks + api-contract + e2e-flow-plan + seed-plan
Phase 3 Prototype 9 Design Engineers 병렬, 14 screens approved, 1 major revision, 2 amendments
Phase 4 Build 3 groups, 2 fix loops, all PASS
Phase 5 PR 2 PRs (backend #799 + app #562). E2E full suite skipped.
Phase 6 Retrospective 이 리포트 + KB write 진행 중

Next Actions

  • 즉시: PR 머지 전 수동 QA 수행 (AC-2.3 프로필 공유, AC-7.4 404 — ugc-platform-001 deferred).
  • 다음 스프린트 (Phase 3 / ugc-platform-003): 소셜 & 알림. Contract template 에 본 스프린트 improvements 반영.
  • KB 승격 후보:
    • completeness-008 (fallback semantic grep): Group 001/002/003 3회 누적 → rubric v4 승격 후보.
    • integration-002 (storage primitive 정확성): 1회 관측, 관찰 누적 시 승격.
    • completeness-007 v2 (cross-variant mapper 전수 명시): 2회 누적.