# 보고서: task-102.1

**팀장:** 오딘 (Odin), 개발2팀장
**작업:** task-100.2 감사 개선 — 프로세스 강화 + Audit Trail 형식 통일
**담당 항목:** H3, M1, M3, M4 (4건)
**일시:** 2026-03-02

---

## 작업 내용

### H3. 셀프QC 5항목 강제 기재
- `_build_verification_section()` 함수의 selfcheck 문자열에 강제 문구 2줄 추가
- "위 5항목 각각에 대해 1줄 이상 구체적 답변을 보고서에 필수 기재하라. 미기재 시 보고서 불합격."
- "셀프QC 섹션이 없는 보고서는 제출하지 마라."

### M3. 팀장 자체 계획서 작성 의무화
- direct 프롬프트(dev1/dev2): 워크플로우 2단계로 계획서 작성 추가 → 기존 2~8단계를 3~9로 리넘버링
- glm 프롬프트(dev3): 워크플로우 2단계로 계획서 작성 추가 → 기존 2~9단계를 3~10으로 리넘버링
- 내용: "teams/{팀}/plan-{task_id}.md 작성 (서브태스크 분해, 팀원 배정, 예상 위험/대안, 실행 순서. 최소 5줄 이상)"

### M4. 피드백 사이클 기록 강제
- direct 프롬프트: 보고서 규칙에 "필수 섹션 — 팀장 검토 결과" 추가
- glm 프롬프트: 보고서 내용에 "필수 섹션 — 팀장 검토 결과" 추가
- "수정 없이 통과한 경우에도 '1차 검토 통과, 수정 사항 없음' 명시"

### M1. Audit Trail 형식 통일
- Edit/Write/NotebookEdit인 경우에만 audit-trail.jsonl에 상세 기록 (다른 도구는 미기록)
- BOT_ID → 팀장명 매핑 member 필드 추가 (anu→아누, dev1→헤르메스, dev2→오딘, dev3→라)
- JSONL 예시: `{"ts":"...","bot":"dev2","member":"오딘","session":"...","tool":"Edit","file":"...","cwd":"..."}`

---

## 생성/수정 파일 목록

- `/home/jay/workspace/prompts/team_prompts.py` — H3, M3, M4 (셀프QC 강제, 계획서 의무화, 피드백 기록 강제)
- `/home/jay/.claude/hooks/post-tool-use.sh` — M1 (Audit Trail 형식 통일: member 필드 추가, Edit/Write/NotebookEdit만 기록)
- `/home/jay/workspace/teams/dev2/plan-task-102.1.md` — 실행 계획서 (신규 생성)

---

## 팀장 검토 결과

- **토르(M1 post-tool-use.sh)**: 1차 검토 통과, 수정 사항 없음. BOT_ID→팀장명 case 매핑 정확, if 조건 분기 정확, Task tool 로직 미변경 확인.
- **헤임달(통합 테스트)**: 1차 검토 통과, 수정 사항 없음. 전 항목 17/17 PASS.

---

## 테스트 결과

**전 항목 PASS (17/17)**

### team_prompts.py (10건)
- H3 셀프QC 강제 문구 2건: PASS
- M3 direct 계획서 3건: PASS
- M3 glm 계획서 2건: PASS
- M4 direct 피드백 섹션 2건: PASS
- M4 glm 피드백 섹션 1건: PASS

### post-tool-use.sh (7건)
- Edit 시뮬레이션 (행수 증가 + member 필드 + 도구명): PASS (3건)
- Read 시뮬레이션 (기록 안 됨): PASS (1건)
- Write 시뮬레이션 (행수 증가 + member 필드 + 도구명): PASS (3건)

---

## 셀프 QC

1. **이 변경이 다른 파일에 영향을 미치는가?**
   team_prompts.py는 dispatch.py/orchestrator.py에서 import하여 사용. 프롬프트 텍스트 추가만이므로 기능 변경 없음. 1팀 H2 수정(GLM done_file 경로)과 수정 영역 분리 확인. post-tool-use.sh는 독립 hook, 기존 JSONL에 필드 추가만으로 하위호환.

2. **이 로직의 엣지 케이스는 무엇인가?**
   BOT_ID unknown → MEMBER_NAME도 "unknown" 매핑 (정상). Edit/Write/NotebookEdit 외 → 로그 안 됨 (의도된 동작). jq 없는 환경 → TOOL_NAME 추출은 폴백 grep 유지, echo 기록은 jq 불필요.

3. **이 구현이 작업 지시와 정확히 일치하는가?**
   H3 강제 문구 2줄 추가 ✅, M3 direct/glm 양쪽 계획서 단계 ✅, M4 direct/glm 양쪽 피드백 섹션 ✅, M1 member 필드 + Edit/Write/NotebookEdit 필터 ✅. 수정 금지 영역(dispatch.py, GLM .done 경로, dashboard, pre-tool-use.sh) 미변경 ✅.

4. **에러 처리와 보안은 확인했는가?**
   post-tool-use.sh: `trap 'exit 0' ERR` 유지, 에러 시 차단 없음 보장. team_prompts.py: 문자열 추가만, 기존 에러 처리 변경 없음.

5. **테스트가 모든 경로를 커버하는가?**
   H3: 셀프QC 포함 확인. M3: direct(dev1), glm(dev3) 양쪽 테스트. M4: direct(dev2), glm(dev3) 양쪽 테스트. M1: Edit 기록, Read 미기록, Write 기록 검증. 커버리지 충분.

---

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

1. **H3/M3/M4를 각 팀원에게 분산** → 기각: 동일 파일(team_prompts.py) 수정이므로 병렬 시 편집 충돌 위험. 팀장 직접 순차 편집이 안전.
2. **M1에서 모든 도구 기록 유지하고 member만 추가** → 기각: 작업 지시서가 "Edit/Write/NotebookEdit만 상세 기록, 다른 도구는 기록하지 않거나 간소화" 명시.
3. **post-tool-use.sh에 새 로그 파일 분리** → 기각: "기존 JSONL 형식 유지, 필드 추가만" 요구사항 위반.

---

## 수정 기록 로그

- 2026-03-02 오딘: team_prompts.py L313-314 — H3 셀프QC 강제 문구 추가
- 2026-03-02 오딘: team_prompts.py L217, L284 — M3 계획서 작성 단계 추가 (direct/glm)
- 2026-03-02 오딘: team_prompts.py L233, L295 — M4 피드백 섹션 규칙 추가 (direct/glm)
- 2026-03-02 토르: post-tool-use.sh L90-110 — M1 member 필드 + Edit/Write/NotebookEdit 필터

## 버그 유무
없음
