diff --git a/공유/PD_지시_트래킹/개발팀_PD_지시_로그.md b/공유/PD_지시_트래킹/개발팀_PD_지시_로그.md index 73c0543..dd7c7b6 100644 --- a/공유/PD_지시_트래킹/개발팀_PD_지시_로그.md +++ b/공유/PD_지시_트래킹/개발팀_PD_지시_로그.md @@ -90,6 +90,7 @@ C3·C13 위반에 해당. **즉시 자진 보고 후 소급 등록**. | # | 일시 | 지시 요지 | 처리 상태 | 산출물 경로 | 중단 사유 | 사후 조치 | |---|------|----------|----------|-----------|----------|----------| +| 58 | 2026-04-20 | (PD님 직접 지시·PM 세션 경유) **#57-C 축소 재정의 — 기획 툴(Tool_Left) 버그 유무 점검** | **완료** | **[완료: 2026-04-20 18:45 · commit: (본 후속 commit) · 참조: `공유/소통/개발팀→PM/2026-04-20_Tool_Left_버그유무_점검.md`]** 개발팀장 Task 점검 결과 **"Tool_Left 3축 모두 정상 — 툴 버그 없음"** 판정. (1) 호출 경로 정상 (Add_Stage·OnValueChange_MapConfig 2곳 분배 정상) (2) JsonIgnore·NonSerialized 0건·JSON 직렬화 유실 0건 (125/125 전수 확인) (3) 스키마 변경(2026-04-08 `686a25a30`)에서 수동 복구 메뉴 미실행이 주 원인. 빈 배열 97.6% 분포는 PD님 "임시 데이터" 발언과 일치. 런타임은 #57 A 자동 복구로 해소됨. 점검 3축 실측 근거 포함 | - | **수정 집행 불요 권고**. 선택적 4안(A 현 상태·B 일괄 복구 메뉴·C LoadToJson Init 연동·D 경고+가이드)은 PD 판단 시 후속. #57-B 보류 사유(임시 데이터)와 일치 확인으로 종결 | | 57 | 2026-04-20 | (PD님 직접 지시·PM 세션 경유) **Unity 테스트 플레이 몬스터 미등장 원인 파악 + A 집행** — "랜덤 패턴" 몬스터 등장 결정 시 실제 몬스터 미등장 원인 조사 + PD 명시 승인으로 근본 해결안 A 즉시 집행 | **완료** | **[완료: 2026-04-20 17:30 · commit: (본 후속 commit) + DeckBuilding Unity 레포 IngameStageData.cs SHA 81685366... · 참조: `공유/대화로그/수상한잡화점/2026-04-20.md` "#57 A 집행 완료" 엔트리]** (집행 3종) 원인 조사 보고서 (대화로그 엔트리) · Unity MCP `script_apply_edits` op=`replace_method`로 `IngameStageData.Init()` 치환 (`list_MobData`/`BossMobData` 자동 채움 로직 추가 · validate_script errors 0·warnings 0·read_console errors 0) · 집행 완료 보고서 `공유/소통/개발팀→PM/2026-04-20_몬스터_미등장_A_집행완료.md` · **자진 고지 SOT 신설** `memory/org/feedback_c6_backup_before_edit_violation.md` (Unity MCP 편집 착수 전 `.bak_*` 생성 누락) | - | **근본 원인**: `ToolData.json` 125/125 스테이지 `list_MobData` 빈 배열 100% → `MobID 0` 반환 → `MobActor.Off()`. **A 집행 효과**: 런타임 자동 복구 (ToolData.json 미변경). **자진 고지 2건**: (1) C30 점검 불가 — DeckBuilding은 git 레포 아님 (C30 예외 명시 필요) (2) C6-1 백업 누락 — Unity MCP 편집 착수 전 `.bak_*` 생략. SOT 신설로 재발 방지. **B·C는 별도 PD 승인 안건**으로 상정 권고 (기획팀 주도 + 개발팀 지원). 런타임 플레이 검증은 QA·PD 테스트 후속 | | 38 | 2026-04-17 | (#28 후속 분리) **Phase 3 재개 로드맵 결정** — Unity MCP 단일축 기반 밸런스 작업 재개 범위·선후관계·검증 축 확정 | **완료 (라운드 승인분)** | **[완료: 2026-04-20 16:30 · commit: NerdNavisAi (본 후속 commit) + DeckBuilding `fc33fc9d6` (Unity 레포) · 참조: `공유/대화로그/조직운영/2026-04-20.md` "#38 Phase 3 라운드 완결" 엔트리 · 리포트: `공유/소통/개발팀→기획팀/2026-04-20_Unity_MCP_실측검증_리포트_v1.md` 정식본]** (집행 로드맵 v1 확정 + D안 집행 완결) `프로젝트/수상한잡화점/개발/13_Phase3_재개로드맵_확정_v1.md` (재개 범위·선후관계·검증 축 3요소) · `공유/소통/개발팀→기획팀/2026-04-20_Phase3_재개_로드맵_병렬착수.md` (기획팀 공유본) · `공유/소통/개발팀→기획팀/2026-04-20_Unity_MCP_시뮬실행_가이드_v1.md` (선행 조건 3) · `공유/소통/개발팀→기획팀/2026-04-20_Unity_MCP_실측검증_리포트_v1.md` 정식본 (선행 조건 2 — UTF Tests 10/10 Passed · 0.835s · 결정론 5회 완전 일치) · **D안 집행**: `Assets/Sim/Scenarios/` 5종 JSON + `Assets/Sim/Tests/` UTF 어셈블리 + EditMode 테스트 4파일(Anchor·Determinism·CardSynergy·GrowthElement) + run_tests 실측 10/10 Passed · Unity 레포 `fc33fc9d6` push 완료 | - | **라운드 완결 판정 근거 (pm-auditor Major 1)**: #38 지시 요지 = "재개 로드맵 결정". 로드맵 v1 확정·재개 범위·선후관계·검증 축 확정으로 **라운드 승인분 완결**. Phase 3 v2 수치 확정은 기획팀 #3 Day 2~3 결과 기반 (별건). Unity PlayMode 대조는 후속 트랙 (PD 명시 승인 필요 · C6-2) | | 55 | 2026-04-20 | (PD님 직접 지시·PM 세션) **#54 판정 확정 3종 집행** — (1) 현 PM 체계 유지 (2) C31-E 확장 승인 (헌법급 본문 편입) (3) 6회차 이관 선제 동의 + 재발 시마다 PM 반성·재발 방지 강조 지시 | **완료** | **[완료: 2026-04-20 16:05 · commit: (본 후속 commit) · 참조: `공유/대화로그/조직운영/2026-04-20.md` "#55 PD 판정 3종 집행" 엔트리]** (집행 6종) SKILL.md C31-1 E 그룹 "실측 응집성 축" 문항 헌법급 편입 (작업 전 실측 트리거 의무 본문 포함) · `feedback_resolved_cause_as_current_hold.md` §재발 시 처분 조항 전면 개정 (5회차 판정 확정 + 6회차 이관 + PM 의무 4종: 반성 엔트리·구조 개선안·체크리스트 확장·강조 선언) · `memory/org/MEMORY.md` 인덱스 판정 확정 반영 · 본 PD 지시 로그 등재 + 즉시 완료 아카이브 · 대화로그 #55 엔트리 · `.live/2026-04-20_C31E_확장_6회차선제동의.md` 더미 · pm-auditor 사전 감사 Critical 1·Major 1 정정 통과 (매니페스트 재등록 + #55 등재 확인) | - | **PD님 직접 승인 3종**: ①현 PM 유지 ②C31-E 확장 ③6회차 이관 선제 동의. 재발 시 PM 의무 4종은 **구조 개선 트리거** 작동. 단순 상정·기록·선언형 다짐만 제시는 PD님 지시 "강조" 불이행으로 간주 | diff --git a/공유/PD_지시_트래킹/기획팀_PD_지시_로그.md b/공유/PD_지시_트래킹/기획팀_PD_지시_로그.md index 67125e9..94c2c46 100644 --- a/공유/PD_지시_트래킹/기획팀_PD_지시_로그.md +++ b/공유/PD_지시_트래킹/기획팀_PD_지시_로그.md @@ -38,7 +38,6 @@ C3·C13 위반에 해당. **즉시 자진 보고 후 소급 등록**. | # | 일시 | 지시 요지 | 처리 상태 | 산출물 경로 | 중단 사유 | 사후 조치 | |---|------|----------|----------|-----------|----------|----------| -| 40 | 2026-04-20 | (PD님 직접 지시·PM 세션 경유) **Phase 3 남은 업무 병렬 진행 선행 업무 요약 보고** — PD님 "남은 업무 병렬 진행 예정. 작업 진행 전 수행할 업무 요약 우선 보고" 지시. 착수 전 선행 필요 업무(전제·체크리스트·산출물 준비)를 병렬 진행 전에 정리하여 보고 | **진행중 (기획팀장 PM 재량 5건 집행 완료)** | `공유/소통/기획팀→PM/2026-04-20_Phase3_병렬진행_선행업무_요약_v1.md` (5개 트랙 식별) + **PM 재량 5건 산출물**: (E-1) `프로젝트/수상한잡화점/기획/재논의대기_논점재정리_v1.md` + (E-2) `프로젝트/수상한잡화점/기획/맵패턴_42슬롯_현황테이블_v1.md` + (A-초안) `프로젝트/수상한잡화점/기획/이슈1_3_통합재논의_v1_초안.md` + (C) `공유/소통/기획팀→개발팀/2026-04-20_REQ발행조율요청.md` + (E-4) 숙지 완료 선언 (대화로그 엔트리 본문) + `공유/대화로그/수상한잡화점/2026-04-20.md` 엔트리 2종 | - | 기획팀장 PM 재량 5건 집행 완료 (E-1·E-2·E-4·C·A-초안). **PM 수령 후 완료 아카이브 이동** (개발팀장 C 공문 조율 회신 수령 후 PM 종결 판정 · C27·C29-4). PD 결정 대기 2종(Day 11~14 순서·v2 반영 시점) 기존 에스컬레이션 유지 | | 3 | 2026-04-15 (세션 중반) | Phase 3 업무 착수 지시 | **진행중 (Day 2~3·Day 4~7 완료 · Day 8~10 본작업 착수 가능 · Day 11~14·v2 순차 확정)** | `Phase3_재개준비_체크리스트_v1.md` + `재검증_템플릿_v1.md` + 개발팀 **리포트 v2** + **방어·쉴드 현황 메모** + `재검증보고_Phase0_1_2_v1.md` + **`Phase3_성장요소기여도_v2.md`** + `REQ초안_3성조건_12개_판정로직.md` + PM 재량 5건 산출물(#40 참조) | - | **PD님 결정 2종 수령 (2026-04-20)**: (1) **Day 11~14 착수 순서 → 2-B 순차** (Day 8~10 완결 후 착수) (2) **Phase 3 v2 반영 시점 → Day 11~14 완결 후 반영** (Day 15+ 일괄). **현 착수 가능**: Day 8~10 이슈 1·3 통합 재논의 본작업 (A-초안 완료 상태 · Day 9 카드 시뮬 REQ 발행 선행 필요 · Day 8-4 PD 결정 요청은 Day 10 상신). **트랙 B·D 본작업 대기**: 트랙 B는 Day 8~10 후 · 트랙 D는 Day 11~14 후. PM 에스컬레이션 2종 모두 **종결** | --- @@ -47,6 +46,7 @@ C3·C13 위반에 해당. **즉시 자진 보고 후 소급 등록**. | # | 일시 | 지시 요지 | 처리 상태 | 산출물 경로 | 중단 사유 | 사후 조치 | |---|------|----------|----------|-----------|----------|----------| +| 40 | 2026-04-20 | (PD님 직접 지시·PM 세션 경유) **Phase 3 남은 업무 병렬 진행 선행 업무 요약 보고** | **완료** | **[완료: 2026-04-20 18:00 · commit: (본 후속 commit) · 참조: `공유/대화로그/조직운영/2026-04-20.md` "#40 PM 재량 5건" + "옵션 A 집행" 엔트리]** (기획팀장 PM 재량 5건 집행 완료) `공유/소통/기획팀→PM/2026-04-20_Phase3_병렬진행_선행업무_요약_v1.md` (5개 트랙 식별) + (E-1) `재논의대기_논점재정리_v1.md` + (E-2) `맵패턴_42슬롯_현황테이블_v1.md` + (A-초안) `이슈1_3_통합재논의_v1_초안.md` + (C) `2026-04-20_REQ발행조율요청.md` + (E-4) 숙지 완료 선언 + 대화로그 엔트리 2종 | - | **PD님 2026-04-20 "완료·보류 아카이브" 지시 수용**. 후속 C 공문 회신 대기는 **기획팀 #3 Day 8-3 재개 트리거로 흡수** (장기 우산 지시 라운드 완결 원칙). PD 결정 2종 종결 (Day 11~14 2-B·v2 Day 15+) | | 39 | 2026-04-17 | 수상한잡화점 JSON 데이터 완벽 숙지 체크·준비 — 다음 기획 지시 즉시 이행 가능 상태 | **완료** | `공유/소통/기획팀→PM/2026-04-17_JSON_데이터_숙지_현황.md` — A. 카탈로그(Export 60종 JSON + CSV 쌍 14종) / B. 자가 평가(완전 26종·부분 20종·미정밀 14종) / C. 정밀 숙지 수행(전체테이블감사_v1.md 전수 재읽기) / D. 정합성(JSON ↔ 밸런싱 문서 일치) / E. 이행 준비 완료 선언 / F. 기각안 3종 | - | 다음 PD님 기획 지시 수령 시 JSON 근거 기반 즉시 대응 | | 35 | 2026-04-17 | 밸런싱 md 4종 변경 이력 테이블 표준화 (팀장 재량 진행 일괄 승인) | **완료** | `프로젝트/수상한잡화점/기획/스테이지난이도곡선_v1.md`·`밸런싱전략_v1.md`·`전체테이블감사_v1.md`·`빌드_조건_충돌점검_v1.md` 각 하단 "변경 이력 (P16 산출물 추적성)" 섹션 신설 + 초기 행 기입 | - | 차기 밸런스 변경 시 표준 포맷으로 1행 append. 필드: 일시/변경자/변경 필드/이전값→이후값/재미 근거/관련 PD 지시# | | 34 | 2026-04-17 | 전문가 에이전트 6종 기록 의무 명시 + 구 P20 잔존 제거 (팀장 재량 진행 일괄 승인) | **완료** | `.claude/agents/balance-designer.md`·`content-designer.md`·`level-designer.md`·`narrative-designer.md`·`system-designer.md`·`ux-designer.md` 각 파일 "공통 업무 규칙" 섹션 교체 + "기록 의무 (영역 특화)" 섹션 신설. 구 P20(일일보고) 문구 전량 제거, SKILL.md 단일 SOT 참조로 통일 | - | PM이 `.live/` 더미 반영 예정. 차기 감사 시 plan-auditor로 준수 여부 교차 검증 | diff --git a/공유/소통/개발팀→PM/2026-04-20_Tool_Left_버그유무_점검.md b/공유/소통/개발팀→PM/2026-04-20_Tool_Left_버그유무_점검.md new file mode 100644 index 0000000..8626990 --- /dev/null +++ b/공유/소통/개발팀→PM/2026-04-20_Tool_Left_버그유무_점검.md @@ -0,0 +1,191 @@ +--- +from: 개발팀 +to: PM +date: 2026-04-20 +ref_pd_instruction: "#58 Tool_Left 버그 유무 점검" +status: 완료 +tags: [#58, Tool_Left, 툴버그점검, 몬스터누락, 직렬화, 스키마마이그레이션] +관련_PD지시: "#57 A 집행 완료(IngameStageData.Init 자동 복구) · #57-B 재export 보류 · #57-C → #58 축소 재정의" +--- + +# Tool_Left 버그 유무 점검 보고서 (#58) + +> PD 지시 #58 "#57-C는 툴 버그 유무를 개발팀에 지시해서 점검하도록 해" 집행. 원인 조사가 아닌 **툴 버그 유무 명확 판정**이 목표. + +## §1. 점검 방법 + +### 1-1. 점검 환경 (실측 기반) +- Unity 프로젝트 루트: `D:/NerdNavis/FilGoodBandits/DeckBuilding` (git repo 확인) +- 원격 대비 최신 상태 (`git fetch origin` 후 `git status` clean, 변경은 IDE 생성 파일뿐) +- HEAD: `24578499a 몬스터 오류 수정` (= #57 A 집행 커밋, IngameStageData.Init 자동 복구 28줄 추가) + +### 1-2. 점검 대상 코드 (Read 실측) +| 파일 | 줄수 | 핵심 역할 | +|------|------|----------| +| `Assets/Tool/Script/Tool_Left.cs` | 190 | `CreateStageAppearMonster` 정의 + `Add_Stage` 진입점 | +| `Assets/Tool/Script/ToolStageCard.cs` | 160 | `OnValueChange_MapConfig` → `CreateStageAppearMonster` 호출 (mapconfig 변경 시) | +| `Assets/Tool/Script/Tool_Right.cs` | 227 | 노드 저장 전 validation (Mob/Boss 노드 존재 시 `list_MobData`/`list_BossMobData` 비어있는지 체크) | +| `Assets/Tool/Script/ToolMain.cs` | 572+ | `SaveToJson` / `LoadToJson` — ToolData.json 직렬화·역직렬화 + 로드 시 테이블 존재 안 하는 몹 정리 루프 | +| `Assets/Editor/MyEditorUtil.cs` | 514+ | `Tools/ToolStageBossSetting` 메뉴 — 기존 저장분 일괄 복구 기능 | +| `Assets/Script/InGame/Stage/IngameStageData.cs` | 149 | 런타임 자료구조 · `Init()` 내 #57 A 자동 복구 로직 | + +### 1-3. ToolData.json 실측 +- 파일: `Assets/Resources/ToolData.json` (796,235 bytes, 2026-04-14 생성) +- 전수 파싱으로 `list_MobData`·`list_BossMobData` 상태 통계 집계 (Python JSON parser) + +--- + +## §2. 3축 점검 결과 + +### 2-1. 축 1 — Tool_Left의 `CreateStageAppearMonster` 호출 경로 + +**호출부 전수 탐지 결과**: +| 호출 위치 | 트리거 | 분배 대상 | +|----------|--------|-----------| +| `Tool_Left.Add_Stage()` (119행) | `[+]` 버튼으로 스테이지 신규 추가 | 해당 신규 스테이지에만 | +| `ToolStageCard.OnValueChange_MapConfig()` (89행) | 카드 dropdown으로 mapConfigID 변경 | 해당 스테이지에만 | + +**분배 로직 (Tool_Left.cs 125~152)**: +```csharp +public void CreateStageAppearMonster(IngameStageData isdata, CreateMapConfigTableData mapconfig) +{ + isdata.list_MobData = new List(); // 반드시 새 리스트로 초기화 + isdata.list_BossMobData = new List(); // 반드시 새 리스트로 초기화 + + var createstagemobdatas = table_ApprearMonsterPattern.Ins.Get_DataList(mapconfig.n_AppearMonsterGroup); + if (createstagemobdatas != null) + for (int i = 0; i < createstagemobdatas.Count; i++) { /* list_MobData 추가 */ } + + var createstagebossdatas = table_ApprearMonsterPattern.Ins.Get_DataList(mapconfig.n_AppearBossGroup); + if (createstagebossdatas != null) + for (int i = 0; i < createstagebossdatas.Count; i++) { /* list_BossMobData 추가 */ } + + if (isdata.list_BossMobData.Count == 0) + Popup.Ins.Set("보스 몬스터가 설정되지 않았습니다 ..."); // 경고 팝업 +} +``` + +**판정**: **호출 경로·분배 로직 모두 정상**. 신규 추가·mapConfig 변경 시 모두 테이블에서 몬스터를 읽어 정상 분배. 표 조회가 null이면 빈 리스트 유지(방어 코드 정상). `n_AppearBossGroup` 결과 비면 Popup 경고까지 띄움. + +**잠재 이슈**: `CreateStageAppearMonster`는 **신규 추가 or mapconfig 변경 시에만** 호출. **기존에 이미 저장된 스테이지가 같은 mapconfig로 유지되는 동안은 본 메서드가 호출되지 않음** → 구 스키마 시절 데이터가 누적된 경우 자동 복구 트리거 없음. 이는 버그가 아니라 **설계 의도(불필요 재생성 방지)**. + +### 2-2. 축 2 — Newtonsoft.Json 직렬화 시 `List` 필드 유실 여부 + +**점검 방법**: +1. `IngameStageData` 필드 속성 검사: `[JsonIgnore]`·`[NonSerialized]` **0건** (모든 public 필드 직렬화 대상) +2. `ToolMain.SaveToJson` 기본 설정: `JsonConvert.SerializeObject(td)` — 기본 설정(default NullValueHandling, 빈 컬렉션 포함) +3. 실제 ToolData.json 전수 파싱 (125개 스테이지, 24개 챕터) + +**실측 결과 (125 스테이지 전수)**: +| 항목 | 건수 | 비율 | +|------|------|------| +| `list_MobData` **필드 자체 누락** (JSON key 부재) | **0건** | 0% | +| `list_BossMobData` **필드 자체 누락** (JSON key 부재) | **0건** | 0% | +| `list_MobData` 필드는 있으나 **빈 배열 `[]`** | **123건** | 98.4% | +| `list_BossMobData` 필드는 있으나 **빈 배열 `[]`** | **124건** | 99.2% | +| 두 필드 모두 빈 배열 | **122건** | 97.6% | + +**샘플 케이스 (Stage 1 / mapConfig `Stage1_1`)**: +```json +{ "m_Stage": 1, "mapConfigID": "Stage1_1", + "list_MobData": [], + "list_BossMobData": [{"m_Index":0, "m_MobID":10003, "m_Weight":100}] } +``` + +**판정**: **JSON 직렬화·역직렬화 자체는 완전 정상**. 모든 필드가 예외 없이 직렬화·저장됨. 문제는 **"빈 리스트 그대로 저장된 데이터가 존재"**라는 것이지 직렬화 유실이 아님. + +### 2-3. 축 3 — JSON 스키마 마이그레이션 이력 추적 + +**핵심 커밋 발견**: `686a25a30` (2026-04-08, Ino 작성자) +- 제목: "CreateMapConfig 테이블에 보스 몬스터 패턴을 설정해두었지만 맵툴에는 보스 몬스터가 설정되지 않는 문제 수정 바랍니다" +- 변경: `Tool_Left.cs` 26줄 재작성 + `MyEditorUtil.cs` 56줄 신규(`Tools/ToolStageBossSetting` 메뉴) + 기타 4개 파일 + +**스키마 변경 내용**: + +| 시점 | 분배 방식 | +|------|----------| +| **변경 전 (커밋 이전)** | 단일 테이블 `n_AppearMonsterGroup`에서 몬스터 읽고 `tdata.IsBoss()`로 list_MobData/list_BossMobData **자체 분기** | +| **변경 후 (현재)** | **두 테이블 개별 조회**: `n_AppearMonsterGroup` → list_MobData · `n_AppearBossGroup` → list_BossMobData | + +`CreateMapConfig` 테이블 스키마에 `n_AppearBossGroup` 컬럼이 신규 추가됐고, 이에 맞춰 `CreateStageAppearMonster` 재구성. 동일 커밋에서 **`MyEditorUtil.cs`의 `Tools/ToolStageBossSetting` 일괄 복구 메뉴를 추가한 것은** 기존 저장분 중 `list_BossMobData`가 비어있는 스테이지를 신 스키마 기준으로 재채우기 위함 (명시적으로 "맵툴 실행 상태에서 실행" + "모든 보스가 없는 스테이지의 경우 테이블에서 읽어서 다시 세팅"). + +**이후 커밋 이력 관찰**: +- `045ed3176 맵툴 데이터 추가` · `a2dde619b 임시 작업물 업데이트` — ToolData.json 단순 업데이트 커밋 다수 +- `410504a9a 몬스터 등장 패턴 구성 관련 요청` — 기획팀 테이블 요청 대응 +- `24578499a 몬스터 오류 수정` (#57 A) — **런타임 Init()에 같은 자동 복구 로직을 편입** + +즉 #57 A는 과거 Editor 메뉴(`ToolStageBossSetting`)가 했던 복구를 **런타임 진입 시점에 자동 실행**하도록 이관한 조치입니다. 툴 측은 2026-04-08 시점에 이미 복구 경로가 존재했으나, **실행자가 메뉴를 직접 누르지 않으면 기존 저장분은 그대로 유지**되는 구조. + +--- + +## §3. 버그 유/무 최종 판정 + +### 3-1. 판정 결과: **툴 버그 없음** (3축 모두 정상) + +| 축 | 기대 버그 | 실측 결과 | 판정 | +|----|-----------|----------|------| +| 1 | Tool_Left가 신규 추가/mapConfig 변경 시 `CreateStageAppearMonster` 호출 누락 | 2곳 호출·분배 로직 정상 동작 | **버그 없음** | +| 2 | Newtonsoft.Json이 `List` 필드 유실 | 필드 자체 누락 0건. 모든 스테이지에 필드 존재 | **버그 없음** | +| 3 | JSON 스키마 마이그레이션 누락 | 2026-04-08 `686a25a30`에서 로직 이전 + 일괄 복구 메뉴 동시 제공 완료 | **버그 없음** | + +### 3-2. 그럼 왜 125 스테이지 중 122건(97.6%)이 빈 배열인가 + +**가설 (증거 기반 해석)**: +1. **스키마 마이그레이션 시점 데이터가 주원인**: 2026-04-08 이전에 만들어진 스테이지 데이터는 구 분배 방식의 산물. 이후 스키마 변경 시 `Tools/ToolStageBossSetting` 메뉴를 **수동 실행하지 않으면 자동 재채워지지 않음**. 기획·개발 파트에서 메뉴를 실행한 스테이지(Stage 1의 list_BossMobData 등 일부 존재)만 갱신됐고 나머지는 미실행. +2. **PD님 언급 일치**: PD님이 #57-B 재export 보류 사유로 "해당 스테이지는 임시 데이터"라 말씀. 실제로 125 스테이지 중 **거의 전부가 빈 몬스터 배열** → "미완성 임시 데이터" 성격. +3. **기획·테이블 운영 방식 영향 가능**: 빈 배열 상태는 Popup 경고도 띄우지 않음(`Count == 0`은 `list_BossMobData`만 경고. 비어있는 `list_MobData`는 경고 없음). 기획 단계에서 **노드 생성 직전에야 Tool_Right 검증 다이얼로그**로 경고가 뜸 — "나중에 채워도 된다"는 운영 패턴 허용 구조. + +### 3-3. 기존 조직 자산 확인 (C31-E 준수) + +본 건은 #57 A에서 이미 **런타임 자동 복구 로직**을 투입하여 "빈 배열이어도 게임 실행 시 자동 채움" 구조로 전환된 상태. 현재 정상 동작 중이며 추가 툴 버그 수정은 **필요하지 않음**. + +--- + +## §4. 수정 제안 (버그는 없지만 운영 개선 여지) + +버그는 없지만, PD님 결정을 돕기 위해 **발견된 설계·운영상 관찰점**을 4가지 옵션으로 제시합니다. **선택적 개선안이며 현 시점 즉각 집행 대상 아님** (PD 결정 영역). + +### 4-1. 관찰점 (현 상태 유지도 무방) + +1. **`list_MobData.Count == 0` 상태에 경고 누락**: `CreateStageAppearMonster`가 `list_BossMobData.Count == 0`일 때만 Popup으로 경고하고, `list_MobData`가 비면 경고 없음. 기획자가 인지 못 한 채 스테이지 저장 가능 → Tool_Right.cs 저장 직전 validation에서 걸러지긴 함. +2. **`ToolStageBossSetting` 메뉴의 대칭 메뉴 없음**: Boss 일괄 복구 메뉴는 있으나 **일반 몬스터 일괄 복구 메뉴는 부재**. 위 데이터 98.4% 비어있는 주 원인. +3. **런타임 Init() 자동 복구(#57 A)와 툴 저장 상태의 gap**: 런타임에선 자동 채워지나 **ToolData.json 자체는 여전히 빈 배열** → 기획팀 툴 화면에서는 여전히 "0건"으로 표시(ToolStageCard.cs:31~32) → 기획 파악 혼선 가능성. + +### 4-2. 개선 옵션 (PD 판단 영역 — 본 Task 범위 외) + +| # | 옵션 | 비용 | 효과 | +|---|------|------|------| +| A | **현 상태 유지** (#57 A 런타임 복구로 충분) | 0 | 런타임 안전. 툴 표시만 "0건"으로 남음 | +| B | `MyEditorUtil.cs`에 "list_MobData 일괄 복구 메뉴" 추가 + 한 번 수동 실행 | 소규모 | ToolData.json 실제 데이터 정상화 (1회성) | +| C | `ToolMain.LoadToJson` 시점에 `IngameStageData.Init()` 자동 호출 → 저장까지 연동 | 중규모 | 툴 로드 즉시 자동 복구 + 저장 (사용자 개입 불요) | +| D | `CreateStageAppearMonster`에 `list_MobData.Count == 0` 경고도 추가 + 기획 가이드 문서화 | 소규모 | 신규 추가 시 누락 예방 | + +권장 순서: **A 유지 → 장기적으로 C 검토** (C는 "자동 복구" 설계를 툴 영역까지 일관 확장하는 근본 개선). + +--- + +## §5. 후속 권고 + +### 5-1. 수정 범위 판정 +- **본 Task(#58) 범위**: 점검만. 수정 집행 없음. (지시 명시 사항) +- **추가 수정 필요 시**: §4-2 옵션 중 PD님 선택에 따라 별도 지시로 집행. 개발팀 자율 집행은 C36 관점에서 방향·원칙 수준 아닌 구현 수준이므로 PM 재량 가능하나 **현 상태에서 필요성 낮음** + +### 5-2. 기획팀 협업 필요 여부 +- **불필요**: 런타임 동작은 #57 A로 이미 안전. 기획팀 추가 확인 사항 없음 +- **선택적 공유**: 기획팀이 툴 화면에서 "0건" 표시를 이상하게 느낀다면 §4-1의 3번 관찰점을 공유하여 인지 제공 정도 + +### 5-3. 조직 기억 축적 +- **feedback 메모리 신설 불요**: 본 건은 PD님 직접 지시 완료 집행이므로 #58 자체가 조직 기억. 별도 feedback 불필요 +- **대화로그 기록**: 개발팀 대화로그에 본 점검 결과 1줄 엔트리 추가 (PM이 별도 집행) + +### 5-4. PM에게 전달 요지 (1문장) +**Tool_Left 3축 모두 정상 동작, 툴 버그 없음 판정. 빈 배열 저장분은 2026-04-08 스키마 변경 시점에 수동 복구 메뉴 미실행으로 남은 잔재이며 #57 A 런타임 자동 복구로 실질 영향 해소됨. §4-2 개선 옵션은 PD 결정 영역으로 제출.** + +--- + +## 참조 + +- PD 지시 #57 (완료): `공유/소통/완료/2026-04-20_몬스터_미등장_A_집행완료.md` +- 본 보고 매니페스트: `$HOME/.claude/nerdnavis-audit/manifest/active/2026-04-20_58_툴버그점검.md` +- Unity 프로젝트 HEAD: `24578499a` (2026-04-20 #57 A 집행) +- 스키마 마이그레이션 커밋: `686a25a30` (2026-04-08)