← 자료실/sprintsLOW

Sprint 01 W1 — 드라이런 리허설 (2026-04-21)

sprints/sprint-01-dry-run-2026-04-21.md

Sprint 01 W1 — 드라이런 리허설 (2026-04-21)

작성: 2026-04-21 (code-lead) · 대상: sprints/sprint-01.md §3 W1 태스크 #01~#05 문서 상태: v1.0 목적: 2026-05-04 실제 Sprint 01 킥오프 전 실행 시뮬레이션으로 블로킹·회귀 리스크 사전 노출 범위: 실행 시뮬레이션만. 실제 코드 0줄 (Unity6/ 건드리지 않음). 문서만 작성 감사 기준: sprint-01-w2-importer-design.md v1.0 APPROVED · shared-checkpoints.md v1.0 · scaffold-sync-audit-2026-04-21.md · d8-stat-key-validation-2026-04-21.md 원칙: Sp01 설계 결정 변경 제안 금지 (v1.0 APPROVED 고정). 감지·권고만.

§0. TL;DR (PD 1분)

항목값
판정Yellow-Green (킥오프 GO. 단 1건 선제 가드 권장)
실행 시뮬레이션 태스크 수5건 (#01~#05)
예상 공수 합계 (설계 기준)6.0h (#01 1.0h + #02 2.0h + #03 1.5h + #04 1.0h + #05 0.5h)
실공수 예상 밴드6.5~9.0h (회귀 패치 0.5~1.5h + TSV 경로 해석 가드 0.5h 가중)
최상위 리스크 3건R-DR-01, R-DR-02, R-DR-03 (§0.2)
Sp00 회귀 2건 재현 확률Low (CS0246) / Medium (CS1061) — §9 상세

§0.1 결론 한 줄

Sp01 W1 태스크 #01~#05는 Happy Path에서 6.5~9.0h 구간 내 완주 가능. 주된 블로킹 축은 **#02 DropRateTableImporter 작성 시 UnityEditor.AddressableAssets.* 사용에 따른 Data 어셈블리 경계 오염과 BOM trim 이중 처리**. CS0579(InternalsVisibleTo 중복)는 #02~#04 SO 3개 신설 구간에서 재발 위험 Medium — PR 머지 전 grep 1회로 차단 가능.

§0.2 최상위 리스크 3건

  1. R-DR-01 [Medium · 회귀 CS0579 재현] — #02/#03/#04 SO 3종 신설 시 TranscendentStageSO.cs:22 의 [assembly: InternalsVisibleTo("GodBlade.Editor")] 패턴을 습관적으로 복제하면 어셈블리 내 중복 → CS0579. Sp00 회귀 B(CS1061)와 다른 에러 코드지만 동일 근본 원인(Data 어셈블리 InternalsVisibleTo 관리). 체크포인트 ⭐ CP-M02 에 정확히 해당.
  2. R-DR-02 [Medium · TSV 경로 해석 drift] — Sp00 TranscendentStageImporter.ResolveTsvPath 는 data_extracted/ 폴더 탐색. 신규 3 Importer는 designs/ 폴더 대상. scaffold audit D4 식별됨. 하드코딩 경로 상수 실수 시 EditorUtility.DisplayDialog("TSV Not Found") 로 조용히 리턴 → Importer 실패 원인 파악에 시간 낭비.
  3. R-DR-03 [Low-Medium · 네임스페이스 혼동] — scaffold rootNamespace = GodBlade.EditorTools 이나 설계 문서 3건 전반이 GodBlade.Editor.* 로 표기(audit D1). Unity 에디터 파일 신규 생성 시 namespace GodBlade.Editor 자동 삽입되면 rootNamespace 매칭 실패. 파일 최상단 namespace GodBlade.EditorTools 로 명시적 선언 필수. §9 CP-M06.

§0.3 사전 완화 액션 3건 (버퍼 기간, 2026-05-03 이전)

  1. A1 [30분, 버퍼 D-1 2026-05-03] — 2026-05-04 킥오프 오전 1시간을 "asmdef/InternalsVisibleTo 사전 점검 세션"으로 고정. Unity6/ 에디터 열어 기존 3 asmdef Console 에러 0 확인 + TranscendentStageSO.cs:22 단일 선언 grep 재확인 + GodBlade.EditorTools 네임스페이스 파일 3개 최상단 확인. scaffold-sync-audit §7 Go/No-Go 체크리스트 7건 수행.
  2. A2 [15분, 버퍼 D-1] — TSV 경로 상수 템플릿 1줄 미리 메모 작성: "../../designs/transcendent_drop_table.tsv" (Unity 프로젝트 기준 상대경로). Sp00 Importer ResolveTsvPath (line 125) 로직 재활용 패턴 확인. 실제 작성은 #02 태스크에서.
  3. A3 [10분, 버퍼 D-1] — .claude/ 작업 공간에 "Data 어셈블리 신규 파일 체크리스트" 쪽지 확보: ①namespace GodBlade.Data ②[assembly: InternalsVisibleTo(...)] 복제 금지 ③using UnityEditor 금지(#if UNITY_EDITOR 필수) ④blittable 필드만. #02~#04 시작 전 매번 확인.

§1. Sprint 01 W1 태스크 재확인 표

원천: sprints/sprint-01.md §3 W1 블록 (#01~#05)
#제목담당예상 공수선행산출물
#01Grade / MobKind / RewardType enum + GradeRemap.cscode-lead1.0h(없음)Assets/_Project/Scripts/Data/GradeRemap.cs 1개
#02DropRateTableSO 클래스 + 60행 Import 성공code-lead2.0h#01SO 1 + Importer 1 + .asset 1 + Addressables 엔트리 1
#03MilestoneRewardCatalogSO + 22행 Import 성공code-lead1.5h#01SO 1 + Importer 1 + .asset 1 + Addressables 엔트리 1
#04AffixPoolSO + 6행 Import 성공 (뼈대만)code-lead1.0h#01SO 1 + Importer 1 + .asset 1 + Addressables 엔트리 1
#05GodBlade/Data/Import ALL 메뉴 1개code-lead0.5h#02, #03, #04RewardImportAll.cs 1개 (Sp00 Stage 호출 포함)

§1.1 W1 TSV 실사 행수 대조 (2026-04-21 시점)

TSV헤더 포함 행수데이터 행수설계 기대Gap
transcendent_drop_table.tsv616060행 (5 버킷 × 2 mob × 6 grade)✅
transcendent_milestone_reward.tsv232222행 (10/50/100/150/200층)✅
transcendent_affix_pool.tsv766행 (6 등급 뼈대)✅

→ 3개 TSV 전부 설계 수치와 일치. Import 시 행수 자기검증 구현 가능.


§2. 태스크 #01 — Grade / MobKind / RewardType enum + GradeRemap

§2.1 예상 Happy Path (30~60분 단위)

  1. [10분] Assets/_Project/Scripts/Data/GradeRemap.cs 신규 생성 (Unity 에디터 Create → C# Script 또는 파일 시스템 직접 생성).
  2. [10분] 파일 최상단 namespace GodBlade.Data 명시. #if UNITY_EDITOR 가드 불필요(런타임 enum). using 최소화 — System 만.
  3. [15분] Grade enum 6종 선언 (설계 §3.2 표):
  1. [5분] MobKind enum 2종 (Normal=0 / Boss=1) 선언.
  2. [10분] RewardType enum 8종 선언 (설계 §3.2 전체).
  3. [10분] GradeRemap static class + TryFromLegacy(string, out Grade) + TryParseNew(string, out Grade) 구현. Dictionary<string, Grade> 2개 static readonly.
  4. [5분] UnknownGradeException : System.Exception sealed class + Literal/SourceTsv/RowNumber 3 필드.
  5. [5분] 저장 + Unity 에디터 포커스 복귀 → Console 에러 0 확인.

총 1h 예상. 설계 공수와 일치.

§2.2 예상 블로킹·회귀 리스크

리스크심각도근본 원인재현 조건대응
CS0246 GradeRemap 미발견 (다른 파일에서 import 안 됨)LowGodBlade.Data asmdef가 autoReferenced: true 확인 필요#02 작성 시 using GodBlade.Data; 추가 누락scaffold audit §1.2 확인: autoReferenced: true — Runtime/Editor 에서 자동 참조됨. OK
CS0104 Grade 모호함 — 다른 어셈블리에 동명 enumVery LowUnity 내장 네임스페이스 충돌 없음 확인됨—무시
코멘트 부재로 원본 Rare 혼동Medium (휴먼 에러)Grade.Rare = 원본 Superior 의미. 실수로 원본 Rare ↔ 신규 Rare 매핑TryFromLegacy("Rare", out g) 구현 시 g = Grade.Rare 잘못 배정설계 §3.3 표 하드코딩 시 4건 매핑 전수 재확인 + 코멘트 3줄 필수

Sp00 회귀 재현 가능성:

§2.3 선결 조건 체크

§2.4 Rollback 지점


§3. 태스크 #02 — DropRateTableSO + 60행 Import (가장 큰 태스크)

§3.1 예상 Happy Path (30~60분 단위)

Phase A: SO 정의 (45분)

  1. [10분] Assets/_Project/Scripts/Data/DropRateTableSO.cs 신규 생성. namespace GodBlade.Data 명시.
  2. [5분] [CreateAssetMenu] 부착 (Sp00 패턴 복제). fileName = "DropRateTable", menuName = "GodBlade/Data/Drop Rate Table".
  3. [10분] [System.Serializable] struct DropRateRow 정의: int floorMin / int floorMax / MobKind mob / Grade grade / float rate.
  4. [10분] readonly struct DropRateKey : IEquatable<DropRateKey> 정의 — byte 3개(Bucket/Mob/Grade) + GetHashCode 비트 압축 + Equals.
  5. [10분] [SerializeField] List<DropRateRow> rows = new() + [NonSerialized] Dictionary<DropRateKey, float> _lookup + OnEnable lazy build 메서드.

Phase B: Importer 골격 (45분)

  1. [10분] Assets/Editor/Importers/DropRateTableImporter.cs 신규 생성. namespace GodBlade.EditorTools 명시(.Editor 아님 — D1 drift 방지).
  2. [5분] #if UNITY_EDITOR 가드 + using UnityEditor; using UnityEditor.AddressableAssets; using UnityEditor.AddressableAssets.Settings; using UnityEditor.AddressableAssets.Settings.GroupSchemas; (Sp00 Importer 참조 복제).
  3. [10분] [MenuItem("GodBlade/Data/Import Drop Rate Table TSV")] public static void Import() 시그니처 작성.
  4. [10분] ResolveTsvPath 로컬 헬퍼 — "../../designs/transcendent_drop_table.tsv" 후보 + Unity Application.dataPath 결합 (Sp00 ResolveTsvPath:125 로직 복제).
  5. [10분] ReadTsv — File.ReadAllLines + BOM trim + Split('\t') + 헤더 검증 (expected 6열). Sp00 ReadTsv:156 복제 + .Trim() 보강 (CP-M07).

Phase C: 변환 + 자기검증 (30분)

  1. [15분] Row → DropRateRow 변환. GradeRemap.TryParseNew 호출 + MobKind 파싱 ("normal"/"boss" 문자열 → enum). int.Parse + float.Parse(CultureInfo.InvariantCulture).
  2. [10분] 드롭률 합 자기검증: 5 bucket × 2 mob = 10 그룹 순회 + |sum - 1.000| > 0.001 체크 + Debug.LogError + EditorUtility.DisplayDialog.
  3. [5분] AssetDatabase.CreateAsset / AssetDatabase.SaveAssets. OUT_DIR = "Assets/_Project/Data/Rewards" 없으면 Directory.CreateDirectory.

Phase D: Addressables 등록 (20분)

  1. [10분] RegisterAddressables 로컬 헬퍼 — AddressableAssetSettingsDefaultObject.Settings + FindGroup("Rewards") ?? CreateGroup(...) + CreateOrMoveEntry + entry.address = "Rewards/DropRateTable" + entry.SetLabel("reward-table", true, true). Sp00 RegisterAddressables:310 복제.
  2. [5분] 메뉴 실행 → Console 로그 [DropRateTableImporter] Loaded 60 rows. 10/10 buckets sum=1.000 OK.
  3. [5분] Assets/_Project/Data/Rewards/DropRateTable.asset Inspector 열기 → rows 60행 육안 확인.

총 2.3h 예상 (설계 2.0h + 0.3h 실행 오버헤드).

§3.2 예상 블로킹·회귀 리스크

리스크심각도근본 원인재현 조건대응
⭐ CS0579 [InternalsVisibleTo] 중복 정의MediumSp00 패턴 습관적 복제 — DropRateTableSO.cs 상단에도 #if UNITY_EDITOR + [assembly: InternalsVisibleTo("GodBlade.Editor")] 붙임파일 간 grep 없이 복사사전 완화 A3 체크리스트. 절대 복제 금지 (CP-M02)
⭐ CS0246 AddressableAssetSettingsDefaultObject 미발견Low실제로는 Sp00에서 이미 GodBlade.Editor.asmdef:9 Unity.Addressables.Editor 참조 확인됨 (scaffold audit §1.4)신규 Importer를 Data 어셈블리에 실수로 생성하면 발생파일 위치 Assets/Editor/Importers/ 확정 + namespace GodBlade.EditorTools 확인
BOM 이중 trimLow-MediumSp00 TranscendentStageImporter.ReadTsv:156 가 BOM trim 보유. 신규 Importer에 또 넣으면 이중 처리 — 기능상 무해하나 공통 TsvReader 이월(DQ3) 시 리팩터 비용3개 Importer 각자 BOM trim 복제CP-M08: BOM trim은 각 Importer 내 1회만, 공통화는 Sprint 02 이월 명시
float.Parse 로케일 이슈Medium한글 Windows에서 float.Parse("0.700") 가 쉼표/점 혼동 가능CultureInfo.InvariantCulture 미지정Sp00 CreateOrUpdate:229 에 이미 CultureInfo.InvariantCulture 사용 확인 — 복제 시 빠뜨리지 말 것
드롭률 합 자기검증 실패Mediumtranscendent_drop_table.tsv 60행 중 실제 합이 1.000 ± 0.001 이 아닐 가능성TSV 원본 오류드라이런 권고: #02 시작 전 TSV 원본을 수치 합산 파이썬 스니펫으로 10개 그룹 사전 검증. 실패 시 game-designer 에스컬레이션. 본 드라이런은 코드 0줄 원칙으로 실제 합산은 하지 않음
Addressables 그룹 중복 생성 (CP-M12)Lowsettings.FindGroup("Rewards") 생략재실행 시 중복 그룹 생성Sp00 RegisterAddressables:310 에 FindGroup 분기 존재 — 복제 시 유지
Dictionary<K,V> 직렬화 시도LowUnity Dictionary 직렬화 안됨[SerializeField] Dictionary<...> 실수CP-M09: [NonSerialized] 필수, OnEnable lazy build

Sp00 회귀 재현 가능성:

§3.3 선결 조건 체크

§3.4 Rollback 지점


§4. 태스크 #03 — MilestoneRewardCatalogSO + 22행 Import

§4.1 예상 Happy Path (30~60분 단위)

  1. [30분] MilestoneRewardCatalogSO.cs 정의 (Sp00 + #02 패턴 복제) — List<MilestoneRewardRow> rows + HashSet<int> _milestoneFloors ([NonSerialized]).
  2. [20분] MilestoneRewardRow struct — int floor / string milestoneName / RewardType type / string rewardCode / int count / Grade? gradeFallback / string notes. Grade? nullable 주의 (설계 §1.3).
  3. [20분] MilestoneRewardImporter.cs — TSV 7열 파싱 + RewardType 문자열 파싱 ("currency_gold" → RewardType.CurrencyGold).
  4. [10분] TBD_* prefix 감지 + Debug.LogWarning 14건 반복 출력 (CP4). IsPlaceholder 계산 프로퍼티 구조체에 내장.
  5. [10분] Addressables 등록 (Rewards/MilestoneRewardCatalog 주소) — #02 패턴 복제.

총 1.5h 예상 (설계와 일치).

§4.2 예상 블로킹·회귀 리스크

리스크심각도근본 원인재현 조건대응
Grade? gradeFallback 직렬화MediumUnity 직렬화가 Nullable<Grade> 지원 안 함 (구버전에선) — Unity 2020+ 부터는 지원, Unity 6 확실하나 확인 필요Inspector에 필드 안 보임Unity 6 공식 문서 확인 필요. 대안: bool hasGradeFallback + Grade gradeFallback 2필드로 분리 가능. 드라이런 시점 검증 불가 — 실제 작성 시 첫 Row Import 후 Inspector 육안 확인 필수
RewardType 문자열 파싱 실패MediumTSV currency_gold / equipment_random 등 snake_case → enum PascalCase 변환 필요Enum.Parse 직접 사용 시 대소문자 mismatchDictionary<string, RewardType> 매핑 테이블 신설. 매핑 없으면 RewardType.Unknown + Debug.LogWarning
IsPlaceholder 속성 vs 필드Low계산 프로퍼티로 구현 시 Unity 직렬화 포함 안 됨 (정상). 하지만 Inspector에서 표시 원하면 [SerializeField] 필드 필요편의성 문제계산 프로퍼티 유지 (설계 §5.3)
**TBD_* 14건 로그 flooding**LowConsole 스팸—Warn 수준으로 제한 + summary 1줄 추가 ("14 placeholders skipped")
CS0579 재발 (SO 2번째)Medium#02 에 이어 #03 SO에서도 InternalsVisibleTo 복제 유혹—⭐ CP-M02 최우선

Sp00 회귀 재현 가능성:

§4.3 선결 조건 체크

§4.4 Rollback 지점


§5. 태스크 #04 — AffixPoolSO + 6행 Import (뼈대만)

§5.1 예상 Happy Path (30~60분 단위)

  1. [20분] AffixPoolSO.cs 정의 — List<AffixSkeletonRow> rows + List<AffixValueEntry> valueEntries = new() (W2: 빈 리스트).
  2. [15분] AffixSkeletonRow struct + AffixValueEntry struct 필드 선언 (설계 §6.2, 211행 주입은 Sprint 02).
  3. [15분] AffixPoolImporter.cs — 9열 TSV 파싱. legacy_grade_map 컬럼은 string 그대로 저장 (메모용).
  4. [5분] Addressables 등록 (Rewards/AffixPool 주소).
  5. [5분] Smoke 확인: Inspector에서 valueEntries 빈 리스트 확인 (CP5/CP6 준수).

총 1h 예상 (설계와 일치).

§5.2 예상 블로킹·회귀 리스크

리스크심각도근본 원인재현 조건대응
⚠️ W2 범위 일탈 — 211행 실수치 주입 유혹Medium-High (휴먼)OptionItemRandom XML 이 Datasheets/ 에 접근 가능 → "지금 한 번에 하면 Sprint 02 가벼워진다" 유혹code-lead 독단Sprint 01 §5 R3 명시. PR 리뷰 시 valueEntries.Count == 0 diff 검사. 위반 시 PR 반려
legacy_grade_map 컬럼 파싱 — "Normal→Superior" 유니코드Low→ (U+2192) 포함. UTF-8 BOM 제거 후 정상 파싱 가능encoding 실수File.ReadAllLines 기본 encoding = UTF-8. OK
CS0579 재발 (SO 3번째)Medium#02/#03 에 이어 3번째 SO—⭐ CP-M02 최우선. 3번째에 피로도로 실수 확률 증가
Addressables 그룹 3개 엔트리 한 그룹 관리LowFindGroup("Rewards") 에 3개 엔트리 (Drop/Milestone/Affix) 집결 — 설계 §2.4실수로 신규 그룹 분리#02 와 동일 그룹명 "Rewards" 재사용 체크

Sp00 회귀 재현 가능성: CS0579 Medium (3번째 SO = 피로도 최고).

§5.3 선결 조건 체크

§5.4 Rollback 지점


§6. 태스크 #05 — GodBlade/Data/Import ALL 메뉴

§6.1 예상 Happy Path (30분)

  1. [10분] Assets/Editor/Importers/RewardImportAll.cs 신규 생성. namespace GodBlade.EditorTools.
  2. [10분] [MenuItem("GodBlade/Data/Import ALL (Stage → Drop → Milestone → Affix)", priority=10)] public static void ImportAll() 작성. 내부에서 Sp00 TranscendentStageImporter.Import() + DropRateTableImporter.Import() + MilestoneRewardImporter.Import() + AffixPoolImporter.Import() 4회 호출.
  3. [5분] 각 단계 사이 AssetDatabase.SaveAssets() + 로그 1줄.
  4. [5분] 메뉴 실행 → 4개 Importer 전체 순차 로그 확인.

총 0.5h 예상 (설계와 일치).

§6.2 예상 블로킹·회귀 리스크

리스크심각도근본 원인재현 조건대응
⚠️ Sp00 TranscendentStageImporter.Import 접근자MediumSprint 01 §4 B2 블로커로 사전 식별됨. Import() 가 public static 이면 호출 OK, private 이면 Sp00 수정 없이 호출 불가—드라이런 확인 결과: TranscendentStageImporter.cs:72 = public static void Import() → 호출 가능 ✅. 블로커 해소
ImportAll 중간 단계 실패 시 복구Low드롭 Import 실패했는데 마일스톤 Import 진행 → 부분 상태try/catch 블록 생략각 호출 사이 AssetDatabase.SaveAssets() + try/catch (Exception e) { Debug.LogError; return; }
메뉴 중복 등록LowMenuItem path 충돌—priority 지정 + 기존 Sp00 메뉴와 구분

Sp00 회귀 재현 가능성:

§6.3 선결 조건 체크

§6.4 Rollback 지점


§7. 통합 리스크 매트릭스

3축: 회귀 재현 확률 (행) × 블로킹 가능성 (열) × 태스크별 영향 (셀 값) 값 = Low (L) / Medium (M) / High (H) / Zero (-)

§7.1 태스크 × 리스크 유형 매트릭스

태스크CS0246 재현CS0579/1061 재현TSV 경로 drift네임스페이스 혼동W2 범위 일탈공수 초과 (>+50%)
#01 GradeRemap---L-L
#02 DropRateLMML-M
#03 MilestoneLMMLLL
#04 AffixPoolLMMLM-HL
#05 Import ALL---L-L

§7.2 리스크 합산 (태스크 단위 최대치)

태스크최상위 리스크권장 버퍼
#01네임스페이스 혼동 (L)+0.1h
#02CS0579 + TSV 경로 + 공수 초과 (M·M·M)+0.5~1.0h
#03CS0579 + TSV 경로 (M·M)+0.3~0.5h
#04W2 범위 일탈 (M-H) + CS0579 (M)+0.2h (코드 시간) + PR 리뷰 부담
#05(낮음)+0.1h

총 권장 버퍼: 1.2~2.0h → W1 실공수 밴드 6.5~9.0h (설계 6.0h + 버퍼).

§7.3 D+7 중간 점검 판정 기준 (#11 태스크)


§8. 실제 킥오프 시 사전 완화 액션 (최종 3건)

2026-05-04 킥오프 오전 최대 2시간 내 수행. 코드 0줄.

A1 — asmdef/InternalsVisibleTo 사전 점검 세션 (60분)

목적: Sp00 회귀 2건 재발 방지 레이어 실사. Go/No-Go §A~§D 7개 체크 수행.

작업:

  1. Unity 6 에디터 열기 → Project 창에서 asmdef 3개 선택 → Inspector에서 references 육안
  2. Console 새 에러 0 / Warning만 확인
  3. Unity6/Assets/ 전체 검색 [assembly: InternalsVisibleTo → 히트 1건 (TranscendentStageSO.cs:22)
  4. Sp00 SmokeTester 빈 씬에 붙이고 Play → [Smoke] Loaded 200 stages 로그 재확인
  5. 결과를 sprints/sprint-01.md §7 Go/No-Go 체크박스 7개 tick

산출: Sprint 01 킥오프 GO 확정 기록 1줄.

A2 — TSV 경로 해석 템플릿 메모 (15분)

목적: R-DR-02 (TSV 경로 drift) 사전 차단.

작업:

  // 예시 (실제 작성은 #02 태스크에서)
  private const string TSV_REL_PATH = "../designs/transcendent_drop_table.tsv";
  // 3개 후보 탐색: Application.dataPath, dataPath/.., ProjectRoot

산출: 경로 메모 1건 (커밋 파일 아님, 에이전트 작업 공간).

A3 — Data 어셈블리 신규 파일 체크리스트 (10분)

목적: R-DR-01 (CS0579) 사전 차단.

작업:

  1. namespace GodBlade.Data (파일 최상단)
  2. [assembly: InternalsVisibleTo(...)] 복제 절대 금지 (Data asmdef 전체에 이미 1건 존재)
  3. using UnityEditor 금지 (런타임/Data 어셈블리). 필요 시 #if UNITY_EDITOR 가드
  4. blittable 필드 유지 (int/enum/float/byte — DOTS 이식성)

산출: 체크리스트 1건.


§9. Sp00 회귀 2건 재현 리스크 태스크별 평가

§9.1 회귀 A — CS0246 Unity.ResourceManager 누락

원인: asmdef references 배열에서 Unity.ResourceManager 누락 → AsyncOperationHandle<T> 타입 해석 실패 복구분: GodBlade.Runtime.asmdef:7 / GodBlade.Editor.asmdef:9 (scaffold audit §1.3·§1.4)
태스크재현 확률근거
#01 GradeRemapZeroRuntime 타입 미사용. Data asmdef 는 Unity.ResourceManager 참조 불필요
#02 DropRateLowSO + Importer 모두 Addressables Editor API 사용, Runtime AsyncOperationHandle 미사용. Editor asmdef 이미 참조 유지
#03 MilestoneLow동상
#04 AffixPoolLow동상
#05 Import ALLZero새 타입 선언 없음
W2 #06 Tests.Editor asmdef 신설 (참고)High (별건)설계 §8.2 에서 UnityEngine.TestRunner + Unity.ResourceManager 누락 시 재발 — scaffold audit D7 (P1) 경고 항목. W1 범위 아니나 W2 첫 날 주의 필요

W1 전체 재현 확률: Low (Addressables 직접 사용 없음. #06 이 고위험 포인트지만 W2).

§9.2 회귀 B — CS1061 / CS0579 InternalsVisibleTo 관련

원인: internal 메서드가 어셈블리 경계 못 넘음 (CS1061) 또는 [assembly: InternalsVisibleTo] 중복 선언 (CS0579) 복구분: TranscendentStageSO.cs:22 단일 선언 유지 (scaffold audit §1.5)
태스크재현 확률근거
#01 GradeRemapZeroInternalsVisibleTo 불필요 (public enum + public static class)
#02 DropRateMediumSO 1번째 신설 — Sp00 패턴 습관적 복제 유혹. CP-M02 최우선
#03 MilestoneMediumSO 2번째 신설 — 같은 함정
#04 AffixPoolMediumSO 3번째 신설 — 피로도 최고, 실수 확률 최상
#05 Import ALLZeroSO 신설 없음

W1 전체 재현 확률: Medium — #02/#03/#04 3번 연속 SO 신설 = ⭐ CP-M02 매 PR 재확인 필수. grep 1회 (\[assembly: InternalsVisibleTo) 로 차단 가능.

§9.3 재현 방지 메커니즘 총 2건

  1. 구조적 가드: scaffold-sync-audit §1.5 "Unity6/Assets 전체 grep 결과 단일 지점" 불변식. 신규 파일 추가할 때마다 grep 재실행 → 1건 유지 확인.
  2. 프로세스 가드: shared-checkpoints.md ⭐ CP-M01·CP-M02 최상위 고정. Sprint 01 W1 서브셋 13개 중 #1·#2 위치. PR 머지 전 체크박스 필수.

§10. 메타정보


§11. 판정 요약

2026-05-04 Sprint 01 킥오프 → GO (Yellow-Green)


(끝 — v1.0, 2026-04-21 code-lead 작성)