1. 요약 Summary
- 자동 인증의 날짜별 최종 판정을 입력으로 받아 성공 점수와 확정 미달 감점을 즉시 반영한다.
- 모든 챌린지는 1주 사이클이며, 사이클 종료 시 기본 점수를 다시 주지 않고 3단계 판정·연속 보정만 처리한다 — 정수 산식 구조상
f(N) = W가 항상 성립해 반올림 보정이 발생하지 않는다.
- 누적 점수로 실제 티어를 계산하고, 20점 강등 유예를 반영해 표시 티어를 계산한다.
- 루틴 점수는 챌린지별 각 사이클의 순변동을 −20 ~ +20점으로 클램핑해 반영한다. 달력 주차도 계정 합산도 아니며, 상승·하락을 따로 세지 않는다(정책 §4.7).
- 수동 인증은 티어 점수 입력에서 제외한다.
- 이의 인용으로 과거 결과가 바뀌면 해당 사이클과 필요한 후속 점수·연속 기록·티어를 함께 재계산한다.
- 클라이언트와 다른 도메인은 서버가 확정한 점수·실제 티어·표시 티어만 사용한다.
- 저장 구조는
user_score_summaries·cycle_score_states·score_transactions 3개 테이블이다. 연속 기록은 종료 사이클의 결과 컬럼으로 통합한다.
2. 배경 Background
- 사용자에게 단순 기록을 넘어 장기적인 성장감과 성취감을 제공해야 한다.
- 주 1~7회 목표를 가진 챌린지가 함께 존재하므로 날짜별 실패를 모두 즉시 감점하면 유연 루틴이 불리해진다.
- 반대로 사이클 종료까지 아무 점수도 움직이지 않으면 매일 수행한 성과가 늦게 보인다.
- 따라서 성공은 날짜별로 바로 지급하고, 실패는 남은 기간에 만회할 수 없게 된 횟수만 확정해 차감한다.
- 소수 단위를 저장하지 않고 정수 산식(§5-1)으로 반영 누계를 계산해, 목표 횟수와 관계없이 주간 총 배점이 정확히 맞도록 한다.
3. 목표 Goals
- 계정마다 하나의 누적 점수와 하나의 실제 티어 상태를 일관되게 유지한다.