Skip to content

팔로잉 포스트 — 피드 = 내 포스트 + 팔로우한 사람의 포스트 (2026-08-23)

오너 요청

"팔로우한 사람의 피드가 내 피드 탭에서 안 보이는데 확인해줄래?" — 친구 검색·팔로우 v1 · 아이디·친구 사진의 후속.

원인

get_profile_feed는 본인 완료 세션만 냈다(PRD §5.7 "팔로잉 포스트 RPC 미배선"). 클라이언트 매퍼(buildMobileFeedPosts)도 "소셜 author는 받지 않는다"로 잠겨 있었고, main 카드 표시 함수(get_session_presentation_mains_json)는 p_user_id = auth.uid()만 허용해 다른 사용자 세션의 카드를 만들 수 없었다.

변경 — 마이그레이션 20260821480000_following_feed_v1.sql

내용
DBprofile_feed_can_view_v1(viewer, owner)(본인 또는 팔로워) · get_session_presentation_mains_json(+_v2_engine) 정의 그대로 재발행, 권한 검사 한 줄만 팔로워 허용으로 · get_profile_feed_v2_engine 재발행(20260821440000 정의 그대로 + 네 곳): 페이지 = 본인 ∪ user_follows.followee의 완료 세션(한 정렬·같은 커서), kpi·mains 조회 소유자 = session.user_id, 카드에 author{id, display_name(72 B), handle, avatar_path, avatar_url(http 소셜 사진만)}(본인 카드 null). contract_version·커서·200,000 B 상한 그대로(author는 추가 전용 키)
pgTAP following_feed_v1.test.sql19 assert — 헬퍼 의미론, 페이지 구성(본인+팔로잉·비팔로잉 제외·정렬·author·mains/notes 채움), 커서가 사용자 경계를 넘어 이어짐, 비팔로워 페이지 무누출, 언팔로우 후 제거
클라이언트어댑터 author 검증(있을 때만; id·display_name 72 B·handle 20 B·avatar_url 2048 B) · statsDomain.withFeedAuthorPhotos(avatar_path 일괄 서명 → photo_url) · buildProfileFeedItems/buildMobileFeedPosts/lgDesktopProfileFeed author 투영 · DkH3SessionPost(데스크톱) author 헤더 · followingStore.onFollowingChangedappControllerloadProfileFeed({ force: true }) (팔로우/언팔로우 직후 피드 재조회)
테스트tests/react/followingFeed.test.mjs 4건(어댑터·매퍼 3종·재조회 훅), mobileExperienceViewMappers.test.mjs의 "author 금지" 단언을 "author 매핑"으로 교체(pending-changes 신고)
문서app-screen-rpc-contract.md(+ko) 응답 형태·필드 행, feed-props.md, desktop-screens-props.md, rpc-catalog.md, PRD

제품 결정(오너 확인)

  • 팔로우는 승인 없는 단방향이다. 누군가를 팔로우하면 그 사람의 완료 세션(제목·리뷰·자유 기록·main 카드·KPI)이 내 피드에 보이고, 팔로워는 get_session_presentation_mains_json으로 그 사람 세션의 main 카드를 읽을 수 있다(피드가 보여주는 것과 같은 데이터). 비공개 계정·승인 팔로우는 없다.
  • 친구 포스트의 아바타/이름 탭(친구 프로필 시트·친구 홈 페이지)은 계약만 있고 아직 동작하지 않는다.

검증

  • 로컬 샌드박스 db reset + supabase test db 47파일·681 assert PASS.
  • npm run check·check:unused·build PASS.
  • 브라우저 스모크(로컬 스택): 팔로우 직후 피드 탭에 친구 세션 카드(친구 아바타·이름·세트 카드) 노출, 언팔로우 직후 제거.