Repository navigation
Feature/#59 action analyze - #60
Conversation
danjee2009
left a comment
There was a problem hiding this comment.
검토 범위: outbox 신규 등록·재전송·복구 시 명시적 종료 상태 검증, 잘못된 구 기록의 차단·보존, 동시 종료 처리와 Redis 회귀 테스트를 확인했습니다. 확인된 수정 필요 결함은 없습니다. 로컬 테스트는 재실행하지 않았습니다.
| private Mono<InterviewResultDelivery> requireTerminalStatus(InterviewResultDelivery delivery) { | ||
| if (delivery.getInterviewStatus() == InterviewStatus.COMPLETED | ||
| || delivery.getInterviewStatus() == InterviewStatus.ABANDONED) { | ||
| return Mono.just(delivery); | ||
| } | ||
| var error = new ApiServerResponseException("면접 전송 기록의 명시적 종료 상태 확인이 필요합니다."); | ||
| if (delivery.getState() == InterviewResultDelivery.State.BLOCKED) { | ||
| return Mono.error(error); | ||
| } | ||
| // Preserve the original payload; never infer completion from legacy records or answers. | ||
| return recordFailure(delivery, error).then(Mono.error(error)); |
There was a problem hiding this comment.
[P2] 이미 전송이 끝난(SENT) 구 기록도 BLOCKED로 바뀝니다.
requireTerminalStatus가 SENT/BLOCKED/PENDING 상태 확인보다 먼저 실행됩니다. 그래서 이 PR이 대상으로 삼는 interviewStatus null/IN_PROGRESS 구 기록 가운데, 이미 API 전송에 성공한 SENT 기록도 recordFailure를 탑니다. outbox 기록에는 TTL이 없어서 SENT 기록이 계속 남습니다. 그 세션으로 ANSWER/COMPLETE/QUIT 재요청이 오면 resume()에서 attempts가 늘고, state가 SENT에서 BLOCKED로 덮어써지고, 운영 확인 알림(repit.interview.result.attention)까지 나갑니다. 이 기록은 payload가 이미 null이어서 BLOCKED 복구 절차로 다시 보낼 원문도 없습니다.
이미 BLOCKED인 경우처럼, SENT 기록은 상태를 바꾸지 말고 오류만 반환하도록 분기해야 할 것 같습니다. 새로 추가한 테스트는 PENDING 기록만 다룹니다.
kimwuju
left a comment
There was a problem hiding this comment.
다시 확인했습니다. 앞서 남긴 [P2](SENT 구 기록이 BLOCKED로 바뀌는 문제)는 318916a·806cc10에서 해결됐습니다. 종료 상태가 잘못된 SENT 기록은 이제 recordFailure를 거치지 않고 오류만 반환하므로, state·attempts·payload가 바뀌지 않고 운영 알림도 나가지 않습니다. resume·deliver를 반복 호출해도 기록이 그대로인지 확인하는 회귀 테스트도 추가됐습니다. main을 병합한 결과를 포함해 추가로 발견한 문제는 없습니다.
59