# 에이전트 미팅: 자동화 오케스트레이터 통합 구현 계획 검토
> task-901.1 | 2026-03-24 | 2 사이클 완료 | **만장일치 합의** (조건부 → 수정 반영 후 확정)

## 참석자
- **오딘 (2팀장)** — 미팅 주관, 아키텍처 설계 판단
- **로키 (보안팀장)** — DA, 보안/권한/충돌 리스크
- **펜리르 (보안팀원)** — DA 보조, 침투 시나리오
- **야누스 (DevOps센터)** — 인프라/systemd/데몬 관점
- **헤르메스 (1팀장)** — task-897.1 .done 감지 설계자

---

## Cycle 1: 개별 검토

### 로키 — 4건 제기
1. **[Critical]** activity-watcher.py `send_telegram_notification()`이 Phase 1 교체 대상에서 누락됨 → 산출물 목록에 추가
2. **[Critical]** done-watcher.sh stale 에스컬레이션 경로의 cokacdir 잔존 → 의도적 허용 사유를 맥락노트에 명문화
3. **[High]** `.approved` 파일 uid 검증이 체크리스트에 미반영 → S3-4 구체화
4. **[High]** EnvironmentFile 범위 제한이 체크리스트에 항목 없음 → SEC-8 신규 추가

### 펜리르 — 4건 제기
1. **[Critical]** done-watcher.sh bash→python 문자열 인젝션 취약점 (`${msg}` 직접 삽입) → task_id 환경변수 전달, S1-4 추가
2. **[Critical]** event_bus.py 복사 중 done-watcher.sh mv 충돌 (영구 미처리 위험) → Phase 4에서 스캔 패턴 확장 메커니즘 확정
3. **[High]** inject_context.source path traversal 미방어 → pipeline_validator 11번째 검증 항목 추가
4. **[Medium]** T2 테스트 조건 "3건 OR 1건" 검증 불가 → 명확한 기준으로 재정의

### 야누스 — 4건 제기
1. **[High]** auto-orch.service 상세 설계 미정 (TimeoutStartSec, MemoryMax 등) → 필수 필드 목록 명시
2. **[High]** systemd timer AccuracySec 미정 (기본 1분 → 30초 보장 불가) → AccuracySec=1s 필수
3. **[High]** systemd 레벨 동시 실행 방지 미비 → auto_orch.py 전역 flock + Type=oneshot + Persistent=false
4. **[Medium]** activity-watcher.service Restart=always 무한 재시작 → Restart=on-failure + StartLimitBurst=3

### 헤르메스 — 4건 제기
1. **[Critical]** `get_active_task_for_team()` 함수 미정의 (설계서에 코드 없음) → P1-5에 구현 상세 명시
2. **[High]** `check_already_notified()` 로그 파일 스캔 방식 TOCTOU 취약 → .done.notified 마커 기반으로 교체
3. **[High]** done-watcher.sh 성공 경로 구현과 설계 불일치 (.done 복구 vs 직접 rename) → Phase 4 착수 전 옵션 확정
4. **[Medium]** T3 Layer 1 실패 조건이 토큰 미설정만 → T3-a/b/c 세분화

---

## Cycle 2: 반론 + 합의

### 핵심 반론 교환

**쟁점 D (event_bus.py 영구 미처리)**:
- 오딘: FileNotFoundError → 다음 tick에서 .done.notified 발견 후 재처리 가능
- 펜리르 반론: `.done.notified`는 `*.done` glob에 매칭되지 않아 영구 미처리
- **오딘 판정**: 펜리르 맞음. Phase 4에서 event_bus.py 스캔 패턴 확장 필수

**쟁점 L (.done 원본 보존)**:
- 헤르메스: .done.processing → .done.notified 직접 rename이 설계 원칙
- 로키: 직접 rename 시 .done 원본 소실 → event_bus.py 복사 불가
- **오딘 판정**: Phase 4 통합 설계에서 파일 상태 협약 문서화 필수

### 투표 결과 (5/5 조건부 합의 → 수정 반영 후 만장일치 확정)

| 참석자 | 투표 | 조건 |
|--------|------|------|
| 오딘 | ✅ | 14개 수정 항목 반영 |
| 로키 | ✅ | 쟁점 A,B,C,E 반영 (특히 C는 Critical) |
| 펜리르 | ✅ | 쟁점 C,D,E,M 반영 (D는 Phase 4에 명시적 결정 포함) |
| 야누스 | ✅ | 쟁점 F,G,H,I 반영 (auto-orch.service 최소 설계안 포함) |
| 헤르메스 | ✅ | 쟁점 J,K,L 반영 (J는 Phase 1 착수 전 필수) |

**만장일치 합의 달성 (5/5)**

---

## 수정 반영 요약 (14건)

| # | 대상 문서 | 변경 내용 | 근거 |
|---|-----------|-----------|------|
| 1 | 계획서 Phase 1 | activity-watcher.py send_telegram_notification 교체 추가 | 로키 #1 |
| 2 | 계획서 리스크 | bash→python 인젝션, path traversal 2건 추가 | 펜리르 #1, #3 |
| 3 | 계획서 Phase 3 | auto-orch.service 필수 필드 명시 | 야누스 #1 |
| 4 | 체크리스트 P1-1b | activity-watcher.py 교체 항목 추가 | 로키 #1 |
| 5 | 체크리스트 P1-5 | get_active_task_for_team 구현 상세 | 헤르메스 #1 |
| 6 | 체크리스트 P1-5b | check_already_notified → 마커 기반 교체 | 헤르메스 #2 |
| 7 | 체크리스트 P1-7 | Restart=on-failure + StartLimitBurst=3 | 야누스 #4 |
| 8 | 체크리스트 P2-2 | inject_context path traversal 검증 추가 | 펜리르 #3 |
| 9 | 체크리스트 P3-10 | systemd 상세 설정 + 전역 flock | 야누스 #1,#2,#3 |
| 10 | 체크리스트 P4-1 | event_bus 스캔 패턴 확장 메커니즘 | 펜리르 #2 |
| 11 | 체크리스트 S1-4,5 | bash 인젝션 방어 + 에스컬레이션 cokacdir 명시 | 펜리르 #1, 로키 #2 |
| 12 | 체크리스트 T2,T3 | 테스트 조건 명확화 + 세분화 | 펜리르 #4, 헤르메스 #4 |
| 13 | 체크리스트 SEC-8 | EnvironmentFile 최소 키 검토 | 로키 #4 |
| 14 | 맥락노트 5.1b | 에스컬레이션 cokacdir 허용 근거 | 로키 #2 |

---

## 미해결 항목 (Phase 4 착수 전 결정 필요)

1. **done-watcher.sh 성공 경로 옵션 확정**: .done.processing → .done 복구 후 마커 생성 vs 직접 rename
2. **event_bus.py 스캔 패턴**: `*.done` + `*.done.notified` 포함 vs `.done.orch-pending` 별도 마커
3. **approver_role ↔ uid 매핑**: Phase 3 설계 시 결정

---

*미팅 기록 종료 — 오딘, 2026-03-24*
