← 리포트 목록
needs_evidence 45건 사유별 분류와 에이전트별 집중도
2026-10-17
claude
[needs_evidence, completion-gate, bus_commands, cowork]
needs_evidence 45건 분류 (조회 2026-10-17 05:06 KST)
조회: sqlite3 -readonly /Users/ron/.hermes/data/ops_multiagent.db "SELECT id,claimed_by,title,result_note FROM bus_commands WHERE status='needs_evidence'" → 45행 (id 40276~41782). 읽기 전용, 수정 없음.
라벨 기준: config/agent_completion_submission_standard.md §4 반려 라벨표(236행~) + result_note의 "차단 사유:" 필드 실측값.
1. 사유별 분류 (상호배타, 합계 45)
| 분류 | 실제 차단 사유 라벨 | 건수 | 비율 |
|---|---|---|---|
| A. 검증값 계열 | missing_verification_exit_code 9, invalid_verification_exit_code 7, verification_command_unverifiable 1 | 17 | 37.8% |
| B. 결과·검증 통합 누락 | missing_result_or_verification 8 (분석가 8건 전부) + 메타 2건(#40954, #41623) | 10 | 22.2% |
| C. 라벨 없는 일반 "결과 확인 보류" | 차단 사유가 "결과 확인 보류/검증 근거 없음" 문구뿐 | 15 | 33.3% |
| D. 실행산출물·검증명령·exit code 3종 누락 | missing_execution_artifact (=missing_execution_value 계열) | 2 | 4.4% |
| E. execution_artifact_path_not_found | /Users/ron/.hermes/workspace/jobs.json 미실존 (#41323) | 1 | 2.2% |
| F. llm_infra_failure 계열 | 차단 사유 필드에 0건 | 0 | 0% |
- missing_source / missing_verification_value / missing_original_verification 단독 라벨은 현재 45건 중 0건(본문 인용으로만 1건씩 등장). 반려 사유는 대부분 최신 게이트 라벨(exit code, result_or_verification)로 바뀌었다.
- 주의: result_note에 "llm_infra"가 들어간 13건(전부 guardian)은 guardian이 다른 태스크를 분류한 요약문 속 단어이며, 자기 반려 사유가 아니다. F는 0건.
- 한계: DB의 result_note는 360~486자로 잘려 있어(길이 분포 360×9, 382×25 등) 원본 4블록 중 어느 줄이 비었는지는 본문만으로 확정 불가. "원본 요약"이 "근거:"에서 끊긴 사례가 있다(#40408).
2. 에이전트별 집중도
| 에이전트 | 건수 | 비율 | A | B | C | D | E |
|---|---|---|---|---|---|---|---|
| guardian | 30 | 66.7% | 14 | 1 | 12 | 2 | 1 |
| cowork | 6 | 13.3% | 2 | 1 | 3 | 0 | 0 |
| analyst-macro | 4 | 8.9% | 0 | 4 | 0 | 0 | 0 |
| analyst-pm | 4 | 8.9% | 0 | 4 | 0 | 0 | 0 |
| ron | 1 | 2.2% | 1 | 0 | 0 | 0 | 0 |
| codex | 0 | 0% | - | - | - | - | - |
| analyst-technical | 0 | 0% | - | - | - | - | - |
| analyst-fundamental/기타 | 0 | 0% | - | - | - | - | - |
| 합계 | 45 | 100% | 17 | 10 | 15 | 2 | 1 |
(요청 목록의 analyst-pm·analyst-technical·guardian 외 codex/analyst-technical은 0건. 위 표의 analyst-pm 4건은 모두 미국 IG·HY 크레딧 건.)
3. 3회 이상 반복 묶음
패턴 1 — 반려 분류 작업 자체의 반려 루프: 31건 (guardian 25 + cowork 6, 전체의 68.9%)
- 제목에 needs_evidence/반려가 들어간 태스크가 "needs_evidence N건 분류"를 반복 요청 → 매번 needs_evidence로 반려 → 건수만 늘려(8→9→10→12→19→20→…→44) 재발행. 제목 속 N이 40842(8건)에서 41782(44건)까지 증가.
- 31건 중 C 15, A 12, D 2, B 2. 즉 데이터 부재가 아니라 4블록·exit code 미준수. 근거: DB에 데이터는 있고(이번 조회로 45행 확인) 지시문에 4블록 요구가 있다.
- 구분: 4블록 미준수(주원인) + 지시문 구조 문제(분류 요청이 자기 자신을 새 반려 대상으로 만드는 재귀).
패턴 2 — 미국 IG·HY OAS(BAMLC0A0CM/BAMLH0A0HYM2) 분석: 8건 (analyst-macro 4 + analyst-pm 4), 전부 missing_result_or_verification
- id: 40408, 40518, 40874, 40960, 41035, 41067, 41769, 41780. 같은 제목 계열 전체 조회에서도 needs_evidence는 8건.
- 데이터 부재 아님: memory/macro-timeseries/BAMLC0A0CM.json(10,856B)과 BAMLH0A0HYM2.json(10,857B)이 10/16 07:10 갱신본으로 실존, 결과 요약에 최신값·bp 변화가 이미 계산돼 있다.
- 지시문 문제 아님: #41780 본문은 4블록 라벨, 근거 경로, "exit code 0 또는 통과" 끝 문구까지 요구한다.
- 판정: 4블록 미준수. 분석가가 판단 서술은 쓰지만 "근거:" 블록(경로+조회시각)과 "검증:" 블록(명령+결과값)을 비운다(#40408 "근거:"에서 요약 종료).
패턴 3 — 검증값 exit code 계열: 17건 (9 missing + 7 invalid + 1 unverifiable)
- 12건이 패턴 1과 겹치고 ron #40297 포함. 표준 §4(245행)가 기술한 대로 부재 확인 grep이 exit 1이 되거나, 검증 줄에 숫자 exit code가 없어 반려.
-
40297(ron): 본문에 "exit code 1"과 "exit code 0"이 한 줄에 혼재 → invalid. 확인은 성공했지만 형식이 막음.
- 판정: 4블록 중 검증 줄 형식 미준수(데이터 있음, 지시문 있음).
(참고: 지식사랑방 인사이트 실패 분류 #40633, #40994, #40691 3건은 모두 패턴 1·3과 겹침.)
4. 구조적 개선안 (코드 작성 없음)
패턴 1
- 개선: needs_evidence 분류 태스크 발행을 중단하고, 분류표는 이 문서처럼 파일 1개를 갱신해 재사용(이미 400-reports에 25개 유사 파일 존재). 오케스트레이터는 제목에 needs_evidence/반려 N건이 있는 태스크를 24시간에 1건으로 제한.
- codex 위임안: 수정 대상
scripts/orchestrator.py—create_task()(제목 중복·반복 억제 게이트), 필요 시scripts/agent_queue_worker.py—_completion_required_evidence_gaps()는 변경 불요.
패턴 2
- 개선: analyst 프롬프트·태스크 본문에서 "근거:" 줄에
조회 YYYY-MM-DD HH:MM KST와 JSON 경로, "검증:" 줄에 파싱 명령+최신 관측일·값+exit code 숫자를 한 줄에 쓰도록 고정 템플릿 제공. 판단 서술이 4블록보다 먼저 길게 나오지 않도록 4블록을 맨 위로. - codex 위임안:
scripts/agent_registry.py—AGENT_ROLE_PROMPTS의 analyst-macro/analyst-pm 항목에 4블록 선행 규칙 반영(존재하지 않는 도구 참조 금지 원칙 유지).
패턴 3
- 개선: exit code는 "exit code 0" 한 가지 숫자만 쓰고, 실패 시연·부정형 확인은
! grep -q ...; echo "exit code $?"형태로 0을 만든다(표준 §4 245행). 검증 줄에 다른 숫자 exit code를 섞지 않는다. - codex 위임안:
scripts/shared/public_result_formatter.py—completion_required_evidence_gaps()가 검증 줄에서 마지막 exit code만 평가하는지 점검(현재 혼재 시 invalid 처리 추정; 확인 필요, 미검증).
5. 재발 가능성 메모
- 같은 날 guardian #41868이 같은 분류를 시도해 반려됨. 본 문서는 sqlite 실조회 값만 인용.