← 자료실/sprintsLOW

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

sprints/sprint-02-w1-dry-run-2026-04-21.md

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

작성: 2026-04-21 (code-lead) · 대상: Sprint 02 W1 예상 태스크 (설계 문서 비추정 상태, 본 드라이런이 최초 도출) 문서 상태: v1.0 목적: 2026-05-18 Sprint 02 W1 실제 킥오프 전 실행 시뮬레이션으로 블로킹·회귀 리스크 사전 노출 범위: 실행 시뮬레이션만. 실제 코드 0줄 (Unity6/ 건드리지 않음). 문서만 작성 감사 기준: sprint-02-w2-prestige-tech-sketch.md v1.0 APPROVED · prestige_items_README.md v1.0 APPROVED · shared-checkpoints.md v1.0 · d8-stat-key-validation-2026-04-21.md v1.0 APPROVED · sprint-01-dry-run-2026-04-21.md v1.0 원칙: Sp02 설계 결정 변경 제안 금지 (v1.0 APPROVED 고정). 감지·권고만. PM의 W1 태스크 추정 플래그 해소 기여 필수.

§0. TL;DR (PD 1분)

항목값
판정Yellow (킥오프 GO 권장. 단 사전 완화 3건 + 태스크 순서 엄수 조건부)
Sp02 W1 태스크 도출 수7건 (#T01~#T07)
예상 공수 합계 (도출 기준)13.0h (로드맵 §5 "12~15h" 밴드와 정합)
실공수 예상 밴드13.5~17.0h (회귀 패치 1.0~2.0h + TsvReader 리팩터 오버런 0.5~2.0h)
최상위 리스크 3건R-DR-04 / R-DR-05 / R-DR-06 (§0.2)
Sp00+Sp01 회귀 3패턴 재현 확률Low (CS0246) / Medium (CS0579) / Medium (TSV 경로 drift) / Low (네임스페이스) — §10 상세
패턴 충돌 리스크Medium — SO 카탈로그(Sp01 W2 DQ1 옵션A) vs struct+List hot path(Sp02 W2 Q1 옵션B) 의도적 분기, 단 1주 간격으로 동일 개발자가 두 패턴을 연속 작성 → 혼동 유발 여지 (§13 특수 리스크)

§0.1 결론 한 줄

Sp02 W1 태스크 #T01~#T07은 Happy Path에서 13.5~17.0h 구간 내 완주 가능. 최대 블로킹 축은 #T01 TsvReader 공통화 시 Sp01 DropRateTableImporter / MilestoneRewardImporter / AffixPoolImporter 3종의 "이미 머지된 코드" 를 역으로 개편하는 리팩터 범위(설계상 TsvReader 공통화는 Sp01 W2 DQ3 이월 결정 = Sp02 W1 첫 과제). 나머지 #T02~#T06는 Sp01 W1 드라이런 경험칙(SO+Importer 쌍) 1:1 재활용으로 리스크 Medium 수준. #T07 stat_key 매핑 사전 검증은 Sprint 03 IdleRateMul 필드명 연동 첫 테스트로 반드시 #T06 테스트 직전 수행.

§0.2 최상위 리스크 3건

  1. R-DR-04 [High · TsvReader 공통화 범위 오버런] — Sp01 W2에서 DropRateTableImporter / MilestoneRewardImporter / AffixPoolImporter 3종 각자 File.ReadAllLines + BOM trim + Split('\t') 복제로 이미 Green 으로 머지됨. Sp02 W1 #T01 에서 TsvReader.cs 를 Editor/Importers/Shared/ 에 추출하면 Sp00 TranscendentStageImporter.cs 포함 4개 Importer의 Read 로직을 전부 호출부로 전환해야 함. 설계 §2.5 "Sprint 00 Importer는 동작 불변 — 새 공통 모듈을 호출하도록 최소 편집" 명시되어 있으나, 실측 시 diff 범위 4 파일 × 평균 20 lines = 80 lines + 각 Importer의 Row / ReadTsv / ValidateHeader 중복 제거. 리팩터 중 회귀 0건 유지 난이도 High. #T01 단독 PR 권장 + 회귀 테스트 실행 전제.
  1. R-DR-05 [Medium · PrestigeItemCatalogSO 14컬럼 TSV 파싱 피로도] — prestige_items.tsv 헤더 실측 = 14 컬럼 (item_id / tab / display_name_kr / display_name_en / effect_type / stat_key / curve_id / base_value / per_level_value / softcap_level / post_softcap_diminish / description / origin / notes). Sp01 W1 Drop=6열·Milestone=7열·Affix=9열과 비교해 최다 컬럼. PrestigeItemRow struct 설계문 §2.3 은 9개 필드만 명시 — 설계상 display_name_en / curve_id / description / origin / notes 5개 컬럼을 SO에 어떻게 흡수할지 명시 없음. 설계 준수 시 TSV 14열 중 9열만 SO 반영 + 5열은 Importer 시점 로그만. 이 결정 자체가 W1 중 PR 리뷰 포인트.
  1. R-DR-06 [Medium · pp_cost.tsv 별도 SO 이중화 우려] — prestige_pp_cost.tsv 61행(헤더 제외 60행, PD README §9 "Lv100까지 샘플링"). 설계 §2.2는 prestige_items.tsv 만 Importer 대상으로 명시, prestige_pp_cost.tsv 는 README 에서 PrestigeCalculator.GetCostForLevel(int level) 소비로만 언급 → W1에 SO화할지 W2에 Calculator 내장할지 결정 미명시. 기본 해석: W1 = PrestigePpCostTableSO (또는 정적 배열) 별도 Importer. 이 결정을 W1 중 발화 없이 진행하면 W2 Calculator 구현 시 병목 재발 위험. 킥오프 D-2에 PD 1줄 확인 필수.
[2026-04-21 해소] PD A2 결정 완료: (A2-1) = (a) 별도 PrestigePpCostTableSO 유지 (Sp01 개별 SO 패턴 계승). (A2-2 행수 gap) = False Positive. 실사 결과 TSV 데이터 행 = 61 (Lv1~50 선형 50 + Lv51 전환 마커 1 + Lv55·60·65·70·75·80·85·90·95·100 = 10 보존 레벨). prestige_items_README.md:232 은 이미 "중간 레벨(51,55,60..95) 생략행" 으로 11 보존 레벨 명시하여 TSV와 일관. 본 드라이런 "헤더 제외 60행" 은 code-lead 오계수. README 수정 불필요 / TSV 수정 불필요 / T04 스코프 (a) 확정.

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

  1. A1 [30분, 버퍼 D-1 2026-05-17] — Sp01 W2 최종 머지된 3 Importer 의 ReadTsv / BOM trim / Split('\t') 라인 정확 좌표(파일·라인 번호) 메모 확보. #T01 리팩터 diff 사전 스케치. 코드 0줄 원칙 준수 → 메모만.
  2. A2 [15분, 버퍼 D-1] — PD에게 1줄 질의: "prestige_pp_cost.tsv 는 (a) 별도 PrestigePpCostTableSO + Importer 인가 (b) PrestigeCalculator 내장 정적 배열인가 (c) PrestigeItemCatalogSO 의 보조 필드인가". 1줄 답 받으면 #T04 스코프 확정. 현 드라이런은 (a) 가정 (가장 방어적).
  3. A3 [20분, 버퍼 D-1] — d8-stat-key-validation-2026-04-21.md Importer 매핑표(6행) 인쇄/고정. #T07 테스트 작성 시 IdleYieldPct → IdleRateMul 매핑 누락 감지 레일. Sp01 드라이런 A3(Data 어셈블리 신규 파일 체크리스트) 재활용 + 1항목 추가.

§1. Sprint 02 W1 태스크 도출 (PM 추정 공백 해소)

§1.1 도출 근거

§1.2 Sp02 W1 태스크 7건 추정 테이블

#제목담당예상 공수선행산출물
#T01TsvReader.cs 공통화 + Sp01/Sp00 Importer 4종 호출 전환 (회귀 0 유지)code-lead3.0h(없음)Editor/Importers/Shared/TsvReader.cs 1개 신규 + TranscendentStageImporter.cs / DropRateTableImporter.cs / MilestoneRewardImporter.cs / AffixPoolImporter.cs 4 파일 minimal diff
#T02PrestigeTab / PrestigeCurveId / PrestigeEffectType / PpChannel enum 4종 선언code-lead0.75h(없음)Assets/_Project/Scripts/Data/Prestige/PrestigeEnums.cs 1개 (또는 분할 2파일)
#T03PrestigeItemCatalogSO + PrestigeItemRow struct (30 row 저장용)code-lead1.5h#T02Assets/_Project/Scripts/Data/Prestige/PrestigeItemCatalogSO.cs 1개 + .asset 1개 (Import 후)
#T04PrestigePpCostTableSO 별도 SO + 60 row 저장 또는 PrestigeCalculator 정적 배열 (A2 결정 대기)code-lead1.5h#T02 (enum)SO 1개 + .asset 1개 또는 정적 상수 1개 (결정 결과에 따라 가변)
#T05PrestigeItemImporter.cs — 30행 Import + §6 5개 자기검증 CP-T1~T5code-lead2.5h#T01, #T02, #T03Assets/Editor/Importers/PrestigeItemImporter.cs 1개 + 30 row .asset 주입 + Addressables Prestige/ItemCatalog 등록
#T06PrestigePpCostImporter.cs (A2 결정이 (a) 일 때만) — 60 row Import + 단조 증가 자기검증code-lead1.0h#T01, #T02, #T04Assets/Editor/Importers/PrestigePpCostImporter.cs 1개 + .asset + Addressables Prestige/PpCostTable
#T07GodBlade/Data/Import ALL 메뉴 확장 (Sp01 W1 #05 재편집) + stat_key 매핑 상수 사전 배치code-lead0.75h#T05, #T06RewardImportAll.cs minimal edit + PrestigeStatKeyMap.cs 1개 (d8 매핑 6행 하드코딩)
(참고)Sp02 W1 테스트 작성은 W2 이월 — 테스트 asmdef GodBlade.Tests.Editor 는 Sp01 W2 신설 완료, W2에서 PrestigeCalculator 등장 후 테스트 묶음 7건 작성———

총 공수: 11.0h (A2=(b) 시) ~ 13.0h (A2=(a) 시)

로드맵 §5 추정 12~15h 밴드와 정합: #T04 결정이 (a) 이면 13.0h (밴드 하한 근처), (b) 이면 11.0h (밴드 미달 → W1 여유 발생, W2 선행 가능).

§1.3 태스크 순차 그래프

#T01 (TsvReader 공통화) ──┐
                          ├──> #T05 (PrestigeItemImporter) ─┐
#T02 (enum 4종) ──> #T03 (CatalogSO) ──┘                    │
                                                             ├──> #T07 (ALL 메뉴 + stat_key 매핑)
                  #T02 ──> #T04 (PpCostTableSO) ──> #T06 ──┘

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

TSV헤더 포함 행수데이터 행수설계 기대Gap
prestige_items.tsv313030행 (Offense 10 + Defense 10 + Utility 10)✅
prestige_pp_cost.tsv626160행 (Lv1~100 비선형 샘플링)⚠️ +1
prestige_effect_matrix.tsv1110빌드 시뮬 (PD 검증, code-lead 소비 안 함)N/A

⚠️ prestige_pp_cost.tsv 61 데이터행 vs README §0 TL;DR "Lv100 누적 102,500 PP" 단일 언급. README §9 ASCII 그래프는 Lv1/5/10/20/28/50/65/85/100 등 비선형 샘플링 지시 → 60행이 정상이나 61행 관찰. 드라이런 시점 추가 확인 불가(코드 0줄 원칙). #T04/#T06 착수 시 TSV 원본 첫 검증에서 행 수 기대값 재확정 필요 — game-designer 1줄 확인 + 설계 기대값 명시 (A2 의사결정과 동반).


§2. 태스크 #T01 — TsvReader.cs 공통화

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

  1. [20분] Sp01 W2 최종 머지 상태 4 Importer 열람 (TranscendentStageImporter.cs / DropRateTableImporter.cs / MilestoneRewardImporter.cs / AffixPoolImporter.cs). 각자 private struct Row / ReadTsv / ValidateHeader 3개 중복 함수 좌표 기록.
  2. [30분] Editor/Importers/Shared/TsvReader.cs 신규 생성. namespace GodBlade.EditorTools (Sp01 W1 네임스페이스 컨벤션 재사용). public static class TsvReader 정의 — 설계 §2.5 시그니처 준수:
   public struct Row { string Get(string k); int I(string k); float F(string k); double D(string k); bool TryGet(string k, out string v); }
   public static List<Row> Read(string path, string[] expectedHeaders);  // BOM trim + ValidateHeader 포함
  1. [15분] Row 내부는 Dictionary<string, string> + 생성자에서 헤더 index 매핑. F 는 float.Parse(v, CultureInfo.InvariantCulture) 강제.
  2. [15분] TsvReader.ReadInternal — File.ReadAllLines + \uFEFF BOM trim(첫 행만) + 빈 행 skip + Split('\t') + cells[c].Trim() + 헤더 개수 검증.
  3. [30분] TranscendentStageImporter.cs 편집: 내부 Row / ReadTsv / ValidateHeader 3개 메서드 삭제, 호출부를 TsvReader.Read(path, expectedHeaders) 로 변경. 모든 로직 나머지 불변.
  4. [30분] 동일 편집을 DropRateTableImporter.cs / MilestoneRewardImporter.cs / AffixPoolImporter.cs 3 파일에 순차 반복. 각각 5~10분.
  5. [15분] Unity 에디터 포커스 복귀 → Console 에러 0 확인 + 4 Importer 순차 실행 → 4개 .asset Inspector 재생성 (이전과 동일한 row 수 + 동일 합 검증).
  6. [15분] GodBlade.Tests.Editor 에 TsvReaderTests.cs 4개 assert 작성 — Row.Get, Row.I, Row.F, BOM 트림 1회만 수행.

총 2.8h 예상 (설계 3.0h 추정과 정합).

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

리스크심각도근본 원인재현 조건대응
⭐ 4 Importer 전체 회귀 발생High중복 제거 과정에서 ReadTsv 내부 Trim / Split 미묘한 동작차 (특히 Sp00 Importer의 ResolveTsvPath 절대경로 해석)복제 시 세부 라인 누락#T01 단독 PR + 실행 로그 4건 비교 (row 개수 + Addressables 엔트리 변경 없음). 개별 Importer 별 git diff minimal 유지
Row 타입 asmdef 경계LowTsvReader.Row 는 Editor 어셈블리 public struct. Runtime asmdef에서 참조 시 CS0234설계상 Runtime 접근 없음Sp02 W2 Calculator는 TsvReader 소비 안 함 (Row 타입은 Editor 전용). 룰 유지
float.Parse 로케일 중복 처리MediumSp00 ~ Sp01 Importer 각자 CultureInfo.InvariantCulture 부여 — 공통화 후 Row.F 에 흡수되면 기존 Importer의 float.Parse 호출부가 정리되어야 함호출부 덜 정리Sp01 드라이런 §3.2 경고 재활용. Row.F 내부만 invariant. 호출부의 float.Parse 모두 제거 검증 (grep float.Parse → Shared/TsvReader.cs 1건만 잔존)
ValidateHeader 커스터마이즈 포기 우려Low-MediumSp01 3 Importer 각자 헤더 이름·개수 다름(Drop=6, Milestone=7, Affix=9). 공통 expectedHeaders: string[] 매개화로 흡수 가능하나 헤더 검증 실패 시 오류 메시지 Importer별 컨텍스트 유지 어려움일반화 과도Read 반환 전 헤더 미스매치 발견 시 ArgumentException 에 TSV 파일명 + expected/actual 포함 메시지. Importer 호출부에서 try/catch + DisplayDialog 처리
CS0579 / InternalsVisibleToZeroTsvReader 는 Editor asmdef, Data asmdef 건드리지 않음—리스크 없음
Unity.ResourceManager 참조ZeroAddressables API 미사용—리스크 없음

Sp00+Sp01 회귀 3패턴 재현 가능성:

§2.3 선결 조건 체크

§2.4 Rollback 지점


§3. 태스크 #T02 — Prestige enum 4종 선언

§3.1 예상 Happy Path

  1. [15분] Assets/_Project/Scripts/Data/Prestige/ 폴더 신규 생성 (Unity Project 창 또는 파일 시스템).
  2. [10분] PrestigeEnums.cs 신규 생성. namespace GodBlade.Data.Prestige 명시 (설계 §2.3 + CP-M06).
  3. [15분] enum 4종 선언:

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

리스크심각도근본 원인재현 조건대응
⭐ PpChannel asmdef 경계 위반Medium설계 §1.3 PpChannel = GodBlade.Runtime.Prestige, PrestigeItemRow = GodBlade.Data.Prestige. 관성적으로 PrestigeEnums.cs에 4개 다 선언 시 CP-M13 위반첫 작성 때 한 파일 몰아넣기 유혹A3 체크리스트 1항목 추가: "⚠️ PpChannel 은 Data asmdef에 두지 말 것. Runtime/Prestige/PpChannel.cs 별도 파일"
CS0579 재발 (신규 Data 파일)MediumPrestigeEnums.cs 가 Data asmdef 2번째 파일. Sp01 W1 #02 DropRateTableSO.cs 에 이어 CP-M02 관성 위반 여지InternalsVisibleTo 복제 유혹CP-M02 최상위. 신규 Data 파일에 [assembly: InternalsVisibleTo(...)] 절대 금지
PrestigeEffectType vs PrestigeCurveId 혼동Low-MediumREADME TSV: effect_type = PercentStat/FlatStat/Multiplier (3종) / curve_id = LinearThenLog/FlatCapped/FlatSteps (3종). 2축 구분. 한 enum에 섞으면 Importer 파싱 실패휴먼 에러d8 §1.1 검증표 확인 — effect_type 분포 28/2/1, curve_id 는 README §3.1 공식 3종과 1:1 매핑
rootNamespace driftLowData asmdef rootNamespace = GodBlade.Data. 파일 최상단 namespace GodBlade.Data.Prestige 명시 필수Unity 자동 생성 네임스페이스에 의존수동 namespace 선언 — 설계 §2.3 명시. CP-M06

Sp00+Sp01 회귀 3패턴 재현 가능성:

§3.3 선결 조건 체크

§3.4 Rollback 지점


§4. 태스크 #T03 — PrestigeItemCatalogSO + PrestigeItemRow struct

§4.1 예상 Happy Path

  1. [20분] PrestigeItemCatalogSO.cs 신규 생성. namespace GodBlade.Data.Prestige. [CreateAssetMenu(fileName="PrestigeItemCatalog", menuName="GodBlade/Data/Prestige Item Catalog")].
  2. [25분] [System.Serializable] struct PrestigeItemRow 정의 — 설계 §2.3 필드 9개 + TSV 14컬럼 중 R-DR-05 대응:
  1. [15분] readonly struct PrestigeItemKey : IEquatable<PrestigeItemKey> (tab + itemId 조합) — 선택. 설계 §2.3 Get(ushort itemId) 만 있어도 충분 — 단순화.
  2. [20분] [SerializeField] List<PrestigeItemRow> rows = new() + [NonSerialized] Dictionary<ushort, int> _byItemId + [NonSerialized] List<PrestigeItemRow>[] _byTab + OnEnable lazy build.
  3. [10분] public int Count / PrestigeItemRow Get(ushort) / IReadOnlyList<PrestigeItemRow> GetByTab(PrestigeTab) 공개 API 3개 구현.
  4. [10분] 저장 + Unity 에디터 포커스 복귀 → Console 에러 0 확인.
  5. [10분] 메뉴 Create > GodBlade/Data/Prestige Item Catalog 실행 → 빈 SO 생성 → Inspector 열어 rows: [] 확인 (CP-M14 기본값 초기화 검증).

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

리스크심각도근본 원인재현 조건대응
⭐ CS0579 재발 (Data 3번째 파일)MediumSp02 W1 Data asmdef 3번째 신규 SO (Sp01 W1 3개 + PrestigeEnums + 본 파일). 피로도 누적. CP-M02 최우선InternalsVisibleTo 복제A3 체크리스트 매 신규 파일 확인. Grep 1회 유지
_byItemId Dictionary NRE (CP-M14)Mediumrows 가 null 인 상태로 Inspector 열면 OnEnable 에서 rows.Count NREList<PrestigeItemRow> rows; 기본값 미지정= new() 필수. CP-M14 명시
TSV 14컬럼 vs SO 10필드 결정 공백Medium (R-DR-05)설계 §2.3 필드 9개 예시만. 14컬럼 중 5컬럼 (display_name_en/description/origin/notes) 흡수 정책 미정독단 결정 시 PR 리뷰 충돌본 드라이런이 제안: SO에 미저장 + Importer 로그만. Sprint 04 로컬라이즈 시 PrestigeItemLocalizationSO 별도 신설. PR 본문에 결정 1줄
PrestigeItemRow blittable 검증Lowstring name / string statKey 포함 → blittable 아님 (string은 managed). 설계 §1.3은 PrestigeSlot 만 blittable 요구. PrestigeItemRow 는 SO 저장용 → blittable 불필요. 혼동 주의설계 재독해 필요DOTS 전환 시 Catalog는 string → FixedString64Bytes 전환 예정 (Sp03+), 현 W1 범위 밖
softcap_level = 5 고정 vs byte 변수LowREADME §2 "일률 Lv5" 결정 + 설계 §2.3 softCap byte. TSV 값이 다른 행이 있으면 CP-T3 경고 로그game-designer 튜닝 시 일부만 변경Importer CP-T3 (경고 수준) 로 흡수. SO 필드는 byte 유지

Sp00+Sp01 회귀 3패턴 재현 가능성:

§4.3 선결 조건 체크

§4.4 Rollback 지점


§5. 태스크 #T04 — PrestigePpCostTableSO (A2 결정 (a) 가정)

§5.1 예상 Happy Path (A2 = (a))

  1. [15분] PrestigePpCostTableSO.cs 신규 생성. namespace GodBlade.Data.Prestige.
  2. [10분] [System.Serializable] struct PrestigePpCostRow { byte level; int costPp; int cumulativePp; } — 3필드, blittable 가능.
  3. [15분] [SerializeField] List<PrestigePpCostRow> rows = new() + [NonSerialized] int[] _cumulativeByLevel (1..100 직접 인덱스) + OnEnable 에서 비선형 샘플링 보간 — rows 가 60행 비연속이므로 Lv1..100 빈 구간 선형 보간 필수. README §9 ASCII 그래프 지시.
  4. [20분] public API: public int GetCumulative(byte level) / public int GetCost(byte level) / public byte LevelFromCumulative(int investedPp) (이진 탐색). Calculator 시그니처 §3.3 보조.
  5. [10분] [CreateAssetMenu] + 빈 SO 생성 테스트.

§5.2 A2 결정 (b) = Calculator 내장 정적 배열 시 축소판

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

리스크심각도근본 원인재현 조건대응
⚠️ A2 결정 미확정 시 W1 중 삽질HighPD 1줄 확인 없이 (a)/(b) 독단 결정 시 PR 충돌결정 누락A2 사전 완화 필수. D-2 킥오프 오전 PD 1줄 확인
CS0579 재발 (Data 4번째 파일)MediumSp02 첫 2개 SO 연속 신설 — 피로도 PeakInternalsVisibleTo 복제CP-M02 grep
Lv1..100 보간 로직 오류MediumTSV 60행 비선형 샘플링 (Lv1/5/10/15/20/.../100) — 중간 Lv11/12/13 등 보간 필요단순 선형 보간이 README §9 그래프와 일치하지 않을 가능성드라이런 권고: TSV 원본에 Lv1..100 전부 (100행) 직접 저장하는 방안 game-designer 에 1줄 질의 (A2 확인 묶음). 설계상 현 60행이라면 선형 보간 명시
byte level 오버플로LowLv100 까지 → byte (0-255) OK. Lv256 이상 도입 시 재설계현 범위 무관명시적 byte 유지 (DOTS 친화 CP-M10)

Sp00+Sp01 회귀 3패턴 재현 가능성:

§5.4 선결 조건 체크

§5.5 Rollback 지점


§6. 태스크 #T05 — PrestigeItemImporter.cs

§6.1 예상 Happy Path

  1. [10분] Assets/Editor/Importers/PrestigeItemImporter.cs 신규 생성. namespace GodBlade.EditorTools (Sp01 W1 #02 패턴).
  2. [10분] #if UNITY_EDITOR 가드 + using UnityEditor; using UnityEditor.AddressableAssets; using UnityEditor.AddressableAssets.Settings; using UnityEditor.AddressableAssets.Settings.GroupSchemas; + using GodBlade.Data.Prestige;
  3. [10분] [MenuItem("GodBlade/Data/Import Prestige Item TSV")] public static void Import() 시그니처.
  4. [10분] ResolveTsvPath — "../../designs/prestige_items.tsv" 후보 (Sp01 패턴 복제).
  5. [15분] TsvReader.Read(path, new[]{"item_id","tab","display_name_kr","display_name_en","effect_type","stat_key","curve_id","base_value","per_level_value","softcap_level","post_softcap_diminish","description","origin","notes"}) 호출 → 30 Row 수신.
  6. [20분] Row → PrestigeItemRow 변환:
  1. [20분] 자기검증 CP-T1~T5 (README §6):
  1. [10분] AssetDatabase.CreateAsset (Assets/_Project/Data/Prestige/PrestigeItemCatalog.asset).
  2. [15분] RegisterAddressables — FindGroup("Prestige") ?? CreateGroup(...) + entry.address = "Prestige/ItemCatalog" + SetLabel("prestige-catalog", true, true). Sp01 #02 패턴 복제.
  3. [10분] 메뉴 실행 → Console 로그 "[PrestigeItemImporter] 30 rows (Offense 10 / Defense 10 / Utility 10), softcap=5 uniform, 0 warnings".
  4. [10분] Inspector 열어 PrestigeItemCatalog.asset 30행 육안 확인 + GetByTab(PrestigeTab.Offense) static 호출 테스트 (없으면 W2로 이월).

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

리스크심각도근본 원인재현 조건대응
⭐ Enum.Parse 대소문자 mismatchMediumTSV effect_type 컬럼 "PercentStat" 그대로 + enum 값 PercentStat 일치. 문제 없음. 단 curve_id 컬럼 "LinearThenLog" 와 PrestigeCurveId.LinearThenLog 일치 필수 — PascalCase 미준수 시 ArgumentExceptiongame-designer TSV 에 대소문자 driftTSV 실사: README §3.1 3갈래가 LinearThenLog / FlatCapped / FlatSteps PascalCase 명시. 일치 확인 완료
tab enum 이름 충돌 우려LowUnity 내장 Offense / Defense 동명 타입 없음 확인—무시
CP-T2 탭별 카운트 실수Lowrows.Count(r => r.tab == PrestigeTab.Offense) LINQ 사용 시 using System.Linq; 필수using 누락 시 CS1061using 1줄 + assert
TSV 14컬럼 Row Get 실패MediumexpectedHeaders 14개 정확히 일치해야 TsvReader.Read 통과 — 순서·대소문자 drift 시 ArgumentExceptiongame-designer TSV 헤더 변경헤더 표는 §6.1 step 5 고정. 변경 시 game-designer 에스컬레이션
CS0579 재발MediumImporter는 Editor asmdef — InternalsVisibleTo 무관. 단 신규 SO 파일(#T03)에서 중복 선언 시 CS0579 발동—CP-M02 grep (매 PR)
Addressables 그룹 중복 (Prestige)LowFindGroup("Prestige") 선확인재실행 시 중복CP-M12 — Sp01 Rewards 패턴 복제
float.Parse 로케일LowTsvReader.Row.F 내부 invariant—#T01 해결됨

Sp00+Sp01 회귀 3패턴 재현 가능성:

§6.3 선결 조건 체크

§6.4 Rollback 지점


§7. 태스크 #T06 — PrestigePpCostImporter.cs (A2 = (a) 가정)

§7.1 예상 Happy Path

  1. [10분] PrestigePpCostImporter.cs 신규 — #T05 복제, 헤더만 다름 (level/cost_pp/cumulative_pp 3열 — README §6 TSV 스키마 미상세, TSV 원본 확인 필요).
  2. [10분] TsvReader.Read 호출 → 60 Row.
  3. [15분] 자기검증: level 1~100 단조 증가 + cumulative_pp[n] >= cumulative_pp[n-1]. cost_pp[n] == cumulative_pp[n] - cumulative_pp[n-1] 연속 검증은 비선형 샘플링이므로 건너뜀 (README §6 명시).
  4. [10분] SO 저장 + Addressables Prestige/PpCostTable 등록.
  5. [5분] 메뉴 실행 + Inspector 확인.

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

리스크심각도근본 원인재현 조건대응
⚠️ TSV 행수 61 vs 60 gap (§1.4)Mediumprestige_pp_cost.tsv 헤더 제외 61행 관찰 — README 기대값 "Lv1~100 비선형 샘플링" 60인지 61인지 명시 없음행수 strict == 60 강제 시 fail자기검증 strict == 60 대신 >= 30 && <= 100 범위 검증. game-designer 1줄 확인 후 strict 도입
level 컬럼 데이터 타입Lowbyte (0-255) vs int — 설계상 byte. 오버플로 없음Lv255 이상 도입 시 문제byte 강제, Importer 에서 (byte)row.I("level") 캐스트
Lv1..100 빈 구간 SO 저장 정책MediumTSV 가 Lv1/2/3/4/5/10/15/20/25/... 비선형이면 SO 에 저장되는 row 도 비선형. Calculator GetCost(byte level) 호출 시 빈 구간 해결 필요설계 §5 명시 없음A2 묶음 결정: SO는 TSV 그대로 (60행) + Calculator 에서 선형 보간. 또는 OnEnable 에서 Lv1..100 pre-compute 배열로 확장

Sp00+Sp01 회귀 3패턴 재현 가능성:

§7.3 선결 조건 체크

§7.4 Rollback 지점


§8. 태스크 #T07 — Import ALL 메뉴 확장 + stat_key 매핑 상수

§8.1 예상 Happy Path

  1. [10분] Assets/Editor/Importers/RewardImportAll.cs 열어 Sp01 W1 #05 기존 ImportAll() 메서드에 PrestigeItemImporter.Import() + PrestigePpCostImporter.Import() 2회 호출 추가. 메뉴 이름 변경: "GodBlade/Data/Import ALL (Stage → Drop → Milestone → Affix → Prestige)" (설계 §2.4).
  2. [15분] Assets/_Project/Scripts/Data/Prestige/PrestigeStatKeyMap.cs 신규 — static class PrestigeStatKeyMap. d8 검증 문서의 6행 매핑 하드코딩:
   { "IdleYieldPct", "IdleRateMul" }
   { "GoldGainPct", "GoldMul" }
   { "ExpGainPct", "ExpMul" }
   { "DropRatePct", "DropMul" }
   { "IdleCapHoursFlat", "<helper:GetIdleCapHours>" }  // 특수값 — BuildSummary 필드 아님
  1. [10분] public API: public static bool TryMapToBuildSummary(string statKey, out string buildSummaryField) — Dictionary<string, string> 조회. 미매핑 키는 원본 그대로 반환 (d8 "나머지 25개 stat_key: 원본 그대로").
  2. [10분] 실행 테스트: 메뉴 GodBlade > Data > Import ALL 클릭 → 4 + 2 = 6개 Importer 순차 실행 → Console 로그 6건.

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

리스크심각도근본 원인재현 조건대응
Import ALL 중간 단계 실패 시 복구Low6 단계 중 3단계 실패하면 후속 3단계 skip? 진행?try/catch 정책Sp01 #05와 동일 — 각 Import 호출 전후 try/catch (Exception e) { Debug.LogError; return; }. 중단 원칙
메뉴 priority 충돌Lowpriority=10 (Sp01 W1 #05) 그대로 유지—변경 없음
PrestigeStatKeyMap asmdef 경계LowData asmdef 배치 vs Runtime asmdef — BuildSummary 필드는 Runtime, stat_key 입력은 Data (TSV). Data asmdef에 두면 Runtime이 references에 Data 포함 (Sp01 완료) → OKRuntime 배치 시 Data 역참조 금지 규칙 위반Data asmdef 배치 권장. 설계 §2.3 PrestigeItemRow.statKey 도 Data 소속

Sp00+Sp01 회귀 3패턴 재현 가능성:

§8.3 선결 조건 체크

§8.4 Rollback 지점


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

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

값 = Low (L) / Medium (M) / High (H) / Zero (-)
태스크CS0246 재현CS0579/1061 재현TSV 경로 drift네임스페이스 혼동범위 오버런패턴 충돌공수 초과 (>+50%)
#T01 TsvReader--LLHLM-H
#T02 enum 4종-M-L-LL
#T03 CatalogSO-M-LM (R-DR-05)-L
#T04 PpCostSO-M-LM (보간)-M
#T05 ItemImporterLMML-LM
#T06 PpCostImporterLMML--L
#T07 ALL + StatKeyMap-L-L--L

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

태스크최상위 리스크권장 버퍼
#T01범위 오버런 H + 공수 초과 M-H+1.0~2.0h
#T02CS0579 M+0.15h
#T03CS0579 M + R-DR-05 범위 공백 M+0.3h
#T04CS0579 M + 보간 로직 M+0.3~0.5h
#T05CS0579 M + TSV 경로 M + 공수 M+0.5h
#T06CS0579 M+0.2h
#T07(낮음)+0.1h

총 권장 버퍼: 2.5~4.0h → W1 실공수 밴드 13.5~17.0h (도출 13.0h + 버퍼 0.5~4.0h).

§9.3 D+7 중간 점검 판정 기준


§10. Sp00+Sp01 회귀 3패턴 재현 리스크 태스크별 평가

§10.1 회귀 A — CS0246 Unity.ResourceManager / Addressables 참조 누락

원인: asmdef references 배열 누락 복구분: GodBlade.Runtime.asmdef:7 / GodBlade.Editor.asmdef:9
태스크재현 확률근거
#T01 TsvReaderZeroSystem.IO.File 만 사용
#T02 enum 4종ZeroUnity API 0
#T03 CatalogSOZeroScriptableObject 표준 타입만
#T04 PpCostSOZero동상
#T05 ItemImporterLowAddressables Editor API 사용. Editor asmdef 참조 유지 확인 필수
#T06 PpCostImporterLow동상
#T07 ALL + StatKeyMapZeroAddressables API 미추가

W1 전체 재현 확률: Low (Addressables 2종 Importer 신설이 집중 포인트).

§10.2 회귀 B — CS0579 / CS1061 InternalsVisibleTo 중복 / 오류

원인: [assembly: InternalsVisibleTo("GodBlade.Editor")] 중복 선언 (Sp00 에서 이미 발생) Sp01 드라이런 경고: SO 3개 연속 신설 시 피로도 → Medium
태스크재현 확률근거
#T01 TsvReaderZeroEditor asmdef 파일. 내부 가시성 불필요
#T02 enum 4종MediumData asmdef 2번째 파일 신설. Sp01 W2 이미 3 SO 신설 후 피로도 + Sp02 재개
#T03 CatalogSOMediumData asmdef 3번째. 계속 상승
#T04 PpCostSOMediumData asmdef 4번째. peak
#T05 ItemImporterMediumImporter는 Editor asmdef (InternalsVisibleTo 불필요). 단 연관 SO 수정 시 재발 여지
#T06 PpCostImporterMedium동상
#T07 ALL + StatKeyMapLowPrestigeStatKeyMap 1개 신설. 5번째 Data 파일

W1 전체 재현 확률: Medium (#T03, #T04, #T07 연속 3개 Data 신규 SO 파일이 peak 구간).

§10.3 회귀 C — TSV 경로 drift (Sp01 드라이런 추가 발굴)

원인: ../../designs/<file>.tsv 상대경로 오해 / 하드코딩 실수
태스크재현 확률근거
#T01 TsvReaderLow경로 해석 로직은 호출부에 잔존. Shared 모듈은 path 인자만 받음
#T02~#T04Zero파일 I/O 없음
#T05 ItemImporterMedium새 TSV 경로 첫 도입 (prestige_items.tsv). Sp01 ../../designs/transcendent_*.tsv 패턴 재활용하되 파일명 변경 — 오타 유혹
#T06 PpCostImporterMediumprestige_pp_cost.tsv 두 번째 신규 경로. 관성적으로 복제 가능
#T07 ALL + StatKeyMapZero경로 변경 없음

W1 전체 재현 확률: Medium — #T05/#T06 신규 경로 2개. A2 사전 메모(템플릿) 필수.

§10.4 회귀 D — 네임스페이스 혼동 (Sp01 드라이런 R-DR-03 재활용)

원인: Editor asmdef rootNamespace=GodBlade.EditorTools vs 문서 표기 GodBlade.Editor drift
태스크재현 확률근거
#T01 TsvReaderLowEditor 소속. namespace GodBlade.EditorTools 명시
#T02 enumLowData + Runtime 양쪽. CP-M06 준수
#T03~#T04 SOLownamespace GodBlade.Data.Prestige 명시
#T05~#T06 ImporterLownamespace GodBlade.EditorTools (R-DR-03 학습 반영)
#T07 ALL + StatKeyMapLow양쪽 모두

W1 전체 재현 확률: Low — Sp01 W1 학습 반영으로 모든 파일 namespace 명시 예상. 단 자동 생성 유혹은 상존 → A3 체크리스트 반영.

§10.5 재현 방지 메커니즘 총 3건

  1. 구조적 가드: scaffold-sync-audit §1.5 "Data asmdef 전체 grep [assembly: InternalsVisibleTo" → 1건 유지 불변식. Sp02 W1 신규 파일 4개(enum + CatalogSO + PpCostSO + StatKeyMap) 생성할 때마다 Grep 재실행 → 1건 유지 확인.
  2. 프로세스 가드: shared-checkpoints.md Sprint 02 W2 서브셋 17개 전부 W1 머지 전 사전 감지 가능 (SO 신설 관련). 설계 §8 체크리스트 16개 중 CP-M01/M02/M03/M05/M06/M09/M10/M11/M13/M14 등 10개가 W1 관련.
  3. 학습 가드: Sp01 W1 드라이런 §8 A3 체크리스트 재활용 + 1항목 추가 — "⚠️ PpChannel 은 Runtime/Prestige/ 에 별도 파일"

§11. Sp01 W1 드라이런에서 학습한 교훈 Sp02 W1 적용

§11.1 교훈 1 — TSV 경로 drift

Sp01 학습: ../../designs/transcendent_*.tsv 상대경로 오해 Medium.

Sp02 적용:

§11.2 교훈 2 — 네임스페이스 혼동 (GodBlade.EditorTools)

Sp01 학습: Editor asmdef 파일명 GodBlade.Editor / rootNamespace GodBlade.EditorTools drift. scaffold audit D1.

Sp02 적용:

§11.3 교훈 3 — CS0579 InternalsVisibleTo 복제 (Sp00+Sp01 누적)

Sp01 학습: Data asmdef SO 3개 연속 신설 시 피로도. SO 3번째 (#04 AffixPool) 가 peak.

Sp02 적용:

§11.4 Sp01 드라이런에서 적용 실패 우려 확인 사항


§12. 사전 완화 액션 (최종 4건, 2026-05-17 이전)

2026-05-18 킥오프 D-1 최대 1.5시간 내 수행. 코드 0줄.

A1 — Sp01 W2 회귀 보고 확인 + asmdef/InternalsVisibleTo 사전 점검 (45분)

목적: Sp00 → Sp01 W1 → Sp01 W2 실행 누적 회귀 건수 확정 + Sp02 W1 위험도 재평가.

작업:

  1. sprints/sprint-01.md §5 (종료 회고) 또는 sprints/sprint-02.md 킥오프 노트 읽기
  2. Sp01 W2 실행 중 발생한 CS0579 / CS0246 / CS1061 건수 기록
  3. Unity6/Assets/_Project/Scripts/Data/ 전수 Grep [assembly: InternalsVisibleTo → 1건 유지 확인
  4. GodBlade.Runtime.asmdef 존재 + references 확인 (#T02 PpChannel 배치 선결 조건)
  5. GodBlade.Tests.Editor.asmdef references 에 GodBlade.Runtime 포함 여부 확인 (Sp02 W2 테스트 대비)
  6. 결과를 sprints/sprint-02.md §7 (현재 없음 → PM 신설 필요) 킥오프 GO 체크박스에 기록

산출: Sp02 W1 킥오프 GO / NO-GO 결정 1줄 + 회귀 누적 카운트

A2 — PD 1줄 질의 2건 (20분)

목적: R-DR-06 / §1.4 행수 gap 해소.

작업:

  1. Q1 (#T04 스코프): "prestige_pp_cost.tsv 는 (a) 별도 PrestigePpCostTableSO + Importer 인가 (b) PrestigeCalculator 내장 정적 배열인가 (c) PrestigeItemCatalogSO 의 보조 필드인가" — 1줄 답
  2. Q2 (pp_cost.tsv 61행): "prestige_pp_cost.tsv 데이터행 61행 관찰. 기대값 60행인지, 61행이 정답인지, Lv1~100 모두 100행이 정답인지 1줄 확인"
  3. 답변 받는 대로 designs/prestige_pp_cost.tsv README 섹션 또는 prestige_items_README.md 에 1줄 추가 (game-designer 작업으로 이관)

산출: Q1/Q2 답변 2건 기록

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

목적: CS0579 재발 차단 + PpChannel asmdef 경계 포함.

작업:

  1. namespace GodBlade.Data.Prestige (파일 최상단)
  2. [assembly: InternalsVisibleTo(...)] 복제 절대 금지
  3. using UnityEditor 금지 / 필요 시 #if UNITY_EDITOR 가드
  4. blittable 필드 유지 (int/enum/float/byte/ushort/long)
  5. ⚠️ PpChannel 은 Data asmdef에 두지 말 것 — Runtime/Prestige/PpChannel.cs 별도 파일 (CP-M13)

산출: 체크리스트 1건 (v2)

A4 — TSV 경로 상수 템플릿 메모 + stat_key 매핑표 인쇄 (10분)

목적: R-DR-02 (TSV 경로) + d8 매핑 6행 상기.

작업:

  private const string ITEMS_TSV_REL = "../../designs/prestige_items.tsv";
  private const string PP_COST_TSV_REL = "../../designs/prestige_pp_cost.tsv";

산출: 경로 메모 + 매핑표 2건 (커밋 파일 아님, 에이전트 작업 공간)


§13. 특수 리스크 — struct+List hot path vs SO 카탈로그 패턴 충돌

§13.1 문제 정의

Sp01 W2 DQ1 결정: DropRateTableSO / MilestoneRewardCatalogSO / AffixPoolSO = SO 옵션 A (개별 SO, read-only 카탈로그).

Sp02 W2 Q1 결정: PlayerPrestigeState = 옵션 B (PrestigeSlot blittable struct + List<PrestigeSlot>, read-write hot path).

Sp02 W1: PrestigeItemCatalogSO 는 Sp01 W2 옵션 A 재활용 (read-only 정적 카탈로그). PrestigeSlot / PlayerPrestigeState 는 W2 에서 도입.

두 패턴이 프로젝트 구조상 의도적으로 공존하나, Sp02 W1 종반 → W2 킥오프 사이 1주 간격으로 동일 개발자(code-lead)가 두 패턴을 연속 작성. 혼동 유발 여지.

§13.2 혼동 시나리오 3건

  1. 시나리오 1: PrestigeItemCatalogSO.rows (List<PrestigeItemRow>) 와 PlayerPrestigeState._slots (List<PrestigeSlot>) 가 모두 List 기반 → 개발자가 W2 작성 중 "이거 SO로 하면 되잖아?" 독단 결정 가능성. 설계 §1.2 3옵션 비교표 재확인 필요.
  2. 시나리오 2: PrestigeItemRow (Data asmdef) vs PrestigeSlot (Runtime asmdef) — 어셈블리 다르나 파일명/네임스페이스 유사 (Prestige 서브 네임스페이스 공유). using 실수로 잘못된 타입 참조 시 CS0104 (ambiguous reference) 위험.
  3. 시나리오 3: OnEnable lazy build (Sp02 W1 SO 패턴) vs OnApplicationPause 즉시 flush (Sp02 W2 State 패턴) — 생명주기 관리 2축 공존. 혼동 시 "왜 SO에서도 flush 필요하지?" 같은 오해 여지.

§13.3 완화책

  // read-only catalog. Runtime mutable state → see GodBlade.Runtime.Prestige.PlayerPrestigeState (Sp02 W2)

§13.4 충돌 리스크 판정

축Sp02 W1 (SO 카탈로그)Sp02 W2 (struct+List)충돌 리스크
어셈블리GodBlade.DataGodBlade.RuntimeZero (물리적 분리)
네임스페이스GodBlade.Data.PrestigeGodBlade.Runtime.PrestigeLow (서브 네임스페이스 혼동 여지)
데이터 구조List<PrestigeItemRow>List<PrestigeSlot>Medium (List 패턴 동일)
생명주기OnEnable lazy buildOnApplicationPause/Quit flushLow-Medium (생명주기 축 다름)
직렬화Unity SO autoJsonUtility explicitLow (직렬화 엔진 다름)
개발자 혼동—1주 연속 작성Medium (W1→W2 전환 시점)

종합: Medium. 설계상 분리는 명확하나 휴먼 에러 축에서 주의 필요. 완화책 4건 적용 시 Low로 축소 가능.


§14. TsvReader 공통화 리스크 (Sp01 Importer 3종 + Sp00 1종 = 4개 리팩터 범위)

§14.1 리팩터 범위 정량화

파일Sp01 W2 머지 상태 추정Read 로직 라인 수편집 범위
TranscendentStageImporter.csSp00 산출, 이미 Green~30 lines (private Row / ReadTsv / ValidateHeader)제거 30 lines + 호출부 1줄 교체
DropRateTableImporter.csSp01 W1 신규~25 lines (복제본)동상
MilestoneRewardImporter.csSp01 W1 신규~25 lines동상
AffixPoolImporter.csSp01 W1 신규~25 lines동상

합계: 4 파일 × ~100 lines 제거 + 4 호출부 1줄씩 교체 + 신규 TsvReader.cs ~80 lines

§14.2 최소 편집 원칙 (설계 §2.5 준수)

원칙: "Sprint 00 Importer는 동작 불변 — 새 공통 모듈을 호출하도록 최소 편집"

실행 지침:

  1. TsvReader.Read 반환 타입 List<Row> 가 각 Importer 의 기존 Row 내부 struct와 필드 interface 호환 이어야 함. 기존 Importer 에서 row.Get("col") 호출 패턴 유지.
  2. 각 Importer 의 expectedHeaders 배열만 남기고 ReadTsv 메서드 본체 삭제 → TsvReader.Read(path, expectedHeaders) 호출로 교체.
  3. 헤더 검증 로직 은 TsvReader.Read 내부로 흡수. 각 Importer 는 반환값 .Count 만 확인.

§14.3 회귀 검증 절차 (Rollback 방지)

실행 전:

실행 후 (#T01 머지 직전):

다른 절차:

§14.4 리팩터 오버런 시 대응

§14.5 대안 — 점진적 공통화 (Plan B)

정당성: Sp01 W2 DQ3 결정은 "Sprint 02 이월" = "Sprint 02 W1 전체가 범위". 구체 완료 조건 미명시.

Plan B:

권고: Plan B 는 PM 에스컬레이션 대상. 기본은 4 파일 일괄 전환 (설계 §2.5 준수).


§15. Sp02 W1 TodoWrite 목록 제안 (7건)

2026-05-18 Sprint 02 W1 킥오프 시 PM이 TodoWrite 도구에 입력할 초안. 근거: §1.2 태스크 도출 7건 + 각 태스크 공수·선행 의존 반영. 로드맵 v2.0 §10 "비추정 공수 플래그" 해소 기여.
TodoWrite Sp02 W1 초안:
 1. [T01] TsvReader.cs 공통화 + Sp00/Sp01 Importer 4종 호출 전환 (회귀 0 유지)  (3.0h, 선행: 없음, 상태: pending)
 2. [T02] Prestige enum 4종 선언 (PrestigeTab/PrestigeCurveId/PrestigeEffectType / PpChannel 분리)  (0.75h, 선행: 없음, 상태: pending)
 3. [T03] PrestigeItemCatalogSO + PrestigeItemRow struct (Data.Prestige asmdef)  (1.5h, 선행: T02, 상태: pending)
 4. [T04] PrestigePpCostTableSO (A2 결정 (a) 가정, (b) 시 축소)  (1.5h, 선행: T02, 상태: pending, 블로커: A2 결정)
 5. [T05] PrestigeItemImporter.cs — 30행 Import + CP-T1~T5 5개 자기검증 + Addressables Prestige 그룹  (2.5h, 선행: T01·T02·T03, 상태: pending)
 6. [T06] PrestigePpCostImporter.cs — 60행 Import + 단조증가 검증 + Addressables  (1.0h, 선행: T01·T02·T04, 상태: pending, 블로커: A2 결정)
 7. [T07] Import ALL 메뉴 확장 + PrestigeStatKeyMap (d8 매핑 6행)  (0.75h, 선행: T05·T06, 상태: pending)

시작 시점 3건 동시 pending 가능: T01 / T02 (병렬 가능, 독립) / A2 사전 완화 A1~A4 4건 블로킹 의존: T04/T06 은 A2 결정 의존. T05 는 T01+T02+T03, T07 은 T05+T06. PM 주간 점검 포인트:


§16. 메타정보


§17. 판정 요약

2026-05-18 Sprint 02 W1 킥오프 → GO (Yellow)


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