## 2026-05-25 — 세션 최소화 칩 크로스-프로젝트 prune 레이스 수정

### 배경

프로젝트 A에서 세션을 최소화한 뒤 B로 이동했다가 A로 돌아오면 dock tray의 최소화 칩이 사라지는 문제. `ProjectDetail`이 `key` prop 없이 같은 컴포넌트 인스턴스를 재사용하면서, `sessions` state가 잠시 이전 프로젝트 B의 세션 목록을 들고 있었고, `SessionWindowsHost`의 auto-prune 이펙트가 이 stale 목록을 기준으로 A의 그룹을 모두 삭제해 버리는 경합이었다.

### 주요 변경

#### 1. 세션 prune에 프로젝트 필터 추가 (`9aa2ccf`)

- **`src/client/src/components/SessionWindowsHost.tsx`**: prune 이펙트에서 `validIds` 셋을 구축할 때 `sessions.filter(s => s.project_id === projectId)`로 현재 프로젝트의 세션만 사용. 이전에는 필터 없이 전체 `sessions` 배열을 썼기 때문에 프로젝트 전환 시점의 stale cross-project 세션이 잘못된 기준이 되었음. `projectId`를 이펙트 의존성 배열에도 추가

### 수정된 주요 파일

| 파일 | 변경 내용 |
|------|----------|
| `src/client/src/components/SessionWindowsHost.tsx` | prune validIds에 `project_id` 필터 + 의존성 배열에 `projectId` 추가 |
