완료근거 누락 메시지 재발 방지 운영안
1. [권고]
→ 1순위: 모든 에이전트 완료 보고 끝에 결론/근거/검증/근거파일 4블록을 독립 줄로 고정한다. 최근 DB 실측에서 동일 계열 최신 반려는 6건(#39307~#39312)이며, 이 중 cowork 2건, analyst-macro 2건, analyst-technical 2건이 모두 경로·검증값·산출물 인식 실패 계열이었다. 기대효과는 4블록 누락형 반려 50% 이상 감소다.
→ 2순위: 근거 섹션 미기재, 결과물과 검증 근거가 없음, 확인 보류, 문장 없음, 정상 확인함, 이상 없음, 처리됨, 실행 예정, 수정한다, 구현한다, blocked: not in whitelist, 존재 확인 전 경로를 완료 보고 금지 문구로 지정한다. 기대효과는 자기지시 placeholder와 미래형 제안문으로 인한 반려 100% 제거다.
→ 3순위: 에이전트별 템플릿을 분리한다. cowork는 제안서와 완료 4블록을 분리하고, 코드형 요청은 done이 아니라 codex 재위임 또는 blocked로 제출한다. analyst-macro는 실제 지표 파일·함수명을 먼저 확인한다. analyst-fundamental은 exit code 0 리터럴을 검증 줄에 포함한다. guardian은 게이트 로그가 아니라 실제 점검 대상 로그를 근거파일로 쓴다.
2. [현황]
bus/messages.jsonl에서결과물과 검증 근거가 없음은 오래된 status 메시지에 대량 반복된다. 검색 표본 첫 20건은 2026-08-12 라인 20651~20863에 집중되어 있고, 대부분block_reasons=["non_ron_harry_direct"]또는 단순 라우팅 메시지다.bus_commands최신 실측에서근거 섹션 미기재또는결과물과 검증 근거가 없음이 직접 남은 최신 완료 반려는 #39307 1건이다. 제목은완료보고 반려 방지용 작업본문 점검안 정리, claimed_by는 cowork, status는 failed다.verification_command_unverifiable,execution_artifact_path_not_found,missing_execution_artifact,missing_verification_exit_code계열 최신 반려는 #39307~#39312 총 6건이다. 에이전트별로 cowork 2건, analyst-macro 2건, analyst-technical 2건이다.- 정책 문서 기준은 이미 존재한다.
agent_completion_submission_standard.md는 4블록 제출 표준과 금지 문구를 명시하고,completion_evidence_policy.md는 정책 부재가 아니라 배선·실행·경로 검증 누락이 반복 원인임을 여러 사건으로 기록한다.
3. [리스크]
- 구조적 위험 1: 단순 status 라우팅 메시지와 실제 완료제출을 혼동하면 오탐이 생긴다. 정책 문서상 증거 게이트는 canonical 완료제출, 즉
status=done/complete/completed/success계열에 적용된다.task_status류 placeholder만 보고 에이전트 위반으로 단정하면 재작업 큐가 불필요하게 늘어난다. - 구조적 위험 2: 문서만 있고 실행 프롬프트·작업본문에 배선되지 않으면 재발한다. 기존 정책에도 4블록이 있었지만 #39307~#39312에서 같은 계열 반려가 이어졌다.
- 구조적 위험 3: 존재하지 않는 파일을 근거로 쓰면 라벨을 채워도 반려된다. 최신 사례에는
/Users/ron/.hermes/workspace/self_evolve.py,scripts/scripts/pipeline/vault_technical_bridge.py처럼 실존 검증 전 경로가 반려 원인으로 남았다. - 구조적 위험 4: cowork의 역할 경계가 흐려지면 코드 구현 요청을 제안서로 완료 처리하려는 패턴이 반복된다. 코드 작성 금지 에이전트가 코드형 요청을 받으면 done이 아니라 codex 재위임 또는 blocked가 맞다.
4. [에이전트별 완료 보고 템플릿]
공통 4블록
결론: <실제로 작성/조회/검증/수정한 대상과 결과를 완료형 한 줄로 쓴다> 근거: <직접 참조한 DB/API/파일/로그 경로> + <조회 YYYY-MM-DD HH:MM KST> 검증: <실행한 검증 명령 또는 계산> → <실제 결과값, 건수, exit code> 근거파일: <실존 경로>:<줄번호> "<원문 일부>"
cowork
결론: <운영안/설계안/검토 결과를 작성했다, 또는 코드형 요청은 codex 재위임했다> 근거: <참조한 정책 문서·DB 조회·버스 메시지> + <조회 시각> 검증: <작성 파일 존재 확인 또는 조회 명령> → <핵심 항목 수, exit code 0> 근거파일: <작성한 보고서 경로>:<줄번호> "<운영안 핵심 문장>"
금지: 1순위: 구현한다 같은 미래형을 done으로 제출하지 않는다. 코드형 요청이면 codex 재위임: bus_command #... 또는 blocked: 코드 작성 권한 없음으로 끝낸다.
analyst-macro
결론: <지표명·최신값·변화폭·판단을 한 줄로 쓴다>
근거: <실제 시계열 파일 또는 실존 파이프라인 함수> + <조회 시각> + <전후 수치>
검증: <워크스페이스 경로가 들어간 재현 명령> → <실제 값, exit code 0>
근거파일: <로컬 JSON 또는 스크립트 경로>:<줄번호> "
금지: market_indicator.py처럼 확인하지 않은 경로를 지어내지 않는다. 먼저 파일명을 확인하고 실존 경로만 쓴다.
analyst-technical
결론: <티커·기술지표·수치·판단을 한 줄로 쓴다>
근거: <가격/기술지표 로컬 산출물> + <조회 시각>
검증: <실존 스크립트 또는 로컬 JSON 파싱 명령> →
금지: scripts/scripts/...처럼 중복 경로를 적지 않는다. 경로는 제출 전 실존 확인한다.
analyst-fundamental
결론: <기업/자산·핵심 펀더멘털 수치·판단을 한 줄로 쓴다> 근거: <등록된 도구 또는 지원 불가 확인 근거> + <조회 시각> 검증: <실행 명령> → exit code 0, <실제 수치> 근거파일: <실존 산출물/스크립트>:<줄번호> "<원문 일부>"
금지: 등록 도구가 ETF·신용등급 등 요청 데이터를 지원하지 않으면 경로를 지어내지 말고 blocked로 제출한다. 이 에이전트는 검증 줄에 exit code 0 리터럴이 필요하다.
guardian
결론: <점검 대상과 이상 건수를 한 줄로 쓴다>
근거: <실제 점검 스크립트/로그/DB> + <조회 시각>
검증: <헬스체크 또는 DB 조회 명령> →
금지: completion_evidence_blocked.jsonl 같은 게이트 자신의 반려 로그를 점검 산출물로 쓰지 않는다.
ron / deterministic handler
결론:
금지: 정제된 공개 요약의 근거 섹션 미기재 — 결론 참고를 완료 근거로 재사용하지 않는다.
5. [금지 문구]
근거 섹션 미기재근거 섹션 미기재 — 결론 참고결과물과 검증 근거가 없음문장 없음확인 보류정상 확인함이상 없음처리됨실행 예정수정한다구현한다검증했다단독blocked: not in whitelist를 검증 성공처럼 쓰는 문장- 존재 확인 전 파일 경로
/tmp임시 파일 단독 근거- 게이트 반려 로그 자체를 산출물로 쓰는 문장
6. 제출 전 8단계 점검
- 4블록 라벨이 줄 맨 앞에 각각 있는가.
- 결론 줄이 미래형이 아니라 완료형인가.
- 근거 줄에 실존 경로 또는 DB/API 소스와 조회 시각이 있는가.
- 검증 줄에 재현 가능한 명령과 실제 결과값이 함께 있는가.
- 근거파일 줄에 경로, 줄번호, 원문 인용이 모두 있는가.
- 모든 경로를 제출 전에 실제로 확인했는가.
- 코드형 요청을 cowork가 받았다면 done 대신 codex 재위임 또는 blocked로 처리했는가.
- status 라우팅 메시지와 canonical 완료제출을 혼동하지 않았는가.
7. [검증방법]
→ 측정 지표 1: 72시간 내 근거 섹션 미기재 또는 결과물과 검증 근거가 없음이 들어간 bus_commands.result_note 신규 건수. 기대값은 0건이다.
검증 명령어:
sqlite3 -readonly /Users/ron/.hermes/data/ops_multiagent.db "SELECT id,claimed_by,status,title FROM bus_commands WHERE (result_note LIKE '%근거 섹션 미기재%' OR result_note LIKE '%결과물과 검증 근거가 없음%') AND datetime(updated_at) >= datetime('now','-3 day');"
→ 측정 지표 2: execution_artifact_path_not_found, verification_command_unverifiable, missing_execution_artifact, missing_verification_exit_code 신규 건수. 기대값은 현재 최신 6건 대비 7일 내 50% 이상 감소다.
검증 명령어:
sqlite3 -readonly /Users/ron/.hermes/data/ops_multiagent.db "SELECT claimed_by,COUNT(*) FROM bus_commands WHERE (result_note LIKE '%execution_artifact_path_not_found%' OR result_note LIKE '%verification_command_unverifiable%' OR result_note LIKE '%missing_execution_artifact%' OR result_note LIKE '%missing_verification_exit_code%') AND datetime(updated_at) >= datetime('now','-7 day') GROUP BY claimed_by;"
→ 롤백 조건: 위 금지 문구와 4블록 템플릿 적용 후에도 같은 에이전트가 3회 연속 같은 라벨로 반려되면 문서 문제가 아니라 게이트 코드 또는 프롬프트 배선 문제로 격상한다. 이때 codex에 agent_queue_worker.py와 public_result_formatter.py의 조건절 비교를 위임한다.
8. 근거 요약
- 메시지 로그 검색:
bus/messages.jsonl에서결과물과 검증 근거가 없음표본 20건 확인, 주요 라인은 20651~20863. - DB 최신 반려: #39307은
근거 섹션 미기재,verification_command_unverifiable,execution_artifact_path_not_found:/Users/ron/.hermes/workspace/self_evolve.py로 failed. - DB 최신 확장 반려: #39307~#39312 총 6건, 에이전트별 cowork 2건, analyst-macro 2건, analyst-technical 2건.
- 정책 문서:
agent_completion_submission_standard.md는 4블록 제출 표준과 금지 문구를 이미 제시한다.completion_evidence_policy.md는 정책 부재보다 배선·경로·실행 검증 누락이 반복 원인임을 기록한다.