virtual-insanity
← 리포트 목록

kpi-daily / kpi-weekly 본문 품질점검

2026-04-16 qc [kpi, telegram, qc, ops, phase17]

kpi-daily / kpi-weekly 본문 품질점검

1. 실제 07:45 발송 본문 확보

확인 소스: - ~/.hermes/logs/kpi_daily.log 마지막 100줄 - ~/.hermes/logs/kpi_daily.json - ~/.hermes/logs/sector_trace.log

07:45 자동 발화 증거:

[SECTOR_TRACE] send_sector(ops) caller=kpi_telegram_wrapper.py:170 text='📊 <b>일일 KPI 리포트</b>\n날짜: <code>2026-04-16</code>...'
[kpi-wrapper] telegram_ok=True message_id=2381 error=None

실제 본문:

📊 <b>일일 KPI 리포트</b>
날짜: <code>2026-04-16</code>

<b>전체</b>
• 처리/실패/대기: <b>1</b> / <b>0</b> / <b>6</b>
• 성공률: <b>100.0%</b>
• Cron: <b>8/8</b> 활성, 비활성 0

<b>에이전트별</b>
• Ron: done 0, fail 0, queued 5, 성공률 100.0%
• Codex: done 0, fail 0, queued 1, 성공률 100.0%
• Cowork: done 1, fail 0, queued 0, 성공률 100.0%
• Fundamental: done 0, fail 0, queued 0, 성공률 100.0%
• Macro: done 0, fail 0, queued 0, 성공률 100.0%
• Technical: done 0, fail 0, queued 0, 성공률 100.0%

생성: <code>2026-04-16T07:45:00</code>

원본 데이터 핵심:

entries 6
last date 2026-04-16
Ron done=0 failed=0 queued=5 success_rate=100
Codex done=0 failed=0 queued=1 success_rate=100
Cowork done=1 failed=0 queued=0 success_rate=100
cron 8/8 active

2. 품질 평가 — 해리 관점

판정: 기존 본문은 숫자는 맞지만 운영 판단에는 부실.

문제점: 1. done=0, fail=0인 에이전트가 성공률 100%로 표시됨. 실제로는 처리 표본이 0이라 성공으로 해석하면 안 된다. 2. 전체 성공률도 표본 1건 기준 100%라 의미가 작지만, 본문은 이를 정상 신호처럼 보인다. 3. 전일 대비 변화율/추세가 없다. 대기열이 늘었는지 줄었는지 즉시 판단 불가. 4. 예외/경고가 없다. cron 실패 기록이 있어도 본문에서는 8/8 활성만 보여 정상처럼 보인다. 5. 액셔너블한 정보가 없다. 오늘 무엇을 봐야 하는지 제시하지 않는다. 6. 차트/시각화는 없고, 텔레그램 본문에서는 최소한 텍스트 추세 마커가 필요하다. 7. 주간 리포트는 7일 미만일 때 “데이터 부족”만 보여주며, 같은 날짜 중복 실행을 1일치처럼 정규화하지 않아 표본 해석이 흐릴 수 있다.

참고: 요청된 ~/knowledge-agent/400-reports/260415_kpi_deep_analysis.md는 존재하지 않았다. 대신 기존 wrapper 도입 보고서 260415_fix_kpi_telegram.md만 확인했고, 이번 품질 설계는 현재 로그와 데이터 기준으로 적용했다.

3. 재설계

/Users/ron/.hermes/workspace/scripts/pipeline/kpi_telegram_wrapper.py만 수정했다.

새 daily 섹션: - 핵심지표 Top3 1. 처리량 + 표본 기반 성공률 2. 병목 대기열 Top agent 3. 파이프라인 health + 실패 cron 기록 - 전일 대비 - Exception - Next Action

새 weekly 섹션: - 같은 날짜 중복 KPI 실행은 최신 1개로 collapse - 7일 미만이면 “표본 부족”을 제목에 명시 - 부족하더라도 누적 처리/실패, 현재 대기, queue delta, cron exception, next action 표시

핵심 변경: - 처리 표본 0건 성공률은 N/A(처리 0건) 또는 Exception으로 처리 - 8/8 활성만 보지 않고 last_status=error / last_error cron을 함께 표시 - Next Action을 최대 3개로 제한해 바로 볼 수 있게 함

4. 수정 diff

백업:

/Users/ron/.hermes/workspace/scripts/pipeline/kpi_telegram_wrapper.py.bak-qc-260416-081412

전체 diff 저장:

/tmp/kpi_qc_260416/kpi_telegram_wrapper.diff

주요 diff 요약:

+def _collapse_by_date(history):
+    """같은 날짜에 여러 번 실행된 KPI는 가장 최근 timestamp만 대표값으로 사용."""
+
+def _success_text(done, failed):
+    denom = done + failed
+    if denom <= 0:
+        return "N/A(처리 0건)"
+    return f"{done / denom * 100:.1f}% (표본 {denom}건)"
+
+def _cron_exception_jobs(jobs, limit=4):
+    # enabled job 중 last_status=error 또는 last_error 존재 시 예외로 표시
+
-        "📊 <b>일일 KPI 리포트</b>",
-        "<b>전체</b>",
-        "<b>에이전트별</b>",
+        "📊 <b>일일 KPI 리포트 — 운영 판단형</b>",
+        "<b>핵심지표 Top3</b>",
+        "<b>전일 대비</b>",
+        "<b>Exception</b>",
+        "<b>Next Action</b>",

-    if len(history) < 7:
-        "상태: <b>데이터 부족 (...일)</b>"
+    daily = _collapse_by_date(history)
+    title_status = "표본 부족" if coverage < 7 else "7일 추세"
+    # 부족 상태에서도 partial weekly 지표와 action 출력

검증:

python -m py_compile kpi_telegram_wrapper.py -> compile_ok

5. 재실행 결과 — no-send

실제 텔레그램 중복 발송은 피하기 위해 --no-send로 1회씩 실행했다. 원본 KPI tracker는 실제 실행되어 kpi_daily.json에 테스트 run 1건이 추가됐다.

명령:

python kpi_telegram_wrapper.py --no-send
python kpi_telegram_wrapper.py --weekly --no-send

daily after

📊 <b>일일 KPI 리포트 — 운영 판단형</b>
날짜: <code>2026-04-16</code>

<b>핵심지표 Top3</b>
1) 처리량: <b>1</b> 완료 / <b>0</b> 실패 — 성공률 100.0% (표본 1건)
2) 병목: 대기 <b>7</b>건 (Ron 6, Codex 1)
3) 파이프라인: 8/8 활성; 실패 기록 4건

<b>전일 대비</b>
• 완료 0 / 실패 0 / 대기 +2

<b>Exception</b>
• 처리 0건 에이전트: Ron, Codex, Fundamental, Macro, Technical — 성공률 100%로 보지 않음
• 실패 기록 cron: vault-analyst-feedback, price-history SPY refresh, batchM-intelligence-blog-monitor, gmail-newsletter-collector
• 주간 추세 표본 부족: 2/7일

<b>Next Action</b>
• Ron 대기 6건 우선순위 정리
• 실패 cron 재실행/로그 확인: vault-analyst-feedback
• KPI 표본이 작음 — 성공률보다 처리량/대기 감소를 기준으로 판단

생성: <code>2026-04-16T08:15:24</code>

weekly after

📈 <b>주간 KPI 리포트 — 표본 부족</b>
기간: <code>2026-04-15 ~ 2026-04-16</code>

<b>핵심지표 Top3</b>
1) 2일 누적 처리: <b>2</b> 완료 / <b>0</b> 실패 — 성공률 100.0% (표본 2건)
2) 현재 대기: <b>7</b>건 (기간 내 변화 +2)
3) 파이프라인: 8/8 활성; 실패 기록 4건

<b>Exception</b>
• 표본 2/7일 — 주간 평균/추세 확정 보류
• 실패 기록 cron: vault-analyst-feedback, price-history SPY refresh, batchM-intelligence-blog-monitor, gmail-newsletter-collector
• 최근 처리 표본이 작아 성공률 해석 제한

<b>Next Action</b>
• Ron 대기 6건 우선순위 정리
• 실패 cron 재실행/로그 확인: vault-analyst-feedback
• KPI 표본이 작음 — 성공률보다 처리량/대기 감소를 기준으로 판단

6. 결론

  • 기존 07:45 msg_id 2381 본문은 “성공률 100%”가 실제 운영 상태를 과도하게 좋게 보이게 하는 문제가 있었다.
  • wrapper를 운영 판단형 본문으로 변경했다.
  • daily/weekly 모두 --no-send 재실행에서 새 본문 생성 성공, exit 0 확인.
  • 다음 자동 발화부터 동일 wrapper 경로를 사용하므로 개선 본문이 ops 토픽으로 나간다.

7. 자체평가

  • 정확성: 4.7/5 — 실제 로그/JSON/sector trace를 확인했고, 요청된 daily/weekly 본문을 모두 개선했다.
  • 완성도: 4.6/5 — 섹션 재설계와 주간 표본 부족 처리를 적용했다. 다만 차트 이미지는 범위 밖이라 텍스트 추세 마커로 대체했다.
  • 검증: 4.7/5 — py_compile, daily no-send, weekly no-send 모두 통과했다.
  • 최소 변경: 4.8/5 — kpi_telegram_wrapper.py만 수정했고 원본 tracker/공유 모듈은 건드리지 않았다.

종합: 4.7/5

Remaining Risks: - ron_kpi_tracker.py 자체는 여전히 처리 0건 성공률을 100%로 저장한다. 이번 수정은 텔레그램 wrapper 표시 계층에서 보정한 것이다. - no-send 재실행도 원본 tracker를 호출하므로 kpi_daily.json에 테스트 run 1건이 추가됐다.