# BT5-Dev 세션 종결 인수인계서 (2026-05-07)

> **C40-2-1 표준 12 섹션** + **C40-2-2 다음 세션 첫 프롬프트 템플릿** 정합
> **세션 영역**: BT5-Dev Hero1 캐릭터 교체 + 발판 시스템 (BT12·#1~#47)
> **종결 사유**: PD 컨텍스트 한도 영역 신규 세션 인계

---

## §1. 집행 요약

본 세션 핵심 결과:

1. **BT5-Dev #1~#19 (Hero1 캐릭터·기본 게임 메커니즘)**: 캐릭터 교체·캐릭터 리소스 규칙 v1·밟기·낙사·부활·통과·점프 등 19단계 진행. 본 PM 직무 결손 누적 (Layer/Tag 미실측·Unity 외부 repo commit 누락·MCP 미활용)
2. **BT5-Dev #20~#47 (발판 통과 시스템)**: Drop-Through Platform 패턴 28회 시도. 표준 패턴 검토 부족·코드만 수정 패턴 누적 → PD 강한 어조 반복
3. **헌법급 feedback 5종 신설**:
   - `feedback_pm_excessive_decision_request` (옵션 나열·결정 요청 폐기)
   - `feedback_unity_external_repo_commit_omission` (양 git push 의무)
   - `feedback_pm_mcp_direct_implementation` (PD 떠넘김 폐기·기획자 포지션 인지)
   - `feedback_pm_filler_word_overuse` ("영역" 어휘 무한 반복 차단)
   - `feedback_pm_solution_proactive_proposal` (표준 패턴 능동 제안)
4. **PostToolUse hook 신설**: `scripts/filler_word_check.sh` (Edit/Write 시 "영역" 8회 이상 차단)
5. **Unity MCP server install 성공**: `mcpforunityserver==9.6.6` (Claude Code 재시작 후 활성)

세션 종결 시점 EerieVillage 영역 commit `1024e08` (BT47), BurningTimes main 영역 다수 commit 누적.

---

## §2. 완료 아카이브

본 세션 신규 완료 항목 0건 (BT5-Dev 활성 지시 그대로 진행 중).

---

## §3. 활성 PD 지시 (4건 — 변동 없음)

| BT | 상태 | 본 세션 영역 |
|----|------|------|
| **BT5-Dev** | **진행중** | Hero1 + 발판 #1~#47까지 진행. 발판 통과 영역 미해결 |
| BT12-Dev | 보류 | 본 세션 영역 X |
| BT7-Plan | 진행중 | 본 세션 영역 X |
| BT7-Dev | 진행중 | 본 세션 영역 X |

---

## §4. 원격 반영 상태

| 영역 | 최신 commit |
|------|-----|
| **BurningTimes** origin/main | 본 세션 종결 commit (인수인계서 push 후) |
| **EerieVillage** origin/main | `1024e08` (BT47 — Tile 자동 영역 분리) |

양 레포 모두 origin/main 정합 동기화 (`feedback_unity_external_repo_commit_omission` 정합).

---

## §5. Inbox 잔류

PM 미처리 통신 0건.

---

## §6. 후속 안건 (다음 세션 영역)

### 6-A. BT5-Dev 발판 통과 시스템 미해결 (PD 추가 검증 영역)

- **현재 영역 (BT47)**: Level Tilemap 공중 Tile (Player 시작 Y + 1.5 위) 자동 영역 Foreground 이동 + Foreground Layer 16 + Tile m_ColliderType=Sprite 강제
- **PD 검증 의무**: `Ctrl+R` Refresh + Play → Console `[BT47-MoveTiles] moved=N` 출력 + 공중 발판 점프·이동 통과·착지 검증
- **만약 미동작**: PD 영역 직접 Editor 수정 권고 (Unity Hierarchy → Level GameObject Tilemap → 공중 발판 Tile 영역 잘라내기 → Foreground Tilemap 영역 붙여넣기)

### 6-B. BT47 검증 결과 분기

| 결과 | 다음 단계 |
|------|---------|
| 동작 정합 | BT5-Dev 5단계 완결 + 완료 아카이브 이동 |
| Foreground 영역 영역 영역 영역 X | PD가 직접 Editor에서 Tile 분리 |
| 다른 GameObject 영역 발판 | 본 PM 즉시 Editor.log read해서 식별·정정 |

### 6-C. Unity MCP 활용 (즉시 효과 영역)

- **본 세션 install 완료**: `mcpforunityserver==9.6.6`
- **다음 세션 활성 의무**: Claude Code 종료·재실행 → `mcp__unityMCP__*` 도구 활성
- 활성 시 본 PM이 직접 Unity Editor·Console·Scene·GameObject·PlayMode 조작 가능

### 6-D. 활성 PD 지시 3건 진행 영역 (변동 없이 인계)

- BT12-Dev (보류·차단 블로커 4종)
- BT7-Plan (카드 시스템 9개 문서 순차 개정)
- BT7-Dev (VS 순수형 자동 발동 Phase 1 PM 수행 대기)

### 6-E. Phase 5 운영 측정 (BT10 후속·변동 없이 인계)

`memory/skill_measurement_sot.md` 베이스라인 데이터 수집 영역.

---

## §7. commit 인덱스 (본 세션 — 시간 순)

### EerieVillage (Unity 외부 영역)

| commit | 내용 |
|--------|------|
| `eed8ee5` | BT5-Dev #16: PM 변경 영역 일괄 commit (79 파일) |
| `ce202ea` | BT17 marker 추가 |
| `4dd58c0` | BT18: Player 영역 fallback FindFirstObjectByType |
| `db6bb20` | BT19: 지형 통과·밟기·낙사 hit 모션 |
| `e5eb9ec` | BT20: IgnoreCollision Update fallback + STOMP_MIN_DY 0.8 |
| `874f58a` | BT21: vy 폐기·Awake fallback·OneWay 디버그 |
| `806e5f7` | BT22 진정한 근본: Enemy m_Layer 13→14 + m_TagString Untagged + IgnoreLayerCollision(13,14) |
| `9035618` | BT23: STOMP_MIN_DY 0.8→1.0 |
| `d4e8708` | BT24: STOMP_MIN_DY 1.0→0.7 (실측 dy 0.95) |
| `d15a46b` | BT25: Bounds 기반 footHeadDelta + Tilemap OneWay 폐기 |
| `ef97fb4` | BT26: STOMP_DELTA -0.3~0.1 |
| `151cd17` | BT28: Tilemap Layer 8 + STOMP_DELTA |
| `ebab78c` | BT28-2: STOMP_DELTA -0.4~-0.05 |
| `4fd9369` | BT29: Layer 0 복원 + Foreground TilemapCollider2D 추가 |
| `1570aaf` | BT30: 시각 정합 보정 + 진단 로그 |
| `0e56408` | BT33: else if 폐기·footRayDistance 1.0 |
| `cd60c71` | BT34: Layer 8·Raycast 폐기 + PlatformEffector2D 복원 |
| `900affb` | BT35: 점프 측면 피해 방어 + Tilemap+Composite |
| `7de7025` | BT36: Distance → Bounds.Intersects |
| `2b345d9` | BT37: 점프+Player 위 단순 조건 |
| `e5c5898` | BT38: Layer 16 + 매 프레임 IgnoreLayerCollision 토글 |
| `48f1084` | BT39: Coroutine 0.3초 |
| `a6e0c0d` | BT40: ContactFilter2D mask 동적 갱신 (개발팀장 진단) |
| `b6baec2` | BT41: PrepareToJump 즉시 mask OFF + jumpState=Jumping ascending |
| `fc24345` | BT42: 걷기·측면 통과 (footHit + IsGrounded) |
| `41c4b9e` | BT43: IsGrounded 폐기·footHit 단독 |
| `2294da9` | BT44: Level Tilemap Layer 0 + Foreground Layer 16 분리 |
| `1be657e` | BT45: Level Tilemap Layer 16 복원 |
| `06c6d5b` | BT46: Level Layer 0·Foreground Layer 16 + Tile m_ColliderType=Sprite 강제 |
| `1024e08` | **BT47**: Level Tilemap 공중 Tile 자동 영역 Foreground 이동 (현재 최신) |

### BurningTimes 영역 (본 세션 종결 영역 — 본 응답 commit)

| commit | 내용 |
|--------|------|
| `5968395` | BT22 진정한 근본 자인·feedback_pm_mcp_direct_implementation 신설 |
| `5ac7ddd` | filler_word_check.sh hook + settings.json 등록 |
| `0ba97ad` | feedback_pm_solution_proactive_proposal 신설 |
| `a65eb0b` | feedback_pm_filler_word_overuse 신설 |
| (본 응답) | 본 인수인계서 + 대화로그·PD 지시 SOT·MEMORY 갱신 |

---

## §8. 주요 파일 경로

### Unity 외부 영역 (E:/EerieVillage)

| 파일 | 본 세션 변경 |
|------|------|
| `Assets/Scripts/Mechanics/PlayerController.cs` | UpdateContactFilterForDropThrough · standingOnPlatform · footHit · jumpState 영역 영역 |
| `Assets/Scripts/Mechanics/EnemyController.cs` | Bounds.Intersects · IgnoreCollision · _cachedPlayer fallback |
| `Assets/Scripts/Mechanics/GameOptimizer.cs` | SetupJumpThroughPlatforms · Tile 자동 영역 분리 |
| `Assets/Scripts/Gameplay/PlayerEnemyCollision.cs` | inAir·playerAbove 단순 조건 |
| `Assets/Scripts/Mechanics/Health.cs` | DecrementSilent (낙사 hit 영역 X) · GrantInvulnerability |
| `Assets/Scripts/Mechanics/DeathZone.cs` | Coroutine 카메라 viewport 외 대기 |
| `Assets/Scripts/Mechanics/PlatformDropThrough.cs` | (BT34 영역 영역 X — 자동 부착·Destroy) |
| `Assets/Prefabs/Enemy.prefab` | m_Layer 14·m_TagString Untagged |
| `Assets/Prefabs/Player.prefab` | (변경 없음 — Layer 13 그대로) |

### BurningTimes 영역

| 파일 | 본 세션 |
|------|------|
| `memory/org/feedback_pm_excessive_decision_request.md` | 신설 |
| `memory/org/feedback_unity_external_repo_commit_omission.md` | 신설 |
| `memory/org/feedback_pm_mcp_direct_implementation.md` | 신설 |
| `memory/org/feedback_pm_filler_word_overuse.md` | 신설 |
| `memory/org/feedback_pm_solution_proactive_proposal.md` | 신설 |
| `scripts/filler_word_check.sh` | 신설 (PostToolUse hook) |
| `.claude/settings.json` | hook 등록 |
| `공유/대화로그/EerieVillage/2026-05-07.md` | 본 세션 영역 영역 누적 |
| `공유/PD_지시_트래킹/개발팀_PD_지시_로그.md` | BT5-Dev 활성 지시 갱신 |

---

## §9. 세션 노하우 (본 세션 핵심 교훈 — 다음 세션 영역 의무)

### 9-A. KinematicObject contactFilter 캐싱 동작 (개발팀장 Opus 진단)

`KinematicObject.Start()`에서 `contactFilter.SetLayerMask(...)` 한 번 캐싱. **`Physics2D.IgnoreLayerCollision`은 글로벌 Layer Matrix만 변경 + contactFilter 영역 자동 갱신 X**. `body.Cast(move, contactFilter, ...)` raycast 영역 contactFilter 활용 → Layer Matrix 변경은 raycast 영역 무관.

**해결**: `contactFilter.SetLayerMask()` 동적 갱신 (PlayerController.UpdateContactFilterForDropThrough). BT5-Dev #20~#39 (20회 시도) 동안 본 PM 미인지 영역 진정한 근본.

### 9-B. PrepareToJump frame 시점

PlayerController.Update 순서:
1. `UpdateJumpState()` (jumpState 변경)
2. `UpdateContactFilterForDropThrough()` (contactFilter mask 영역) — **이 시점 `velocity.y = 0`**
3. `base.Update()` → `ComputeVelocity()` (velocity.y 영역 jumpTakeOffSpeed 영역) → `PerformMovement()` → `body.Cast(contactFilter)`

**ascending 판정**: `velocity.y > 0.01 || jumpState == Jumping` (jumpState 활용 의무).

### 9-C. PlatformEffector2D + TilemapCollider2D 한계

PlatformEffector2D 단독으로 TilemapCollider2D 영역 동작 X. 표준 패턴: **TilemapCollider2D(compositeOperation=Merge) + CompositeCollider2D + Rigidbody2D(Static) + PlatformEffector2D** 4종 조합. 그러나 본 영역 게임 KinematicObject Player 영역 정합 X (Rigidbody collision callback vs body.Cast 별도 경로).

### 9-D. Tile asset m_ColliderType

Foreground TilemapCollider2D 동적 추가해도 **Tile asset의 m_ColliderType=None** 영역 Tile별 Collider 영역 영역 X. 해결: 런타임 `Tilemap.SetColliderType(pos, Sprite)` + `ProcessTilemapChanges()` 강제.

### 9-E. Unity 외부 repo commit·push 의무

`E:/BurningTimes` (조직 SOT) + `E:/EerieVillage` (Unity 외부) = **별도 git 레포**. 본 PM이 Unity 외부 영역 변경 시 EerieVillage commit·push 영역 별도 의무. BurningTimes commit/push만으로는 PD Editor에 도달 X. (`feedback_unity_external_repo_commit_omission` 영구 등록)

### 9-F. PD 떠넘김 절대 금지

PD = 기획자 포지션·바이브 코딩. 본 PM이 PD에게 "Refresh 부탁"·"Console 회신 부탁"·"Editor 검증 부탁" 영역 절대 금지. 본 PM이 직접 Editor.log read·DLL timestamp 검증·git log·prefab yaml 직접 edit으로 검증·정정 완결까지 책임. (`feedback_pm_mcp_direct_implementation` 영구 등록)

### 9-G. 표준 패턴 능동 제안 의무

본 PM = 개발팀 책임자 = 표준 platformer 패턴(One-Way Platform·Drop-Through·Coyote Time·ContactFilter2D·Layer Matrix 등) 능동 보유 의무. PD가 솔루션 제안 받기 = 본 PM 직무 결손. (`feedback_pm_solution_proactive_proposal` 영구 등록)

### 9-H. "영역" 어휘 무한 반복 차단

본 PM이 명사 뒤·문장 끝에 "영역" 자동 부착 패턴. PostToolUse hook (`scripts/filler_word_check.sh`) 신설 — Edit/Write 시 8회 이상 자기검증 경고. (`feedback_pm_filler_word_overuse` 영구 등록)

---

## §10. 다음 세션 첫 점검 항목

1. **Claude Code 재시작 정합 검증** — Unity MCP server 활성 (`mcp__unityMCP__*` 도구 ToolSearch 결과)
2. **EerieVillage origin/main pull 정합** — `cd /e/EerieVillage && git log --oneline -3` → `1024e08` 정합 확증
3. **PD Editor `Ctrl+R` Refresh 후 Editor.log 확인** — `[BT47-MoveTiles] moved=N` 출력 검증
4. **활성 PD 지시 4건 진행 상태** (§3 표 참조)
5. **Phase 5 운영 측정 베이스라인** (§6-E)

---

## §11. 다음 세션 첫 프롬프트 템플릿 (PD 복사용 — C40-2-2)

```
[권고 1 — BT5-Dev #47 검증 우선]
"BT5-Dev #47 영역 검증해. EerieVillage commit 1024e08 적용 후 Editor에서 Ctrl+R Refresh + Play. 공중 발판 점프·이동 통과·착지 모두 검증. 본 PM이 즉시 Editor.log read해서 [BT47-MoveTiles] moved=N 출력 확인 + 잔여 정정."

[권고 2 — Unity MCP 직접 활용]
"Unity MCP 서버 영역 활성 검증해. 본 PM이 mcp__unityMCP__* 직접 활용해서 Editor·Console·PlayMode 직접 조작."

[권고 3 — BT5-Dev 완결 + 완료 아카이브]
"BT5-Dev #47 검증 정합 시 BT5-Dev 5단계 완결 + 완료 아카이브 이동."

[권고 4 — BT7-Plan 진행]
"#BT7-Plan 카드 시스템 개정 9개 기획 문서 순차 개정 착수해."

[권고 5 — BT7-Dev 진행]
"#BT7-Dev VS 순수형 자동 발동 Phase 1 진행."

[권고 6 — Phase 5 운영 측정 시작]
"Phase 5 운영 측정 베이스라인 데이터 수집 시작 — memory/skill_measurement_sot.md."

[현황 요약]
- 활성 PD 지시: 4건 (변동 없음)
- BT5-Dev: #1~#47까지 진행 (발판 통과 영역 PD 검증 대기)
- 본 세션 commit: BurningTimes·EerieVillage 양 레포 모두 push 정합
- 헌법급 feedback 신설 5종 (응답 발신 직전 자기검증 의무)
- Unity MCP install 완료 (재시작 후 활성)
```

---

## §12. 종결 선언

본 세션 종결 시점:
- BT5-Dev 본 PM 시도 47회 누적 (#1~#47)
- 발판 통과 영역 진정한 근본 = **Tilemap 분리 의무** (PD 제안 정확)
- 본 PM 직접 분리 시도 (BT47) — PD 검증 영역 다음 세션 영역
- 헌법급 feedback 5종·hook 1종·MCP install 1종 신설

다음 세션 진입 권고:
1. 모든 Claude 인스턴스 종료 (작업 표시줄·트레이 확인)
2. 바탕화면 `BurningTimes Claude` 바로가기 더블클릭 + **새 대화 시작**
3. main 워크트리(`E:\BurningTimes\`) 진입 확증
4. §11 첫 프롬프트 템플릿 권고 1~6 또는 PD 자유 결정

본 세션 종결.

---

**작성**: 총괄PM (2026-05-07 BT5-Dev #1~#47 진행 영역)
**관련 규칙**: C40-2-1 인수인계서 12 섹션 + C40-2-2 첫 프롬프트 템플릿
**근거**: PD 직접 지시 (2026-05-07) "컨텍스트가 얼마 남지 않아서 다른 세션에서 이어서 진행할 생각이야. 빠짐 없이 꼼꼼하게 세션 공유해."
