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 목적 & 사용법
- 목적: 3개 설계 문서가 각자 보유한 체크리스트의 공통 항목을 합쳐, 스프린트별로 재활용 가능한 마스터 목록 1쪽 유지.
- 사용법: 각 스프린트 PR 제출 전 §3 해당 스프린트 서브셋 표를 보고 항목별로 자체 체크. 미통과 항목 있으면 PR 올리지 말 것.
- 확장 원칙: 신규 스프린트 추가 시 본 문서 §2 마스터 리스트에만 확장. 설계 문서에 체크리스트 복제 금지.
- (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-M03 | asmdef 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-M04 | Editor 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.EditorTools | S01 W2 §9 CP9-5 / S02 W2 §8 CP9-5 / S03 §9 CP-I2 |
| CP-M07 | TSV Split('\t') 후 각 셀 Trim() 1회 — CRLF/LF 말미 \r 제거 | 공통 TsvReader.Read 내부 cells[c].Trim() 존재 확인 | S01 W2 §9 CP9-6 / S02 W2 §8 CP9-6 |
| CP-M08 | BOM 트림 단일화 — 공통 TsvReader 한 곳만. 개별 Importer 중복 금지 | grep → 파일 1개 | S01 W2 §9 CP9-7 / S02 W2 §8 CP9-7 |
| CP-M09 | Dictionary 직렬화 금지 — SO는 List<Row> 저장 + [NonSerialized] Dictionary + OnEnable lazy build | SO 파일 grep Dictionary< → [NonSerialized] 속성 동반 | S01 W2 §9 CP9-8 / S02 W2 §8 CP9-8 |
| CP-M10 | Enum 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-M11 | Importer 단계 System.Random 사용 금지 — 결정론 보장 (input TSV만) | Importer .cs grep new Random\( → 0건 | S01 W2 §9 CP9-10 / S02 W2 §8 CP9-10 |
| CP-M12 | Addressables 그룹 중복 생성 금지 — 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-M13 | PpChannel enum asmdef 경계 — GodBlade.Runtime.Prestige 에만. Data 어셈블리에서 참조 금지 (역방향 asmdef 사이클 차단) | GodBlade.Data.* 파일 grep PpChannel → 0건 | S02 W2 §8 CP-P1 |
| CP-M14 | SO 기본값 초기화 — 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-M16 | long 오버플로 방어 — AddPermanentPp / AddSeasonalPp 에 checked 블록 + amount < 0 가드 + 1e15 상한 경고 | PlayerPrestigeState.AddPermanentPp 본문 확인 | S02 W2 §8 CP-P4 |
방치 특화 (Sprint 03)
| ID | 체크 내용 | 검증 방법 | 원천 |
|---|---|---|---|
| CP-M17 | IdleSaveDto.schemaVersion=1 + Sprint 02 W2 마이그레이션 스위치 패턴 재활용 | IdleSaveService.Migrate(dto) switch 존재 | S03 §9 CP-I3 |
| CP-M18 | PP 수식 스펙 일치 — maxStage × 0.05 PP/hour (prestige_system_spec §3.2 C) | 단위 테스트 하드코딩 assert "100층 × 10h = 50 PP" 존재 | S03 §9 CP-I4 |
| CP-M19 | RNG 결정론 — 동일 seed + 입력 → 동일 출력. Dictionary 순회 금지, List 인덱스 순 | 테스트 2회 실행 동일 결과 assert. 리플레이 iteration 은 rows 리스트 사용 | S03 §9 CP-I5 |
| CP-M20 | OnIdleReward 발화 전 PlayerPrestigeState.AddPermanentPp 완료 — UI 가 State 읽을 때 이미 반영, 이중 적립 금지 | IdleTicker.FlushCatchUp 메서드 내 호출 순서 확인 (PP 적립 → OnIdleReward) | S03 §9 CP-I6 |
| CP-M21 | Sprint 02 W2 계약 준수 — IdleTicker 는 PlayerPrestigeState public API 만 호출. private 접근 금지 | IdleTicker.cs grep — MigrateSeasonalToPermanent / private 필드 직접 접근 0 | S03 §9 CP-I7 |
| CP-M22 | iOS 백그라운드 Suspend 이중 저장 안전망 — OnApplicationPause(true) 즉시 flush + 1분 주기 Update() 안전 flush. 실기 테스트는 Phase 3+ 이월 | IdleTicker 내 OnApplicationPause + 1분 주기 flush 존재. PR 본문에 "실기 검증 Phase 3+ 이월" 명시 | S03 §9 CP-I8 |
| CP-M23 | DateTime.UtcNow 역전 가드 + 30일 Warn — elapsed<0 → 0 처리. elapsed>30*86400 → Debug.LogWarning | IdleTicker.FlushCatchUp 시작부 가드 블록 확인 | S03 §9 CP-I9 |
운영 체크포인트 (v1.1 신설, 2026-05-02 — PM 자체 체크)
본 섹션은 코드 PR 게이트가 아니다. PM이 스프린트 D-7 / D+14 시점에 운영상 적용하는 체크.
| ID | 체크 내용 | 검증 방법 | 원천 |
|---|---|---|---|
| CP-M24 | D-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-M25 | graphify 갱신 주기 — 스프린트 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-M01 | Sprint 00 회귀 — CS0246 |
| 2 | ⭐ CP-M02 | Sprint 00 회귀 — CS1061 |
| 3 | CP-M03 | asmdef references 완결성 |
| 4 | CP-M04 | Addressables.Editor 참조 |
| 5 | CP-M05 | #if UNITY_EDITOR 가드 |
| 6 | CP-M06 | 네임스페이스 컨벤션 |
| 7 | CP-M07 | TSV Trim |
| 8 | CP-M08 | BOM 트림 단일화 |
| 9 | CP-M09 | Dictionary 직렬화 금지 |
| 10 | CP-M10 | Enum underlying type |
| 11 | CP-M11 | Importer RNG 금지 |
| 12 | CP-M12 | Addressables 그룹 중복 금지 |
| 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-M01 | Sprint 00 회귀 — CS0246 |
| 2 | ⭐ CP-M02 | Sprint 00 회귀 — CS1061 |
| 3 | CP-M03 | asmdef references 완결성 (+ GodBlade.Runtime 추가 필수) |
| 4 | CP-M04 | Addressables.Editor 참조 |
| 5 | CP-M05 | #if UNITY_EDITOR 가드 |
| 6 | CP-M06 | 네임스페이스 컨벤션 (GodBlade.Runtime.Prestige / GodBlade.Data.Prestige) |
| 7 | CP-M07 | TSV Trim (공통 TsvReader 첫 소비자) |
| 8 | CP-M08 | BOM 트림 단일화 |
| 9 | CP-M09 | Dictionary 직렬화 금지 |
| 10 | CP-M10 | Enum underlying type (PpChannel:byte·PrestigeTab:byte) |
| 11 | CP-M11 | Importer RNG 금지 |
| 12 | CP-M12 | Addressables 그룹 중복 금지 (신규 Prestige 그룹) |
| 13 | CP-M13 | 프레스티지 — PpChannel asmdef 경계 |
| 14 | CP-M14 | 프레스티지 — SO 기본값 초기화 |
| 15 | CP-M15 | 프레스티지 — 저장 스키마 v1 하드코딩 테스트 |
| 16 | CP-M16 | 프레스티지 — long 오버플로 방어 |
| 17 | — | (CP-P5 Sprint 00 회귀 재발 경고는 CP-M01/M02 에 통합됨) |
| 운영 | CP-M24 | D-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-M01 | Sprint 00 회귀 — CS0246 (IdleTicker → Addressables 참조) |
| 2 | ⭐ CP-M02 | Sprint 00 회귀 — CS1061 (Runtime 어셈블리 내 재선언 금지) |
| 3 | CP-M06 | 네임스페이스 컨벤션 (GodBlade.Runtime.Idle vs Prestige 충돌 없음) |
| 4 | CP-M12 | Addressables 그룹 중복 금지 — 신규 그룹 없음, 기존 Rewards/Prestige 만 참조 |
| 5 | CP-M17 | 방치 — IdleSaveDto schemaVersion=1 + Migrate 스위치 |
| 6 | CP-M18 | 방치 — PP 수식 스펙 일치 (100층 × 10h = 50 PP) |
| 7 | CP-M19 | 방치 — RNG 결정론 (List 순서 고정) |
| 8 | CP-M20 | 방치 — 이벤트 발화 순서 (PP 적립 → OnIdleReward) |
| 9 | CP-M21 | 방치 — Sprint 02 W2 계약 public API 준수 |
| 10 | CP-M22 | 방치 — iOS Suspend 이중 저장 + 1분 flush |
| 11 | CP-M23 | 방치 — DateTime 역전 가드 + 30일 Warn |
| 12 | — | (CP-I10 마일스톤 추정 공식 정책 일치 = CP-M18 에 통합) |
| 13 | — | (CP-I11 = CP-M12) |
| 운영 | CP-M24 | D-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 신설)
| 스프린트 | 운영 체크 | 적용 범위 | 가속 |
|---|---|---|---|
| Sp04 | CP-M24 | 풀 (어픽스 v1.3 + IP 정합 5건 W1 사전 반영) | 1~2h |
| Sp05 | CP-M24 | 부분 (V3 통합주차 위임) | 0.5h |
Sp04/Sp05는 코드 PR 게이트 마스터 체크리스트 미적용 (각 설계 문서가 Sp01~03 패턴 재활용). 운영 체크만 본 문서 등재.
§4 PR 머지 전 공통 절차 (코드 게이트)
- Unity 6 에디터 파일 저장 후 Console 새 에러 0 확인 (Warning 허용, Error 금지)
- Edit-mode 테스트 전수 Green (Sprint 01 W2: 8+α / Sprint 02 W2: 7 / Sprint 03: 7)
- Addressables
Build > Clean Build→Build Player Content성공 - Smoke Test 통과 (Sprint별 스펙 로그 1건 이상 확인)
- 위 4개 중 하나라도 실패 시 PR 재작업 — Sprint 00 정적 리뷰 통과 후 회귀 2건 재발 사례 재현 금지
§4.5 운영 체크 절차 (v1.1 신설, PM 게이트)
본 섹션은 코드 PR 게이트와 별도. PM이 스프린트 D-7/D+14 시점에 자체 적용.
CP-M24 D-7 즉시 흡수 패턴 절차
- D-7 시점 (예: Sp02=2026-05-11, Sp03=2026-05-25, Sp04=2026-06-08, Sp05=2026-06-22) 에 PM이 preflight v1.2 체크리스트 실행
- 외부 입력(강시연 본문 / IP 결정 / 시놉 갱신) 도착 건이 있으면 24h 내 흡수
- 발견 이슈는 D-2 확정본 갱신 시 sprint-NN.md 본문 인라인 흡수
- 절감 효과 측정 → 회고 시 phase-2-roadmap v2.x 갱신 시 반영
CP-M25 graphify 갱신 절차
- D+14 회고 시점 PM이
graphify update .1회 실행 (스프린트 종료 직후) - 매 PR 갱신 금지 — 103,530 노드 갱신 부하 30분~1h 누적 위험
- 예외 발동 조건:
- 신규 폴더 추가 (
Assets/_Project/Scripts/<NewArea>/) - 신규 asmdef 추가
- 위 두 경우는 즉시 graphify 갱신 (구조 변경 = 그래프 무효화)
- 갱신 결과 (노드/엣지 변동 수) 회고 섹션에 1행 기록
§5 메타정보
- 작성자: project-manager (PM)
- 버전 이력:
- v1.0 2026-04-21 — scaffold sync audit D6 (P2) 해소, 23개 유니크 마스터
- v1.1 2026-05-02 — CP-M24/M25 운영 체크포인트 2건 확장 (preflight v1.2 -70% 절감 + graphify 103,530 노드 갱신 주기 정책)
- 근거:
- v1.0: 2026-04-21 scaffold sync audit
- v1.1: 2026-05-02 ALL IN 사이클 변동 8건 + preflight v1.2 실측 + graphify 갱신 부하 실측 (
phase-2-roadmap-checkpoint-2026-05-02.md§5/§3) - 원천 문서 3건:
designs/sprint-01-w2-importer-design.mdv1.0 APPROVED §9 (CP9-1~CP9-11, 11개)designs/sprint-02-w2-prestige-tech-sketch.mdv1.0 APPROVED §8 (CP9 재적용 11 + CP-P1~P5 = 16개)designs/sprint-03-idle-research.mdv1.0 APPROVED §9 (Sprint 00 회귀 경고 + CP-I1~CP-I11 = 11개)- 통계:
- 원천 체크 38개 → 유니크 23개 + 운영 2개 = 25개
- Sprint 01 W2 서브셋: 13개 (공통 12 + ⭐ 회귀 2건 최상위)
- Sprint 02 W2 서브셋: 17개 + 운영 1 (CP-M24 부분)
- Sprint 03 서브셋: 13개 + 운영 1 (CP-M24 풀)
- Sprint 04: 운영 1 (CP-M24 풀)
- Sprint 05: 운영 1 (CP-M24 부분)
- 모든 스프린트 D+14: CP-M25 1건 공통
- 유지 정책: 신규 스프린트 추가 시 본 문서 §2 에만 CP-M26… 확장. 설계 문서에 체크리스트 복제 금지.
(끝 — v1.1, 2026-05-02 PM 운영 체크 2건 확장)