virtual-insanity
← 리포트 목록

완료근거 누락 메시지 재발 방지 운영안

[evidence-gate, bus_commands, operations, recurrence-prevention]

완료근거 누락 메시지 재발 방지 운영안

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 파싱 명령> → 근거파일: <실존 JSON/로그>:<줄번호> "<지표 원문>"

금지: scripts/scripts/...처럼 중복 경로를 적지 않는다. 경로는 제출 전 실존 확인한다.

analyst-fundamental

결론: <기업/자산·핵심 펀더멘털 수치·판단을 한 줄로 쓴다> 근거: <등록된 도구 또는 지원 불가 확인 근거> + <조회 시각> 검증: <실행 명령> → exit code 0, <실제 수치> 근거파일: <실존 산출물/스크립트>:<줄번호> "<원문 일부>"

금지: 등록 도구가 ETF·신용등급 등 요청 데이터를 지원하지 않으면 경로를 지어내지 말고 blocked로 제출한다. 이 에이전트는 검증 줄에 exit code 0 리터럴이 필요하다.

guardian

결론: <점검 대상과 이상 건수를 한 줄로 쓴다> 근거: <실제 점검 스크립트/로그/DB> + <조회 시각> 검증: <헬스체크 또는 DB 조회 명령> → 근거파일: <실제 점검 대상 로그/DB>:<줄번호 또는 필드> "<원문 일부>"

금지: completion_evidence_blocked.jsonl 같은 게이트 자신의 반려 로그를 점검 산출물로 쓰지 않는다.

ron / deterministic handler

결론: 근거: source_log_path: <실존 로그 경로>, 조회 검증: verification_command: <실제 명령> → 근거파일: <실존 로그/스크립트>:<줄번호> "<원문 일부>"

금지: 정제된 공개 요약의 근거 섹션 미기재 — 결론 참고를 완료 근거로 재사용하지 않는다.

5. [금지 문구]

  • 근거 섹션 미기재
  • 근거 섹션 미기재 — 결론 참고
  • 결과물과 검증 근거가 없음
  • 문장 없음
  • 확인 보류
  • 정상 확인함
  • 이상 없음
  • 처리됨
  • 실행 예정
  • 수정한다
  • 구현한다
  • 검증했다 단독
  • blocked: not in whitelist를 검증 성공처럼 쓰는 문장
  • 존재 확인 전 파일 경로
  • /tmp 임시 파일 단독 근거
  • 게이트 반려 로그 자체를 산출물로 쓰는 문장

6. 제출 전 8단계 점검

  1. 4블록 라벨이 줄 맨 앞에 각각 있는가.
  2. 결론 줄이 미래형이 아니라 완료형인가.
  3. 근거 줄에 실존 경로 또는 DB/API 소스와 조회 시각이 있는가.
  4. 검증 줄에 재현 가능한 명령과 실제 결과값이 함께 있는가.
  5. 근거파일 줄에 경로, 줄번호, 원문 인용이 모두 있는가.
  6. 모든 경로를 제출 전에 실제로 확인했는가.
  7. 코드형 요청을 cowork가 받았다면 done 대신 codex 재위임 또는 blocked로 처리했는가.
  8. 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는 정책 부재보다 배선·경로·실행 검증 누락이 반복 원인임을 기록한다.