# task-552.1 완료 보고서: 횡단조직 상태 추적 기능

## SCQA

**S**: 횡단조직(로키/비너스/마아트/야누스)은 팀장이 Task tool 서브에이전트로 소환하는 방식이라, 대시보드에 "작업중" 상태가 표시되지 않는다.

**C**: 제이회장님이 횡단조직 활동 현황도 대시보드에서 실시간 확인하고 싶어하시나, 현재 소환 이벤트를 로깅하는 체계가 없어 횡단조직은 항상 "유휴" 상태로만 보인다.

**Q**: task-timer에 횡단조직 추적 기능을 추가하고, 대시보드에서 실시간 상태를 표시할 수 있는가?

**A**: cross-start/cross-end CLI 명령어를 task-timer.py에 추가하고, 별도 `cross-functional-status.json`에 상태를 저장하며, 대시보드 SSE로 실시간 전송하도록 구현 완료. pytest 135건 전체 통과(신규 9건 포함), pyright 에러 0건(server.py), 회귀 0건.

---

## 작업 내역

### A. task-timer.py 횡단조직 추적 기능 추가
- `ALLOWED_CROSS_AGENTS = {"loki", "venus", "maat", "janus"}` 상수 추가
- `cross_start(agent_name, task_id, description, parent_team)` 메서드 추가
- `cross_end(agent_name)` 메서드 추가
- `_load_cross_status()` / `_save_cross_status()` 파일 IO (fcntl 파일 락 + 원자적 쓰기)
- CLI에 `cross-start`, `cross-end` 명령어 파싱 추가
- 저장 위치: `memory/cross-functional-status.json` (기존 task-timers.json 오염 방지)

### B. DIRECT-WORKFLOW.md 횡단조직 로깅 규칙 추가
- "팀원 코워크" 섹션 뒤, "병렬 Tool 호출 안전 규칙" 앞에 신규 섹션 삽입
- 소환 전 cross-start → Task tool 실행 → 소환 후 cross-end 3단계 절차 문서화

### C. 대시보드 횡단조직 상태 표시
- server.py: SSE `server-stats` 이벤트에 `cross_functional` 필드 추가 (SimpleHTTPServer + FastAPI 양쪽)
- server.py: `files_to_watch`에 `cross-functional-status.json` 추가 (파일 변경 시 refresh 이벤트)
- index.html: `crossFunctional` state 추가, SSE 수신 시 상태 갱신
- index.html: CenterCard에 active agent 소환 정보 표시 (설명, task_id, parent_team)
- index.html: 레드팀 카드에 loki 소환 상태 표시

---

## 생성/수정 파일 목록

- **수정**: `/home/jay/workspace/memory/task-timer.py` — cross-start/cross-end 기능 추가
- **수정**: `/home/jay/workspace/tests/test_task_timer.py` — 횡단조직 테스트 9건 추가
- **수정**: `/home/jay/workspace/prompts/DIRECT-WORKFLOW.md` — 횡단조직 로깅 규칙 섹션 추가
- **수정**: `/home/jay/workspace/dashboard/server.py` — SSE에 cross_functional 데이터 추가
- **수정**: `/home/jay/workspace/dashboard/index.html` — 횡단조직 실시간 상태 UI 추가
- **생성**: `/home/jay/workspace/memory/cross-functional-status.json` — 횡단조직 상태 파일 (통합 테스트 시 생성)

---

## 테스트 결과

- pytest 전체: **135 passed** (기존 126 + 신규 9), 0 failed, 0 error
- 신규 cross 테스트: **9 passed**
  - TestCrossStart: 4건 (유효 agent, 무효 agent, 무효 task_id, 덮어쓰기)
  - TestCrossEnd: 3건 (active→idle, idle 멱등성, 무효 agent)
  - TestCrossFunctionalFile: 2건 (파일 생성, 상태 영속성)
- pyright (server.py): **0 errors, 0 warnings**
- pyright (task-timer.py): 1 error (기존 `utils.logger` import 이슈 — 본 작업 범위 외)
- 회귀: **0건**

### CLI 기능 테스트
```
$ python3 task-timer.py cross-start loki --task task-552.1 --desc "통합 테스트" --team dev1-team
→ {"status": "started", "agent": "loki", "task_id": "task-552.1"}

$ python3 task-timer.py cross-end loki
→ {"status": "ended", "agent": "loki"}
```

---

## 발견 이슈 (3건)

1. **기존 pyright 에러** (범위 외): task-timer.py의 `from utils.logger import get_logger`가 pyright 경로 밖. 런타임에는 `sys.path.insert`로 해결되나 pyright는 이를 인식 못 함.
2. **초기 상태 비표시**: cross-functional-status.json이 없으면 대시보드에 횡단조직 소환 상태가 비어 보임. 첫 cross-start 호출 시 4개 agent 전체가 초기화됨.
3. **덮어쓰기 시 이전 기록 유실**: cross-start로 이미 active인 agent를 다시 소환하면 이전 소환 정보가 유실됨. 사양 요구사항("최신 소환이 우선")에 부합하나, 히스토리 추적이 필요하면 향후 개선 고려.

---

## 완료 기준 체크

- [x] task-timer.py cross-start / cross-end 명령어 동작
- [x] DIRECT-WORKFLOW.md에 횡단조직 로깅 규칙 추가
- [x] 대시보드에 횡단조직 상태 표시 (SSE 실시간)
- [x] 소환 시 "작업중", 종료 시 "유휴"로 실시간 변경 확인

---

## QC 검증 결과

- **overall**: WARN (Gate PASS)
- file_check: PASS
- data_integrity: PASS
- tdd_check: PASS
- style_check: PASS (black + isort 적용)
- pyright_check: WARN (1건 — 기존 `utils.logger` import 이슈, 본 작업 범위 외)
- ⚠️ 기존 테스트 실패 1건 (본 작업 범위 외): `test_dispatch.py::TestRegisterFollowup::test_direct_team_uses_3m_delay` — `dispatch` 모듈에 `_register_followup` 속성 없음. 본 작업에서 dispatch.py를 수정하지 않았으며, 본 작업 테스트(test_task_timer.py 135건)는 전체 통과.
