하네스 감사 — 수용(미수정) 항목 결정 기록
일자: 2026-03-31
관련 문서: docs/decisions/2026-03-31-harness-audit.md
작성자: Leader (QA+PM)
개요
하네스 감사보고서 31건 + 신규 발견 4건 총 35건 중 **7건을 의도적으로 수용(미수정)**합니다. 각 항목의 미수정 근거와 재검토 조건을 기록합니다.
수용 항목
1. A-4: Planner-First 파이프라인 미강제 [P1-High]
문제: "새 시스템은 Planner 설계 -> Coder 구현 순서" 규칙이 프롬프트에만 존재. TaskCreated 훅에서 Feature+Coder 조합이면 blocked_by에 Design 작업 필수 검증이 없음.
수용 근거:
- TaskCreated 훅에 자동 종속성 주입을 구현하려면, "어떤 작업이 Design이고 어떤 작업이 구현인지"를 기계적으로 판단해야 함
- 작업 유형(type 필드)이 "Feature"인 것만으로는 불충분 — 버그픽스, 리팩토링 등도 Feature로 분류될 수 있음
- update-task.sh에 blocked_by 검증을 추가하여 (C-2 수정 완료), 잘못 시작하려는 시도는 이미 차단됨
- 프롬프트 기반 Planner-First 지시 + Leader의 작업 생성 시 수동 종속성 설정이 현재 워크플로우에서 충분히 작동
대안 보상 장치:
- Leader 프롬프트에 Planner-First 파이프라인 규칙 명시 (이미 적용)
- update-task.sh의 blocked_by 검증으로 차단된 작업 시작 방지 (이미 적용)
- 작업 생성 시 Leader가 수동으로 blocked_by 설정
재검토 조건: Planner 설계 없이 Coder가 새 시스템 구현을 시작하는 사례가 2회 이상 발생할 때
2. B-4: log-stop.sh 비동기 로그 의존 (경합 조건) [P1-High]
문제: Stop 훅(동기)이 agent-events.jsonl을 읽는데, 이 파일은 log-tool-use.sh(비동기)가 씀. 팀원 최신 활동이 아직 안 쓰여서 Leader가 조기 종료할 수 있음.
수용 근거:
- log-stop.sh는 2분 윈도우 내 활동을 체크함 — 비동기 쓰기 지연은 통상 수백ms 이내
- 실제 운영에서 이 경합으로 인한 조기 종료 사례가 관측되지 않음 (이벤트 로그에 stop 10건 모두 정상)
- 하트비트 파일 방식으로 전환하면 복잡도 증가 대비 실질 개선이 미미
대안 보상 장치:
- 2분 윈도우가 충분히 넉넉하여 수백ms 지연을 흡수
- Leader 조기 종료 시 사용자가 재시작하면 되므로 치명적이지 않음
재검토 조건: Leader가 팀원 활동 중 조기 종료하는 사례가 발견될 때
3. C-4: 작업 담당자 검증 없음 [P2-Medium]
문제: update-task.sh에 에이전트명 파라미터가 없어서, 다른 에이전트의 작업 상태를 아무나 변경 가능.
수용 근거:
- 현재 팀 규모 6명으로 작음 — 실수로 타 에이전트 작업을 변경할 확률이 낮음
- update-task.sh에 에이전트 파라미터를 추가하면, 기존 모든 에이전트 프롬프트와 스크립트 호출부를 동시 수정해야 함 (후방 호환성 파괴)
- Leader가 PM 역할로 모든 작업 상태를 관리하는 것은 정상 운영
재검토 조건: 팀 규모가 10명 이상으로 증가하거나, 타 에이전트 작업을 잘못 변경하는 사례가 발생할 때
4. F-2: Slack 채널 ID 하드코딩 [P2-Medium]
문제: slack-post.sh 등에서 채널 이름을 채널 ID로 변환하는 로직이 하드코딩되어 있음.
수용 근거:
- Slack 채널은 프로젝트 초기에 한 번 생성된 후 변경되지 않음
- conversations.list API 캐시를 구현하면 네트워크 호출 추가 + 캐시 무효화 로직 필요
- 현재 3개 채널(general, dashboard, review-queue)만 사용 — 하드코딩이 더 단순하고 신뢰성 높음
재검토 조건: Slack 채널 추가/변경이 빈번해질 때 (Phase 3 이후)
5. E-3: stop-agents.sh 이름 혼동 [P3-Low]
문제: stop-agents.sh가 실제로는 대시보드 서버만 정지하는데 이름이 혼동됨.
수용 근거:
- stop-dashboard.sh가 이미 별도 존재함
- stop-agents.sh는 start-agents.sh와 짝을 이루는 이름으로 직관적
- 리네임하면 기존 문서, 프롬프트, 호출부 모두 수정 필요
- P3 수준의 가독성 이슈로 파급 효과 대비 가치 없음
재검토 조건: 신규 팀원(사람) 온보딩 시 혼동 발생
6. E-4: check-pending-commands.sh 폐기 코드 잔존 [P3-Low]
문제: 더 이상 사용하지 않는 스크립트가 남아있음.
수용 근거:
- 이미
[DEPRECATED]표시 +exit 0만 실행 — 부작용 없음 - 삭제 시 git 히스토리만 차지 하고 실질적 개선 없음
- pending-commands.jsonl 파일은 이미 존재하지 않음
재검토 조건: scripts/ 디렉토리 정리 일괄 작업 시
7. E-5: 대시보드 PID 경합 [P3-Low]
문제: 대시보드 서버 시작 시 PID 파일 기반 중복 실행 방지가 flock 없이 구현됨.
수용 근거:
- 대시보드 서버는 Leader가 단일 시작하므로 동시 시작 경합이 발생하지 않음
- flock은 macOS에서 기본 미지원 (brew install 필요)
- mkdir 기반 락이 이미 update-task.sh에 구현되어 패턴 일관성 유지
재검토 조건: 대시보드 서버 이중 기동으로 포트 충돌 발생 시
요약
| ID | 심각도 | 항목 | 수용 근거 핵심 |
|---|---|---|---|
| A-4 | P1 | Planner-First 미강제 | 기계적 판단 어려움 + blocked_by 검증으로 보상 |
| B-4 | P1 | log-stop.sh 경합 | 2분 윈도우 충분, 실제 문제 미관측 |
| C-4 | P2 | 담당자 검증 없음 | 팀 규모 작음, 후방 호환성 파괴 |
| F-2 | P2 | 채널 ID 하드코딩 | 3개 채널, 변경 빈도 극히 낮음 |
| E-3 | P3 | 스크립트 이름 혼동 | 리 네임 파급 효과 대비 가치 없음 |
| E-4 | P3 | 폐기 코드 잔존 | exit 0만 실행, 부작용 없음 |
| E-5 | P3 | PID 경합 | 단일 시작, macOS flock 미지원 |