# Meeting Audit 스크립트 구현

## 한정승인

## 작업 목표
Agent 미팅 기록 파일을 자동 파싱하여 SKILL.md 규칙 준수 여부를 검증하는 `meeting-audit.py` 스크립트를 구현한다.

## 배경
- Agent 미팅 규칙이 SKILL.md에 정의되어 있지만, 팀장이 규칙을 준수했는지 자동 검증하는 메커니즘이 없음
- task-1633.1에서 2사이클 조기 종료, 로키 미참석, 3문서 미연결 등 규칙 위반이 발생
- 미팅 완료 후 자동 감사(audit)로 규칙 준수 여부를 체크해야 함

## 구현

### 파일 위치
`/home/jay/workspace/scripts/meeting-audit.py`

### 입력
- `--meeting-file <path>`: 미팅 기록 파일 (memory/meetings/*.md)
- `--level <1-4>`: 작업 레벨 (규칙 기대값 결정)
- `--task-id <id>`: 연관 task ID (3문서 확인용, 선택)

### 검증 항목 (4개)

#### 1. 사이클 수 vs 작업 레벨 기대값
- Lv.2: 최소 1사이클
- Lv.3: 최소 2사이클 (DA 필수이므로)
- Lv.4: 최소 3사이클 (무한 사이클이므로 2사이클은 너무 적음)
- 미팅 파일 헤더의 "총 사이클 수" 파싱

#### 2. 참여 페르소나 vs persona-list.md 교차 확인
- 미팅 파일의 "참여 페르소나" 파싱
- **통합 후 SKILL.md**에 정의된 페르소나 목록과 교차 확인
- 등록되지 않은 페르소나 사용 시 WARN
- 로키(Loki/레드팀) 미참석 시 FAIL (필수 참석자)

#### 3. DA (Devil's Advocate) 수행 여부
- Lv.3-4: DA 필수
- 미팅 파일에서 "Devil's Advocate" 또는 "DA" 섹션 존재 확인
- DA 3대 질문 (실패 시나리오, 후회 이유, 더 단순한 대안) 존재 확인
- DA "반박" + "판정" 존재 확인
- DA 미수행 시 FAIL

#### 4. 3문서 연결 여부
- 미팅 파일 끝에 "3문서 반영" 또는 "계획서/맥락노트/체크리스트" 언급 확인
- task-id 제공 시: memory/3docs/{task-id}/ 또는 유사 경로에 3문서 존재 확인
- 새로운 시스템/프로젝트 설계 미팅인데 3문서 없으면 WARN

### 출력 형식
```json
{
  "meeting_file": "path",
  "level": 4,
  "checks": {
    "cycle_count": {"status": "PASS|WARN|FAIL", "expected_min": 3, "actual": 2, "message": "..."},
    "persona_validation": {"status": "PASS|WARN|FAIL", "registered": [...], "unregistered": [...], "loki_present": false},
    "da_check": {"status": "PASS|WARN|FAIL", "da_sections_found": 1, "three_questions": true},
    "three_docs": {"status": "PASS|WARN|FAIL", "mentioned": false, "files_exist": false}
  },
  "overall": "PASS|WARN|FAIL",
  "summary": "2/4 PASS, 1 WARN, 1 FAIL"
}
```

### 통합 포인트
- whisper-briefing에서 최근 미팅 audit 결과를 표시할 수 있도록 JSON 출력
- 향후 Stop Hook에서 자동 호출 가능하도록 standalone 스크립트

## 참조 파일
- Agent Meeting SKILL.md: `/home/jay/workspace/skills/agent-meeting/SKILL.md`
- 미팅 기록 디렉토리: `/home/jay/workspace/memory/meetings/`
- 작업 레벨 시스템: `/home/jay/workspace/memory/specs/work-level-system.md`
- 기존 미팅 기록 예시: `/home/jay/workspace/memory/meetings/2026-04-11-insuwiki-review-trust-ux.md`

## 테스트
1. `python3 meeting-audit.py --meeting-file memory/meetings/2026-04-11-insuwiki-review-trust-ux.md --level 4` → 예상: cycle_count FAIL, persona FAIL(로키 미참석), da PASS, three_docs WARN
2. 빈 미팅 파일 → 적절한 에러 메시지
3. 존재하지 않는 파일 → FileNotFoundError 처리
4. pytest 단위 테스트 작성

## 보고서
`/home/jay/workspace/memory/reports/task-{TASK_ID}.md`