# 신호등 체계 — 결정 근거 (Context Notes)

> 작성일: 2026-04-23

## 1. 결정 배경

제이회장님이 2026-04-15에 직접 정의한 3단계 상태 체계. 기존에 상태가 명확하지 않아 팀장과 팀원의 구분 없이 전원 working 또는 전원 idle로 표시되는 문제가 반복 발생.

## 2. 왜 3단계인가

- **2단계** (idle/working)는 "팀에 작업 배정됨 + 아직 호출 안 됨"을 표현 불가
- **4단계 이상**은 복잡도 대비 이점 없음
- **3단계** (idle/standby/working)가 실제 운영 상태를 정확히 반영

## 3. 반복 버그 이력

### 3.1 task-1854: 팀원이 유휴로 표시
- **원인**: MemberRow에서 `hasRunningTasks && isLead`만 체크 → 팀원 누락
- **수정**: `hasRunningTasks && !isLead → standby` 분기 추가

### 3.2 task-2126: dispatch 시 즉시 반영 안 됨
- **원인**: dispatch.py에서 member-status.json을 업데이트하지 않았음
- **수정**: `_update_member_status_on_dispatch()` 함수 신설

### 3.3 task-2129: dev4~8팀 팀장 미반영 (vishnu, perun 등)
- **원인 1**: dispatch.py의 `_apply_team_status()`가 `lead_id in members_map` 조건 사용 → member-status.json에 엔트리 없는 멤버는 건너뜀
- **원인 2**: member-status.json에 vishnu, perun, ah_kin 등 13명의 멤버 엔트리 자체가 누락
- **수정**: (1) `_apply_team_status()`에서 멤버가 없으면 새로 생성하도록 수정 (2) 누락 멤버 13명 추가

## 4. sub_teams 구조 결정

개발실(development-office)만 `sub_teams` 구조를 사용. 이유:
- dev1~8팀이 개발실 아래 하위 조직으로 존재
- `columns.teams` 최상위에는 marketing, design, consulting 등 독립팀만 배치
- 탐색 시 반드시 `sub_teams`까지 순회해야 함

## 5. 논리적 팀 차용 결정 (2026-04-15)

논리적 팀(marketing 등)은 자체 봇이 없으므로 dev팀 봇을 차용. 차용 시:
- dev팀 카드에 차용 팀 이름 배지 표시
- 차용 task는 보라색 도트로 구분
- `task-timers.json`에 `bot` 필드가 필수

## 6. 교훈

1. **member-status.json은 org-structure.json과 동기화 필수** — 새 멤버 추가 시 양쪽 모두 갱신
2. **`in members_map` 체크 대신 없으면 생성** — 누락 방어
3. **sub_teams 탐색은 모든 팀 관련 함수에서 필수** — 개발실 구조 특성
