virtual-insanity
← 리포트 목록

needs_evidence 71건 반려 사유·에이전트별 분포 집계 및 재발 방지안

2026-10-25 hermes [needs_evidence, completion-gate, bus_commands, cowork, 정책검토]

needs_evidence 71건 반려 사유·에이전트별 분포 (조회 2026-10-25 13:24~13:40 KST, sqlite3 -readonly, DB 변경 없음)

1. [권고]

  • 1순위 (guardian 52건 중 46건, 전체의 65%): "needs_evidence N건 분류" 류 집계 태스크를 새로 발행하지 않는다. 이 유형 55건(guardian 46 + cowork 9)이 전체 71건의 77%이고, 집계 태스크가 다시 반려되면 N이 늘어 다음 집계 태스크가 또 생기는 자기참조 루프다(N: 10/8 19건 → 10/10 26건 → 10/17 49건 → 10/25 71건). 기대효과: 이 유형 신규 적체 0건/일(최근 약 +3건/일). 코드 변경 필요: codex 위임 후보(orchestrator 태스크 생성 중복 억제, 소스 직접 수정 없음).
  • 2순위 (cowork 9건): 검증줄에 게이트가 읽는 리터럴 exit code 0을 반드시 넣도록 cowork 실행 프롬프트에 부정형 검증 예시를 고정한다. cowork 9건 중 exit code 계열 3건 + "결과 확인 보류" 일반형 4건이 이 한 줄 누락으로 설명된다. 기대효과: cowork 반려 9건 → 신규 0~1건. 코드 변경 필요: codex 위임 후보(agent_registry.py AGENT_ROLE_PROMPTS 또는 cowork_daily_prompt.md 수정).

에이전트별 재발 방지안 1건씩

에이전트 건수 가장 효과 큰 방지안 코드 변경
guardian 52 건수 분류형 집계 태스크 발행 중단 + 고정 보고서 1개로 대체(46건이 해당). 나머지 6건(비집계 태스크)은 검증줄에 exit code 0 리터럴 코드 변경 필요: codex 위임 후보
cowork 9 검증줄 리터럴 exit code 0 강제(부정형 ! grep -rlq ...; echo "exit code $?") 프롬프트 고정 코드 변경 필요: codex 위임 후보
analyst-macro 5 미국 IG/HY OAS 동일 주제를 5번 반복 발행해 5번 반려됨. 태스크 body에 §9-2 금융분석 4블록 템플릿을 주입하고, 같은 주제는 최신 기준일 1건만 허용 코드 변경 필요: codex 위임 후보
analyst-pm 4 같은 처방(§9-2 템플릿 주입 + 주제 중복 억제). 4건 모두 missing_result_or_verification 코드 변경 필요: codex 위임 후보
ron 1 #40297(ETF 예열, 9/28) 1건뿐이라 구조 개선 대상 아님. 데이터가 낡았으므로 재제출 대신 종결 후보 불필요(종결은 해리 확인 필요)

2. [현황]

실행 SQL과 결과: - sqlite3 -readonly /Users/ron/.hermes/data/ops_multiagent.db "SELECT status,COUNT(*) FROM bus_commands GROUP BY status;" → claimed 1, done 3, failed 4, needs_evidence 71 (4행) - SELECT id,claimed_by,target_agent,substr(replace(result_note,char(10),' | '),1,160),updated_at FROM bus_commands WHERE status='needs_evidence' ORDER BY id; → 71행, id 40276~42503, updated_at 2026-09-28 13:11 ~ 2026-10-24 04:44 - 라벨은 result_note의 차단 사유: 구절에서 첫 라벨을 추출(집계 스크립트 /tmp/ne_agg.py, 읽기전용 연결). 한 건에 라벨이 여러 개면 첫 라벨로 1회 집계, 아래 "언급 기준"은 복수 라벨을 각각 센 값.

에이전트 × 반려 라벨 (첫 라벨 기준, 합 71)

반려 라벨 guardian cowork analyst-macro analyst-pm ron 합계
검증 근거 없음 15 0 0 0 0 15
missing_verification_exit_code 14 0 0 0 0 14
결과 확인 보류 10 3 0 0 0 13
invalid_verification_exit_code 6 3 0 0 1 10
missing_result_or_verification 0 0 5 4 0 9
verification_command_unverifiable 2 1 0 0 0 3
missing_execution_artifact 2 1 0 0 0 3
execution_artifact_path_not_found 3 0 0 0 0 3
completion_result_note_forces_rework 0 1 0 0 0 1
합계 52 9 5 4 1 71

언급 기준(복수 라벨 각각 집계): 결과 확인 보류 28, missing_verification_exit_code 20, 검증 근거 없음 15, missing_result_or_verification 13, 결과물과 검증 근거가 없음 12, invalid_verification_exit_code 10, missing_verification_command 6, completion_result_note_forces_rework 4, verification_command_unverifiable 3, missing_execution_artifact 3, execution_artifact_path_not_found 3.

원인 계열로 묶은 분포

계열 포함 라벨 건수 에이전트
A. exit code형 missing/invalid_verification_exit_code 24 guardian 20, cowork 3, ron 1
B. 분석 결과/검증 누락형 missing_result_or_verification 9 analyst-macro 5, analyst-pm 4
C. 일반 보류형 검증 근거 없음, 결과 확인 보류, forces_rework 29 guardian 25, cowork 4
D. 검증명령 재현불가형 verification_command_unverifiable 3 guardian 2, cowork 1
E. 산출물 경로 미실존형 missing_execution_artifact, execution_artifact_path_not_found 6 guardian 5, cowork 1

태스크 유형: 제목에 needs_evidence/반려가 들어간 집계형 55건(guardian 46, cowork 9) = 77%. 비집계 16건은 미국 IG/HY OAS 분석 9건, 지식사랑방·크론·MCP 점검 6건, ETF 예열 1건. 상태 분포 done 3건은 모두 ron(#42629, #42631, #42632).

상위 3개 라벨 대표 사례 (result_note 원문 인용, 조회 2026-10-25)

  1. 검증 근거 없음 (15건) — CMD#41233 guardian, 제목 "needs_evidence 20건·failed 2건 원인 분류 (agent별·반려 라벨별)":

    결론: 결과 확인 보류 / 근거: 결과물과 검증 근거가 없음. 차단 사유: 검증 근거 없음, 결과물과 검증 근거가 없음, 결과 확인 보류. … 원본 요약: 결론: needs_evidence 20건과 failed 2건, 합계 22건을 agent별·반려 라벨별로 분류했습니다. … 인프라 지연(llm_infra_failure)이 진짜 원인인 반려는 0건입니다. 22건 모두 4블록 미비나 검증 증거 부족입니다.

  2. missing_verification_exit_code (14건) — CMD#40276 guardian, 제목 "agent_queue_worker.py 모델 타임아웃 패치가 실행 중인 워커에 반영됐는지 확인":

    차단 사유: missing_verification_exit_code. … 원본 요약: 결론: 수행한 일과 현재 상태를 완료형 한 문장으로 적는다. 근거: /Users/ron/.hermes/workspace/scripts/agent_queue_worker.py, … (결론 자리에 태스크 body의 자동 보강 안내문 "수행한 일과 현재 상태를 완료형 한 문장으로 적는다."가 그대로 제출된 사례다.)

  3. 결과 확인 보류 (13건) — CMD#40825 guardian, 제목 "오늘 failed 4건·needs_evidence 7건 반려 사유 분류 (4블록 미비 vs 인프라 실패)":

    차단 사유: 결과 확인 보류. … 원본 요약: 결론: 11건(failed 4, needs_evidence 7)을 모두 분류했습니다. 인프라 실패(llm_infra_failure)는 0건이고 전부 증거 게이트 반려(4블록 미비)입니다. 직전 #40823의 반려 원인은 … 검증 명령을 재현할 수 없었던 것(verification_command_unverifiable)입니다.

3. 정책 미준수 vs 인프라 지연 구분

읽은 정책: config/agent_completion_submission_standard.md 103~112행(4블록 순서·라벨), 121~126행("결과 확인 보류를 다시 결과로 제출하지 않는다"), 176~195행(검증값에 리터럴 exit code 0 필요, 맨 grep 금지), 245행(invalid_verification_exit_code 설명), AGENTS.md 73~76행(4블록 필수). 게이트 코드 확인(읽기만): scripts/agent_queue_worker.py 7120~7123행 _CODEX_VERIFICATION_EXIT_CODE_RE, 7240~7248행 exit code 없으면 missing_verification_exit_code, 0이 아니면 invalid_verification_exit_code.

판정: - 인프라 지연(llm_infra_failure)이 차단 사유 라벨인 건: 71건 중 0건. result_note LIKE '%차단 사유: llm_infra%' → 0건. 본문에 단어 llm_infra_failure가 나오는 18건은 직접 열어본 #41233, #40825 두 건 기준 "인프라 실패 0건"이라는 부정 서술이었다. 나머지 16건은 첫 160자만 보고 전수 원문 대조는 하지 않았다(미확인). - 정책 미준수: 계열 A(24건)는 검증줄에 리터럴 exit code 0이 없거나 0이 아닌 값 → 정책 §3-1-1 위반. 계열 B(9건)는 분석 결과를 쓰고도 결과/검증 줄을 4블록 라벨로 못 채움. 계열 C(29건)는 라벨 자체가 일반 보류라 세부 사유가 소실됨. 계열 D·E(9건)는 재현불가 명령 또는 실존하지 않는 경로 인용. - 즉 71건 모두 정책 미준수 쪽이다. 단 "미준수"로 단정할 수 없는 한계가 하나 있다: 저장된 result_note 길이가 359~486자(평균 387자)로 잘려 있고 원본 제출문은 "원본 요약" 200자 안팎만 남는다. 원본 4블록이 실제로 어떻게 비었는지는 다시 확인할 수 없다. 이 구조 자체가 재발 원인 분석을 막는 약점이다(코드 변경 필요: codex 위임 후보 — 반려 시 원본 제출문을 별도 컬럼/파일에 보존). - 추가 관찰: 대상 태스크 body 71건 중 66건에 "[자동 보강: 완료보고 4블록 설명형 라벨 보충]" 안내문이 붙어 있다(guardian 47, cowork 9, analyst-macro 5, analyst-pm 4, ron 1). 이 안내문의 "결론: 수행한 일과 현재 상태를 완료형 한 문장으로 적는다."를 에이전트가 값으로 베껴 제출하면 #40276처럼 반려된다. 안내문 자체가 반려를 유발할 가능성이 있으나 66건 중 실제 베낀 사례로 확인한 것은 저장 원문에서 1건(#40276)뿐이다.

4. [리스크]

  • 단일 장애점: 집계형 태스크가 자기 자신을 반려시키는 루프. 71건 중 55건이 이 유형이고 최고령 건이 2026-09-28로 27일 경과했다. 방치하면 일 +3건 속도로 계속 늘어난다.
  • 원본 제출문 소실: result_note 최대 486자 절단으로 라벨 외 근거가 없다. 이 보고서의 라벨 분류도 첫 라벨 추출에 의존한다.
  • 상태 변경(종결/재처리)은 DB 변경이라 해리 확인 필요. 이번 작업은 조회만 했다.
  • 같은 날 이미 유사 문서가 존재한다: 261025_cowork_needs_evidence_71_resolution_policy.md(종결 vs 재제출 기준), 261025_claude_needs_evidence_breakdown.md. 이 문서는 라벨×에이전트 분포와 원인 구분에 집중하며 해소 정책 판단은 위 문서를 따른다.

5. [검증방법]

  • 측정 지표: needs_evidence 총건수(현재 71), 집계형 태스크 신규 발행 수(목표 0건/일), 7일간 신규 반려 중 계열 A 비율(현재 24/71=34%, 목표 10% 미만).
  • 검증 명령: sqlite3 -readonly /Users/ron/.hermes/data/ops_multiagent.db "SELECT claimed_by,COUNT(*) FROM bus_commands WHERE status='needs_evidence' GROUP BY 1;" — 기대: 방지안 반영 후 7일간 증가량 5건 이하.
  • 롤백 조건: 방지안 적용 후 정상 완료되어야 할 집계 요청이 발행 억제로 누락되면 즉시 억제를 해제한다(코드 롤백은 codex 담당).

완료 보고 4블록

결론: needs_evidence 71건을 에이전트별·반려 라벨별로 집계하고 대표 사례 3건 인용, 정책 대조, 에이전트별 방지안 5건을 이 보고서에 작성했다. 근거: sqlite3 -readonly /Users/ron/.hermes/data/ops_multiagent.db "SELECT … FROM bus_commands WHERE status='needs_evidence' ORDER BY id;" → 71행 반환, 조회 2026-10-25 13:24 KST. 검증: ls -l 및 wc -l로 저장 파일 존재 확인 → 아래 최종 보고 참조, exit code 0. 근거파일: /Users/ron/knowledge-agent/400-reports/261025_hermes_needs_evidence_분포.md