virtual-insanity
← 리포트 목록

guardian 완료보고 반려 반복 방지안 (24시간 반려 분류표 기반 4블록 보강 제안서)

2026-10-06 cowork [hermes, guardian, 증거게이트, 4블록, 제안서, cowork]

guardian 완료보고 반려 반복 방지안

[권고]

  • 1순위: scripts/agent_registry.py의 guardian 프롬프트(311행~)에 "점검 유형별 4블록 완성 예시" 3종(DB조회형 sqlite3, 크론 장부형, 큐/워커형)을 추가한다. 현재 예시는 python3 scripts/health_check.py → 전체 통과, exit code 0 한 줄뿐이다. 기대효과: 최근 24시간 guardian 7건 중 missing_verification_value 계열 4건(#40854/#40869/#40902/#40947)을 직접 겨냥, 반려율 87.5% → 50% 이하 목표(codex 위임).
  • 2순위: guardian 프롬프트에 "존재 확인 후 경로 인용" 규칙과 크론 장부 실경로(/Users/ron/.hermes/cron/jobs.json)를 명시한다. 기대효과: execution_artifact_path_not_found 3건(#40942/#40943/#40949) 재발 0건.
  • 3순위(문서): config/agent_completion_submission_standard.md §9-3-1 guardian 템플릿 아래에 sqlite 조회형 예시와 "exit code N 리터럴" 요건을 한 문단 추가한다.

[현황]

  • 분류표 산출물 /Users/ron/knowledge-agent/400-reports/261006_hermes_needs_evidence_분류.md 기준 진짜 24시간 반려 8건: guardian 7건(87.5%), analyst-pm 1건. 사유: missing_verification_value 5건(62.5%), execution_artifact_path_not_found 3건(37.5%), llm_infra_failure 0건.
  • 지정 쿼리 실제 실행 결과 10행 반환. 단, updated_at이 KST라 datetime('now')(UTC) 창은 약 33시간이며, 이 쿼리 결과에는 #40950(done)이 빠지고 #40942는 현재 라이브 테이블 조회에서 보이지 않았다(아카이브 이동 추정, 미확인).
  • 반려 유형 x guardian 작업 유형 x 빠진 항목:
  • 크론/장부 점검형(#40943, #40949): "근거"/"근거파일"에 workspace/jobs.json, workspace/fi-morning-brief.sh, scripts/migrated/fi-morning-brief.sh를 인용 — 3개 모두 실제로 존재하지 않음(ls 확인). 실제 장부는 /Users/ron/.hermes/cron/jobs.json. 빠진 항목: 근거파일 실존 경로. 부수로 source_log_path_not_found(#40943).
  • DB 조회/집계형(#40854, #40869, #40902): sqlite3 -readonly 조회는 했으나 "검증:" 줄에 exit code 숫자 리터럴이 없어 missing/invalid_verification_exit_code. 빠진 항목: 검증 줄의 exit code 0.
  • 분류/집계 후속형(#40947, #40949): verification_command_unverifiable — 재실행 가능한 명령(경로 토큰 포함)이 없음. 빠진 항목: 검증 명령 자체.
  • 대조: 같은 과제 #40950은 4블록 + md 경로 + 합계 일치 + 줄번호 인용으로 done 통과 — 형식을 채우면 통과함이 증명됨.
  • 문서/프롬프트 공백:
  • config/agent_completion_submission_standard.md §9-3-1(570행~)에는 guardian 예시가 이미 있으나 health_check.py 시스템 점검형 1종뿐. sqlite 조회형·크론 장부형 예시 없음. 또 scripts/agent_registry.py는 §9-3을 한 번도 참조하지 않음(grep "9-3" → 0건).
  • scripts/agent_registry.py guardian 프롬프트(311행~)는 일반 4줄 템플릿과 health_check 예시 1건만 있고, 사용 가능 도구 3개 중 sqlite 조회 도구와 크론 장부 경로가 없음.
  • 반려 본문(#40943/#40947/#40949)은 게이트 재시도 메시지만 저장되어 guardian 원본 제출문이 남지 않음 — 원인 추적에 한계(미확인 영역).

[리스크]

  • 같은 과제가 반려 후 재발행되어 재반려 루프 형성(#40947, #40949, #40950이 동일 계열 과제). 예시가 없으면 루프가 재발한다.
  • 프롬프트가 실제 실행 명령(python3 scripts/health_check.py)만 예시로 주므로, DB 조회형 작업을 받으면 모델이 임의 경로를 지어낸다(실존 안 하는 jobs.json 사례).
  • 프롬프트 수정은 모든 guardian 호출에 반영되므로 길이 증가와 회귀 위험이 있다. 예시 3종은 각 3줄 이내로 제한할 것.

[검증방법]

  • KPI: 수정 반영 후 72시간 guardian needs_evidence·failed 건수. 기준선은 24시간 7건. 목표는 72시간 3건 이하.
  • 명령: sqlite3 -readonly /Users/ron/.hermes/data/ops_multiagent.db "SELECT status,count(*) FROM bus_commands WHERE claimed_by='guardian' AND status IN ('needs_evidence','failed') AND datetime(updated_at)>=datetime('now','localtime','-72 hours') GROUP BY 1"
  • 롤백 조건: 72시간 내 execution_artifact_path_not_found가 다시 2건 이상이거나 guardian 완료율이 수정 전보다 떨어지면 프롬프트를 이전 판으로 되돌린다.

제안 문구 초안 (codex가 agent_registry.py에 반영할 내용, 코드 직접 수정은 하지 않음)

[DB조회형 예]
결론: bus_commands 반려 8건을 에이전트별로 분류했다(guardian 7건)
근거: sqlite3 -readonly /Users/ron/.hermes/data/ops_multiagent.db "SELECT ..." → 8행, 조회 2026-10-06 03:05 KST
검증: sqlite3 -readonly /Users/ron/.hermes/data/ops_multiagent.db "SELECT count(*) FROM bus_commands WHERE ..." → 8, exit code 0
근거파일: /Users/ron/knowledge-agent/400-reports/261006_hermes_needs_evidence_분류.md:75 "합계 일치: 조회 8건 = 에이전트표 8 = 사유표 8"

[크론 장부형 예]
검증: python3 -c "import json;print(len(json.load(open('/Users/ron/.hermes/cron/jobs.json'))['jobs']))" → 숫자, exit code 0
근거파일: /Users/ron/.hermes/cron/jobs.json:<줄번호> (workspace/jobs.json은 존재하지 않음 — 인용 금지)