버그 #600
진행중GetReferralRewards 가 cards 를 빈 배열로 반환해 Referral 레벨 카드가 표시되지 않음
0%
설명
Referral 화면의 레벨 카드 스택이 한 장도 표시되지 않습니다. GetReferralRewards 가 cards 를 빈 배열로 내려주는 것이 원인으로 확인돼 서버 측 확인을 요청드립니다.
현상¶
Referral 탭에서 'Referral rewards' 헤더와 초대 코드 안내 카드만 남고, 그 아래 레벨 카드 영역이 통째로 비어 있습니다.
재현 환경¶
- staging (
https://edge.alphea.dev), dev 빌드 - 확인 일시: 2026-08-10
- 계정: Active today 0 / 총 초대 0, 클레임 이력 없음
실제 서버 응답¶
POST /alphea.connect.v1.ReferralService/GetReferralRewards · Request {}
{
"activeInvitees": "0",
"claimedCount": 0,
"earnedToday": { "micros": "0" },
"cards": [], ← 비어 있음
"completionState": "COMPLETION_BONUS_STATE_LOCKED",
"completionGoal": "100",
"completionReward": { "micros": "0" },
"resetAt": "2026-08-11T00:00:00Z",
"serverTime": "2026-08-10T09:39:44Z",
"questDisplayNames": {}
}
응답은 HTTP 200 이고 cards 를 제외한 나머지 필드(activeInvitees·completionGoal·resetAt)는 정상적으로 내려옵니다.
정황 — 카탈로그는 서버에 존재합니다¶
같은 서버의 QuestService/ListQuests 에는 레벨 카탈로그가 그대로 있습니다.
referral-level-1 metric=QUEST_METRIC_ACTIVE_INVITEE_COUNT targetValue=1 reward.micros=0 referral-level-5 metric=QUEST_METRIC_ACTIVE_INVITEE_COUNT targetValue=5 reward.micros=0 referral-level-10 metric=QUEST_METRIC_ACTIVE_INVITEE_COUNT targetValue=10 reward.micros=0 referral-level-25 metric=QUEST_METRIC_ACTIVE_INVITEE_COUNT targetValue=25 reward.micros=0
connect-rpc-api.md §10.6 도 "레벨 정의는 진행률 확인을 위해 일반 QuestService 카탈로그에도 노출되지만, 클레임은 오직 ClaimReferralReward 로만 가능하다"고 명시하고 있습니다. 즉 카탈로그 자체는 있는데 ReferralService 쪽 cards 만 비어 있는 상태로 보입니다.
또한 referral-level-* 의 reward.micros 가 모두 0 이고 completionReward.micros 도 0 입니다 — 보상 값이 미설정인지 함께 확인 부탁드립니다.
확인 요청 사항¶
-
GetReferralRewards.cards가LOCKED상태를 포함한 카탈로그 전체를 반환하는 것이 맞는지
(§10.6 응답 예시에는 미달 레벨이 포함돼 있고, "카드 수·레벨·임계값·보상은 모두 서버가 정한다"고 기술돼 있습니다) - 현재 빈 배열이 내려오는 조건이 무엇인지 — 활성 초대 인원 0 이면 제외하는 의도된 동작인지, 카탈로그 조회 누락인지
-
referral-level-*및 완주 보너스의 보상micros가 모두0인 것이 스테이징 미설정 때문인지 - 프로덕션(
edge.alphea.ai)에서도 동일하게 빈 배열이 내려오는지
클라이언트 현황¶
- 클라이언트는 응답의
cards를 그대로 표시합니다. 레벨 재번호·임계값 재계산·개수 가정·재정렬을 하지 않습니다 (src/services/referralService.ts). - 이 구조는 #594 (
fix/redmine-594-referral-rewards-authority) 에서 레벨 카드의 권한을GetReferralRewards로 확정하며 정해진 계약입니다. 이전에 쓰던QuestService카탈로그 기반 카드 생성 경로는 그때 제거했습니다. - 따라서 클라이언트가 카드를 합성해 표시하는 방식은 계약 위반이라 적용하지 않았고, 서버가
cards를 채워주면 별도 앱 수정 없이 정상 동작합니다.
HP Henry Park이(가) 3달 전에 변경
원인 확인 및 조치 완료.
서버 코드 문제가 아니라 staging의 Referral 정의가 비활성·보상 0으로 남아 있어 카드가 하나도 조건(active && reward_micros>0)을 통과하지 못한 것입니다. 마이그레이션은 의도적으로 비활성·0으로 seed하고, 운영자가 admin/connect/quests에서 보상을 넣고 활성화하는 구조입니다. production은 이미 활성화되어 있어 초대 0명 사용자도 LOCKED 카드 7장을 받습니다. 즉 이 건은 staging 한정이며 production 영향은 없었습니다.
cards의 canonical 집합은 referral-level-5/10/20/50/100/500/1000 일곱 개입니다. referral-level-1과 referral-level-25는 남아 있는 legacy Quest 정의로 Referral 카드가 아닙니다. activeInvitees=0 자체는 빈 배열의 원인이 아니며, active·funded 정의는 미달이어도 LOCKED로 반환됩니다.
조치: staging에 production과 동일한 reward_micros(5·10=200000000, 20·50=300000000, 100=400000000, 500=500000000, 1000=600000000)를 적용하고 일곱 레벨을 활성화했습니다. referral-completion은 production과 동일하게 비활성·미설정으로 유지했습니다(Chris Park 결정). referral-level-1/25, referral-inviter-daily, production은 변경하지 않았습니다.
검증: staging에서 초대 0명 계정 기준 GetReferralRewards가 canonical 순서로 LOCKED 카드 7장을 반환하는 것을 확인했고, Ryan Lee 님이 앱 화면에서 카드 표시를 확인하셨습니다.
클라이언트 수정은 필요하지 않았습니다.