말로 요청(그대로) 1회차 · Claude Code · Opus 5.5 · 클로드의 마지막 답 원문 · 목록

아직 main에 합치면 안 됩니다. 새로 추가된 기능 3개(생일 2배, 하루 한도, 포인트 사용)에 모두 버그가 있습니다. 하나는 기존 코드에 원래 있던 버그입니다. 아래 결과는 전부 직접 실행해서 확인했습니다.

꼭 고쳐야 할 문제

1. 생일 배율이 영구 적용되고 계속 커짐 — points.py:34-36 self.rate = self.rate * 2가 지갑에 저장된 적립률 자체를 바꿔 버립니다. - 생일에 1만 원씩 두 번 결제하면 1,000P → 2,000P(4배)가 쌓입니다. - 생일 다음 날 결제도 2,000P(20%)입니다. 생일에 결제할 때마다 2배씩 계속 불어납니다. - 고치는 방법: self.rate를 없애고 rate = POINT_RATE * 2 if self._is_birthday(today) else POINT_RATE처럼 이번 결제에서만 쓰는 지역 변수로 계산하면 됩니다.

2. 포인트를 쓰면 하루 한도가 다시 열림 — points.py:37 earned_today를 entries의 "남은 포인트"로 합산하는데, use()가 이 값을 깎습니다. - 재현: 5,000P 적립 → 5,000P 사용 → 같은 날 또 5,000P가 적립됩니다. 하루 한도를 무한히 넘길 수 있습니다. - 고치는 방법: entry에 처음 적립한 양을 따로 저장하고, 한도는 그 값으로 계산해야 합니다.

3. 만료된 포인트부터 차감됨 — points.py:54-59 "오래된 적립분부터" 깎다 보니 이미 만료된 적립분도 대상에 들어갑니다. 반면 잔액 검사(balance)는 유효한 포인트만 셉니다. - 재현: 만료 500P와 유효 500P가 있을 때 500P를 쓰면 만료분만 깎이고 잔액은 그대로 500P입니다. 포인트를 써도 잔액이 줄지 않습니다. - 고치는 방법: 차감할 때 balance()와 같은 유효기간 조건으로 만료분을 건너뛰어야 합니다.

4. 음수를 사용하면 포인트가 늘어남 — points.py:49 - 재현: use(-1000)을 호출하면 잔액이 500P에서 1,500P로 늘어납니다. - 고치는 방법: points <= 0이면 ValueError를 내도록 입력 검사를 넣어야 합니다.

기존 코드(main)에 원래 있던 문제

5. 유효기간이 하루 짧음 — points.py:45 < EXPIRE_DAYS - 1 조건 때문에 364일째까지만 쓸 수 있고 365일째에는 0P가 됩니다. 사장님 메모의 규칙은 "365일째 되는 날까지"이므로 < EXPIRE_DAYS가 맞습니다. 이번 PR에서 생긴 버그는 아니지만, 3번을 고칠 때 같은 조건을 쓰게 되니 같이 고치는 게 좋습니다.

사소한 점

1~4번을 고치고 테스트를 추가한 뒤 머지하는 걸 권합니다.