← 자료실/designsLOW

Sprint 01 W2 Importer Precheck — D+0 PRINT-AND-CHECK 진입 게이트

designs/sprint-01-w2-importer-precheck.md

Sprint 01 W2 Importer Precheck — D+0 PRINT-AND-CHECK 진입 게이트

작성: 2026-05-02 (code-lead 정현우) · 옵션 A 채택본 입력 자료 (이전 정독 완료, 자기충족): - designs/sprint-01-w2-importer-design.md v1.0 APPROVED (4 결정 + §9 11체크 본문) - designs/scaffold-sync-audit-2026-04-21.md v1.0 (D1·D4 정합) - designs/sp04_w1_preflight.md v1.2 (어픽스 v1.3 흡수, AFX_36 신규) - designs/affix_pool_sp04_supplement_v1.md v1.3 (변동 4건 원본) - sprints/sprint-01.md D-2 확정본 (W2 #W2-01~10 + 가드 6건 인라인) - Unity6/Assets/Editor/GodBlade.Editor.asmdef (rootNs GodBlade.EditorTools) - Unity6/Assets/_Project/Scripts/Data/GodBlade.Data.asmdef (references 빈 배열) - Unity6/Assets/_Project/Scripts/Runtime/GodBlade.Runtime.asmdef (Unity.ResourceManager line 7) - Unity6/Packages/manifest.json line 10 test-framework 1.4.5 (lock builtin 1.6.0 자동 해석) - graphify-out/GRAPH_REPORT.md (god nodes Top 10 + Community 0~30 헤드) 목적: 2026-05-11 (월) 오전 W2 진입 PRINT-AND-CHECK 양식 1쪽. 책상 위 출력 → 11 게이트 체크 → GO/NO-GO 판정. 패치 1~2h 버퍼 명시. PD 결정 확인: 옵션 A 채택 + 신규 폴더 3개 경로 사전 승인 완료 (2026-05-02).

§1. 4 결정 vs 설계 정합 (정합 점수 4/4)

#결정 항목PD 승인sprint-01-w2-importer-design.md 본문sprint-01.md W2 작업 매핑정합
DQ1SO 구조 = 옵션 A (개별 3개)2026-04-21§1.1 표 / §1.3 필드 초안 / §0 한 줄 요약#W2-02 / #W2-03 / #W2-04 (3 SO 분리 import)✅
DQ2Importer 메뉴 = 4+1 (개별 4 + ALL 1)2026-04-21§2.2 메뉴 5개 / §2.3 의존 순서#W2-02 (Drop) / #W2-03 (Milestone) / #W2-04 (Affix) / 기존 Stage / #W2-05 (ALL)✅
DQ3TsvReader 공통화 = Sprint 02 이월2026-04-21§10.1 R-W2-2 (Sp00 회귀 위험) / §11 DQ3 추천 사유W2 범위 외 — sprint-02.md 킥오프에서 인계✅
DQ4테스트 asmdef = 신설 GodBlade.Tests.Editor2026-04-21§8.2 파일 배치 / §9 CP9-1 references 5종#W2-06 (asmdef 신설) / #W2-09 (테스트 5~8개 Green)✅

정합 점수: 4/4 (PD 승인 결정 4건 ↔ 설계 본문 ↔ sprint-01.md W2 작업표 = 1:1:1 매핑 무드리프트)


§2. §9 11체크리스트 W2 작업 단계 매핑 (CP9-1 ~ CP9-11)

#CP9 항목적용 W2 작업가드 시점가드 방식
CP9-1신규 Tests asmdef references 5+1종 (UnityEngine.TestRunner / UnityEditor.TestRunner / GodBlade.Data / GodBlade.Runtime / GodBlade.Editor / Unity.ResourceManager)#W2-06asmdef 저장 직후Inspector 표시 + Test Runner 인식 확인
CP9-2Unity.Addressables.Editor 유지 (Editor asmdef line 8)#W2-02 / #W2-03 / #W2-04 / #W2-05Importer 신규 작성 시기존 GodBlade.Editor.asmdef 변경 금지 (read-only)
CP9-3[InternalsVisibleTo] 단일 선언 (TranscendentStageSO.cs:22만)#W2-02 / #W2-03 / #W2-04신규 SO 저장 직후#가드-CS0579-1~4 그렙 4회 강제
CP9-4#if UNITY_EDITOR 가드 — Data asmdef는 UnityEditor.* 직접 참조 금지#W2-02 / #W2-03 / #W2-04SO 작성 시[CreateAssetMenu] 외 Editor 심볼 사용 금지 자체 점검
CP9-5네임스페이스 — Runtime만 하위(GodBlade.Runtime.Rewards), Editor는 평탄(GodBlade.EditorTools)#W2-08 (Runtime Granter) / #W2-02~05 (Editor Importer)파일 저장 직후#가드-네임스페이스 그렙 1회 (#W2-05 직후, sprint-01.md L89)
CP9-6TSV Split('\t') + Trim() (\r 잔여 가드)#W2-02 / #W2-03 / #W2-04Import 첫 실행 시콘솔 BOM/CRLF 경고 0건 확인
CP9-7BOM 트림 중복 적용 금지 (Sp00 TranscendentStageImporter 손대지 않음 — DQ3 이월 원칙)#W2-02 / #W2-03 / #W2-04코드 작성 시신규 3 Importer 각자 BOM trim 1회만
CP9-8Dictionary 직렬화 금지 (List<Row> 저장 + [NonSerialized] Dict OnEnable lazy build)#W2-02 / #W2-03 / #W2-07SO 필드 작성 시Inspector에서 Dict 필드 표시 0건 확인
CP9-9Enum underlying type = int 유지 (W2) — DOTS byte 전환 Sp02+#W2-01 (Grade/MobKind/RewardType)enum 선언 시: int 명시 또는 default 그대로
CP9-10Editor Importer = 결정론, System.Random 금지#W2-02 / #W2-03 / #W2-04 / #W2-05Importer 작성 시System.Random grep 0건
CP9-11Addressables Rewards 그룹 — FindGroup 후 없으면 CreateGroup (Sp00 패턴 복제, TranscendentStageImporter.cs:325)#W2-02 (최초 등록) / #W2-03 / #W2-04 (재등록)첫 Import 실행 시Addressables 창에서 그룹 Rewards 1개만 (중복 없음)

커버리지: 11/11 (전 항목이 W2 #W2-01~10 중 1건 이상에 매핑됨)


§3. 신규 파일 14개 + 신규 폴더 3개 명세 (PD 경로 승인 완료)

3.1 신규 폴더 3개 (PD 사전 승인 완료 2026-05-02)

#경로생성 시점사유
1Unity6/Assets/_Project/Scripts/Runtime/Rewards/#W2-08 작업 중 (MilestoneGranter.cs 작성 시 자동)Granter Runtime 격리 (CP9-5 네임스페이스 GodBlade.Runtime.Rewards)
2Unity6/Assets/_Project/Tests/Editor/#W2-06 작업 중 (GodBlade.Tests.Editor.asmdef 작성 시 자동)테스트 asmdef 격리 (DQ4 신설)
3Unity6/Assets/_Project/Data/Rewards/#W2-02 첫 Import 실행 시 (Importer 자동 생성, OUT_DIR 상수)SO 에셋 저장 폴더 (Sp00 TranscendentStages/ 패턴 복제)

3.2 Data 어셈블리 신규 4 파일 (GodBlade.Data namespace)

#파일#W2-NN라인 (예상)InternalsVisibleTo
F-D1Unity6/Assets/_Project/Scripts/Data/GradeRemap.cs#W2-01~80 (enum 3 + GradeRemap + UnknownGradeException)부착 금지 (public enum)
F-D2Unity6/Assets/_Project/Scripts/Data/DropRateTableSO.cs#W2-02~120부착 금지 (CP9-3 단일 선언 유지)
F-D3Unity6/Assets/_Project/Scripts/Data/MilestoneRewardCatalogSO.cs#W2-03~100부착 금지
F-D4Unity6/Assets/_Project/Scripts/Data/AffixPoolSO.cs#W2-04~80 (skeleton + 빈 valueEntries)부착 금지

3.3 Editor 어셈블리 신규 4 Importer (GodBlade.EditorTools namespace)

#파일#W2-NN메뉴TSV 경로
F-E1Unity6/Assets/Editor/Importers/DropRateTableImporter.cs#W2-02GodBlade/Data/Import Drop Rate Table TSVdesigns/transcendent_drop_table.tsv
F-E2Unity6/Assets/Editor/Importers/MilestoneRewardImporter.cs#W2-03GodBlade/Data/Import Milestone Reward TSVdesigns/transcendent_milestone_reward.tsv
F-E3Unity6/Assets/Editor/Importers/AffixPoolImporter.cs#W2-04GodBlade/Data/Import Affix Pool TSVdesigns/affix_pool.tsv (또는 transcendent_affix_pool.tsv — game-designer 재확인)
F-E4Unity6/Assets/Editor/Importers/RewardImportAll.cs#W2-05GodBlade/Data/Import ALL(Stage → Drop → Milestone → Affix 순차 호출)

3.4 Runtime 어셈블리 신규 1 파일 (GodBlade.Runtime.Rewards namespace)

#파일#W2-NN신규 폴더
F-R1Unity6/Assets/_Project/Scripts/Runtime/Rewards/MilestoneGranter.cs#W2-08폴더 #1 (PD 승인)

3.5 Tests 어셈블리 신규 1 asmdef + 3 테스트 파일 (GodBlade.Tests.Editor namespace)

#파일#W2-NN신규 폴더
F-T0Unity6/Assets/_Project/Tests/Editor/GodBlade.Tests.Editor.asmdef#W2-06폴더 #2 (PD 승인)
F-T1Unity6/Assets/_Project/Tests/Editor/DropRateTableLookupTests.cs#W2-09동상
F-T2Unity6/Assets/_Project/Tests/Editor/GradeRemapTests.cs#W2-09동상
F-T3Unity6/Assets/_Project/Tests/Editor/MilestoneCatalogTests.cs#W2-09동상

3.6 SO 에셋 자동 생성 3 파일 (Importer 첫 실행 시)

#파일생성 시점Addressables 주소신규 폴더
A-1Unity6/Assets/_Project/Data/Rewards/DropRateTable.asset#W2-02 첫 실행Rewards/DropRateTable폴더 #3 (PD 승인)
A-2Unity6/Assets/_Project/Data/Rewards/MilestoneRewardCatalog.asset#W2-03 첫 실행Rewards/MilestoneRewardCatalog동상
A-3Unity6/Assets/_Project/Data/Rewards/AffixPool.asset#W2-04 첫 실행Rewards/AffixPool동상

총합: 신규 코드 파일 13개 (D 4 + E 4 + R 1 + T 4) + asmdef 1개 + SO 에셋 3개 = 17 entry, 신규 폴더 3개.


§4. namespace 컨벤션 (CP9-5 단일 진실)

어셈블리rootNamespace (asmdef)파일 내 namespace비고
GodBlade.DataGodBlade.Datanamespace GodBlade.Data (모든 4 신규 파일)하위 네임스페이스 미도입 (W2 한정)
GodBlade.EditorTools (asmdef 이름 = GodBlade.Editor)GodBlade.EditorToolsnamespace GodBlade.EditorTools (모든 4 신규 Importer)scaffold-sync-audit D1 정합 — asmdef 이름 ≠ 네임스페이스
GodBlade.RuntimeGodBlade.Runtimenamespace GodBlade.Runtime.Rewards (#W2-08 단일)하위 네임스페이스 도입 = Runtime만 (CP9-5)
GodBlade.Tests.Editor (신설)GodBlade.Tests.Editornamespace GodBlade.Tests.Editor (3 테스트 파일)Test Runner 인식 + defineConstraints: ["UNITY_INCLUDE_TESTS"]

가드 규칙:


§5. 오늘(2026-05-02) ALL IN 사이클 변동 흡수 영향 표

#변동원천 문서W2 영향사유
1어픽스 풀 v1.2 → v1.3 (35 → 36 어픽스)affix_pool_sp04_supplement_v1.md v1.3 §1.6W2 무영향스키마(AffixSkeletonRow 6 등급 행) 그대로 — 36어픽스는 Sp04 W1 본 풀 영역, W2는 6 등급 뼈대만
2200F 4.21배 → 약 4.20배 (-0.2%)affix_pool_sp04_supplement_v1.md v1.3 §2.2W2 무영향자기검증 게이트(드롭률 합 1.000±0.001)는 어픽스 곱 무관
3AFX_36 신규 stat_key AreaDebuffResistPctsp04_w1_preflight.md v1.2 §1.3W2 무영향Sp04 #04 Calculator 확장 영역 — W2 어픽스 뼈대 SO 에는 stat_key 컬럼 없음 (AffixSkeletonRow = grade/slot/value 범위만)
4AFX_33 복합 stat_key AttackSpeedSlowImmunityWithBonusPctsp04_w1_preflight.md v1.2 §1.3 (D-7 시점 code-lead 협의)W2 무영향분리 메서드 적용 여부 = Sp04 D-7 (2026-06-08) 박세린 ↔ 정현우 협의 — 본 W2 범위 외
5시놉시스 v2.3 D-2.9~D-2.14 6건 갱신sp04_w1_preflight.md v1.2 §7.3W2 무영향어픽스 풀 직접 영향 0건 (Tier 60 시즌 패스 매핑 1건은 Sp05+ 영역)

총평: 오늘 사이클 변동 5건 모두 Sp04+ 영역 흡수, W2 (Sp01) 범위 무영향. PD가 W2 진입 GO 판정 시 변동 흡수 부담 0.


§6. Sp00 회귀 2건 재발 방지 가드

6.1 회귀 A — CS0246 (Unity.ResourceManager 누락)

6.2 회귀 B — CS0579 (InternalsVisibleTo 중복 선언)

그렙 명령 1줄 (Windows PowerShell): Get-ChildItem -Recurse -Filter *.cs Unity6\Assets | Select-String "\[assembly: InternalsVisibleTo" 기대 결과: 히트 1건 (TranscendentStageSO.cs:22), 외 0건.


§7. graphify Communities 매핑 (메인 분석 결과 흡수)

7.1 god nodes Top 10 (W2 직접 의존도)

assert() (2314) / Neon (1114, 1099) / ToArray() (774) / ContainsKey() (682) / IsValid() (664) / Max() (629) / Equals() (522) / ToList (493) / Min() (485)

해석: Top 10 = 라이브러리 / Burst Intrinsics / LINQ / Dictionary 표준 메서드. W2 신규 13 코드 파일 직접 의존 0건 (단, ContainsKey() / Equals() 는 DropRateTableSO.GetDropRate 내부 Dictionary lookup에서 간접 사용 — 이는 무해, Sp00 TranscendentStageCatalogSO._byCode 패턴과 동일).

7.2 W2 핵심 의존 Communities (Addressables 4개 + Tests 1개)

Community영역W2 의존 작업위험도
Community 4 (1371 nodes)AddressableAssetEntry / UnityEditor.AddressableAssets.Settings#W2-02/-03/-04/-05 (그룹 등록)LOW — Sp00 패턴 복제 (TranscendentStageImporter.cs:325 FindGroup 검증됨)
Community 5 (1392 nodes)AddressableAssetGroupInspector / UnityEditor.AddressableAssets.GUI#W2-02/-03/-04 (그룹 인스펙터 접근)LOW — Inspector 시각 확인만
Community 14 (454 nodes)AddressablesAssetPostProcessor / AssetPostprocessor#W2-02/-03/-04 (SO 자동 등록 후 reimport)LOW — Unity 자동 실행, 직접 호출 0
Community 22 (513 nodes)DataBuilderTest / GroupTemplateTestObj / UnityEditor.AddressableAssets.Tests#W2-09 (테스트 작성 시 참조 가능)LOW — Edit 모드 단위 테스트만
Community 1 (1003 nodes)Tests.Editor / UnityEditor.TestTools / Unity.Mathematics#W2-06/-09 (Tests asmdef + 5~8개 테스트)LOW — defineConstraints: ["UNITY_INCLUDE_TESTS"] 격리

7.3 모니터 대상 결론


§8. D+0 (2026-05-11 월요일 오전) PRINT-AND-CHECK 게이트 11/11

사용법: 이 페이지 책상에 출력. 11 체크박스 진행 → GO/NO-GO 판정 표 작성. 패치 1~2h 버퍼 포함.
+--------------------------------------------------------------+
|  Sprint 01 W2 D+0 진입 게이트 (2026-05-11 Mon, 오전)         |
+--------------------------------------------------------------+

[ ] G-W2.1 (CP9-1) : GodBlade.Tests.Editor.asmdef 신설 시 references 6종
                     (UnityEngine.TestRunner / UnityEditor.TestRunner /
                      GodBlade.Data / GodBlade.Runtime / GodBlade.Editor /
                      Unity.ResourceManager) 처음부터 포함 준비
                     → 검증: #W2-06 작업 직후 Test Runner 창 인식 확인

[ ] G-W2.2 (CP9-2) : GodBlade.Editor.asmdef line 8 "Unity.Addressables.Editor"
                     변경 0 (read-only)
                     → 검증: Get-Content GodBlade.Editor.asmdef | Select-String
                       "Unity.Addressables.Editor"
                     → 기대: 1건 히트

[ ] G-W2.3 (CP9-3) : InternalsVisibleTo 단일 선언 유지
                     → 검증: TranscendentStageSO.cs:22 1건만, 신규 4 SO 0건
                     → 가드 4회 (CS0579-1~4) 인라인 편입 완료
                     → 기대: 그렙 히트 1건

[ ] G-W2.4 (CP9-5) : 네임스페이스 - 4 Importer 모두 GodBlade.EditorTools /
                     1 Granter는 GodBlade.Runtime.Rewards 명시
                     → 검증: #W2-05 직후 #가드-네임스페이스 그렙 5회

[ ] G-W2.5 (CP9-6) : TSV Trim() 적용 - CRLF/LF 잔여 0
                     → 검증: 3 Importer 첫 실행 후 콘솔 BOM/CRLF 경고 0

[ ] G-W2.6 (CP9-8) : Dictionary 직렬화 0 - List 저장 + [NonSerialized] Dict
                     OnEnable lazy build
                     → 검증: 3 SO 에셋 Inspector에서 Dict 필드 표시 0

[ ] G-W2.7 (CP9-11): Addressables Rewards 그룹 단일 - FindGroup 후 CreateGroup
                     → 검증: Addressables 창에서 Rewards 그룹 1개만, 중복 0

[ ] G-W2.8 (DropRate 합) : 드롭률 합 1.000 ± 0.001 (10 버킷 x mob)
                     → 검증: #W2-02 첫 Import 후 콘솔 SUM 로그 OK
                     → FAIL: TSV 60행 재검수 (game-designer 회수)

[ ] G-W2.9 (TBD 14건)    : MilestoneRewardCatalog TBD_* prefix 14행 IsPlaceholder=true
                     → 검증: #W2-03 첫 Import 후 콘솔 Warn 14건

[ ] G-W2.10 (Tests Green): 5~8개 Edit 모드 테스트 Green
                     → 검증: Test Runner Run All → Pass 5+ / Fail 0
                     → 핵심: GradeRemap_RareLegacy_MapsToEpic_NotRare 통과

[ ] G-W2.11 (Console 0)  : Unity 에디터 연 상태 모든 파일 저장 후
                     Console 새 에러 0
                     → 검증: Console Clear -> 4 SO + 4 Importer + 1 Granter +
                       3 Tests 저장 -> 새 에러 0
                     → FAIL: §6 회귀 A/B 또는 §9 11체크 누락 점검 +
                       1~2h 패치 버퍼 활용

+--------------------------------------------------------------+
|  GO/NO-GO 판정                                              |
+--------------------------------------------------------------+
| 11/11 통과       : [ ] GO -> #W2-01 착수                    |
| 9~10/11 통과     : [ ] CONDITIONAL GO -> 1~2h 패치 버퍼 +   |
|                       FAIL 항목 1~2건 보강 후 재진입       |
| 8/11 이하 통과    : [ ] NO-GO -> PD 에스컬레이션 +          |
|                       sprint-01.md #PM-01 D+7 점검 연기    |
+--------------------------------------------------------------+
| 결정자  : code-lead (정현우) 자체 판정 + PM 보고            |
| 결정일  : 2026-05-11 (Mon) 오전                             |
| 패치 버퍼: 1~2h (sprint-01.md #W2-10 명시,                 |
|            메모리 feedback_codelead_review_compile_verify) |
+--------------------------------------------------------------+

§9. 잔여 미해결 / 인계 사항

9.1 W2 내 인지만 (조치 없음)

  1. TSV 경로 차이 인지 (D4 drift, scaffold-sync-audit §4.3)
  1. AffixPool TSV 파일명 재확인 (#W2-04 시작 시)

9.2 Sprint 02 인계 사항 (DQ3 이월)

  1. TsvReader 공통화 = R-W2-2 회피 이월
  1. MilestoneGranter.Award(200) 활성화 = Sp02 이월

9.3 packages-lock 자동 해석 (D2 drift, 영향 0)

  1. com.unity.test-framework 1.4.5 → 1.6.0 builtin 자동 해석

§10. dots-platform 인수인계

본 W2 PR 범위 내 인계 사항 = 0건

항목code-lead (정현우) 책임dots-platform (류재현) 영역W2 인계
DropRateTableSO Dictionary lookup✅ #W2-07 (GetDropRate O(1))—인계 0
AffixPoolSO 6행 skeleton✅ #W2-04 (List + 빈 valueEntries)—인계 0
DOTS Blob 전환 (BlobArray<DropRateRow> 등)—Sp02 이후 측정 후 류재현 판단Sp02+ 측정 결과에 따라 분업 협의
멀티 플랫폼 SDK / IAP / 광고—류재현 전담W2 무관 (Phase 2 후반)

측정 트리거 (Sp02 이후 dots-platform 호출 조건):


(끝, 2026-05-02 code-lead 정현우)