문제
app/services/article_agents_service.rb의 ensure_body에서, body_result가 Success인데 본문이 31자 미만이면 Failure(body_result.failure)가 Success 결과에 .failure를 호출해 예외를 던집니다.
body_result = ContentService.new.call(article)
if body_result.failure? || body_result.value!.size < 31
article.discard!
return Failure(body_result.failure) # Success에 .failure 호출 → 예외
end
dry-monads에서 Success에 .failure를 호출하면 예외가 발생합니다. 이 예외는 아래 rescue StandardError가 삼켜 article.discard! + Failure(e.message)(dry-monads 내부 메시지)를 반환합니다.
영향
- 짧은 본문(31자 미만) 기사가 정상 폐기 경로가 아니라 예외 경로로 폐기됩니다.
- 반환 메시지가 dry-monads 내부 오류 메시지로 오염됩니다.
위치
app/services/article_agents_service.rb:52-53
기대 동작
Success인데 본문이 짧은 경우 .failure를 호출하지 않고 명시적으로 Failure(:short_body) 같은 의미 있는 실패를 반환해야 합니다.
발견 경위
PR #909 리뷰 중 발견 (별건으로 분리).
문제
app/services/article_agents_service.rb의ensure_body에서,body_result가 Success인데 본문이 31자 미만이면Failure(body_result.failure)가 Success 결과에.failure를 호출해 예외를 던집니다.dry-monads에서 Success에
.failure를 호출하면 예외가 발생합니다. 이 예외는 아래rescue StandardError가 삼켜article.discard!+Failure(e.message)(dry-monads 내부 메시지)를 반환합니다.영향
위치
app/services/article_agents_service.rb:52-53기대 동작
Success인데 본문이 짧은 경우
.failure를 호출하지 않고 명시적으로Failure(:short_body)같은 의미 있는 실패를 반환해야 합니다.발견 경위
PR #909 리뷰 중 발견 (별건으로 분리).