needs_evidence 81건 적체 해소 정책안 (guardian 집계 기반)
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에 넘길 후보, 이 문서에서는 수정하지 않음)
- 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가 재현부터. - orchestrator.py
_ensure_completion_evidence_block(1095행)의 기본 4블록 문구: 에이전트가 이 안내 문구를 실제 보고로 베끼는 사례(#40276 결론 칸)가 있다. 안내 문구를 "<…>" 형태 자리표시자로 바꾸거나 제출 시 이 문구가 있으면 게이트에서 거부. 후보 함수: agent_queue_worker.py_completion_required_evidence_gaps(1967행). - orchestrator.py
_is_needs_evidence_reissue_loop_tripped(4330행): requested_by가 orchestrator 이외(harry 등)이면 즉시 통과(4342~4343행). 10/19 이후에도 guardian 반려가 20건 쌓인 이유 후보. 제목 정규식으로 "needs_evidence N건" 계열이면 요청자와 무관하게 막는 옵션 검토. - agent_queue_worker.py: result_note가 359~621자로 잘려 저장돼 원 보고 전문이 사라진다(81건 길이 분포). 반려 건은 전문을 별도 파일(logs/completion_evidence_blocked.jsonl에는 240자 preview만 있다고 4007행 근처 주석)로 보존하는 방안.
- 프로세스 재시작 이슈: 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에 남음).