# task-409.1 완료 보고서

## 작업 요약
`tests/test_team_prompts.py`에서 실패하던 project_id 관련 테스트 4건을 수정.

## 문제 원인
프롬프트 경량화 리팩토링 시 `_build_direct_prompt()`에서 isolation_rule 섹션이 제거되어 DIRECT-WORKFLOW.md로 위임되었으나, 테스트는 프롬프트 문자열에서 해당 키워드("시스템 작업", "projects/{project_id}", "프로젝트 격리")를 기대하고 있었음.

## 선택지 결정
**선택지 A 채택**: `_build_direct_prompt()`에 isolation_rule 인라인 추가

판단 근거:
- isolation_rule은 봇이 잘못된 경로에 코딩하는 것을 방지하는 **안전 장치**
- DIRECT-WORKFLOW.md에만 있으면 봇이 읽지 않을 리스크 존재
- GLM 프롬프트(`_build_glm_prompt()`)와 동일한 패턴으로 일관성 확보
- 테스트 수정 불필요 (테스트의 기대값이 올바름)

## 수정 내용

### 변경 파일
- `prompts/team_prompts.py` (line 214-237): `_build_direct_prompt()`에 isolation_rule 섹션 추가

### 변경 상세
`_build_direct_prompt()` 반환값 끝에 `## 작업 규칙` 섹션 추가:
- `project_id`가 있으면: "**프로젝트 격리**: 모든 코드는 {WORKSPACE_ROOT}/projects/{project_id}/ 하위에만 작성"
- `project_id`가 없으면: "이 작업은 시스템 작업입니다. 코드는 {WORKSPACE_ROOT}/teams/{team_short}/ 또는 작업에서 지시된 경로에 작성"

team_short는 team_id에서 `-team` 접미사를 제거하여 도출 (dev1-team → dev1).

### 미변경 파일
- `tests/test_team_prompts.py` — 수정 불필요 (테스트 기대값이 올바름)
- `prompts/DIRECT-WORKFLOW.md` — 기존 isolation_rule 유지 (이중 안전장치)
- `_build_glm_prompt()` — 기존 정상, 변경 불필요

## GLM 프롬프트 정합성
- `_build_glm_prompt()` (line 246-249): isolation_rule 정상 동작 확인
- `project_id != None` → "프로젝트 격리" + "projects/{project_id}/" 경로 포함
- `project_id == None` → "시스템 작업" + "teams/dev3/" 경로 포함
- GLM 테스트 전체 통과

## 테스트 결과
- `tests/test_team_prompts.py`: **58/58 PASSED** (기존 실패 4건 해소)
- 전체 테스트 스위트: **697 passed**
- pyright: 0 errors, 0 warnings
- black + isort: OK

## 셀프 QC
- [x] 1. 다른 파일 영향: 없음 (team_prompts.py 단일 파일 수정, 프롬프트 출력만 변경)
- [x] 2. 엣지 케이스: project_id=None, project_id="" (빈 문자열은 falsy → 시스템 작업으로 처리), 정상 project_id 모두 커버
- [x] 3. 작업 지시 일치: 실패 4건 수정 + GLM 정합성 확인 완료
- [x] 4. 에러 처리/보안: 해당 없음 (프롬프트 문자열 생성 로직)
- [x] 5. 테스트 커버리지: 58개 테스트가 모든 경로 커버

## QC 자동 검증 결과
```json
{
  "task_id": "task-409.1",
  "verified_at": "2026-03-09T01:19:58",
  "checks": {
    "test_runner": "PASS (697 passed)",
    "tdd_check": "PASS",
    "pyright_check": "PASS (0 errors)",
    "style_check": "PASS (black OK, isort OK)"
  }
}
```

## 머지 판단
- **머지 필요**: No (시스템 작업, worktree 미사용)
