From 88c72478d3868acf5443fbf50896150f05e86564 Mon Sep 17 00:00:00 2001 From: swrring Date: Fri, 21 Aug 2026 01:31:29 +0900 Subject: [PATCH] =?UTF-8?q?feat(BT14-Org):=20=EC=84=B8=EC=85=98=20?= =?UTF-8?q?=EB=81=8A=EA=B9=80=20=EC=A7=84=EB=8B=A8=20+=20=EC=84=B8?= =?UTF-8?q?=EC=85=98=20=EC=88=98=EB=AA=85=20=EC=B2=B4=EA=B3=84=20v1=20?= =?UTF-8?q?=E2=80=94=20hook=20cwd=20=EB=8F=85=EB=A6=BD=ED=99=94=2030?= =?UTF-8?q?=EC=A2=85=C2=B7C14-7=C2=B7C40=20=EB=B3=B4=EA=B0=95=C2=B7session?= =?UTF-8?q?=5Fhealth=20=EC=9E=90=EB=8F=99=20=EC=8B=A4=EC=B8=A1=20(NerdNavi?= =?UTF-8?q?s=20C50-6=C2=B7C55=20=EC=9D=B4=EC=8B=9D)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- .claude/settings.json | 62 ++++++++++--------- .claude/skills/BurningTimes-코어룰/SKILL.md | 1 + .claude/skills/bt-document-mgmt/SKILL.md | 15 +++++ .claude/skills/bt-foundation/SKILL.md | 5 +- .claude/skills/bt-session-mgmt/SKILL.md | 24 ++++++- CLAUDE.md | 4 +- memory/org/MEMORY.md | 2 + .../feedback_hook_relative_path_failopen.md | 18 ++++++ .../feedback_session_lifetime_bloat_403.md | 19 ++++++ scripts/session_health.sh | 50 +++++++++++++++ 공유/PD_지시_트래킹/개발팀_PD_지시_로그.md | 1 + 공유/대화로그/조직운영/2026-08-21.md | 39 ++++++++++++ .../2026-08-21_세션끊김_진단_및_세션수명_체계_v1.md | 48 ++++++++++++++ 13 files changed, 255 insertions(+), 33 deletions(-) create mode 100644 memory/org/feedback_hook_relative_path_failopen.md create mode 100644 memory/org/feedback_session_lifetime_bloat_403.md create mode 100644 scripts/session_health.sh create mode 100644 공유/대화로그/조직운영/2026-08-21.md create mode 100644 공유/조직공지/2026-08-21_세션끊김_진단_및_세션수명_체계_v1.md diff --git a/.claude/settings.json b/.claude/settings.json index abaaa2e..8eb545c 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -93,11 +93,11 @@ "hooks": [ { "type": "command", - "command": "bash scripts/auto_approve.sh" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/auto_approve.sh" }, { "type": "command", - "command": "bash scripts/auditor_gate.sh" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/auditor_gate.sh" } ] }, @@ -106,7 +106,7 @@ "hooks": [ { "type": "command", - "command": "bash scripts/pm_implicit_check.sh 2>/dev/null || true" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/pm_implicit_check.sh 2>/dev/null || true" } ] } @@ -117,43 +117,43 @@ "hooks": [ { "type": "command", - "command": "git fetch origin 2>/dev/null; CHANGES=$(git log --oneline HEAD..origin/main 2>/dev/null | head -10); if [ -n \"$CHANGES\" ]; then echo '📌 [SessionStart] origin/main 변경 검출 — 자동 병합 중:'; echo \"$CHANGES\"; git merge origin/main --no-edit 2>/dev/null && echo '✅ 자동 병합 완료' || echo '⚠️ 자동 병합 실패 (충돌 발생 — 수동 해결 필요)'; else echo '✅ [SessionStart] main 동기화 상태'; fi" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && git fetch origin 2>/dev/null; CHANGES=$(git log --oneline HEAD..origin/main 2>/dev/null | head -10); if [ -n \"$CHANGES\" ]; then echo '📌 [SessionStart] origin/main 변경 검출 — 자동 병합 중:'; echo \"$CHANGES\"; git merge origin/main --no-edit 2>/dev/null && echo '✅ 자동 병합 완료' || echo '⚠️ 자동 병합 실패 (충돌 발생 — 수동 해결 필요)'; else echo '✅ [SessionStart] main 동기화 상태'; fi" }, { "type": "command", - "command": "bash scripts/unity_project_sync.sh 2>/dev/null || true" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/unity_project_sync.sh 2>/dev/null || true" }, { "type": "command", - "command": "bash scripts/inbox_scan.sh 2>/dev/null || true" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/inbox_scan.sh 2>/dev/null || true" }, { "type": "command", - "command": "bash scripts/change_digest.sh 2>/dev/null || true" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/change_digest.sh 2>/dev/null || true" }, { "type": "command", - "command": "bash scripts/live_session_load.sh 2>/dev/null || true" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/live_session_load.sh 2>/dev/null || true" }, { "type": "command", - "command": "bash scripts/pm_context_restore.sh 2>/dev/null || true" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/pm_context_restore.sh 2>/dev/null || true" }, { "type": "command", - "command": "bash scripts/recent_feedback_brief.sh 2>/dev/null || true" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/recent_feedback_brief.sh 2>/dev/null || true" }, { "type": "command", - "command": "bash scripts/audit_pattern_analyzer.sh 2>/dev/null || true" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/audit_pattern_analyzer.sh 2>/dev/null || true" }, { "type": "command", - "command": "bash scripts/verify_log_paths.sh 2>/dev/null || true" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/verify_log_paths.sh 2>/dev/null || true" }, { "type": "command", - "command": "git config core.hooksPath scripts/git-hooks 2>/dev/null || true" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && git config core.hooksPath scripts/git-hooks 2>/dev/null || true" } ] } @@ -164,19 +164,23 @@ "hooks": [ { "type": "command", - "command": "bash scripts/sync_signal.sh check 2>/dev/null || true" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/sync_signal.sh check 2>/dev/null || true" }, { "type": "command", - "command": "bash scripts/git_fetch_throttle.sh 2>/dev/null || true" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/git_fetch_throttle.sh 2>/dev/null || true" }, { "type": "command", - "command": "bash scripts/hold_watch.sh 2>/dev/null || true" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/hold_watch.sh 2>/dev/null || true" }, { "type": "command", - "command": "bash scripts/live_inject.sh 2>/dev/null || true" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/live_inject.sh 2>/dev/null || true" + }, + { + "type": "command", + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/session_health.sh 2>/dev/null || true" } ] } @@ -187,39 +191,39 @@ "hooks": [ { "type": "command", - "command": "bash scripts/postuse_log_reminder.sh 2>/dev/null || true" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/postuse_log_reminder.sh 2>/dev/null || true" }, { "type": "command", - "command": "bash scripts/c9_2_block.sh 2>/dev/null || true" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/c9_2_block.sh 2>/dev/null || true" }, { "type": "command", - "command": "bash scripts/fact_first_check.sh 2>/dev/null || true" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/fact_first_check.sh 2>/dev/null || true" }, { "type": "command", - "command": "bash scripts/identity_guard.sh 2>/dev/null || true" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/identity_guard.sh 2>/dev/null || true" }, { "type": "command", - "command": "bash scripts/hardboiled_empathy_check.sh 2>/dev/null || true" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/hardboiled_empathy_check.sh 2>/dev/null || true" }, { "type": "command", - "command": "bash scripts/proactive_inference_check.sh 2>/dev/null || true" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/proactive_inference_check.sh 2>/dev/null || true" }, { "type": "command", - "command": "bash scripts/skill_trigger_audit.sh 2>/dev/null || true" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/skill_trigger_audit.sh 2>/dev/null || true" }, { "type": "command", - "command": "bash scripts/c35_obligation_check.sh 2>/dev/null || true" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/c35_obligation_check.sh 2>/dev/null || true" }, { "type": "command", - "command": "bash scripts/filler_word_check.sh 2>/dev/null || true" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/filler_word_check.sh 2>/dev/null || true" } ] }, @@ -228,7 +232,7 @@ "hooks": [ { "type": "command", - "command": "bash scripts/auditor_call_log.sh 2>/dev/null || true" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/auditor_call_log.sh 2>/dev/null || true" } ] } @@ -239,11 +243,11 @@ "hooks": [ { "type": "command", - "command": "bash scripts/session_end_audit.sh 2>/dev/null || true" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/session_end_audit.sh 2>/dev/null || true" }, { "type": "command", - "command": "bash scripts/verify_references.sh 2>/dev/null || true" + "command": "cd \"$CLAUDE_PROJECT_DIR\" && bash scripts/verify_references.sh 2>/dev/null || true" } ] } diff --git a/.claude/skills/BurningTimes-코어룰/SKILL.md b/.claude/skills/BurningTimes-코어룰/SKILL.md index f4fab2e..fd64e24 100644 --- a/.claude/skills/BurningTimes-코어룰/SKILL.md +++ b/.claude/skills/BurningTimes-코어룰/SKILL.md @@ -205,6 +205,7 @@ skills: [bt-foundation, bt-index, bt-commit-rules, bt-task-delegation, bt-data-p | 일시 | 변경 | |------|------| | 2026-05-07 | **분할 슬림화 v1** — 11개 SKILL로 분할 + 본 SKILL은 인덱스 SOT 전환 (PD 결정 "A 정식 SKILL 분할") | +| 2026-08-21 | **BT14 세션 수명 체계** — C14-7 신설(`bt-document-mgmt`) + C40 세션 수명·종결 표준 순서·인수인계 2계층 보강(`bt-session-mgmt`·`bt-foundation` 양쪽, NerdNavis C50-6·C55·C40-1-A 이식). 근거: 세션 끊김 진단 (30MB 세션 403 사망 실측) | --- diff --git a/.claude/skills/bt-document-mgmt/SKILL.md b/.claude/skills/bt-document-mgmt/SKILL.md index f2cf8c7..61ee999 100644 --- a/.claude/skills/bt-document-mgmt/SKILL.md +++ b/.claude/skills/bt-document-mgmt/SKILL.md @@ -60,6 +60,21 @@ API Stream idle timeout 방지 + 응답 속도 + 토큰 낭비 차단. - 단일 트랜잭션 필수 (.json·.cs·.py 구조 무결성) - 짧은 md 1~3줄 수정 +### C14-7. 스크린샷·이미지 최소 획득 원칙 (2026-08-21 BT14 신설) + +> 근거 실측: 스크린샷 116장 축적 → 세션 기록 30MB → 매 요청 페이로드 비대 → `403 socket closed` 세션 사망 (2026-08-20 GodDem). 이미지 1장 = base64 원문이 세션 기록과 이후 모든 요청에 영구 잔류. + +#### C14-7-1. 텍스트 실측 우선 +Unity 등 시각 검증 시 `read_console`·`find_gameobjects`·`manage_scene`·컴포넌트 값 조회 등 **텍스트 실측으로 판정 가능한 항목은 스크린샷 금지**. 좌표·활성 상태·계층 구조·에러 유무는 전부 텍스트 실측 대상. + +#### C14-7-2. 스크린샷 허용 3종 +1. 작업 단계 **최종 확인 1회** +2. PD 보고용 증빙 1회 +3. 텍스트 실측 불가 항목 (시각 연출·색상·레이아웃 겹침 등 픽셀 판정) + +#### C14-7-3. 누적 상한 → 세션 수명 연동 +세션 누적 이미지 30장 도달 = C40 세션 수명 판정 트리거 (`bt-session-mgmt` C40 세션 수명 관리 + `scripts/session_health.sh` 자동 실측). + --- ## C22. 용어·식별자 일관 사용 diff --git a/.claude/skills/bt-foundation/SKILL.md b/.claude/skills/bt-foundation/SKILL.md index 6c2376a..240edfc 100644 --- a/.claude/skills/bt-foundation/SKILL.md +++ b/.claude/skills/bt-foundation/SKILL.md @@ -277,9 +277,12 @@ PM이 P21-2 "세션 공유" 시 다음 5종 사전 점검 의무: ### 세션 종결 자동 인수인계 프롬프트 제공 의무 PM이 세션 만료·종결 시 PD 별도 지시 없이도: -- 인수인계서 12 섹션 자동 작성 +- 인수인계서 자동 작성 (2계층: 핵심 요약 + 세부 아카이브 링크) - 다음 세션 첫 프롬프트 템플릿 (PD 복사용) 자동 제공 +### 세션 수명 판정·분리 운용 (2026-08-21 BT14) +세션 기록 10MB·누적 이미지 30장·API 끊김·컨텍스트 압축 중 하나 도달 = 세션 전환 권고 (`session_health.sh` 자동 실측). 근거: 30MB 세션 403 사망 실측. 상세·종결 표준 순서 = `bt-session-mgmt`. + --- ## C41. 병렬 진행 의무 — 불필요한 대기 모드 금지 (조직 생명급) diff --git a/.claude/skills/bt-session-mgmt/SKILL.md b/.claude/skills/bt-session-mgmt/SKILL.md index ad50799..cde23c1 100644 --- a/.claude/skills/bt-session-mgmt/SKILL.md +++ b/.claude/skills/bt-session-mgmt/SKILL.md @@ -172,10 +172,32 @@ PD 별도 지시 없이도: - **다음 세션 첫 프롬프트 템플릿** (PD 복사용) #### 자동 제공 트리거 -- 세션 자체 종결 판정 (컨텍스트 한도 근접·작업 자연 마무리) +- 세션 자체 종결 판정 (**세션 수명 기준 도달**·작업 자연 마무리) - PD가 "세션 정리·종결" 류 지시 - 장시간 작업 자연 마무리 후 PM 판단 +### 세션 수명 판정·분리 운용 (2026-08-21 BT14 신설) + +> 근거 실측: 단일 세션 30MB(스크린샷 116장) 축적 → `403 socket closed` 사망 + 후속 세션 즉사 (2026-08-20). 세션은 작업 단위로 짧게 끊고 인수인계로 승계한다. + +- **판정 기준 (권고 — 운영 조정 가능)**: ① 세션 기록 10MB ② 누적 이미지 30장 ③ API 끊김·소켓 에러 발생 ④ 컨텍스트 압축 발생 +- **자동 실측**: `scripts/session_health.sh` (UserPromptSubmit hook·10분 주기) — 기준 도달 시 경고 자동 출력 +- **도달 시 행동**: 진행 중 맥락 단위만 마무리 → 인수인계서 + 다음 세션 첫 프롬프트 템플릿 제공 → PD에 세션 전환 권고. 신규 대형 작업 착수 금지 + +### 세션 종결 표준 순서 (NerdNavis C50-6 이식) + +**역순 진행 금지.** ① 잔존 위반·활성 테이블 점검 → ② memory feedback 작성 → ③ PD 지시 로그 갱신 → ④ 대화로그 기록 → ⑤ **인수인계서 작성 (가장 마지막 — SOT 정리 완료 후)** → ⑥ 단일 commit + push. + +- **인수인계서 ↔ SOT 정합 의무**: 인수인계서 "활성 N건" = 실제 PD 지시 로그 활성 테이블 N건 동일 확증. 글만 쓰고 SOT 정리 누락 = 위반 (NerdNavis C40-1-A 이식) +- **사실 표기만**: "다음 commit에 추가 예정"·"후속 작업 의무" 류 미래형 표기 금지 — 통과 사실만 `✓`/`X` (NerdNavis C50-6-2 이식) + +### 인수인계서 2계층 원칙 (NerdNavis C55 이식) + +- **① 핵심 요약** (다음 세션이 매번 읽음): 활성·미완 작업 / 다음 액션 / PD 결정 대기 / 블로커만 +- **② 세부 아카이브** (on-demand): 완료 상세·검증 로그·기각안 — 링크로만 연결 +- 완료 항목은 **태그 1줄 압축** (예: `S2 7종 완료 → 상세 [링크]`). 상세 재기술 금지. 완료 누적으로 비대화 = 위반 +- **이어가기 프롬프트**: 인계 본문을 채팅에 다시 풀어 쓰지 않는다 — **인계서를 읽게 한다**. 첫 프롬프트 템플릿 = 작업 선언 1줄 + SOT 경로 + "핵심 요약 먼저 Read 후 현황 보고" + 금지·고정 사항 불릿만 + --- ## 연관 규칙 diff --git a/CLAUDE.md b/CLAUDE.md index 4de54af..6504e44 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -73,7 +73,7 @@ PD님 - **C9** AI 에이전트 조직 원칙 — 완성도 우선·일정 개념 배제 (**C9-2-1 자동 차단 hook 발효 2026-04-24** — `scripts/c9_2_block.sh` 키워드 5그룹 자동 감지) - **C10** 중복 작업 방지·선행 검증 / **C11** 개발 관점 원칙(개발팀) - **C13** PD 지시 트래킹·공유 의무 (시작·진행·완료·중단 4단계 가시화) -- **C14** 토큰 최소화 우선 설계 (C14-5 본문 최신 + 히스토리 아카이브, 폐기 표기 본문 유지 금지 · **C14-6 대용량 파일 스크립트·Chunk 분할 2026-04-24** — API idle timeout 방지) +- **C14** 토큰 최소화 우선 설계 (C14-5 본문 최신 + 히스토리 아카이브, 폐기 표기 본문 유지 금지 · **C14-6 대용량 파일 스크립트·Chunk 분할 2026-04-24** — API idle timeout 방지 · **C14-7 스크린샷·이미지 최소 획득 2026-08-21 BT14** — 텍스트 실측 우선·허용 3종·30장 = C40 세션 수명 트리거) - **C16** PC 독립 셋업·세션 표준 / **C17** 최신 세션 관리 기준 / **C18** 조직 공유 완료 판정 (main push 완료) - **C19** 승인 범위 엄격 해석 / **C20** 팀장급 커밋·푸시 재량 / **C21** 작업 완료 즉시 공유·PM 능동 확인 (내부 공유 / 공유 완료 2단계) - **C22** 용어·식별자 일관 사용 / **C23** 허위 보고·역할 연기 절대 금지 (헌법급) @@ -87,7 +87,7 @@ PD님 - **C37** 규칙 문서 관리 원칙 (2026-04-20 헌법급 신설 — 중복 금지·의미 보존·참조 무결성·표기법 통일·순서 정렬·변경 아카이브·3중 전파 8조항. 규칙 추가·변경 시 본 원칙 준수 의무) - **C38** 기술 도구·시스템 구축 주체 vs 활용 주체 분리 (2026-04-24 BT9 NerdNavis 경험 반영 헌법급 신설 — 도구 구축 = 개발팀, 활용 업무 = 해당 업무 주 담당 팀) - **C39** 작업 전 관련 시스템 최신 반영 상태 실측 의무 (2026-04-24 BT9 헌법급·조직 생명급 신설 — 전 조직 공통 3문항 실측·미반영 시 선행 반영 우선 · C39-10 신규 코드 기존 시스템 참조 실측 Read 의무) -- **C40** 세션 공유·종결 완결성 의무 (2026-04-24 BT9 헌법급 신설 — 세션 공유 5종 사전 점검 + 세션 종결 인수인계서 + 다음 세션 첫 프롬프트 템플릿 자동 제공) +- **C40** 세션 공유·종결 완결성 의무 (2026-04-24 BT9 헌법급 신설 — 세션 공유 5종 사전 점검 + 세션 종결 인수인계서 + 다음 세션 첫 프롬프트 템플릿 자동 제공 · **세션 수명 판정·분리 운용 2026-08-21 BT14** — 10MB/이미지 30장/API 끊김/압축 도달 시 세션 전환 권고·`session_health.sh` 자동 실측·인수인계 2계층·종결 표준 순서 NerdNavis 이식) - **C41** 병렬 진행 의무 — 불필요한 대기 모드 금지 (2026-04-24 BT9 헌법급·조직 생명급 신설 — 4축 자동 점검 · "응답 대기" 단독 모드 금지) - **C42** 사전 검증 절차 — 지시 수행 전 자기검증 (2026-04-24 BT9 헌법급 신설 · **구 C31 폐기 대체**) — C42-2 사전 6항목 (A PD 원문 인용 · B 의도 분석 · C 영역 분류 · D 실측 의무 · E 위반 패턴 · F pm-auditor 매칭) + **C42-7 BT 고유 9그룹 보강 체크리스트** (구 C31-1 A~I 원형 보존 + J K 그룹 신설) - **C43** PD 호칭별 직접 하달 체계 (2026-04-24 BT9 헌법급 신설 — 호칭 카탈로그 라우팅 · C안 팀장 경유 · 6종 전문 에이전트 기획팀장 경유 · 단순 반복 PM 직접 호출 예외) diff --git a/memory/org/MEMORY.md b/memory/org/MEMORY.md index f218a53..fb30d4d 100644 --- a/memory/org/MEMORY.md +++ b/memory/org/MEMORY.md @@ -60,3 +60,5 @@ - [🏛️ ScriptableObject placeholder 필드 무차별 채움 금지](feedback_scriptable_object_field_blanket_fill.md) — 2026-05-09 BT12-Dev Phase 2-C 본 PM 영역 6 ActiveSkillData asset 작성 시 모든 필드 무차별 채움. A01·A02·A03·A14·A15 영역 `DebuffStackLimit: 3` 의도 외 적용 → StatusApplier 가드 통과 → 의도 외 DebuffStack 트리거. 근층 = C39 위반 (가드 조건 Read 선행 X·카드↔런타임 의존성 미실측). 재발 차단 3 단계 의무 — 클래스 정의 Read·사용 코드 Grep·가드 조건 의도 매핑. 헌법급. C39-10·C2·C44 정합 - [🏛️ 신규 코드 영역 기존 시스템 의존성 미실측 금지](feedback_new_code_existing_system_dependency_unmeasured.md) — 2026-05-09 BT12-Dev `fe65592` 회귀. 본 PM이 ProjectileSpawner 영역 Kinematic Rigidbody2D 추가 → Enemy KinematicObject Kinematic Rigidbody2D 영역 사전 미실측 → Kinematic vs Kinematic OnTriggerEnter2D 발화 X 영역 회귀. 근층 = C39 위반 (KinematicObject.cs:76 영역 Read X). 재발 차단 3 단계 의무 — 참조 클래스 정의 Read·라이프사이클 Grep·인터랙션 호환성 검증. 회귀 유발 시 C3 자진 고지 + 본 feedback 환기 의무. 헌법급. C39-10·C2·C3·C44 정합 - [🏛️ PD에게 작업 떠넘기기 금지·MCP 능동 활용 의무](feedback_pm_pd_work_offloading.md) — 2026-05-10 BT12-Dev-Death PD 직접 지적 "MCP 활용해서 네가 직접 체크해! 왜 자꾸 나에게 일을 미루는거지?". 본 PM 가설 5회 누적 부정확 후 PD 자료 제공 영역 — Inspector 스크린샷·Animator Parameters 능동 요청 영역. Unity MCP 영역 read_console·controller_get_info·execute_code·manage_animation 영역 자율 활용 가능 영역 영역 영역 영역 X. 재발 차단 3 단계 자문 — MCP 활용 가능 영역 X·Read/Grep 가능 영역 X·PD 능동 요청 정당 영역 X. 헌법급. C29·C36·C44·C45·C47·feedback_pm_solution_proactive_proposal·feedback_pm_root_diagnosis_priority 정합 +- [🏛️ hook 상대 경로 + fail-open 침묵 무력화 금지](feedback_hook_relative_path_failopen.md) — 2026-08-21 BT14. hook 상대 경로는 세션 cwd 기준 해석 — GodDem cwd 세션에서 27종 hook(auditor_gate 포함) 침묵 무력화·에러 422건. 처방 = `cd "$CLAUDE_PROJECT_DIR" &&` 전량 적용 + 게이트 헬스체크. hook 참조 스크립트 git 추적 의무. C16·C35-9 정합 +- [🏛️ 세션 비대 → 403 사망·세션 수명 기준](feedback_session_lifetime_bloat_403.md) — 2026-08-21 BT14. 스크린샷 116장 → 세션 30MB → 403 socket closed 사망 실측. C14-7(텍스트 실측 우선·허용 3종) + C40 세션 수명(10MB/30장/끊김/압축 → 전환 권고) + session_health.sh 자동 실측. 두 PC 병행 동시 세션 금지. NerdNavis C50-6·C55 이식 diff --git a/memory/org/feedback_hook_relative_path_failopen.md b/memory/org/feedback_hook_relative_path_failopen.md new file mode 100644 index 0000000..9ad58f3 --- /dev/null +++ b/memory/org/feedback_hook_relative_path_failopen.md @@ -0,0 +1,18 @@ +--- +name: hook-relative-path-failopen +description: hook 상대 경로 등록 + fail-open 구조로 27종 hook이 GodDem cwd 세션에서 침묵 무력화 — cwd 독립화·헬스체크로 처방 (2026-08-21 BT14) +metadata: + type: feedback +--- + +# hook 상대 경로 + fail-open 침묵 무력화 (2026-08-21 BT14) + +**발견**: 세션 끊김 진단 중 `.claude/settings.json` hook 29종 전부가 `bash scripts/...` 상대 경로 등록 상태 확인. hook 상대 경로는 프로젝트 루트가 아닌 **세션 cwd 기준** 해석 — cwd가 `E:\NerdNavis\GodDem`인 세션에서 에러 422건 + `2>/dev/null || true` 처리된 27종은 **침묵 무력화** (auditor_gate C35-9 게이트 포함). PreToolUse hook 실패는 공식적으로 fail-open (차단 신호 = exit 2 유일, exit 127·문법 오류는 non-blocking 통과). + +**Why**: 규칙·게이트를 hook으로 강제해도 hook 자체가 조용히 죽으면 전체 통제 체계가 무너진다. 침묵 실패(`|| true`)는 편의지만 관측 불가능성을 낳는다. + +**How to apply**: +1. hook 명령은 항상 `cd "$CLAUDE_PROJECT_DIR" && bash scripts/...` (cwd 독립 + PC 이식성. 드라이브 고정 절대 경로 금지 — C16 위반) +2. hook이 참조하는 스크립트는 반드시 git 추적 (untracked면 타 PC clone 시 동일 사고 재생산) +3. 게이트류 hook은 별도 헬스체크로 실존·접근성 상시 관측 (`scripts/session_health.sh` 내장) +4. 관련: [[session-lifetime-bloat-403]] diff --git a/memory/org/feedback_session_lifetime_bloat_403.md b/memory/org/feedback_session_lifetime_bloat_403.md new file mode 100644 index 0000000..0923013 --- /dev/null +++ b/memory/org/feedback_session_lifetime_bloat_403.md @@ -0,0 +1,19 @@ +--- +name: session-lifetime-bloat-403 +description: 스크린샷 116장 → 세션 30MB → 403 socket closed 사망 실측. 세션 수명 기준(10MB/이미지 30장)·C14-7·session_health.sh 신설 근거 (2026-08-21 BT14) +metadata: + type: feedback +--- + +# 세션 비대 → 403 사망 실측과 세션 수명 체계 (2026-08-21 BT14) + +**발견**: 8/20 GodDem 세션에 Unity 스크린샷 116장이 base64 원문으로 축적 → 세션 기록 30MB → `403 The socket connection was closed unexpectedly`(`authentication_failed`)로 사망. 대조군 8/13 세션은 이미지 1장·에러 0건. 이미지 1장 = 이후 모든 요청 페이로드에 영구 잔류. 두 PC 병행 사용 시 인증 토큰 갱신 충돌도 `authentication_failed`와 정합 (복합 요인 추정 — PD 가설). + +**Why**: 세션은 무한히 키울 수 없다. 비대해질수록 요청 실패·크래시 확률이 오르고, 죽고 나서의 인수인계보다 살아있을 때의 분리가 싸다. + +**How to apply**: +1. 시각 검증은 텍스트 실측 우선, 스크린샷은 단계 최종 확인·PD 증빙·픽셀 판정만 (C14-7) +2. 세션 기록 10MB·이미지 30장·API 끊김·압축 발생 = 세션 전환 권고 (C40 세션 수명, `session_health.sh` 자동 경고) +3. 세션 종결은 표준 순서로: SOT 정리 → 로그 → 대화로그 → 인수인계서(최후) → 단일 commit (NerdNavis C50-6 이식) +4. 두 PC 병행 시 동시 세션 금지 (토큰 갱신 충돌) +5. 계획에 없는 hook·고정비 신설은 감사 계획서에 선기재 후 집행 (pm-auditor Critical 2 재발 방지). 관련: [[hook-relative-path-failopen]] diff --git a/scripts/session_health.sh b/scripts/session_health.sh new file mode 100644 index 0000000..afdad98 --- /dev/null +++ b/scripts/session_health.sh @@ -0,0 +1,50 @@ +#!/bin/bash +# session_health.sh — C40 세션 수명 자동 실측 + hook 게이트 헬스체크 (UserPromptSubmit · 10분 스로틀) +# 근거: 2026-08-20 세션 30MB(스크린샷 116장) → 403 socket closed 사망 실측 (BT14) +# 기준: 세션 기록 10MB 또는 누적 이미지 30장 도달 시 세션 전환 권고 (권고 기준 — 운영 조정 가능) +# 세션 식별: hook stdin JSON의 transcript_path (공식 스키마) — 추정 아닌 실측. 폴백: mtime 최신 + +# --- 게이트 헬스체크 (fail-open 보완: PreToolUse hook 실패는 침묵 통과되므로 여기서 관측) --- +if [ -z "$CLAUDE_PROJECT_DIR" ]; then + echo "⚠️ [hook 헬스체크] CLAUDE_PROJECT_DIR 미주입 — hook 체계 전반 무력화 가능 상태. Claude Code 버전·hook 설정 점검 필요" +fi +GATE="${CLAUDE_PROJECT_DIR:-.}/scripts/auditor_gate.sh" +if [ ! -f "$GATE" ]; then + echo "⚠️ [hook 헬스체크] auditor_gate.sh 접근 불가($GATE) — C35-9 게이트 침묵 무력화 상태 (fail-open). 경로·클론 상태 점검 필요" +fi + +# --- 스로틀 (10분) --- +THROTTLE_DIR="$HOME/.claude/.burningtimes_throttle" +THROTTLE="$THROTTLE_DIR/session_health" +mkdir -p "$THROTTLE_DIR" +now=$(date +%s) +last=$(cat "$THROTTLE" 2>/dev/null || echo 0) +[ $((now - last)) -lt 600 ] && exit 0 +echo "$now" > "$THROTTLE" + +# --- 현 세션 파일 식별: stdin JSON transcript_path 우선 --- +f="" +if [ ! -t 0 ]; then + stdin_json=$(cat 2>/dev/null) + f=$(printf '%s' "$stdin_json" | grep -o '"transcript_path":"[^"]*"' | head -1 | sed 's/.*transcript_path":"//;s/"$//;s/\\\\/\//g') +fi +# 폴백: mtime 최신 jsonl (C24 단일 세션 전제 — 다중 프로젝트 환경에서는 오판 가능, transcript_path 실패 시에만 사용) +if [ -z "$f" ] || [ ! -f "$f" ]; then + f=$(ls -t "$HOME"/.claude/projects/*/*.jsonl 2>/dev/null | head -1) +fi +[ -z "$f" ] || [ ! -f "$f" ] && exit 0 + +size=$(wc -c < "$f" 2>/dev/null | tr -d ' ') +size=${size:-0} +size_mb=$((size / 1048576)) +imgs=$(grep -c '"type":"image"' "$f" 2>/dev/null | head -1) +imgs=${imgs:-0} + +if [ "$size_mb" -ge 10 ] || [ "$imgs" -ge 30 ]; then + echo "⚠️ [C40 세션 수명] 현 세션 기록 ${size_mb}MB · 누적 이미지 ${imgs}장 — 기준(10MB/30장) 도달." + echo " → C40 인수인계서 작성 + 다음 세션 첫 프롬프트 템플릿 제공 후 세션 전환 권고" + echo " → 근거: 30MB 세션 403 소켓 끊김 사망 실측 (2026-08-20)" +elif [ "$size_mb" -ge 7 ] || [ "$imgs" -ge 20 ]; then + echo "📏 [C40 세션 수명 예고] 현 세션 기록 ${size_mb}MB · 이미지 ${imgs}장 — 기준(10MB/30장) 접근 중. 스크린샷 검증 최소화(C14-7) 유지" +fi +exit 0 diff --git a/공유/PD_지시_트래킹/개발팀_PD_지시_로그.md b/공유/PD_지시_트래킹/개발팀_PD_지시_로그.md index 4bc8c37..8e74e80 100644 --- a/공유/PD_지시_트래킹/개발팀_PD_지시_로그.md +++ b/공유/PD_지시_트래킹/개발팀_PD_지시_로그.md @@ -33,6 +33,7 @@ C3·C13 위반에 해당. **즉시 자진 보고 후 소급 등록**. | # | 일시 | 지시 요지 | 처리 상태 | 산출물 경로 | 중단 사유 | 사후 조치 | |---|------|----------|----------|-----------|----------|----------| +| BT14-Org | 2026-08-21 | **세션 끊김 진단 + 세션 수명 체계 구축** — PD 직접 지시 3건 ①"세션이 자꾸 끊기는데 왜그런지 확인해봐" ②"처방대로 진행해" ③"세션 분리 운영하고, 인수인계 체계로 승계하도록 진행해. NerdNavisAi 참고" + hook 절대경로 반문(→ $CLAUDE_PROJECT_DIR 채택). 진단 실측: 스크린샷 116장→세션 30MB→403 사망 / hook 상대경로 27종 침묵 무력화 / 두 PC 병행 인증충돌 가설 정합. 처방: hook cwd 독립화 30종·C14-7 신설·C40 세션 수명 보강(NerdNavis C50-6·C55 이식)·session_health.sh 자동 실측. pm-auditor 조건부 승인 → Critical 2·Major 4 전건 해소 | **진행중** | 공유/조직공지/2026-08-21_세션끊김_진단_및_세션수명_체계_v1.md | | | | BT13-GodDem | 2026-08-19~20 | **GodDem 프로젝트 개시 + 인게임 「황야의 생존자」형 전환** — PD 직접 지시 6건 연속. ①(2026-08-19) "이 세션은 우리 조직의 새로운 프로젝트인 GodDem 프로젝트 개발을 위한 세션이야. 현재 프로젝트 레포는 'E:\NerdNavis\GodDem' 이므로 코드 및 프로젝트를 제대로 검토해보고 개발할 준비가 되면 보고해." ②"앞으로는 도구 사용을 묻지 않도록 자동으로 도구 승인처리해" (+ ToolSearch·MCP 리소스 도구·`.claude/**` 편집 영구 허용 반복 지시) ③"인게임을 유튜브(https://youtu.be/cBVc0OwUX6U 황야의 생존자) 영상과 같은 형태로 변경. 더미 리소스(기존 자산)로 기본 시스템 동일 설계·인게임 씬 배치. **아웃게임 유지, 인게임 씬만 변경**" + 전투 명세 4항(플레이어 중앙 고정 자동공격 / 매판 리셋 로그라이크 스텟 강화 / 10웨이브 보스·스테이지 클리어 / **신규: 경험치→레벨업마다 특수 스킬 3종 택1**) ④"원작 APK 디컴파일해서 게임 로직·데이터 분석. 능력치·성장 수치·강화 비용 등 밸런스 데이터를 그대로 활용하고 싶다" ⑤"FABLE5로 원작 복호화 리버싱을 먼저 시도해봐. 안되면 자체 수치로 설계할게" ⑥"csv 형태로 제작해줘" / "워크플로우 설계할 때 ponytail 스킬을 써줘". **C13 위반 자진 보고** — 본 6건이 대화로그에만 기록되고 본 트래킹 로그에 미등록 상태였음(pm-auditor 감사 Critical 적발). 소급 등록. | **진행중** | ①레포 검토 완료·`공유/대화로그/GodDem/2026-08-19.md` ②`.claude/settings.json` dontAsk+allow 확장 (커밋 `7366860`·`c4a5dfd`) ③설계도 `공유/기획/GodDem/2026-08-19_인게임_중앙디펜스_전환_설계_v1.md` (커밋 `4346d4d`) ④⑤**복호화 성공** — 22바이트 반복 XOR·`libil2cpp.so` 리버싱 불필요. 원작 밸런스 237테이블 복호화 ⑥**CSV 230종/22,261행** 변환·PD 전달. 종합 매핑 SOT `공유/기획/GodDem/2026-08-20_원작밸런스_해독_매핑_v1.md` | — | **PD 결정 대기 2건**: (1) 복호화 XOR 키의 조직 기록 보존 가부 (타사 기술적 보호조치 우회 수단 — PM 재량 밖, C36-2 보수 선택으로 문서에서 마스킹) (2) 원작 절대수치 vs 자체 스케일 재조정 방침 확인. **다음 단계**: 설계 P1(중앙 고정 플레이어+사방 스폰+웨이브 씬 골격 배치) 착수. **후속 조치**: `.gitignore`에 `scratchpad/`·`wild/` 선제 등재, `공유/대화로그/INDEX.md`에 GodDem 등재. **저작권 방침**: 원작 수치는 참고, 아트·텍스트 리소스 사용 불가. 추출물 레포 미커밋(git 실측 확인). | | BT12-Dev-Clone | 2026-05-15 22:00 | **A10 분신 스킬 구현 (C43 호칭 + C49 시범)** — PD 직접 발화 (2026-05-15): "이번에는 분신 스킬을 구현해줘. 이 스킬을 사용하면 플레이어의 x좌표 1 뒤쪽에 반투명한 형태의 플레이어의 분신이 생성되어서 플레이와 동일한 스킬을 사용해야 해. (단, 분신의 공격은 플레이어의 공격력의 50% 반감되어야하고, 플레이어보다 0.5초 뒤 사용해야 해. 공격 시작 딜레이)". A10 = BT12-Dev 미구현 8종 중 1. BT12-Dev 보류 와중 PD 명세 확정 부분 구현. C49 시범 (개발팀장 Opus 설계 → 클라이언트팀 Sonnet 구현 → 개발팀장 검증). **PM 1차 합리적 기본값**: facing 반대 1유닛·alpha 0.5·lifetime 영구 1기 (새 발동 시 기존 대체)·무적 유지 (v0.4 CSV "분신은 무적이나 공격력 비율 감소" 정합)·collision 무충돌·Lv 업 1차 미반영 (후속 안건) **[1단계 완료 2026-05-15 16:56]** 개발팀장 Opus 직접 설계 — `프로젝트/EerieVillage/개발/spec/스킬_시스템_설계_v1.md §A10` 신설 (16 sub-section · 약 320 라인). 구조 결정 = (나) CloneInstance MonoBehaviour + 0.5초 지연 큐 + IsCloneFireActive 분기 (옵션 (가)·(다) 기각근거 명시). 신규 파일 2 + 수정 9 + asset 1 + 테스트 1 = 13 영역 작업 단위 분해. 기각안 5건 (별도 Inventory mirror·Effector 2회 발동·transform swap·8초 lifetime·독립 facing). EditMode 7건 신설 안. PD 결정 안건 3종 (BaseCooldown 30·facing 변경 시 위치·무적 spec). 스킬 이펙트 확정 SOT §3 A10 추가 (BaseCooldown 30·BaseDamage 0·Lifetime 영구·코드 하드코딩 영역 명시) + §4 변경 이력 갱신. | **진행중** | **1단계 완료** — 설계 문서 §A10·이펙트 SOT §3 A10·변경 이력 갱신 완결. **2단계 진행 영역** — 클라이언트팀 Sonnet Task 위임 영역 (신규 4 파일·수정 9 파일·asset 1·테스트 1·약 60~80K 추정). C50 영역 본 Task 누적 약 25K + 2단계 위임 약 60K + 3단계 검증 약 15K = 약 100K. C50 사전 PD 안내 영역 외 자체 판단 — PD 매니페스트 등록 시 인지 영역. | — | 2단계 결과 수령 후 3단계 개발팀장 검증 (C49 표준 프로세스 시범 영역) + PM 보고. **모호 영역 PD 결정 안건** (3단계 검증 보고 명시): (1) BaseCooldown 30 PM 추정 — balance-designer 후속 확정 (2) facing 변경 시 분신 위치 (spawn 시점 고정 vs Player 추종 동조) (3) 분신 무적 = 시각 GameObject 자체 (collider 미부착) — 적이 분신 위 올라타거나 적 투사체 통과 영역 Play 검증 (4) Lv 업 (분신 수 증가 등) 1차 미반영 영역 후속. **[BT12-Dev-Clone 완전 완료 2026-05-18]** α·β·γ·δ 4단계 전수 완료. **α**: CloneInstance.cs (218 라인)·CloneEffector.cs (24 라인) 신규. **β**: PlayerSkillInventory (필드 5종+이벤트)·ActiveSkillRuntime (Fire OnPlayerSkillFired·CalculateEffectiveDamage 50% multiplier)·SkillFireEvent (Minion CardId 분기·Cleanup reset)·SkillRuntimeFactory (A10 추가) 수정 4. **γ**: PlayerSkillInventory.GetSpawnAnchor·GetSpawnFacing helper 2 신설 + 6 Effector (Projectile·Laser·MeleeArea·LightningStrike·PoisonSwamp·SpiritFire) anchor·facing 분기 일관 적용. **δ**: A10_bunsin.asset (CardId A10·BaseCooldown 25·MinionLifetime 12·Category Minion) + CloneSkillTests.cs (EditMode 7건·PD 상수·multiplier·helper·Singleton·재귀 skip 검증) 신규. EerieVillage local commit `171506e` (18 파일 변경·PD Editor GitAutoSync 자동 push 대기·burning.i234.me origin 인증). 설계 v1 §A10 잔존 5 위치 (1423·1427·1431·1524·1572) PD 결정 정합 정리 완료. **[PD 결정 4건 2026-05-15 본 응답]** (1) BaseCooldown **25초** (PM 1차 30→PD 25) (2) MinionLifetime **12초** (PM 1차 영구 1기→PD 12초 자동 소멸·Singleton 유지) (3) facing 고정 확정 (4) 무적 Collider 미부착 확정 (5) Lv 업 시 분신 수 X·추후 지속시간↑+플레이어 참조 데미지 비율(%)↑ (balance-designer 후속 수치). SOT 설계 v1 §A10-1·이펙트 SOT v1 §3 A10·§4 변경 이력 PD 결정 반영 완료. **2단계 진행**: PM 권고 (b) 4분할 채택 — α CloneInstance·CloneEffector 신규 → β Inventory·Runtime·Event·Factory 수정 → γ 6 Effector → δ asset+EditMode. **[BT12-Dev-Clone 완전 완료 2026-05-18 — PD 확정 "좋아 이제 제대로 동작하는거 같아"]** EerieVillage commit 15건 누적 (`171506e` 초기 18 파일 → `412dedb` 최종). 본 PM 자성 #1~#7 (C39-10 위반 누적·feedback_new_code_existing_system_dependency_unmeasured) → PD 직접 지시 채택 "MCP 검증 강제" → 이후 모든 fix `refresh_unity`+`read_console`+`run_tests` 사전 검증. EditMode CloneSkillTests 7건 green (0.7초·T01~T07). 세션 종결 인수인계서 `공유/조직공지/2026-05-18_BT12-Dev-Clone_세션종결인수인계.md` + 대화로그 `공유/대화로그/EerieVillage/2026-05-18.md`. **PM 후속**: 본 commit 후 활성→완료 아카이브 이동·balance-designer 이관 (Lv 업 지속시간+데미지 비율(%) Lv별 수치) | | BT12-Dev-Vis | 2026-05-09 | **PlayerSkillInventory 등록 시각화 지시** — PD 직접 발화: "PlayerSkillInventory 등록이 되었는지 어떻게 판단해야하지? 시각적인 변화가 없으니 확인이 불가능해. 유니티 기본 제공 리소스를 활용해도 좋으니 보이게 해줘." **[2026-05-13 후속 세션 신규 3건]** (1) 투사체 사거리 파란 박스 시각화 — `HitboxDebug.SpawnRange` 신규 (`Projectile.Initialize` 끝 호출·3초 유지·`HideFlags.DontSave`). (2) 사정거리·속도 Inspector 직접 조절 — `ActiveSkillData.MaxRange`·`ProjectileSpeed` 신규 필드 (`RangeTier`·`camWidth`·`mults` 계산 폐기·`PiercingProjectile._speed = 2.5f` override 폐기). (3) A04 ExtraHitFxPrefab + FX_Thunder Smoke — `ActiveSkillData.ExtraHitFxPrefab` 신규·`LightningStrikeSpawner.DelayedExtraHitFx` Coroutine (0.6초 후 spawn·y -0.5·비주얼 전용·판정 무관). EerieVillage `ab40b27` push 정합. **[2026-05-13 사고 정정]** 본 PM `git reset --hard origin/main` 영역 PD Inspector 작업 .asset 6 폐기 사고 발생. PD 보고 "스킬 관련 스크립터블 오브젝트가 full 이후 롤백되어버렸어" 수령. `git reflog` 영역 `e2bc95f` 보존 정합·.asset 6 복구·EerieVillage `5b2a032` push 정합. A04 ExtraHitFxPrefab (FX_Thunder Smoke) 영역 PD 후속 Inspector drag&drop 필요. 본 PM 자성 #4 (헌법급) 등재. **[2026-05-13 신규 2건]** (1) 디버그 박스·사거리 박스 시각화 off (재활용 toggle) — `HitboxDebug.ShowDebugVisuals` 플래그 신규·4 위치 `SpriteRenderer.enabled` 정합. (2) 레벨업 카드 풀 5종 한정 — `SkillRuntimeFactory.AvailableCardIds` 화이트리스트 (A02·A13·A04·A05·A_Laser)·미완성 placeholder 5종 (A01·A03·A08·A14·A15) 제외. EerieVillage `d26bd83` push 정합. **잔여**: A04·A05·A_Laser 영역 SkillFireEvent default return 영역 실전 발사 미연결 (카드 풀 한정 영역과 별개·PD 후속 결정 대기). **[2026-05-13 정정·진단]** (1) A05·A_Laser 박스 시각 off 누락 정정 — MeleeAreaSpawner·LaserSpawner 영역 직접 SpriteRenderer 부착 코드 (HitboxDebug 미경유) 영역 `sr.enabled = HitboxDebug.ShowDebugVisuals` 추가. 본 PM 자성 #5 (변경 영향 사전 grep 누락). (2) Player 피격 X 진단 Debug.Log 추가 (회수 의무) — EnemyController.Update L387-396 영역 `[EnemyHit][Intersect]`·`[EnemyHit][Decrement]` 2종. PD Console 측정 결과 영역 근본 fix·Debug.Log revert. EerieVillage `e8779df` push 정합. **[2026-05-13 신규]** 게임 시작 시 기본 파이어볼 A02 자동 습득 — `PlayerSkillInventory.StartingCardIds` (string[]) Inspector 필드·기본 `{ "A02" }`·`Start()` 영역 일괄 `AddSkillByCardId`. EerieVillage `0ad1325` push 정합. **[2026-05-13 신규 2건]** (1) Player 피격 X fix — EnemyController.Update L387-396 영역 `IsGrounded` 조건 폐기 (PD 표현 "닿아도" = ground·공중 무관 피격 의도)·진단 Debug.Log 2종 revert. (2) Enemy HP 30~40 random — `Health.RandomMaxHPRange` (Vector2Int) Inspector 필드 신규·Awake 영역 random·`maxHearts` 자동 산정·Enemy.prefab Inspector `(30, 40)` PD 직접 설정. 본 PM 자성 #6 (PD Console 측정 결과 미수신 영역 가설 fix 시도·feedback_pm_root_diagnosis_priority 약한 위반). EerieVillage `b4847b1` push 정합. **[2026-05-13 재발 정정]** (1) Enemy HP 30~40 자동 fallback — Health.Awake 영역 RandomMaxHPRange 미설정 + EnemyController 검출 → 자동 random. PD Inspector 의존 폐기. (2) Player 피격 distance 기반 강화 + 진단 Debug.Log 재추가 — `VisualBounds.Intersects OR dist < 1.5f` 단일 조건·`[EnemyHit]` 진단·회수 의무. 본 PM 자성 #7 (feedback_pm_root_diagnosis_priority 위반 누적). EerieVillage `2efcd34` push 정합. **[2026-05-13 신규]** Enemy·Player 사망 모션 y -0.5 오프셋 — EnemyDeath·PlayerDeath Execute 영역 Animator death/hurt Trigger 직전 `transform.position.y -= 0.5` 적용·sprite 위로 떠 보이는 현상 정정·collider 영향 X. EerieVillage `18b2125` push 정합. **[2026-05-13 신규]** 스킬 선택 UI 아이콘 fallback — SkillCardSlot.Bind 영역 card.Icon null 시 동적 원 sprite (32×32 알파) + 속성별 색상 (Fire 주황·Frost 하늘·Dark 보라·Lightning 노랑·Physical 흰). _glowEffect 동심원 빛 효과 alpha 0.3. EerieVillage `32ab76f` push 정합. **[2026-05-13 신규 2건]** (1) 사망 모션 y -0.5 → -0.3 (EnemyDeath·PlayerDeath). (2) 게임 시작 시 파이어볼 투사체 정지·잔존 fix — ProjectileSpawner.Trigger 영역 `facing.sqrMagnitude<0.01f` 시 `Vector2.right` fallback. 원인: Player.Facing 영역 (0,0) 영역 → _direction = (0,0) → _speed × 0 = 정지. EerieVillage `56a4a36` push 정합. **[2026-05-13 신규]** 투사체끼리 통과 fix — Projectile.OnTriggerEnter2D 영역 동족 Projectile skip (Wall·Enemy 판정 이전). 원인: fallback GO default Layer 0 영역 → isWall=true → 양쪽 SelfDestruct. EerieVillage `ebd7086` push 정합. **[2026-05-13 신규 4건]** (1) Player 사망 사라지는 현상 fix — PlayerDeath 영역 `Rigidbody2D.simulated=false` (gravity 정지·낙사 차단). (2·3) 제자리 부활·부활 모션·2초 무적 깜박 — PlayerSpawn 영역 `Teleport` 폐기·`health.Resurrect()` 호출 (currentHP=maxHP·invulnerableUntil=2초·Animator resurrect Trigger)·Rigidbody simulated=true 복원·PlayerInvulnerabilityFlash 자동 깜박. (4) FX 잔상 safety cap 5초 — LaserSpawner fx Destroy 누락 추가·LightningStrike·MeleeArea·Projectile.AutoDestroy 영역 `Mathf.Min(lifetime, 5f)` cap. EerieVillage `3a672f0` push 정합. **[2026-05-13 컴파일 에러 fix]** PlayerSpawn.cs CS0246 — using UnityEngine 누락·첫 줄 추가. 본 PM 자성 #8 (신규 type 사용 시 namespace using 사전 검증 누락). EerieVillage `c052d78` push 정합. **[2026-05-13 신규 3건]** (1) Player 죽는 모션 X fix — Player.controller parameter "hurt" 부재 측정·`SetTrigger("hit")`·`updateMode=UnscaledTime`. (2) 부활 모션 중 움직임 fix — PlayerSpawn simulated 복원 폐기·EnablePlayerInput 영역 이전. (3) 투사체 잔상 진단 — `[Projectile][SelfDestruct]`·`[Projectile][OnDestroy]` Debug.Log·회수 의무. 본 PM 자성 #9 (Animator parameter 사전 측정 누락). EerieVillage `69a1805` push 정합. **[2026-05-13 NullReferenceException + 잔존 근본 fix]** ProjectileSpawner.Trigger 영역 collider isTrigger=true 활성 시점 vs Initialize 호출 시점 race → OnTriggerEnter2D 영역 `_runtime=null` NullReferenceException → SelfDestruct 미호출 → 영구 잔존. fix: OnTriggerEnter2D 영역 `_runtime/_data == null` defensive return + Update 영역 `_data == null` 시 즉시 SelfDestruct. 본 PM 자성 #10 (race condition 사전 측정 누락). EerieVillage `1437720` push 정합. **[2026-05-13 신규 3건]** (1) 사망 팝업 타이밍 fix — LevelUpManager.HandleLevelUp 영역 Player 사망 상태 시 _pendingLevels 영역 저장·Update 영역 IsAlive 회복 시 표시. (2) Player 사망 y -0.3 추가 (누적 -0.6). (3) 투사체 잔상 강화 + 진단 — Projectile.Update 영역 lifetime+0.5 backup·Initialize·Trigger 영역 진단 Log·회수 의무. EerieVillage `b1931af` push 정합. **[2026-05-13 근본 원인 fix]** 재시작 시 정지 투사체 누적 — Time.timeScale=0 (LevelUp 등) 영역 Time.time·Invoke 정지 영역 영구 잔존. fix: Projectile `_spawnTime = Time.unscaledTime`·Update 영역 unscaledTime lifetime check·Invoke 폐기·CancelInvoke 추가 안전. 본 PM 자성 #11 (timeScale 영향 사전 측정 누락). EerieVillage `705d943` push 정합. **[2026-05-13 진단 Log 회수]** PD "사라졌어" 정합 작동 확인 후 진단 Debug.Log 5종 revert (ProjectileSpawner·Projectile.Initialize·SelfDestruct·OnDestroy·EnemyHit). Projectile.Update lifetime backup·CancelInvoke 안전망 보존. feedback_pm_root_diagnosis_priority 정합. EerieVillage `41fa4e4` push 정합. **[2026-05-13 신규 2건]** (1) MeleeArea 실전 발사 연결 — SkillFireEvent.Execute switch 영역 MeleeArea case·CardId 분기 (A04·A_Laser·기타). (2) FX AutoDestroy unscaledTime — FxAutoDestroyUnscaled MonoBehaviour 신규 (Object.Destroy 영역 timeScale 영향 fix)·전수 변경·WaitForSecondsRealtime. 본 PM 자성 #12 (Unity 표준 API timeScale 영향 사전 측정 누락). EerieVillage `26b0666` push 정합. **[2026-05-13 신규]** A04 번개 충격 적 유무 무관 자동 발동 — LightningStrikeSpawner.Trigger 영역 candidates 0 시 Player 위치 fallback spawn. A05·A_Laser = 이미 Player 위치 기준 발동·정합. EerieVillage `ebedf6d` push 정합. **[2026-05-13 InvalidOperationException Input System fix]** ParticleGroupView (2).cs 영역 삭제 (Scenes 폴더 영역 비정상 .cs·미사용·StandaloneInputModule 동적 부착 코드)·ProjectSettings activeInputHandler 1→2 (Both 모드·호환). 본 PM 자성 #13. EerieVillage `b30976a` push 정합. **[2026-05-13 본 PM 자성 #14 + fix 정정]** PD 직접 자성 지적 — 본 PM 직전 미승인 `.cs` 삭제 영역 정정. PD 재배치 후 ParticleGroupView (2).cs UnityEngine.Input → InputSystem 전환·activeInputHandler 2→1 revert. EerieVillage `b23e00f` push 정합. **[2026-05-13 Phase A]** A12 정화의 빛 신규·A08 저주의 화살 이펙트 적용 — ActiveSkillData.CastFxPrefab 신규·ProjectileSpawner.Trigger 영역 CastFx spawn·SkillRuntimeFactory.AvailableCardIds 7종 확장. **Phase B 대기** (A06 독 늪·A11 정령불 신규 Effector). EerieVillage `5077f5d` push 정합. **[2026-05-13 Phase B]** A06 독 늪·A11 정령불 신규 Effector + 1키·2키 매핑 — PoisonSwampSpawner/Instance/PoisonedEnemyMarker·SpiritFireSpawner/Instance 신규·SkillFireEvent switch PlacementPersistent·Minion case 확장·TestSkillFireOn1to5 Category 분기 추가·A06·A11 .asset 신규·SkillRuntimeFactory 9종. PD Inspector Player.prefab Skill1·Skill2 drag&drop 필요. EerieVillage `f292eb4` push 정합. **[2026-05-13 Phase B FX 재생 fix]** ParticleSystem 명시 `Play(true)` 호출 추가·PoisonSwampInstance 영역 BoxCollider2D·Rigidbody2D 자식 GO 분리 (ParticleSystem root 영향 차단). EerieVillage `b1b476a` push 정합. **[2026-05-13 A11 frame 제어]** FX_Rotating shield Animator frame 제어 — intro 1~88·loop 89~105 반복·outro 106~169 (남은 frame). Animator.Play(STATE_HASH, 0, normalizedTime) 매 frame 호출. EerieVillage `ebd0808` push 정합. **[2026-05-13 A12·A08·전수 FX Play]** 4 Spawner + Projectile 영역 ParticleSystem.Play(true) 명시 호출 전수 적용 (직전 b1b476a 영역 PoisonSwamp·SpiritFire만 적용 영역 영역 영역 보완). EerieVillage `68843a8` push 정합. **[2026-05-13 A08 sprite 방향 fix]** ActiveSkillData.ProjectileAngleOffset (float Range -360~360) 신규·Projectile.Initialize 영역 angle 보정·A08.asset 180 (FX_PinkMagicArrow sprite left→right). EerieVillage `71c3b7d` push 정합. **[2026-05-13 A08 FX 진단]** A08.asset GUID 정합·코드 정합 측정. PD 보고 영역 실측 진단 Debug.Log 추가 (회수 의무). EerieVillage `aa6cef1` push 정합. **[2026-05-13 CS1056 fix]** ProjectileSpawner.cs interpolated string `\"NULL\"` escape 영역 컴파일 에러·ternary 결과 변수 분리 fix. 본 PM 자성 #15 (Edit 후 컴파일 사전 검증 누락). EerieVillage `9879425` push 정합. **[2026-05-13 fileID 잘못된 측정 정정·자성 #16]** PD Inspector 측정 결과 영역 본 PM .asset 영역 fileID 영역 자식 GameObject 영역 매핑 영역. `grep -m 1` 영역 첫 GameObject 영역 = root 영역 영역 X. A08·A06·A12 .asset 영역 fileID 일괄 정정 (FX_PinkMagicArrow_Hit·FX_PinkArrow_Shoot·FX_Venom_Spray·FX_Icelight_Seal). 올바른 측정 = `awk m_Name + m_Father=0 정합`. EerieVillage `b26eb42`·`447ea92` push 정합. **[2026-05-13 CastFx 방향 + 진단 회수]** CastFx Instantiate 영역 facing+ProjectileAngleOffset+FxRotation 적용 (sprite 반대 방향 정정)·진단 Debug.Log 3종 revert. EerieVillage `7ad3319` push 정합. **[2026-05-13 A08 spawn 끝점·grace]** A08.asset OffsetDistance.x=1.5 (캐스팅 끝 spawn)·Projectile.OnTriggerEnter2D 영역 0.1초 grace 추가 (Hit FX Player 위치 회피). EerieVillage `eab215d` push 정합. **[2026-05-13 ScalingMode Hierarchy 전수]** 모든 fx spawn 영역 ParticleSystem.MainModule.scalingMode = Hierarchy 설정 (HitFxScale 정합 적용·7 파일 전수). EerieVillage `6ed6efe` push 정합. **[2026-05-14 자연 fade SelfDestruct]** Projectile.SelfDestruct 영역 즉시 Destroy 영역 → ParticleSystem Stop(emission)·Collider/박스 disable·_speed=0·0.5s 후 Destroy·FADE_START_RATIO 0.85. 발사 영역 영역 영역 trail 자연 연속. EerieVillage `2ee5084` push 정합. **[2026-05-14 A08 캐스팅 제거·적 조준]** A08.asset OffsetDistance.x=0·CastFx=null·TargetEnemyOnFire=1·ActiveSkillData.TargetEnemyOnFire 신규·ProjectileSpawner.Trigger 영역 nearest enemy 방향 발사. 벽·발판 관통 X 영역 = Projectile.Update Layer 0·16 OverlapPoint 영역 정합. EerieVillage `55ee4f3` push 정합. **[2026-05-14 HitFx sortingOrder·적 조준 하단]** 모든 hit fx (Projectile·LightningStrike·MeleeArea·Laser) Renderer.sortingOrder += 100 (Enemy 영역 위)·ProjectileSpawner TargetEnemyOnFire 영역 toEnemy.y -= 0.5 (hitbox 영역 영역 영역 적중). EerieVillage `eb33e64` push 정합. **[2026-05-14 적 조준 중간 보정]** toEnemy.y -= 0.5 → 0.25 (이전·1차 중간·너무 하단 정정). EerieVillage `b52c99d` push 정합. | **진행중** | 신규 `Assets/Scripts/MyUI/SkillInventoryHUD.cs` (OnGUI 좌상단·장착 액티브 DisplayName·Lv·CooldownRemaining/EffectiveCooldown·패시브 카운트). PlayerController.Awake 자동 부착. 보강: ProjectileSpawner fallback prefab에 SpriteRenderer + 동적 흰색 원 sprite + 속성별 색상 (Fire 주황·Frost 하늘·Dark 보라·Lightning 노랑·Physical 흰). Unity 기본 자원 활용 — Texture2D 동적 생성 16×16 알파 원. **[이펙트 개선 완료 2026-05-13]** (PD 지시 "이펙트 개선작업은 완료처리"). 본 세션 (`cranky-wescoff-e855b0`) 누적: (1) 5 스킬 통합 + 1~5 키 발사 시스템 — A02·A04·A05·A_Laser·A13 (EerieVillage `2ebf313`). (2) Inspector 즉시 반영 필드 확장 — HitboxSize·OffsetDistance(Vector2)·OffsetXY·FxRotation·HitFxScale·DamageFrameDelay·EnableRepeatDamage·MaxHitCount·RepeatFrameInterval. (3) hit 모션 + flash 연출 (붉은색·alpha 50%·1 frame) — Animator self-loop transition + Health.DecrementBypassInvulnWithHit. (4) Scene 잔존 박스·FX 6개 cleanup + HideFlags.DontSave 8 spawn 지점 (EerieVillage `60e28e3`) — Edit Mode execute_code 측정 시 Scene 오염 방지 표준 확립. (5) FxRotation 박스 미적용 분리 (EerieVillage `ea7d32f`) — 박스(판정) = facing 만 · 이펙트(시각) = facing + FxRotation. 4 case 검증 (facing R/L × FxRotation 0/90 박스 무반응·facing 좌/우 정확 반전). (6) A05 좌우 베기 이펙트 Player 동조 (EerieVillage `f6c6eb5`) — MeleeAreaSpawner.SetParent(true) 추가·Player 전진 시 이펙트 밀림 정정 (Δ+2.0 동조 측정). 양 레포 push 정합. | — | **이펙트 개선 영역 = 완료 처리.** HUD·Icon UI·Layer Lab 카드 정합 등 잔여 사항은 PD 후속 결정 대기. 인수인계서: `공유/조직공지/2026-05-13_BT12-Dev_세션종결인수인계.md`. **[이펙트 작업 완성 확정 2026-05-14]** (PD 발화 "스킬 이펙트 작업은 완성이야. 임의로 투사체 판정 범위나 크기 등이 바뀌지 않도록 지금 상태를 잘 기록해"). 본 PM SOT 신설: `프로젝트/EerieVillage/개발/spec/스킬_이펙트_확정_v1.md` — 13 활성 스킬 (A01·A02·A03·A04·A05·A06·A08·A11·A12·A13·A14·A15·A_Laser) 핵심 필드 표 + 박스↔이펙트 분리 원칙 + EerieVillage stamp `1a1de0c`. **변경 금지 원칙**: PD 직접 명시 지시 없이 임의 변경 금지. 변경 시 SOT §4 갱신 + commit + PD 보고 의무. 본 PM·차기 세션 PM 모두 본 SOT 준수. | diff --git a/공유/대화로그/조직운영/2026-08-21.md b/공유/대화로그/조직운영/2026-08-21.md new file mode 100644 index 0000000..83ce48b --- /dev/null +++ b/공유/대화로그/조직운영/2026-08-21.md @@ -0,0 +1,39 @@ +# 조직운영 대화로그 — 2026-08-21 + +## 세션: 세션 끊김 진단 + BT14 세션 수명 체계 구축 (총괄PM) + +### PD 직접 지시 (BT14-Org) +1. "세션이 자꾸 끊기는데 왜그런지 확인해봐" +2. "처방대로 진행해" + "세션 분리 운영하고, 인수인계 체계로 승계하도록 진행해" + "E:\NerdNavisAi 참고" +3. hook 절대 경로화 반문 "상대 경로로 진행하는 것이 범용성을 높일 수 있는 것 아니야?" → **PD 지적 수용, `$CLAUDE_PROJECT_DIR` 방식 채택** (드라이브 고정 절대 경로는 C16 위반이었음) +4. 가설 제시 "다른 PC의 BurningTimesAi 세션 병행 때문 아닌가" + "GodDem 이어서 진행 가능한가?" + +### 진단 결과 (실측) +- 8/20 세션: 스크린샷 116장 base64 축적 → 30MB → `403 socket closed`(`authentication_failed`) 사망. 대조군 8/13 세션 = 이미지 1장·에러 0건 +- 후속 세션 47분 무기록 즉사 (원인 미규명 — 관찰 항목) +- 세이프가드 `[cyber]` 차단 1건 +- hook 29종 상대 경로 → GodDem cwd 세션에서 에러 422건 + 27종 침묵 무력화 (auditor_gate 포함·fail-open) +- PD 두 PC 병행 가설: `authentication_failed`와 정합 (토큰 갱신 충돌). 복합 요인 추정 + +### GodDem 승계 판정 +**문제없이 이어감 가능.** GodDem.git 미푸시 0·조직 레포(BurningTimesAi.git 공유) main 동기화·로컬 dirty 10건은 A10 분신 작업(BT12-Dev-Clone) 중간 상태로 보존 중 — 유실 아님, 재개 지점. + +### 집행 (pm-auditor 조건부 승인 → 전건 해소) +| 항목 | 산출물 | +|------|--------| +| hook cwd 독립화 30종 | `.claude/settings.json` | +| C14-7 스크린샷 최소 획득 신설 | `bt-document-mgmt/SKILL.md` | +| C40 세션 수명·종결 표준 순서·인수인계 2계층 보강 (양쪽 정합) | `bt-session-mgmt`·`bt-foundation` SKILL | +| session_health.sh 신설 (transcript_path 실측·게이트 헬스체크 내장) + UserPromptSubmit hook 등록 | `scripts/session_health.sh` | +| NerdNavis 노하우 이식 (C50-6·C55·C40-1-A·이어가기 프롬프트 패턴) | 상동 | +| 조직공지·feedback 메모리 2건·MEMORY.md 인덱스·코어룰 인덱스 이력 | `공유/조직공지/2026-08-21_세션끊김_진단_및_세션수명_체계_v1.md` 외 | + +### #이슈 (pm-auditor 적발 — C3 기록) +- **Critical 2**: session_health hook 신설을 감사 계획서에 미기재 상태로 선집행 (고정비 추가는 계획 선기재 의무 — feedback 등재) +- **Major 4**: 매니페스트 미등록 상태에서 settings.json 편집 선행 — hook 무력화 사고의 실증. 등록 후 재집행 +- 진단 ②(무기록 즉사) 미규명·③(세이프가드) 처방 불가 — PD 명시 고지 + +### 결정·방침 +- 세션 수명 기준: 10MB / 이미지 30장 / API 끊김 / 압축 발생 (권고 기준 — 운영 조정 가능) +- 이 PC(E:\BurningTimes) 단독 운영 권장. 두 PC 병행 시 동시 세션 금지 +- C40 하위 번호 미사용 (무번호 소절) — C40-1~4 부재 상태에서 C40-5 신설 시 번호 기형 (감사 Major 1) diff --git a/공유/조직공지/2026-08-21_세션끊김_진단_및_세션수명_체계_v1.md b/공유/조직공지/2026-08-21_세션끊김_진단_및_세션수명_체계_v1.md new file mode 100644 index 0000000..5a64c69 --- /dev/null +++ b/공유/조직공지/2026-08-21_세션끊김_진단_및_세션수명_체계_v1.md @@ -0,0 +1,48 @@ +# 세션 끊김 진단 및 세션 수명 체계 v1 (BT14) + +> **일자**: 2026-08-21 · **집행**: 총괄PM · **PD 승인**: "처방대로 진행해" + "세션 분리 운영·인수인계 승계·NerdNavisAi 참고" (2026-08-21 직접 지시) +> **사전 감사**: pm-auditor 조건부 승인 — Critical 2·Major 4 전건 해소 반영 + +--- + +## 1. 진단 결과 (실측) + +| # | 실측 사실 | 판정 | +|---|----------|------| +| ① | 8/20 세션에 Unity 스크린샷 **116장** base64 축적 → 세션 기록 **30MB** → `403 The socket connection was closed unexpectedly` (`authentication_failed`)가 마지막 이벤트로 세션 사망 | 주원인 추정 (페이로드 비대). 8/13 세션은 이미지 1장·에러 0건 (대조군) | +| ② | 후속 세션(1.2MB)이 47분 만에 도구 결과 수신 직후 **무기록 즉사** | **원인 미규명** — 크래시 패턴. 관찰 항목으로 유지 | +| ③ | 세이프가드 `[cyber]` 차단 1건 (새 세션 재시도 강제) | 처방 불가 영역 — 발생 시 표현 우회·새 세션 대응 | +| ④ | `.claude/settings.json` hook 29종 전부 상대 경로 등록 — cwd가 GodDem인 세션에서 **에러 422건 + 27종 hook 침묵 무력화** (auditor_gate 포함, fail-open) | 확정 결함 — 본 건 처방 | +| ⑤ | PD 가설 "두 PC 병행 사용": 에러 유형이 `authentication_failed`로 **토큰 갱신 충돌 가설과 정합**. 단독 원인 단정 불가 — ①과 복합 추정 | 이 PC 단독 운영 시 소멸 | + +## 2. 처방 집행 내역 + +| # | 처방 | 산출물 | +|---|------|--------| +| 1 | **hook cwd 독립화 30종** — `cd "$CLAUDE_PROJECT_DIR" && bash scripts/...` 전량 적용 (인라인 git 2건 포함). GodDem cwd 시뮬레이션·JSON 검증 통과. 본 세션에서 auditor_gate 즉시 재작동 실증 | `.claude/settings.json` | +| 2 | **C14-7 신설** — 스크린샷·이미지 최소 획득 (텍스트 실측 우선·허용 3종·30장 상한) | `bt-document-mgmt/SKILL.md` | +| 3 | **C40 세션 수명 판정·분리 운용 보강** — 기준 10MB/이미지 30장/API 끊김/압축 (권고, 조정 가능) 도달 시 인수인계 후 세션 전환. `bt-foundation`·`bt-session-mgmt` 양쪽 정합 갱신 | SKILL 2종 | +| 4 | **세션 수명 자동 실측 hook 신설** — UserPromptSubmit·10분 주기. hook stdin `transcript_path` 기반 현 세션 정확 식별 + auditor_gate fail-open 헬스체크 내장 | `scripts/session_health.sh` | +| 5 | **NerdNavis 노하우 이식** — 종결 표준 순서(C50-6: 인수인계서 최후 작성·역순 금지), 인수인계 2계층(C55: 핵심 요약+세부 아카이브·완료 태그 1줄), 인수인계서↔SOT 정합 의무(C40-1-A), 미래형 표기 금지(C50-6-2), 이어가기 프롬프트 패턴("본문을 채팅에 풀지 않는다 — 인계서를 읽게 한다") | `bt-session-mgmt/SKILL.md` | + +## 3. 감사 지적 반영 (pm-auditor) + +- **Critical 1** `session_health.sh` untracked → 본 커밋 포함 ✓ +- **Critical 2** hook 신설 계획 미기재 선집행 → 본 공지·PD 보고 명시 ✓ (신규 hook 1건 = 상시 실행 고정비 추가. 평시 출력 0줄이라 컨텍스트 비용은 실질 0, 프로세스 실행 비용만 존재) +- **Major 1** C40-5 번호 기형 → 하위 번호 미사용·무번호 소절 방식 채택 (번호 체계 무변경) ✓ +- **Major 2** C40 본문 2곳 중복 → 양쪽 동시 갱신 ✓ +- **Major 3** 진단 ②③ 미처방 → 본 공지 1절 명시 ✓ +- **Major 4** 매니페스트 미등록 → `2026-08-21_BT14_SessionSurvival` 등록 후 집행 ✓ +- **Minor 2** 현 세션 식별 proxy → `transcript_path` 실측 방식 전환 + GNU stat 의존 제거 ✓ +- **Improvement** fail-open 게이트 → `session_health.sh` 헬스체크 내장 ✓ + +## 4. 잔여·관찰 항목 + +- 진단 ② 무기록 즉사: 원인 미규명. 재발 시 발생 시각·직전 작업 기록해 본 문서에 추가 +- 두 PC 병행 사용: **이 PC(E:\BurningTimes) 단독 운영 권장** — 병행 필요 시 동시 세션 금지 +- `~/.claude` 하위 nerdnavis-audit 동기화 충돌 파일 수백 건 (OneDrive 추정): 세션 끊김과 무관 판정. 별도 정리 후보 + +## 5. 참조 + +- 이식 원본: `E:\NerdNavisAi` (NerdNavis 조직 레포) — C50·C55·C40-1-A·C17-3·인수인계서_체크리스트_v1 +- 세션 실측 근거: `C:\Users\sw\.claude\projects\E--BurningTimes\66f66968*.jsonl` (30MB·이미지 116장·403 에러) 및 `6f0d01eb*.jsonl` (무기록 즉사)