Skip to content

[fix] 종료됐지만 카드가 없는 대화방이 어느 목록에도 나오지 않는다 #189

Description

@kite707

작업 내용

종료(ENDED)됐지만 카드가 없는 대화방은 미완성 목록에도, 카드 캘린더에도 나오지 않아 사용자 눈에 사라진다.

조회 결과 이유
GET /api/conversations/incomplete status = ACTIVE 만 조회
GET /api/cards?date= · /api/cards/monthly cards 행 자체가 없다
GET /api/conversations?date= · /search DELETED 만 제외

날짜별 조회·검색에는 남아 있지만, 앱이 카드 캘린더로만 과거 기록에 접근하는 구조라면 도달 경로가 없다. 목록에서 사라지면 conversationId 를 다시 얻을 수 없어 카드 생성을 재시도할 수도 없다.

작업이 필요한 이유

종료(상태 전이)와 카드 생성(LLM 호출)이 원자적이지 않은 별개 API 두 개인데, 그 사이 중간 상태를 보여주는 목록이 하나도 없다.

ConversationService.getInProgressConversations 가 "미완성 = ACTIVE" 로 정의한 근거는 "카드 생성은 ENDED 를 요구하므로 ACTIVE 방은 카드를 가질 수 없다" 이고, 이 명제 자체는 참이다. 하지만 역이 성립하지 않는다 — ENDED 인데 카드가 없는 방이 실제로 여러 경로로 생긴다.

경로 남는 상태 회복
카드 생성 LLM 실패 (CARD_GENERATION_FAILED) cardGenerationStatus = FAILED 다음 새벽 배치 (하루 1회 제한)
종료만 하고 카드 생성 요청이 안 옴 (앱 이탈·네트워크) NONE 다음 새벽 배치
선점 경합 (CARD_GENERATION_IN_PROGRESS) PENDING 고아 pendingGenerationTimeout(3분) + 스캔 주기
새벽 배치 NO_SUMMARY SKIPPED 영구 — findAutoCardTargetIds 에서 제외되어 카드가 영원히 안 생긴다
새벽 배치 WITHDRAWN_MEMBER NONE 해당 없음(탈퇴자)
일일 토큰 한도 NONE #188 에서 해소

CardProperties.autoCardStartDate KDoc 이 이미 이 상태를 인정하고 있다 — 요약 없는 방을 배치가 "카드는 못 만들고 종료만 시켜버린다. 사용자는 이어쓰기만 잃고 얻는 게 없다". autoCardStartDate 는 과거 방에 한해 막아둔 방벽이지, 앞으로 안 생긴다는 보장이 아니다.

할 일

  • 카드 없는 ENDED 방의 노출 방식 결정 — 미완성 목록 정의를 "카드가 없고 삭제되지 않은 방"으로 넓힐지(cards 조인 추가), 캘린더에서 "카드 만들기" 상태로 별도 노출할지
  • 결정한 방식으로 조회 경로 수정 + 테스트. ConversationService.getInProgressConversations 의 KDoc 전제도 함께 갱신
  • SKIPPED(요약 없음) 방 처리 결정 — 영구 제외를 유지할지, 노출 대상에 포함해 사용자가 직접 만들게 할지
  • prod 에 이미 쌓인 "ENDED + 카드 없음" 방 규모 확인 후 백필 필요 여부 판단

기술 고려사항

  • /incomplete 가 지금 cards 를 조인하지 않는 것은 의도적이다(위 KDoc). 조인을 추가하면 그 판단을 뒤집는 것이므로 주석도 같이 고쳐야 한다
  • ConversationSearchRepository · 날짜별 조회는 이미 이 방들을 보여주므로 수정 대상이 아니다

연관

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions