**task-1039.1 완료 보고** (dev3-team) **완료 보고서** (3분 53초) **핵심 결과** `_maybe_trigger_token_scan()` 공통 메서드를 도입하여 `get_token_usage()`와 `_enrich_tasks_with_tokens()` 양쪽에서 호출하도록 구현 완료. 인스턴스 변수 `_last_token_scan_trigger`로 30분 내 중복 스캔 방지. pytest 19건 전체 통과, pyright 에러 0건. ## 수정 파일 - `/home/jay/workspace/dashboard/server.py` ## 변경 내용 ### 1. `__init__` — 인스턴스 변수 추가 (line 66) ```python self._last_token_scan_trigger: Optional[datetime] = None ``` ### 2. `_maybe_trigger_token_scan()` 헬퍼 메서드 신규 (line 733~758) - `token-ledger.json`의 `last_scan` 타임스탬프 확인 - 30분(1800초) 이상 경과 시 `scripts/token-tracker.py scan` 실행 - `subprocess.run(..., capture_output=True, timeout=60)` — 타임아웃 60초 - `_last_token_scan_trigger` 인스턴스 변수로 30분 내 재트리거 방지 (2중 보호) - 모든 예외를 catch하여 스캔 실패 시에도 기존 데이터로 진행 ### 3. `_enrich_tasks_with_tokens()` — 호출 추가 (line 762) ```python self._maybe_trigger_token_sca 테스트: pyright 0 errors **발견/해결 이슈 2건** 1. **공통 메서드 추출로 중복 방지** — 지시서에서는 양쪽 메서드에 각각 스캔 로직을 넣으라 했으나, 코드 중복을 방지하기 위해 `_maybe_trigger_token_scan()` 공통 메서드로 추출하여 양쪽에서 호출하도록 설계. 중복 스캔 방지도 인스턴스 레벨 1곳에서만 관리. 2. **token-tracker.py 스캔 성능** — 미해결: 현재 동기 실행(최대 60초 블로킹). 향후 요청 빈도가 높아지면 비동기 실행 검토 필요. 범위 외 사유: 지시서에서 동기 실행 명시 ("보통 5-10초").