fix: 릴리즈 리뷰 반영 (게이트 빈 입력 방어·설명 5건 정정) - #291
Conversation
CodeRabbit 지적 8건 중 6건 반영, 1건 미반영, 1건 false positive. 게이트 결함: - SDL 파일이 0개일 때 조용히 통과했다. src/를 못 읽으면 모든 카테고리가 0/0이 되고 percentOf가 100을 돌려줘 위반 없이 초록불이 뜬다. 이 게이트가 막으려던 것과 같은 종류의 거짓 안전이라 실패시킨다. 종료코드로 확인: 경로가 없으면 1, 정상이면 0 설명이 구현과 어긋난 것: - conversationMessages — last_read_at을 "현재 시각"으로 갱신한다고 적었으나 실제로는 이번에 반환한 최신 메시지의 created_at까지 끌어올리는 워터마크이고 반환할 메시지가 없으면 갱신하지 않는다 (conversation.repository.ts:367) - CreateOrderOutput.status — "항상 SUBMITTED"라 단정했으나 같은 idempotencyKey로 재시도하면 기존 주문을 그대로 돌려주므로 진행된 상태일 수 있다 (order-checkout.service.ts:70-71) - SellerProductListInput.isActive — "미지정 시 노출·미노출 모두"라 적었으나 input?.isActive ?? true라 활성만 반환한다 (seller-product-query.service.ts:51) - 픽업 슬롯 오전/오후 — "12:00 이전/이후"가 12:00을 양쪽에서 배제하는 것처럼 읽힌다. 실제로는 afternoon에 포함된다 - "regularPrice가 표시가다" → "표시가로 쓰인다" (5개 파일). 제안된 "표시된다"는 의미가 달라 표현만 다듬었다 미반영: 감사 로그 spec을 DB mock으로 바꾸라는 지적. 레포 전체가 testcontainers 실 DB 통합 테스트 아키텍처이고 CLAUDE.md가 "DB를 mock하지 않는다"를 명시 규칙으로 둔다. 이 스펙만 stub으로 바꾸면 컨벤션 일관성이 훼손된다. false positive: OngoingOrderSummary.orderId에 "주문번호" 설명이 붙었다는 지적. 설명은 orderNumber에 붙어 있고 orderId는 자명 필드라 비어 있다. 전체 1,874건 + 게이트 스크립트 42건 통과.
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Advanced Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
🩺 NestJS Doctor — 90/100 (Excellent)진단 313건 (error 0).
architecture / security 상위 항목
|
🧹 knip — dead-code 리포트전체 리포트
|
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
Coverage report
Test suite run success1874 tests passing in 225 suites. Report generated by 🧪jest coverage report action from ee0e3e1 |
릴리즈 PR #289의 CodeRabbit 리뷰 8건 처리. 6건 반영 · 1건 미반영 · 1건 false positive.
게이트 결함 (Major)
SDL 파일이 0개일 때 조용히 통과했다.
src/를 못 읽으면 모든 카테고리가0/0→percentOf가 100 → 위반 없음 →[docs:check] 통과.이 게이트가 막으려던 것과 정확히 같은 종류의 거짓 안전이라 실패시킨다.
검증은 종료코드로 했다 — 경로가 없으면
1, 정상이면0. (처음엔 파이프 끝의tail종료코드를 보고 있어서exit=0이 찍혔다.)설명이 구현과 어긋난 것
conversationMessageslast_read_at을 현재 시각으로 갱신created_at까지 끌어올리는 워터마크. 메시지 없으면 갱신 안 함 (conversation.repository.ts:367)CreateOrderOutput.statusidempotencyKey재시도는 기존 주문을 그대로 반환 → 진행된 상태일 수 있음 (order-checkout.service.ts:70-71)SellerProductListInput.isActiveinput?.isActive ?? true→ 활성만 (seller-product-query.service.ts:51)afternoon에 포함"regularPrice가 표시가다"→"표시가로 쓰인다"(5개 파일). 제안된 "표시된다"는 의미가 달라져(표시가는 名詞) 표현만 다듬었다.미반영
감사 로그 spec을 DB mock/stub으로 바꾸라는 지적. 레포 전체가 testcontainers 실 DB 통합 테스트 아키텍처(225 suites)이고 CLAUDE.md가 "DB를 mock하지 않는다" 를 명시 규칙으로 둔다. 이 스펙만 바꾸면 컨벤션 일관성이 훼손된다. 지적한 변동성은
truncateAll기반 케이스 격리로 다루고 있다.False positive
OngoingOrderSummary.orderId에 "주문번호" 설명이 붙었다는 지적. 설명은orderNumber에 붙어 있고orderId는 자명 필드라 비어 있다 — 코멘트가 docstring 줄에 앵커되며 바로 위 필드의 것으로 읽힌 듯하다.검증
전체 225 suites 1,874건 + 게이트 스크립트 42건 통과.