← 자료실/sprintsLOW

Shared Checkpoints — Sprint 01 W2 / Sprint 02 W2 / Sprint 03 공통 체크포인트 합본

sprints/shared-checkpoints.md

Shared Checkpoints — Sprint 01 W2 / Sprint 02 W2 / Sprint 03 공통 체크포인트 합본

작성: 2026-04-21 (project-manager) · 근거: scaffold sync audit 2026-04-21 D6 (P2) 해소 문서 상태: v1.1 (2026-05-02 CP-M24/M25 운영 체크포인트 2건 확장) 원천 문서: designs/sprint-01-w2-importer-design.md §9 (11개) · designs/sprint-02-w2-prestige-tech-sketch.md §8 (16개) · designs/sprint-03-idle-research.md §9 (11개) — 총 38개 → 유니크 23개 + 운영 체크 2개 = 25개 범위: Sprint 01 W2 / Sprint 02 W2 / Sprint 03 실구현 PR 머지 전 자체 체크 + Sp02~05 운영 체크 (CP-M24/M25)

§1 목적 & 사용법

  1. 목적: 3개 설계 문서가 각자 보유한 체크리스트의 공통 항목을 합쳐, 스프린트별로 재활용 가능한 마스터 목록 1쪽 유지.
  2. 사용법: 각 스프린트 PR 제출 전 §3 해당 스프린트 서브셋 표를 보고 항목별로 자체 체크. 미통과 항목 있으면 PR 올리지 말 것.
  3. 확장 원칙: 신규 스프린트 추가 시 본 문서 §2 마스터 리스트에만 확장. 설계 문서에 체크리스트 복제 금지.
  4. (v1.1 추가) 운영 체크포인트 (CP-M24~) 는 코드 PR 게이트가 아닌 PM 운영 자체 체크 — 스프린트 D-7/D+14 시점에 PM이 적용.

§2 유니크 체크포인트 마스터 리스트 (25개)

최상위 — Sprint 00 회귀 2건 재발 방지 (⭐ 우선순위)

ID체크 내용검증 방법원천
⭐ CP-M01[CS0246] Unity.ResourceManager 참조 누락 금지 — Addressables AsyncOperationHandle<T> 사용 어셈블리는 모두 참조 필수asmdef references 배열에 Unity.ResourceManager 문자열 존재 확인. Runtime / Editor / Tests.Editor 3곳 전부S01 W2 §9 CP9-1 / S02 W2 §8 CP-P5 / S03 §9.1+CP-I1
⭐ CP-M02[CS1061] [InternalsVisibleTo] 중복 선언 금지 — GodBlade.Data 한 파일에만. 다른 SO 파일에 복제 시 CS0579어셈블리별 [assembly: InternalsVisibleTo("GodBlade.Editor")] grep → 파일 1개S01 W2 §9 CP9-3 / S02 W2 §8 CP9-3·CP-P5 / S03 §9.1

공통 컴파일/asmdef (CP9-1 ~ CP9-11 유니크화)

ID체크 내용검증 방법원천
CP-M03asmdef references 완결성 — UnityEngine.TestRunner / UnityEditor.TestRunner / GodBlade.Data / GodBlade.Runtime / GodBlade.Editor (테스트 asmdef 기준)GodBlade.Tests.Editor.asmdef 열어 배열 5개 존재. Sprint 02+ 는 GodBlade.Runtime 추가 확인S01 W2 §9 CP9-1 / S02 W2 §8 CP9-1
CP-M04Editor asmdef에 Unity.Addressables.Editor 참조 유지GodBlade.Editor.asmdef 배열 확인 — AddressableAssetSettingsDefaultObject 접근 시 필수S01 W2 §9 CP9-2 / S02 W2 §8 CP9-2
CP-M05#if UNITY_EDITOR 가드 경계 준수 — Data asmdef는 UnityEditor.* 참조 금지, 사용 시 가드 필수Data 어셈블리 .cs 전수 grep using UnityEditor → 없거나 #if UNITY_EDITOR 내부S01 W2 §9 CP9-4 / S02 W2 §8 CP9-4
CP-M06네임스페이스 컨벤션 — Runtime은 GodBlade.Runtime.<Sub>, Data는 GodBlade.Data.<Sub>. Editor asmdef = 파일명 GodBlade.Editor / rootNamespace GodBlade.EditorTools (Sprint 00 컨벤션). asmdef rootNamespace 수정 금지.cs 최상단 namespace 선언 확인. Editor 파일은 namespace GodBlade.EditorToolsS01 W2 §9 CP9-5 / S02 W2 §8 CP9-5 / S03 §9 CP-I2
CP-M07TSV Split('\t') 후 각 셀 Trim() 1회 — CRLF/LF 말미 \r 제거공통 TsvReader.Read 내부 cells[c].Trim() 존재 확인S01 W2 §9 CP9-6 / S02 W2 §8 CP9-6
CP-M08BOM 트림 단일화 — 공통 TsvReader 한 곳만. 개별 Importer 중복 금지 grep → 파일 1개S01 W2 §9 CP9-7 / S02 W2 §8 CP9-7
CP-M09Dictionary 직렬화 금지 — SO는 List<Row> 저장 + [NonSerialized] Dictionary + OnEnable lazy buildSO 파일 grep Dictionary< → [NonSerialized] 속성 동반S01 W2 §9 CP9-8 / S02 W2 §8 CP9-8
CP-M10Enum underlying type 정책 — Inspector 표시용 int 기본, DOTS 친화 필드는 byte. W2에선 Grade:int 유지, PpChannel:byte·PrestigeTab:byte 허용enum 선언부 확인S01 W2 §9 CP9-9 / S02 W2 §8 CP9-9
CP-M11Importer 단계 System.Random 사용 금지 — 결정론 보장 (input TSV만)Importer .cs grep new Random\( → 0건S01 W2 §9 CP9-10 / S02 W2 §8 CP9-10
CP-M12Addressables 그룹 중복 생성 금지 — settings.FindGroup(name) 선확인 후 없을 때만 생성Importer RegisterAddressables 메서드 내 FindGroup 분기 존재S01 W2 §9 CP9-11 / S02 W2 §8 CP9-11 / S03 §9 CP-I11

프레스티지 특화 (Sprint 02 W2)

ID체크 내용검증 방법원천
CP-M13PpChannel enum asmdef 경계 — GodBlade.Runtime.Prestige 에만. Data 어셈블리에서 참조 금지 (역방향 asmdef 사이클 차단)GodBlade.Data.* 파일 grep PpChannel → 0건S02 W2 §8 CP-P1
CP-M14SO 기본값 초기화 — List<T> rows = new(); C# 9 target-typed new. NRE 방지신규 SO 파일 [SerializeField] List 선언부 확인S02 W2 §8 CP-P2
CP-M15저장 스키마 구버전 호환성 — v1 JSON 하드코딩 문자열 → Load → 현 상태 재현 테스트 고정PrestigeSaveRoundTripTests.cs 내 v1 하드코딩 assert 존재S02 W2 §8 CP-P3
CP-M16long 오버플로 방어 — AddPermanentPp / AddSeasonalPp 에 checked 블록 + amount < 0 가드 + 1e15 상한 경고PlayerPrestigeState.AddPermanentPp 본문 확인S02 W2 §8 CP-P4

방치 특화 (Sprint 03)

ID체크 내용검증 방법원천
CP-M17IdleSaveDto.schemaVersion=1 + Sprint 02 W2 마이그레이션 스위치 패턴 재활용IdleSaveService.Migrate(dto) switch 존재S03 §9 CP-I3
CP-M18PP 수식 스펙 일치 — maxStage × 0.05 PP/hour (prestige_system_spec §3.2 C)단위 테스트 하드코딩 assert "100층 × 10h = 50 PP" 존재S03 §9 CP-I4
CP-M19RNG 결정론 — 동일 seed + 입력 → 동일 출력. Dictionary 순회 금지, List 인덱스 순테스트 2회 실행 동일 결과 assert. 리플레이 iteration 은 rows 리스트 사용S03 §9 CP-I5
CP-M20OnIdleReward 발화 전 PlayerPrestigeState.AddPermanentPp 완료 — UI 가 State 읽을 때 이미 반영, 이중 적립 금지IdleTicker.FlushCatchUp 메서드 내 호출 순서 확인 (PP 적립 → OnIdleReward)S03 §9 CP-I6
CP-M21Sprint 02 W2 계약 준수 — IdleTicker 는 PlayerPrestigeState public API 만 호출. private 접근 금지IdleTicker.cs grep — MigrateSeasonalToPermanent / private 필드 직접 접근 0S03 §9 CP-I7
CP-M22iOS 백그라운드 Suspend 이중 저장 안전망 — OnApplicationPause(true) 즉시 flush + 1분 주기 Update() 안전 flush. 실기 테스트는 Phase 3+ 이월IdleTicker 내 OnApplicationPause + 1분 주기 flush 존재. PR 본문에 "실기 검증 Phase 3+ 이월" 명시S03 §9 CP-I8
CP-M23DateTime.UtcNow 역전 가드 + 30일 Warn — elapsed<0 → 0 처리. elapsed>30*86400 → Debug.LogWarningIdleTicker.FlushCatchUp 시작부 가드 블록 확인S03 §9 CP-I9

운영 체크포인트 (v1.1 신설, 2026-05-02 — PM 자체 체크)

본 섹션은 코드 PR 게이트가 아니다. PM이 스프린트 D-7 / D+14 시점에 운영상 적용하는 체크.
ID체크 내용검증 방법원천
CP-M24D-7 즉시 흡수 패턴 — 외부 입력(강시연 본문 / IP 결정 / 시놉 갱신) 도착 시 24h 내 흡수. preflight v1.2 적용각 스프린트 D-7 시점에 PM이 preflight v1.2 체크리스트 실행. 발견 이슈는 D-2 확정본 갱신 시 인라인 흡수2026-05-02 preflight v1.2 -70% 절감 실측 (phase-2-roadmap-checkpoint-2026-05-02.md §5)
CP-M25graphify 갱신 주기 — 스프린트 D+14 (회고 시점) 1회 갱신. 매 PR 갱신 금지 (103,530 노드 부하 30분~1h 누적 위험). 예외: 신규 폴더·asmdef 추가 시 즉시 갱신 (구조 변경)D+14 PM 회고 체크리스트에 graphify update . 1줄 추가2026-05-02 graphify 갱신 부하 실측 (R-DR-13)
유니크 재활용률: 38개 원천 체크 → 23개 유니크 (중복 제거율 39.5%, CP9-1~11 공통 11개가 2~3개 스프린트 재활용) + 운영 2개 = 25개

§3 스프린트별 서브셋 매핑

Sprint 01 W2 서브셋 (13개)

#ID범주
1⭐ CP-M01Sprint 00 회귀 — CS0246
2⭐ CP-M02Sprint 00 회귀 — CS1061
3CP-M03asmdef references 완결성
4CP-M04Addressables.Editor 참조
5CP-M05#if UNITY_EDITOR 가드
6CP-M06네임스페이스 컨벤션
7CP-M07TSV Trim
8CP-M08BOM 트림 단일화
9CP-M09Dictionary 직렬화 금지
10CP-M10Enum underlying type
11CP-M11Importer RNG 금지
12CP-M12Addressables 그룹 중복 금지
13—(Sprint 01 W2 고유 특화 체크 없음 — §2 공통 11개로 전부 커버됨)
원천: S01 W2 §9 CP9-1~CP9-11 = 11개 → 마스터 CP-M01~CP-M12 중 11개 재사용 (+ CP-M01/M02 회귀 경고 합쳐 13개) 운영 체크: CP-M24/M25 는 Sp01 D-2(2026-05-02) 확정본으로 이미 적용 완료, D+14 시 graphify 1회 갱신 (CP-M25)

Sprint 02 W2 서브셋 (17개 + 운영 1)

#ID범주
1⭐ CP-M01Sprint 00 회귀 — CS0246
2⭐ CP-M02Sprint 00 회귀 — CS1061
3CP-M03asmdef references 완결성 (+ GodBlade.Runtime 추가 필수)
4CP-M04Addressables.Editor 참조
5CP-M05#if UNITY_EDITOR 가드
6CP-M06네임스페이스 컨벤션 (GodBlade.Runtime.Prestige / GodBlade.Data.Prestige)
7CP-M07TSV Trim (공통 TsvReader 첫 소비자)
8CP-M08BOM 트림 단일화
9CP-M09Dictionary 직렬화 금지
10CP-M10Enum underlying type (PpChannel:byte·PrestigeTab:byte)
11CP-M11Importer RNG 금지
12CP-M12Addressables 그룹 중복 금지 (신규 Prestige 그룹)
13CP-M13프레스티지 — PpChannel asmdef 경계
14CP-M14프레스티지 — SO 기본값 초기화
15CP-M15프레스티지 — 저장 스키마 v1 하드코딩 테스트
16CP-M16프레스티지 — long 오버플로 방어
17—(CP-P5 Sprint 00 회귀 재발 경고는 CP-M01/M02 에 통합됨)
운영CP-M24D-7 즉시 흡수 부분 적용 (W2 R3 차단 가드 0.5h)
원천: S02 W2 §8 CP9-1~CP9-11 재적용 + CP-P1~CP-P5 = 16개 → 마스터 CP-M01~CP-M16 중 16개 재사용 (+ 회귀 경고 2건 최상위 승격) + 운영 1건

Sprint 03 서브셋 (13개 + 운영 1)

#ID범주
1⭐ CP-M01Sprint 00 회귀 — CS0246 (IdleTicker → Addressables 참조)
2⭐ CP-M02Sprint 00 회귀 — CS1061 (Runtime 어셈블리 내 재선언 금지)
3CP-M06네임스페이스 컨벤션 (GodBlade.Runtime.Idle vs Prestige 충돌 없음)
4CP-M12Addressables 그룹 중복 금지 — 신규 그룹 없음, 기존 Rewards/Prestige 만 참조
5CP-M17방치 — IdleSaveDto schemaVersion=1 + Migrate 스위치
6CP-M18방치 — PP 수식 스펙 일치 (100층 × 10h = 50 PP)
7CP-M19방치 — RNG 결정론 (List 순서 고정)
8CP-M20방치 — 이벤트 발화 순서 (PP 적립 → OnIdleReward)
9CP-M21방치 — Sprint 02 W2 계약 public API 준수
10CP-M22방치 — iOS Suspend 이중 저장 + 1분 flush
11CP-M23방치 — DateTime 역전 가드 + 30일 Warn
12—(CP-I10 마일스톤 추정 공식 정책 일치 = CP-M18 에 통합)
13—(CP-I11 = CP-M12)
운영CP-M24D-7 즉시 흡수 풀 적용 (IdleTicker D-7 검증 1~2h)
원천: S03 §9 CP-I1~CP-I11 + 회귀 경고 2건 = 11개 → 마스터 CP-M01·M02·M06·M12·M17~M23 중 11개 재사용 + 특화 7개 (CP-M17~M23) + 운영 1건

Sprint 04 / Sprint 05 운영 체크 (v1.1 신설)

스프린트운영 체크적용 범위가속
Sp04CP-M24풀 (어픽스 v1.3 + IP 정합 5건 W1 사전 반영)1~2h
Sp05CP-M24부분 (V3 통합주차 위임)0.5h
Sp04/Sp05는 코드 PR 게이트 마스터 체크리스트 미적용 (각 설계 문서가 Sp01~03 패턴 재활용). 운영 체크만 본 문서 등재.

§4 PR 머지 전 공통 절차 (코드 게이트)

  1. Unity 6 에디터 파일 저장 후 Console 새 에러 0 확인 (Warning 허용, Error 금지)
  2. Edit-mode 테스트 전수 Green (Sprint 01 W2: 8+α / Sprint 02 W2: 7 / Sprint 03: 7)
  3. Addressables Build > Clean Build → Build Player Content 성공
  4. Smoke Test 통과 (Sprint별 스펙 로그 1건 이상 확인)
  5. 위 4개 중 하나라도 실패 시 PR 재작업 — Sprint 00 정적 리뷰 통과 후 회귀 2건 재발 사례 재현 금지

§4.5 운영 체크 절차 (v1.1 신설, PM 게이트)

본 섹션은 코드 PR 게이트와 별도. PM이 스프린트 D-7/D+14 시점에 자체 적용.

CP-M24 D-7 즉시 흡수 패턴 절차

  1. D-7 시점 (예: Sp02=2026-05-11, Sp03=2026-05-25, Sp04=2026-06-08, Sp05=2026-06-22) 에 PM이 preflight v1.2 체크리스트 실행
  2. 외부 입력(강시연 본문 / IP 결정 / 시놉 갱신) 도착 건이 있으면 24h 내 흡수
  3. 발견 이슈는 D-2 확정본 갱신 시 sprint-NN.md 본문 인라인 흡수
  4. 절감 효과 측정 → 회고 시 phase-2-roadmap v2.x 갱신 시 반영

CP-M25 graphify 갱신 절차

  1. D+14 회고 시점 PM이 graphify update . 1회 실행 (스프린트 종료 직후)
  2. 매 PR 갱신 금지 — 103,530 노드 갱신 부하 30분~1h 누적 위험
  3. 예외 발동 조건:
  1. 갱신 결과 (노드/엣지 변동 수) 회고 섹션에 1행 기록

§5 메타정보


(끝 — v1.1, 2026-05-02 PM 운영 체크 2건 확장)