# Task: 대시보드 프로젝트뷰 폴드다운 버그 수정

## 버그 현상
PC버전 프로젝트뷰에서 각 프로젝트의 안건(todo) 항목을 클릭하면, 리스트가 펼쳐졌다가 즉시 닫힘. 제대로 읽을 수 없음.

## 근본 원인
**React 안티패턴**: `ProjectCard` 컴포넌트가 `ProjectView` 함수 내부에 정의되어 있음 (line 660).

- SSE/폴링으로 `fetchData()` 실행 → `setTodoData()` → `ProjectView` 리렌더
- `ProjectCard` 함수가 매번 새로 생성 → React가 다른 컴포넌트 타입으로 인식
- 전체 하위 트리를 unmount/remount → `IssueItem`의 `expanded` state가 `false`로 초기화

## 수정 대상 파일
- `/home/jay/workspace/dashboard/index.html`

## 수정 방법 (택 1, 가장 깔끔한 방법 선택)

### 방법 A: expanded 상태를 ProjectView로 끌어올리기 (권장)
1. `ProjectView` 컴포넌트에 `expandedIssues` 상태 추가:
   ```jsx
   const [expandedIssues, setExpandedIssues] = useState(new Set());
   const toggleIssue = (id) => setExpandedIssues(prev => {
       const next = new Set(prev);
       next.has(id) ? next.delete(id) : next.add(id);
       return next;
   });
   ```
2. `IssueItem`에 `expanded`와 `onToggle` props 전달 (자체 useState 제거):
   ```jsx
   <IssueItem key={issue.id} issue={issue} expanded={expandedIssues.has(issue.id)} onToggle={() => toggleIssue(issue.id)} />
   ```
3. `IssueItem` 수정: 내부 `useState` 제거, props로 받은 `expanded`와 `onToggle` 사용

### 방법 B: ProjectCard와 TaskRow를 ProjectView 바깥으로 이동
1. `TaskRow` (line 636)와 `ProjectCard` (line 660)를 `ProjectView` 함수 바깥으로 이동
2. 클로저로 참조하던 변수들을 props로 전달:
   - `TaskRow`: `setSelectedTaskId`, `TEAM_LABEL`
   - `ProjectCard`: `tasksByProject`, `todoByProject`, `PROJECT_ACCENT`, `setSelectedTaskId`, `TEAM_LABEL`

## 테스트 방법
1. 대시보드 프로젝트뷰 접속 (http://100.76.130.39:8000/dashboard/)
2. 아무 프로젝트의 안건 항목 클릭 → 폴드다운 펼침
3. **2초 이상 기다린 후에도 펼쳐진 상태 유지되는지 확인** (SSE/폴링 데이터 갱신 이후)
4. 여러 안건을 동시에 펼쳐도 각각 독립적으로 유지되는지 확인
5. 펼친 상태에서 다른 탭으로 갔다 돌아와도 유지되는지 확인

## 주의사항
- `IssueItem` 컴포넌트는 line 512에 정의되어 있음 (ProjectView 바깥). 이건 건드리지 않아도 됨 (방법 A 선택 시에만 props 인터페이스 수정)
- 기존 기능(안건 진행률 표시, 서브아이템 체크박스, 우선순위 배지)을 깨지 않도록 주의
- DevSystem 섹션의 안건도 동일하게 수정 적용 필요 (line 762~770 부근)
