기준: 공통, 백엔드, 프로필 수정 API, 사진 등록 API.
- 사용자 행을 잠근 뒤 변경 여부·통합 1개월 잠금을 검사한다. 업로드의 외부 저장 전후로 검사하며, 두 번째 검사에서 거절되면 새 객체를 정리한다.
- 최초 사진 등록은 잠금을 시작하지 않는다. 이후 업로드·삭제도 닉네임과 같은 잠금을 적용한다. 삭제 후 다시 등록해도 최초 등록으로 돌아가지 않는다.
- API 문서의 이미지 우선 저장 규칙을 유지한다. 이미지 변경 후 10분 이내 닉네임 변경 한 번을 같은 저장으로 허용한다. 반복 닉네임 변경이나 추가 업로드는 이 예외가 아니다.
- REJECTED인 해당 항목과 닉네임 CONFLICT 복구만 잠금 검사에서 제외한다. 거부된 사진이 정상 닉네임의 변경을 허용하지 않는다. 재수정은 기존 해제일을 연장하지 않는다.
- 409 PROFILE_CHANGE_LOCKED에 profileLockedUntil을 포함한다. 관심 분야는 계속 자유롭게 수정할 수 있다. 심사 제공자 결과를 응답에 반영하고 장애 시 PENDING을 유지한다.
- 캘린더와 통계는 VerificationDaily를 우선 읽는다. 이전 배포에서 원본이 이미 없어진 건만 RoutineOutcome을 보완 원천으로 사용한다. 같은 날짜·방의 원본과 수집본을 중복 집계하지 않는다.
- 성공 즉시 반영, D+1 유예의 실패 예정, D+2 확정 실패를 인증 모듈의 표시 함수로 판정한다. 월 요약의 ALL_DONE/PARTIAL과 일 상세의 DONE은 화면별 집계 표현이며, 폐기된 CHECKING/PENDING 표시를 사용하지 않는다. 조회 결과를 캐시하지 않아 소급 정정이 바로 반영된다.
- 통계는 성공률, 성공 건수, 현재·최고 스트릭, 완주 수의 네 종류다. cycles12w와 weeklyScoreDelta를 제거했다. 미확정일은 스트릭을 늘리거나 끊지 않는다.
- 무제한/진행 중 방은 홈의 진행 중 항목에 유지한다. 종료·이탈 목록 수는 실제 멤버십 상태, 통계·공개 프로필의 완주 수는 종료된 방의 80% 달성 기준이다. 보존 이력도 합산하고, 삭제가 유예돼 운영 행과 이력이 함께 있어도 중복하지 않는다.
- 티어 그래프는 monthly 대신 points(occurredAt, tier, score)를 반환한다. 같은 달의 중간 상승·하락을 유지하며 사유는 그래프에서 제외한다. 소급 점수 재계산은 뒤의 티어·점수 PR에서 연결한다.
- 이의 목록은 acceptedAt과 targetDate를 분리하고 항상 동일했던 track/result를 제거한다. 삭제된 방의 제목도 이력에서 복원한다.
- 공개 프로필은 기존 식별·표시 플래그와 닉네임·사진·표시 티어·완주 수만 유지한다. 생일·성별·점수·상세 활동은 포함하지 않는다.
- 홈의 permissionWarnings는 확인된 측정 권한 공백과 남은 유예 사이클을 제공한다. 재가입 이전 공백은 표시하지 않으며, 새 공백이 발생하면 새 대기를 시작한다.
- 현행 범위에서 제외된 친구 초대 API는 노출하지 않는다.
V60은 회원의 최초 이미지 등록 시점·이미지 우선 저장 상태와 인증/멤버십 조회 인덱스만 추가한다. 별도 마이페이지 통계 테이블은 만들지 않는다. FE는 제거된 통계·이의 필드와 그래프 points 계약에 맞춰 배포해야 한다.