virtual-insanity
← 리포트 목록

needs_evidence 81건 적체 해소 정책안 (guardian 집계 기반)

2026-10-27 claude [needs_evidence, completion-gate, policy, cowork, 크레딧, 미국IG, 해리확인필요]

needs_evidence 81건 적체 해소 정책안 (조회 2026-10-27 11:13 KST, sqlite3 -readonly, DB 변경 없음)

기준 집계 파일: /Users/ron/.hermes/workspace/memory/needs_evidence_분포_2026-10-27.md (guardian, 조회 2026-10-27 10:04:14 KST, 39행). 이 문서는 그 집계를 DB에서 다시 뽑아 대조한 결과다.

1. [권고]

  • 1순위(크레딧 먼저): 해리 관심 영역 11건 중 새로 돌릴 것은 3건뿐이다. 41323(주간 크레딧 크론 5c45c26045be 사전점검), 42671(미국 IG OAS 최신값), 40408(IG 등급별 격차). 나머지 8건(40518, 40874, 40960, 41035, 41067, 41769, 41780, 41900)은 9/29~10/17 기준일 스냅샷이라 42671 재발행이 대체한다. 기대효과: 크레딧 적체 11 → 3건 처리, 8건 종결.
  • 2순위(자기참조 스냅샷 종결): 제목에 "needs_evidence N건 분류/방지안"이 들어간 63건(guardian 52, cowork 11, 전체의 77.8%)은 N이 8→81로 변한 시점 스냅샷이다. 최신 집계(위 분포 파일)와 이 문서가 대체하므로 cancelled 종결 후보다. 종결은 해리 확인 후 실행(상태 변경이라 이 문서는 하지 않았다). 기대효과: 81 → 18건.
  • 3순위(신규 발행 차단 유지): 이 유형을 새로 발행하지 않는다. 지금도 이 작업(CMD#42824, 제목 "needs_evidence 81건 …")이 같은 유형의 82번째다. 10/19에 들어간 재발행 루프 게이트(orchestrator.py 4330행)가 있는데도 10/19 이후 guardian 반려가 20건(일 1~5건) 더 쌓였다. 게이트는 requested_by가 orchestrator인 경우에만 작동하고 제목 숫자 정규화 후 유사도 0.9 이상일 때만 막는다(4330~4345행 docstring). 사람이 직접 발행하거나 문구가 조금 달라지면 통과한다.

2. [현황]

2-1. 분포 재확인 (직접 조회)

sqlite3 -readonly ... "SELECT claimed_by,COUNT(*) FROM bus_commands WHERE status='needs_evidence' GROUP BY claimed_by" → 5행 반환. | 에이전트 | 직접 조회 | guardian 집계 | 일치 | |---|---|---|---| | guardian | 58 | 58 | 일치 | | cowork | 12 | 12 | 일치 | | analyst-macro | 6 | 6 | 일치 | | analyst-pm | 4 | 4 | 일치 | | ron | 1 | 1 | 일치 | | 합계 | 81 | 81 | 일치 | 참고: 10/26 문서(76건) 대비 +5건. 생성일 범위 2026-09-28 13:07 ~ 2026-10-27 04:11.

2-2. 상위 반려 라벨 2개 대표 CMD 원문 확인

상위 라벨은 집계 파일 기준 "결과 확인 보류"(33건)와 missing_verification_exit_code(23건). - 결과 확인 보류 대표 #40825(guardian, 10/04): result_note 360자. 구조는 "결론: 결과 확인 보류 / 근거: 결과물과 검증 근거가 없음. 차단 사유: 결과 확인 보류 …"로 게이트가 만든 반려 문구다. 원본 요약 안에 "11건(failed 4, needs_evidence 7)을 모두 분류했습니다"라는 결과는 있으나 경로·명령이 요약에서 잘려(170자 내외) 보이지 않는다. - 결과 확인 보류 대표 #42798(guardian, 10/27): 원본 요약에 sqlite3 명령과 80건 집계는 있다. "결과 확인 보류"는 총괄 문구이고 구체 사유는 "검증 근거 없음, 결과물과 검증 근거가 없음"이다. - missing_verification_exit_code 대표 #40276(guardian, 09/28): 원본 요약의 "결론:" 칸에 "수행한 일과 현재 상태를 완료형 한 문장으로 적는다."가 그대로 들어 있다. 자동 보강 템플릿 문구를 실제 내용으로 착각해 제출한 것이다. 이 건은 파일 경로(agent_queue_worker.py, test_agent_queue_worker_model_timeout.py)가 있으나 결론이 비어 있어 재실행이 필요하다. 또 이 CMD는 "워커 8개가 09-27 07:55에 시작돼 09-28 12:28 패치가 미반영"인지 판정하는 과거 시점 점검이라 현재 값으로 다시 재야 한다. - missing_verification_exit_code 대표 #42778(cowork, 10/26): 사유가 execution_artifact_path_not_found + missing_verification_command + missing_verification_exit_code 복합이다. 원본 요약은 "수정은 디스크 코드에 이미 반영돼 있고, 서버·워커 프로세스가 수정 전 코드를 메모리에 올린 채 돌고 있어 재시작이 필요하며, 사전 고지 없이 하지 않으려고 아직 하지 않았다"는 실제 발견이다. 증거는 있고 형식만 틀렸다. 경로 오류는 "server.py 1006~1015행"처럼 줄번호 범위가 붙은 문자열을 서버 저장 게이트의 경로 정규식(server.py 719행 _STORAGE_PATH_TOKEN_RE)이 경로로 읽어 파일 없음으로 판정한 것으로 보인다. 같은 패턴을 public_result_formatter.py 2044행 주석이 이미 알려 두었다. - 주의: 4건 모두 result_note가 359~621자로 잘려 저장돼 있어(81건 전체 길이 최소 359, 최대 621) 원 보고 전문은 DB에 없다. 증거가 "있었는지"는 요약 범위 안에서만 판단했다. 전문 확인은 미확인.

2-3. 재실행 필요 vs 재제출로 해소 가능 (81건 전체)

판별 기준은 result_note "원본 요약" 구간에 경로·명령(sqlite3, /Users/, .py/.json/.md)이 보이는가다. 요약이 잘려 있어 "보임"이 "충분함"은 아니다. | 구분 | 건수 | 기준 | |---|---|---| | A. 자기참조 스냅샷(제목에 needs_evidence/반려/failed) | 63 | guardian 52, cowork 11. 이 중 40건이 10/20 이전 생성, 14건 10/20~23, 9건 10/24 이후 | | A 중 증거 흔적 있음(형식만 문제) | 42 | 재제출 가능하나 내용이 낡아 가치 없음 → 종결 | | A 중 증거 흔적 없음(재실행 필요) | 21 | 마찬가지로 최신 집계가 대체 → 종결 | | B. 크레딧(미국 IG, 주간 크레딧 크론) | 11 | §3 | | C. 그 외 운영 점검 | 7 | §4 | | 합계 | 81 | 63+11+7 | Sell Axe 직접 건: 제목/본문 검색 2건(41628, 42762)이 걸렸으나 본문 확인 결과 둘 다 "해리 관심 주제(… 국내 Sell Axe …)는 별도 표기" 안내 문구 속 단어였다. 실제 Sell Axe 작업 건은 81건 제목·본문 검색 범위에서 미발견. 재제출로 해소 가능한 건(증거 있고 형식만 틀림): 42778이 대표이며 C군에서 나온다. A군은 재제출해도 산출물 가치가 없어 해소 방법이 재제출이 아니라 종결이다.

3. 해리 관심 건 우선순위 ★ (11건, 최상단 처리)

순위 CMD 담당 분류 처리
1 41323 ★ guardian 재발행(지시문 결함) 주간 크레딧 크론 사전점검. 보고가 workspace/jobs.json(미존재)을 인용해 경로 반려. 크론 장부는 /Users/ron/.hermes/cron/jobs.json. 현재 확인값: id 5c45c26045be enabled=true, state=scheduled, schedule 0 9 * * 0, last_status ok, last_run_at 2026-10-25T09:01:04, deliver slack:C0BQHC4QTFX:1792796256.906189(= week_thread_map.json의 2026-W43 값과 일치). week_thread_map.json에는 W42·W43만 있고 W44(11/01 일요일 회차) 없음 → 다음 일요일 전에 스레드 등록이 필요하다. 새 지시문은 jobs.json 경로를 명시해 재발행하고 원 건 종결
2 42671 ★ analyst-macro 재발행(데이터 낡음) 보고가 쓴 값은 10-21 0.88. 파일 BAMLC0A0CM.json(수정 10-27 07:10)의 마지막 관측은 2026-10-23 0.91(직전 10-22 0.89)이다. 기준일이 두 영업일 전이므로 재실측해서 재발행. 지시문에 파싱 명령 출력과 "exit code 0" 검증 문장을 넣는다
3 40408 ★ analyst-macro 재발행(데이터 낡음) 등급별(AAA/AA/A/BBB) 격차. 9/29 값은 낡았다. us-ig-weekly-latest.json(생성 10-24 07:50, as_of 2026-10-22, status ok) 기준으로 재발행
4~11 40518, 40874, 40960, 41035, 41067, 41769, 41780, 41900 ★ analyst-macro 4, analyst-pm 4 종결 기준일 스냅샷. 위 2번이 대체. 특히 analyst-pm 4건은 "판단" 성격이라 파일 최신값 확보 후 한 건으로 합쳐 재발행(필요할 때만)
analyst-macro 6건·analyst-pm 4건은 모두 사유가 missing_result_or_verification 하나다. 이 사유는 결과 칸과 검증 칸이 모두 비었다는 뜻이라, 위 지시문 보강(출력 인용 + exit code 문장) 없이는 재발행해도 다시 반려된다.

4. 그 외 운영 점검 7건 (C군)

CMD 담당 분류 처리
42778 cowork 증거 있음, 형식만 틀림 재제출 대상. 보고의 핵심(디스크 코드는 반영됨, 프로세스는 구버전)은 맞는 발견. 줄번호 범위 표기("1006~1015행")를 경로 문자열 뒤에 붙이지 않고 별도 줄에 쓰게 하고, 검증 줄에 ps 시작시각 대조 명령과 exit code를 넣어 재제출. 프로세스 재시작은 해리 사전 고지 후에만
40276 guardian 재실행 필요 결론 칸에 템플릿 문구가 들어간 건. 대상 패치(09-28 12:28)는 이미 한 달 지났으므로 새 지시문 "워커 시작시각 vs 파일 수정시각 대조"로 재발행 후 원 건 종결
40297 ron 재실행 필요 ETF 데이터 예열(etf_domestic_prewarming), invalid_verification_exit_code. 09/28 건이라 현재 크론 최근 실행 결과로 대체 확인 후 종결
40346, 40633, 40994, 42332 guardian 종결 09/29~10/22 일회성 원인분류. 현재 상황과 무관
- 이 7건 중 현재 가치가 있는 것은 42778(재제출)과 40276(재발행) 2건이다.

5. 재라우팅 대상 에이전트

  • 크레딧 3건(41323, 42671, 40408): 41323은 guardian 그대로(읽기 전용 점검, 최근 후속 #42758이 failed였던 이력 있음 → 지시문에 jobs.json 절대경로 명시). 42671·40408은 analyst-macro 그대로(데이터 파싱은 이 에이전트의 본업).
  • 42778: cowork 그대로 재제출. 파일 수정 필요 부분은 codex로 분리(§7).
  • 40276: guardian. 단 guardian은 현재 58건 중 52건이 자기참조 분류 태스크라 큐 상한(에이전트당 2개)을 고려해 한 번에 1건씩만 발행.
  • scripts/*.py를 고치는 태스크는 cowork에 배정하지 않고 codex로만(AGENTS.md 2026-09-21 규칙).
  • run-cycle·지식순환류는 codex에 대행시키지 않는다(AGENTS.md 2026-09-22 규칙). 이번 81건에는 해당 건 없음.

6. 폐기/재발행 기준

  • 폐기(cancelled) 기준: ①제목이 "needs_evidence N건 … 분류/집계/방지안"이고 N이 현재 81보다 낮은 건(= 낡은 스냅샷) ②같은 주제의 더 최신 건이 있는 건 ③기준일이 7일 이상 지난 데이터 판독 건. 해당: A군 63건 + 크레딧 8건 + C군 4건 = 75건.
  • 재발행 기준: 원 지시가 지금도 유효하고 같은 CMD를 다시 돌리면 같은 이유로 반려될 구조(인용 경로 오류, 낡은 기준일, 템플릿 문구 오인)인 건. 새 CMD를 발행하고 원 건은 종결. 해당: 41323, 42671, 40408, 40276 = 4건.
  • 재제출 기준: 증거는 있고 형식만 틀린 건. 해당: 42778 = 1건. ron 40297은 확인 후 종결(재실행 1회 가능).
  • 합계: 종결 75(A군 63 + 크레딧 8 + C군 40346·40633·40994·42332) + 재발행 4(41323·42671·40408·40276) + 재제출 1(42778) + 확인 후 결정 1(40297) = 81. 전체 81건과 일치.
  • 종결 전 반드시: 대표 산출물 파일이 디스크에 남아 있는지 확인(종결해도 파일은 남는다). 종결 SQL 실행은 해리 확인 후, 이 문서는 DB를 바꾸지 않았다.

7. 코드 수정이 필요한 항목 (codex에 넘길 후보, 이 문서에서는 수정하지 않음)

  1. server.py _STORAGE_PATH_TOKEN_RE(719행): "파일.py 1006~1015행" 같은 "경로 + 공백 + 줄번호 범위"를 경로 토큰이 먹어 execution_artifact_path_not_found 오탐이 난다는 가설. 42778이 근거. 재현 테스트 필요. 확인 못 한 부분: 실제 오탐 원인이 이 정규식인지 server.py 외 경로(agent_queue_worker.py 7361~7441행 힌트 함수)인지는 아직 미확인. codex가 재현부터.
  2. orchestrator.py _ensure_completion_evidence_block(1095행)의 기본 4블록 문구: 에이전트가 이 안내 문구를 실제 보고로 베끼는 사례(#40276 결론 칸)가 있다. 안내 문구를 "<…>" 형태 자리표시자로 바꾸거나 제출 시 이 문구가 있으면 게이트에서 거부. 후보 함수: agent_queue_worker.py _completion_required_evidence_gaps(1967행).
  3. orchestrator.py _is_needs_evidence_reissue_loop_tripped(4330행): requested_by가 orchestrator 이외(harry 등)이면 즉시 통과(4342~4343행). 10/19 이후에도 guardian 반려가 20건 쌓인 이유 후보. 제목 정규식으로 "needs_evidence N건" 계열이면 요청자와 무관하게 막는 옵션 검토.
  4. agent_queue_worker.py: result_note가 359~621자로 잘려 저장돼 원 보고 전문이 사라진다(81건 길이 분포). 반려 건은 전문을 별도 파일(logs/completion_evidence_blocked.jsonl에는 240자 preview만 있다고 4007행 근처 주석)로 보존하는 방안.
  5. 프로세스 재시작 이슈: 10/25 14:47 수정된 shared/public_result_formatter.py가 실행 중인 서버·워커에 로드됐는지는 이 세션에서 미확인(ps 출력이 명령행을 잘라 서버/워커를 식별하지 못함). 확인은 guardian 읽기 전용 점검으로, 재시작은 해리 사전 고지 후에만.

8. [리스크]

  • 종결 75건 일괄 처리 시 되돌릴 수 없는 정보는 없지만(파일은 디스크에 있음) 감사 흔적이 필요하면 종결 전 SELECT 결과를 파일로 남긴다.
  • 자기참조 루프: 이 정책안 작업 자체도 반려되면 82건이 된다. 완료 보고를 4블록 + 경로 + exit code 문장으로 정확히 맞춰야 한다.
  • 크레딧: 주간 크레딧 크론은 11/01(다음 일요일) 09:00에 돈다. W44 스레드 등록이 안 되면 사전점검 게이트(AGENTS 이전 기록 기준 fail-closed)로 보류될 수 있다. 게이트 스크립트 위치는 이 세션에서 확인하지 못했다(workspace/scripts/weekly_credit_thread_gate.py 없음).
  • 분류의 한계: 증거 유무 판별이 저장된 result_note의 앞부분(359~621자)에 의존한다.

9. [검증방법]

  • 종결/재발행 후 sqlite3 -readonly /Users/ron/.hermes/data/ops_multiagent.db "SELECT claimed_by,COUNT(*) FROM bus_commands WHERE status='needs_evidence' GROUP BY claimed_by" → 기대값: 81 → 6 이하(재제출 1 + 재발행 4 + 신규 유입 여유).
  • 3일 후 재측정: 일 신규 유입 needs_evidence가 0~1건이면 성공, 일 3건 이상이면 코드 수정(§7-2, 7-3) 우선.
  • 크레딧: 42671 재발행 건이 done이고 result_note에 "2026-10-23 0.91"(또는 그 시점 최신 관측일)이 인용되면 성공.
  • 롤백: 종결한 건 중 필요한 것이 나오면 상태를 queued로 되돌리거나 새 CMD로 재발행(원문은 DB에 남음).