virtual-insanity
← 리포트 목록

완료보고 근거누락 방지 운영안

2026-09-14 completion

완료보고 근거누락 방지 운영안

1. [권고]

→ 1순위: 태스크 body 끝에 “완료보고 4블록”과 12개 체크리스트를 그대로 붙인다. 최근 bus_commands 실측에서 완료보고 근거누락 사례가 11건이며, 에이전트별로 ron 4건, cowork 3건, analyst-macro 3건, analyst-technical 1건으로 분산되어 있었다. 기대효과는 단순 형식 누락형 반려를 7일 내 50% 이상 줄이는 것이다.

→ 2순위: “코드 작성 금지 에이전트에게 코드형 태스크 배정”, “없는 파일 경로 추측”, “status 메시지를 완료보고로 오판” 3개를 태스크 생성 단계에서 금지문구로 막는다. 최근 bus message 3,000줄 중 관련 문구 사례가 1,515건으로 많지만, 상당수는 task_status 라우팅 부산물이라 실제 완료보고 위반과 구분해야 한다. 기대효과는 재조사 태스크 오탐을 0건으로 낮추는 것이다.

2. [현황]

정책 파일 2개를 확인했다.

  1. /Users/ron/.hermes/workspace/config/agent_completion_submission_standard.md
  2. 총 835줄.
  3. 76~92행: 완료보고는 “결론/근거/검증/근거파일/다음 행동” 순서와 라벨을 요구한다.
  4. 135~138행: “정상 확인함”, “이상 없음”, “처리됨”, “근거: 근거 섹션 미기재”류 문구를 금지한다.
  5. 196~200행: 적용 대상은 analyst 계열, codex, cowork, data-analyst, guardian, ron이다.
  6. 396~431행: 4블록 강제 요건은 실제 완료제출에만 적용되며 task_status류 핸드오프는 제외한다.
  7. 1407~1452행: 기존 8개 체크리스트가 이미 있으나, body 작성 시 바로 붙일 금지문구·필수문구 형식으로 재정리할 필요가 있다.

  8. /Users/ron/.hermes/workspace/config/completion_evidence_policy.md

  9. 총 2,503줄.
  10. 16~28행: 완료보고에는 실행값, 출처, 검증값, 파일+라인+원문 인용이 필요하다.
  11. 72~86행: 정책 문서가 있어도 실제 프롬프트·태스크 body에 배선되지 않으면 재발한다.
  12. 100~107행: 실제 사례 3건은 실행 자체 생략, 파일 미생성, 검증 생략으로 분류된다.
  13. 1411~1452행: 경로 실존 확인, 검증명령 재현 가능성, 라벨 위치, 산출물 생성 여부가 핵심이다.

최근 bus_commands 실측:

  • 조회 시각: 2026-09-14 15:15 KST
  • 대상 문구: “결과 확인 보류”, “근거 섹션 미기재”, “검증 근거 미기재”, missing 계열 4종
  • 사례 수: 11건
  • 에이전트별: ron 4건, cowork 3건, analyst-macro 3건, analyst-technical 1건
  • 최근 사례: 38740 analyst-macro, 38739 cowork, 38736 analyst-macro, 38735 ron, 38733 cowork, 38734 ron, 38730 cowork, 38729 analyst-technical, 38728 analyst-macro, 38727 ron, 38724 ron

최근 bus/messages 3,000줄 실측:

  • 관련 문구 사례: 1,515건
  • 에이전트별: cowork 576건, ron 479건, analyst-macro 213건, orchestrator 148건, codex 31건, analyst-fundamental 26건, analyst-technical 26건, guardian 15건, analyst-pm 1건
  • 주의: 이 중 “근거: 근거 섹션 미기재 — 결론 참고”가 붙은 status=None, block_reasons=task_status 메시지는 완료보고 위반이 아니라 라우팅 부산물이다.

3. 에이전트별 누락 원인

ron

원인: run-cycle, 헬스체크, 지식순환처럼 결정적 핸들러가 만든 실패 보고가 게이트를 통과할 만큼의 검증 결과를 항상 남기지 못한다. 최근 사례 4건 중 38734와 38727은 “검증 결과” 부족, 38735와 38724는 실행값·출처·검증값 전부 부족으로 분류된다.

운영 처방: ron 태스크 body에는 “검증 결과(exit code/stdout 요약)를 반드시 결론 아래 검증 줄에 직접 적어라”를 붙인다. 실패 보고도 완료보고와 같은 4블록으로 써야 한다.

cowork

원인: cowork는 설계·검토 에이전트인데, 코드형·실행형 태스크에서도 제안서 형식만으로 done을 시도하는 경향이 있다. 최근 사례 3건 중 38730은 검증 결과 누락, 38733은 확인 못함 문구와 실존하지 않는 실행 경로, 38739는 source log path와 실행 산출물 경로 문제가 섞였다.

운영 처방: body에 “코드 수정·구현·패치가 필요하면 done 금지, codex 재위임 또는 blocked 제출”을 강제한다. 설계안 작성 태스크라도 실제로 읽은 파일과 생성한 보고서 경로를 근거파일에 남겨야 한다.

analyst-macro

원인: 존재하지 않는 시장지표 스크립트 경로를 추측하거나, 검증 줄 안에 실제 워크스페이스 경로와 실행 결과를 함께 쓰지 않아 반려된다. 최근 사례 3건은 미국 투자등급 회사채 스프레드 관련이며, 38740은 실행 산출물 경로와 검증 명령·exit code 부족, 38736·38728은 재현 가능한 검증 명령과 결과물 경로 부족이다.

운영 처방: body에 정확한 진입점 scripts/pipeline/market_indicator_tracker.py와 필요한 경우 fetch_fred_methodology_indicators()를 명시한다. “검증:” 줄에는 경로, 실행명령, 결과값, exit code를 한 줄 안에 함께 쓰게 한다.

analyst-technical

원인: 임시 파일명이나 상대 경로를 검증 명령에 적어 실제 파일 검증이 실패한다. 최근 1건 38729는 raw_technical_data.json 경로 문제로 반려됐다.

운영 처방: body에 “임시 파일 금지, 결과를 워크스페이스 안 실존 파일로 저장 후 그 경로를 인용”을 붙인다.

guardian

최근 bus_commands 11건에는 없지만, 정책 문서상 기존 반려율이 높았던 에이전트다. 자기 점검 대상 대신 completion_evidence_blocked 같은 게이트 로그를 근거파일로 드는 자기참조형 문제가 있었다.

운영 처방: guardian body에는 “근거파일은 게이트 로그가 아니라 실제 점검 대상 로그, 디비, 상태 출력이어야 한다”를 붙인다.

4. [리스크]

  1. 정책 문서만 있고 태스크 body에 붙지 않으면 재발한다. completion_evidence_policy.md 72~86행이 이미 “정책은 있는데 아무도 안 읽는 상태”를 근본원인으로 확인했다.

  2. status 메시지와 완료보고를 혼동하면 오탐 태스크가 생긴다. bus/messages 최근 3,000줄에서 관련 문구 1,515건이 있었지만, 그중 다수는 status=None/task_status 라우팅 부산물이다. 이걸 위반 사례로 잡으면 실제 반려 원인을 못 찾는다.

  3. 없는 파일 경로를 맞추려고 지어내면 반려가 더 강해진다. 특히 analyst-macro와 analyst-technical은 “그럴듯한 경로”보다 “먼저 경로 검색”이 우선이다.

  4. cowork에게 코드형 태스크가 배정되면 구조적으로 실패한다. cowork는 코드 작성 금지 역할이므로, body에서 재위임·blocked 절차를 명시하지 않으면 제안서만 쓰고 done을 시도할 위험이 남는다.

  5. 체크리스트로 해결되지 않는 게이트 이상 현상이 있다. 과거 정책 문서 v10은 4블록을 갖췄는데도 반려된 사례를 따로 분리했다. 같은 현상이 재발하면 3회 재작성하지 말고 코드 게이트 조사를 codex에 넘겨야 한다.

5. 태스크 body 작성 금지문구

아래 문구는 태스크 body 또는 완료보고 예시에 넣지 않는다.

  1. “정상 확인함” 단독
  2. “이상 없음” 단독
  3. “처리됨” 단독
  4. “완료됨” 단독
  5. “근거: 근거 섹션 미기재”
  6. “근거: 결론 참고”
  7. “확인 못함”을 검증 결과로 대체
  8. “도구 실행이 막힘”만 쓰고 대체 검증 없이 종료
  9. “blocked: not in whitelist”를 성공 검증으로 사용
  10. 존재 여부를 확인하지 않은 파일 경로
  11. /tmp/ 임시 파일을 최종 근거파일로 사용
  12. “~을 구현한다”, “~하도록 수정한다” 같은 미래형 제안문을 done 결론으로 사용

6. 태스크 body 필수문구 체크리스트 12개

태스크 body 끝에 아래 문장을 그대로 붙인다.

  1. 완료보고는 반드시 결론:, 근거:, 검증:, 근거파일: 4개 라벨을 각각 줄 맨 앞에 쓴다.
  2. 결론:에는 실제로 실행·확인·생성한 일을 완료형으로 쓰고, 제안·예정 문장으로 쓰지 않는다.
  3. 근거:에는 읽은 정책 파일, 조회한 디비, 사용한 자료 원본, 조회 시각을 함께 쓴다.
  4. 검증:에는 실제 실행한 명령과 결과값을 함께 쓴다. exit code, 건수, pass 수, 출력값 중 하나가 반드시 있어야 한다.
  5. 근거파일:에는 실존하는 워크스페이스 파일 경로와 줄 번호, 원문 한 줄 인용을 쓴다.
  6. 경로를 쓰기 전 search_files, read_file, sqlite3, 기존 스크립트 실행 중 하나로 실존 여부를 먼저 확인한다.
  7. 같은 태스크 재시도라면 직전 반려 라벨을 먼저 읽고, 그 라벨이 요구하는 항목만 정확히 보완한다.
  8. status=None, block_reasons=task_status 메시지는 완료보고 위반으로 보지 않는다. 먼저 bus_commands의 canonical status/result_note를 조회한다.
  9. 코드 수정·구현·패치 태스크를 cowork가 받으면 done 금지다. codex 재위임 또는 blocked로 제출하고 그 근거를 쓴다.
  10. analyst-macro의 시장지표 태스크는 정확한 스크립트와 함수명을 먼저 확인한다. 존재하지 않는 market_indicator.py 같은 경로를 지어내지 않는다.
  11. analyst-fundamental은 검증 줄에 exit code 0 리터럴이 필요하다. 지원 도구가 없는 ETF·신용등급 태스크는 done이 아니라 blocked로 제출한다.
  12. 위 11개를 지켰는데도 missing_execution_artifact나 missing_verification_exit_code 같은 미분류 라벨로 반려되면 3회 재작성하지 말고 codex에 게이트 코드 조사를 넘긴다.

7. 태스크 body 예시

아래 문단을 신규 태스크 body 하단에 붙인다.

완료보고 필수 형식: 결론: <실제로 실행·확인·생성한 일 한 줄> 근거: <읽은 파일 2개 이상 또는 조회한 디비/API> + <조회 YYYY-MM-DD HH:MM KST> 검증: <실행한 검증 명령> → <실제 결과값 또는 exit code> 근거파일: <실존 경로>:<줄번호> "<원문 인용 한 줄>" 금지: “정상 확인함”, “이상 없음”, “처리됨”, “근거 섹션 미기재”, “확인 못함”, 존재 확인 안 한 경로, 미래형 제안문으로 done 제출.

8. [검증방법]

측정 지표:

  1. 72시간 내 result_note에 “결과 확인 보류”, “근거 섹션 미기재”, “검증 근거 미기재”, missing_가 포함된 신규 bus_commands 건수.
  2. 에이전트별 반려 건수: ron, cowork, analyst-macro, analyst-technical, guardian.
  3. status=None/task_status를 실제 완료보고 위반으로 오분류한 후속 태스크 건수.
  4. cowork가 코드형 태스크에 done을 시도한 건수.
  5. analyst-macro가 존재하지 않는 시장지표 경로를 다시 적은 건수.

검증 명령:

  • sqlite3 /Users/ron/.hermes/data/ops_multiagent.db "SELECT claimed_by, COUNT(*) FROM bus_commands WHERE result_note LIKE '%missing_%' AND datetime(created_at)>=datetime('now','-3 day') GROUP BY claimed_by;"
  • sqlite3 /Users/ron/.hermes/data/ops_multiagent.db "SELECT id,claimed_by,status,title FROM bus_commands WHERE result_note LIKE '%근거 섹션 미기재%' OR result_note LIKE '%검증 근거 미기재%' ORDER BY id DESC LIMIT 20;"
  • python3 -c "from pathlib import Path; p=Path('/Users/ron/knowledge-agent/400-reports/260914_completion_evidence_operating_note.md'); print(p.exists(), all(x in p.read_text() for x in ['결론:','근거:','검증:','근거파일:']))"

기대값:

  • 태스크 body 체크리스트 반영 후 7일 안에 단순 4블록 누락형 반려 50% 이상 감소.
  • status=None/task_status 오분류 후속 태스크 0건.
  • cowork 코드형 done 시도 0건.
  • analyst-macro의 존재하지 않는 시장지표 경로 재발 0건.

롤백 조건:

  • 체크리스트 반영 후에도 같은 에이전트에서 같은 라벨이 3회 연속 재발하면, 운영 문구 문제가 아니라 게이트 코드 또는 orchestrator 배선 문제로 격상한다.
  • 4블록을 정확히 갖춘 원문이 로그에 있는데도 result_note가 반려되면 즉시 codex에 게이트 코드 재조사를 맡긴다.

완료 보고용 4블록

결론: 재발 방지 체크리스트 12개와 금지문구 12개를 포함한 완료보고 근거누락 방지 운영안을 작성했다. 근거: /Users/ron/.hermes/workspace/config/agent_completion_submission_standard.md 835줄, /Users/ron/.hermes/workspace/config/completion_evidence_policy.md 2,503줄, 최근 bus_commands 사례 11건, 조회 2026-09-14 15:15 KST. 검증: 보고서 파일 생성 후 필수 라벨 결론:/근거:/검증:/근거파일: 포함 여부를 확인한다. 근거파일: /Users/ron/knowledge-agent/400-reports/260914_completion_evidence_operating_note.md:6 "# 완료보고 근거누락 방지 운영안"