# 보고서: task-115.1 — team_prompts.py 가이드 분리 + 프롬프트 크기 게이트

## 작업 요약
team_prompts.py에 직접 삽입되던 장문의 가이드 텍스트(작업 철학, 실패 시나리오 체크리스트, 셀프QC, 추가 검증)를 `/home/jay/workspace/prompts/teamlead-guide.md`로 분리하고, 프롬프트에는 파일 경로 참조만 남겼다. dispatch.py에 프롬프트 크기 검증 게이트(2000자 WARNING, 3000자 ERROR 차단)를 추가했다.

## 생성/수정 파일 목록

- **(신규)** `/home/jay/workspace/prompts/teamlead-guide.md` — 팀장 필독 가이드 (작업 철학, 실패 시나리오, 셀프QC, 추가 검증 4개 섹션)
  - 변경 사유: 기존 team_prompts.py 내 인라인 텍스트를 파일로 분리 (목차→요약→상세 원칙 적용)
- **(수정)** `/home/jay/workspace/prompts/team_prompts.py` — 프롬프트 생성 모듈
  - `_build_work_philosophy_section()` 삭제 → `_build_teamlead_guide_reference()`로 대체
  - `_build_failure_scenario_section()` 삭제
  - `_build_verification_section()` 내 selfcheck/maat/loki 텍스트를 파일 참조로 대체 (level 분기 로직 유지)
  - `_build_direct_prompt()`/`_build_glm_prompt()`에서 가이드 참조 문단으로 교체
  - `TEAMLEAD_GUIDE_PATH` 상수 추가
  - 미사용 import 정리 (List, Tuple 제거)
  - 변경 사유: 작업 지시서(task-115.1.md) 수정 1
- **(수정)** `/home/jay/workspace/dispatch.py` — 크기 검증 게이트 추가 (350~361행)
  - >2000자: WARNING 로그
  - >3000자: ERROR + 차단 (--force로 우회 가능)
  - 변경 사유: 작업 지시서(task-115.1.md) 수정 2
- **(신규)** `/home/jay/workspace/teams/dev1/test_task_115_1.py` — 14개 테스트
- **(신규)** `/home/jay/workspace/teams/dev1/plan-task-115.1.md` — 계획서

## 테스트 결과

```
14 passed in 0.03s
```

- TestTeamleadGuideSeparation (8개): 가이드 파일 존재, 핵심 텍스트 포함, 프롬프트에서 인라인 텍스트 제거 확인, level별 분기 확인
- TestPromptSizeGate (5개): dispatch.py 게이트 코드 존재, 프롬프트 길이 범위 확인
- TestIntegration (1개): 모든 팀×레벨 조합 검증

## 버그 유무
없음

## 팀장 검토 결과

- **불칸 (ST-1: teamlead-guide.md 생성)**: 1차 검토 통과, 수정 사항 없음. 4개 섹션 모두 원본 텍스트 정확히 옮겨짐.
- **불칸 (ST-3: dispatch.py 크기 게이트)**: 1차 검토 통과, 수정 사항 없음. 3단계 분기(2000/3000/force) 정확히 구현됨.
- **ST-2 (team_prompts.py 수정)**: 팀장(헤르메스) 직접 수행. 함수 삭제/대체 후 전 팀(dev1/dev2/dev3) × 전 레벨(normal/critical/security) 정상 동작 확인.
- **아르고스 (ST-4: 테스트)**: 1차 검토 통과, 수정 사항 없음. 14개 테스트 모두 PASS.

## 검토한 대안과 기각 사유

1. **가이드를 CLAUDE.md에 통합** → 기각: CLAUDE.md는 팀별 정체성 문서. 범용 가이드를 넣기 부적합.
2. **크기 게이트를 build_prompt() 내부에 배치** → 기각: build_prompt는 순수 문자열 생성 함수. 발송 차단 로직은 dispatch 계층에 두는 게 관심사 분리 원칙에 맞음.
3. **함수를 deprecated 처리** → 기각: 호출처 전수 정리 완료. 불필요한 코드 잔존 방지.

## 수정기록 로그

- 2026-03-02 18:36 헤르메스: task-timer start, 작업 지시서 분석
- 2026-03-02 18:37 불칸: teamlead-guide.md 생성 (ST-1)
- 2026-03-02 18:37 불칸: dispatch.py 크기 게이트 추가 (ST-3)
- 2026-03-02 18:38 헤르메스: team_prompts.py 수정 — 함수 삭제/대체/정리 (ST-2)
- 2026-03-02 18:39 아르고스: test_task_115_1.py 작성 및 실행 (ST-4) — 14 passed
- 2026-03-02 18:40 헤르메스: 최종 검토 및 보고서 작성

## 셀프 QC (아누 가이드 3.4 System 2 Forcing)

1. **이 변경이 다른 파일에 영향을 미치는가?**
   - dispatch.py: build_prompt() 시그니처 변경 없어 영향 없음. 크기 게이트는 새로 추가된 독립 로직.
   - orchestrator.py: build_prompt()만 import하며, 시그니처 불변이므로 영향 없음.
   - 삭제된 함수(_build_work_philosophy_section, _build_failure_scenario_section)는 외부 import 없음 (grep 확인 완료).

2. **이 로직의 엣지 케이스는 무엇인가?**
   - teamlead-guide.md가 삭제/파손된 경우: 프롬프트 생성은 정상 (경로 문자열만 삽입). 팀장이 Read 시 오류를 인지.
   - 프롬프트가 정확히 2000자/3000자인 경우: >2000/>3000 조건이므로 경계값에서는 통과. 의도된 동작.
   - dev3-team(glm)에서도 가이드 참조가 올바르게 삽입됨 (테스트 확인).

3. **이 구현이 작업 지시와 정확히 일치하는가?**
   - 수정 1: teamlead-guide.md 분리 완료. 4개 섹션 모두 옮김. 프롬프트에는 참조만 남김. 워크플로우 동적 명령어는 프롬프트에 유지.
   - 수정 2: dispatch.py에 2000/3000자 게이트 추가. WARNING/ERROR 로그, --force 우회 모두 구현.
   - 주의사항: 기존 build_prompt() 반환값 구조(작업 지시 + 팀원 구성 + 워크플로우 등) 유지됨.

4. **에러 처리와 보안은 확인했는가?**
   - 크기 게이트: force=False일 때 3000자 초과 시 error dict 반환으로 안전하게 차단.
   - 경로 주입 위험: TEAMLEAD_GUIDE_PATH는 WORKSPACE_ROOT 기반 상수이므로 외부 입력 영향 없음.

5. **테스트가 모든 경로를 커버하는가?**
   - 가이드 파일 존재/내용 검증, 인라인 텍스트 미포함 확인, 3개 level 분기 검증, 3개 팀 검증, dispatch.py 게이트 코드 존재 확인, 프롬프트 길이 범위 확인. 14개 테스트로 주요 경로 모두 커버.
