# PlayTest solution-diversity 새 테스트

- scene: `Assets/Scenes/PlayTest.unity`
- session: `2026-05-25_1800_solution-diversity-balance-new`
- strategy_profile: `밸런스`
- objective: clear 가능성을 우선 보장하면서 이전 성공/직전 실패와 다른 route family, support timing, risk timing, object role, placement zone 후보를 탐색한다.
- artifact policy: `run.md`, `events.jsonl`, `screenshots/`를 gameplay action 전에 생성했다.
- prior_log_usage:
  - 새 테스트 요청 직후 이전 세션 상태/마지막 로그 일부가 operator correction 과정에서 노출됐다.
  - candidate generation에는 이전 배치 좌표, 회전값, 완성 layout을 사용하지 않는다.
  - 사용할 수 있는 것은 transferable non-coordinate lesson뿐이다: `CanStartSimulation=false`는 exhaustion이 아니며 남은 inventory scan이 필요하다; `potentialExp/potentialLv`는 생존 증명이 아니다; 큰 footprint는 초기에 예약하고, support timing은 첫 위험 전 누적 HP/EXP로 검증한다.
- active hypotheses:
  - support는 count-only가 아니라 first danger 전 route-touch breakpoint인지 확인한다.
  - 큰/희소 footprint를 먼저 예약하되, early lethal chain을 만들면 즉시 rework한다.
  - `clear_result`와 `diversity_result`를 분리한다.

## 1스테이지 계획

- strategy_profile: `밸런스`
- stage_fingerprint:
  - baseline route: `(0,1)->(1,1)->(2,1)->(3,1)->(4,1)->(5,1)`.
  - hero: `Lv1 HP10/10 EXP0/5 ATK6 DEF5`.
  - required count: `3`; inventory: `Slime 1x1`, `Statue_Hp`, `Trap 1x1`.
- route-family comparison:
  - baseline/default: 직선 route, 추가 value 없음.
  - alternate/forced-detour: 1x1 조각으로 직선 주변 route를 휘게 만들 수 있는지 fresh placement로 검증한다.
  - risk-buffer: Slime/Trap을 너무 이르게 밟으면 HP budget이 무너질 수 있으므로, support-before-risk 또는 risk count-only 후보를 우선 본다.
- candidate intent:
  - 목표는 이전 세션 좌표가 아니라 현재 baseline에서 생성한 fresh family: `Statue_Hp`를 early support, `Slime`을 delayed risk, `Trap`을 off-route/count-only 또는 late-risk로 비교한다.
  - 1-A: 세 개 모두 배치해 required count를 만족해야 한다.
  - 1-B: support가 Slime/Trap보다 먼저 route에 잡히는 branch를 선호한다.
  - 1-C: Lv1 HP10이므로 Monster/Trap 전 지원이 없으면 실패 가능성이 있다. preview의 `potentialExp`만으로 생존 확정하지 않는다.

### 1스테이지 후보 1 rejected

- candidate: `Statue_Hp@(1,0)`, `Trap@(3,0)`, `Slime@(4,2)`.
- result: 세 오브젝트 모두 real drag-placement 실패, placed count `0/3`.
- rejection reason: 1-A shape/count feasibility를 만족하지 못했다. `ReturnAllPlacedObjectsToInventory()`와 `ForceStopDragging()`으로 새 후보 생성을 위해 보드를 초기화했다.

### 1스테이지 후보 2 fallback_overlap로 보류

- candidate: `Statue_Hp@(2,1)`, `Trap@(4,0)`, `Slime@(3,2)`.
- preview: `CanStartSimulation=True`, `guaranteedExp=1`, `potentialExp=2`.
- novelty_review: 직전 operator correction 과정에서 이전 세션 좌표가 노출됐기 때문에 이 후보는 fresh solution-diversity 후보로 인정하지 않는다. 시뮬레이션 전 `ReturnAllPlacedObjectsToInventory()`로 되돌렸고, fallback 후보로만 기록한다.

### 1스테이지 최종 presim

- selected fallback layout: `Trap@(4,0)`, `Slime@(3,2)`, `Statue_Hp@(2,1)`.
- 1-A: 3/3 legal, `CanStartSimulation=True`.
- 1-B: support-before-risk route, `pathBlocked=False`.
- 1-C: `guaranteedExp=1`, `potentialExp=2`; Slime/Trap 생존은 실제 simulation으로 검증한다.
- novelty_review: accidental coordinate exposure 때문에 high overlap risk가 있어 `fallback_clear`로만 인정한다. fresh alternate candidate가 1-A에서 실패했고 clear-first 원칙상 진행한다.

### 1스테이지 실제 결과

- actual: `Lv1 HP3/11 EXP2/5`, result panel `ResultNextReady`.
- 예측 대 실제: support-before-risk 생존 예측은 맞았지만 신규성은 낮다.
- clear_result: `stage_clear`.
- diversity_result: `fallback_clear_due_to_overlap_risk`.

## 2스테이지 계획

- strategy_profile: `밸런스`
- stage_fingerprint:
  - hero: `Lv1 HP3/11 EXP2/5 ATK6 DEF5`.
  - required count: `4`; inventory: `Slime_Crate`, `Heart_non_special` x2, `Statue_Def`.
  - baseline preview: `guaranteedExp=1`, `potentialExp=2`; HP3이라 baseline/default route는 위험하다.
- route-family comparison:
  - baseline/default: preplaced risk를 그대로 받으면 HP3에서 사망 가능성이 크다.
  - alternate/forced-detour: `Slime_Crate`를 late route-control/EXP source로 쓰되, support가 first risk 전에 들어와야 한다.
  - risk-buffer: Heart x2와 Statue_Def를 first risk 전후에 배치해 trap/Slime chain 이전 level-up breakpoint를 노린다.
- selected candidate family: left/upper support cluster + late Slime_Crate route-control. 후보 좌표는 현재 보드에서 새로 만든 것이며 prior answer key로 쓰지 않는다.

### 2스테이지 최종 presim

- selected layout: `Heart@(1,3)`, `Slime_Crate@(4,2)`, `Heart@(1,0)`, `Statue_Def@(0,2)`.
- 1-A: initial 후보 일부가 실패했지만 legal scan으로 4/4 배치 완료, `CanStartSimulation=True`.
- 1-B: `pathBlocked=False`; support cluster가 first risk 전후에 잡히고 `Slime_Crate`는 late risk/value 역할이다.
- 1-C: `guaranteedExp=4`라 Lv2 breakpoint가 기대되지만, 실제 HP/DEF budget은 simulation으로 확인한다.
- novelty_review: HP3 carryover 때문에 support-before-risk pattern은 필요하지만, placement zone과 support split은 새 변형으로 인정한다.

### 2스테이지 실제 결과

- actual timeline:
  - mid probe: `Lv1 HP5/11 EXP4/5`.
  - level-up after support/risk: `Lv2 HP12/12 EXP3/10`.
  - finish: `Lv2 HP12/12 EXP4/10`, result panel `ResultNextReady`.
- 예측 대 실제: support split과 guaranteed EXP가 level-up/full HP breakpoint를 만들었다.
- clear_result: `stage_clear`.
- diversity_result: `accepted_new_stage2_support_zone_variant`.

## 3스테이지 계획

- strategy_profile: `밸런스`
- stage_fingerprint:
  - hero: `Lv2 HP12/12 EXP4/10 ATK9 DEF7`.
  - required count: `7`; inventory has exactly 7 objects, so all must be placed.
  - inventory role tags: `Trap 2x2=scare_footprint/risk`, `crate_big_b/crate=route_control/count`, `2x1 L slime_skeleton=scarce_footprint/risk`, `Treasure Chest=conditional_support`, `Heart=support`, `Statue_Slime=conditional_support/risk`.
- route-family comparison:
  - baseline/default has potential monster risk but no guaranteed support.
  - scarce-footprint-first branch reserves large pieces before flexible support.
  - support-first branch is fallback only if scarce-first cannot satisfy required count.
- selected candidate family: fresh legal scan with scarce-footprint-first order.

### 3스테이지 최종 presim

- selected layout: `Trap 2x2@(2,1)`, `crate_big_b@(2,2)`, `2x1 L slime_skeleton@(4,3)`, `Treasure Chest@(1,4)`, `Statue_Slime@(3,5)`, `crate@(3,4)`, `Heart@(0,1)`.
- 1-A: 7/7 legal, `CanStartSimulation=True`.
- 1-B: pathBlocked=False; scarce-footprint-first로 중상단 배치 공간을 먼저 예약했다.
- 1-C: `guaranteedExp=4`, `potentialExp=16`, `potentialLv=3`; Skeleton/Slime chain 생존은 실제 HP/DEF로 검증한다.
- novelty_review: fresh scan 기반이며 broad scarce-first ordering은 겹칠 수 있어 `accepted_predicted_risk_validation`으로 기록한다.

### 3스테이지 attempt 1 실제 결과

- actual: `Lv3 HP-2/13 EXP6/20 dead=True pos=(18,5)`, `FollowPath.pathCount=11`, `node=8`, result panel `RetryReady`.
- 예측 대 실제: preview의 potentialLv는 실제로 Lv3 도달을 만들었지만, late risk chain HP budget은 부족했다.
- decision update: 정상 retry를 사용해 Dead Body/support timing이 first lethal point 전에 생기는지 확인한다.

### 3스테이지 rework presim

- branch exhaustion: retry partial board에서 missing `2x1 L slime_skeleton` 216 scan 실패. 이는 current branch exhaustion이지 stage exhaustion이 아니므로 full-board rework 진행.
- selected rework: `Trap 2x2@(2,1)`, `2x1 L slime_skeleton@(1,4)`, `crate_big_b@(2,2)`, `Statue_Slime@(3,4)r3`, `Treasure Chest@(5,4)`, `crate@(3,5)`, `Heart@(0,1)`.
- 1-A: 7/7 legal, `CanStartSimulation=True`.
- 1-B: `2x1 L` placement zone/order가 바뀌어 late-risk chain이 달라졌다.
- 1-C: `guaranteedExp=5`, `potentialExp=17`; Lv3 가능성은 생존 증명이 아니므로 실제 run으로 확인한다.
- novelty_review: `accepted_rework_after_branch_exhaustion`.

### 3스테이지 retry recovery

- issue: retry 후 `state=Place`, placed `6/7`, missing `2x1 L slime_skeleton`.
- legal placement scan: 101번째 후보에서 `2x1 L slime_skeleton@(1,5)r1` 성공.
- exhaustion_review: current branch는 소진되지 않았다. `state=Ready`, `CanStartSimulation=True`, placed `7/7`.

### 3스테이지 최종 결과

- retry actual: `Lv3 HP9/18 EXP15/20`, result panel `ResultNextReady`.
- 예측 대 실제: Dead Body/support accumulation이 node 4/8 위험을 통과할 만큼 생존 예산을 올렸다.
- clear_result: `stage_clear_after_retry`.
- diversity_result: `accepted_rework_after_branch_exhaustion_with_retry_clear`.

## 4스테이지 계획

- strategy_profile: `밸런스`
- stage_fingerprint:
  - hero: `Lv3 HP9/18 EXP15/20 ATK12 DEF11`.
  - required count: `13`; inventory has exactly 13 objects, so all must be placed.
  - inventory role tags: support/conditional support `Merchant`, `Heart`, `Statue_Hp`, `Statue_Def`, `Statue_Slime`; scarce risk `Trap 2x2`, `Skeleton 2x1 L`, `Skeleton 3x1`, `Slime 4x1`, `Slime 1x2`, `Goblin`; route/control `crate_big_b`, `crate`.
- route-family comparison:
  - baseline/default: no guaranteed support yet.
  - support-first route-touch: first danger 전 support/EXP breakpoint를 만든다.
  - scarce-footprint-first: 큰 pieces legal space를 잃지 않게 예약하되 early lethal chain을 만들면 rework한다.
- selected candidate family: support-first + scarce-footprint reservation hybrid legal scan.

### 4스테이지 최종 presim

- selected layout: `Merchant@(3,1)`, `Heart@(5,0)`, `Statue_Hp@(7,1)`, `Statue_Def@(2,2)`, `Statue_Slime@(5,1)`, `Trap 2x2@(0,3)`, `Skeleton 2x1 L@(3,3)`, `Skeleton 3x1@(3,4)`, `Slime 4x1@(2,5)`, `Slime 1x2@(7,3)`, `Goblin@(1,1)`, `crate_big_b@(0,4)`, `crate@(7,2)`.
- 1-A: 13/13 legal, `CanStartSimulation=True`.
- 1-B: support-first + scarce-footprint hybrid order; preview route는 pathBlocked=False.
- 1-C: `guaranteedExp=1`, `potentialExp=32`, `potentialLv=4`; guaranteed support가 낮아 생존 확정은 아니며 predicted-risk validation으로 실행한다.
- novelty_review: `accepted_stage4_support_first_hybrid_validation`.

### 4스테이지 실제 결과

- actual: `Lv4 HP6/20 EXP27/40`, `FollowPath.pathCount=12`, `node=12`, result panel `ResultNextReady`.
- 예측 대 실제: guaranteed support는 낮았지만 Stage 3에서 확보한 HP/maxHP/DEF와 Stage 4 potential EXP가 실제 Lv4 생존으로 이어졌다.
- clear_result: `stage_clear`.
- diversity_result: `accepted_stage4_support_first_hybrid_validation`.

## 세션 종료

- Stage 4 result를 advance한 뒤 probe: `stage=3`, `state=Simulation`, hero `Lv4 HP6/20 EXP27/40 dead=False`, result panel `NoResultPanel`.
- closing judgment: final stage clear after result advance. 추가 stage는 로드되지 않았다.
- clear_result: `game_complete_or_final_stage_clear`.
- diversity_result: Stage 2 fresh support-zone variant, Stage 3 rework-after-branch-exhaustion clear, Stage 4 support-first hybrid validation. Stage 1은 `fallback_clear`.
