virtual-insanity
← 리포트 목록

19 launchd 서비스 최종 end-to-end 검증

2026-04-15 final [launchd, hermes, telegram, final-verify, phase17]

19 launchd 서비스 최종 end-to-end 검증

선행 조건 확인

4개 선행 보고서가 모두 존재한 뒤 검증을 시작했다.

보고서 상태
260415_fix_analyst_technical.md 존재, 7578 bytes
260415_fix_kpi_telegram.md 존재, 21050 bytes
260415_fix_morning_briefing.md 존재, 30008 bytes
260415_fix_door_alert.md 존재, 10406 bytes

launchctl list 보조 확인

launchctl list도 실행했지만, 현재 Codex 실행 컨텍스트에서는 출력이 0라인이었다. 따라서 PID/exit/runs는 launchctl print gui/$(id -u)/<label> 결과를 기준으로 채웠다.

launchctl list > /tmp/.../launchctl_list.txt
wc -l launchctl_list.txt => 0

19 서비스 상태 매트릭스

기준: launchctl print gui/$(id -u)/<label>, plist 파싱, 로그 파일 mtime/size, lsof cwd(PID 있는 경우).

label state last_exit 경로 Hermes 텔레그램 도달 마지막 실행 시각 로그
com.openclaw.cowork-daily-review not running (pid -, runs 1) 0 PASS DM 확인: cowork_daily_review.log message_id=11602 2026-04-15 16:25:28 cowork_daily_review_stdout.log:2026-04-15 16:25:28:0
cowork_daily_review_stderr.log:2026-04-15 16:25:28:0
com.openclaw.autopilot-sweeper not running (pid -, runs 25) 0 PASS N/A (정리 작업, 평시 발송 없음) 2026-04-15 16:43:30 autopilot_sweeper.stdout.log:2026-04-15 16:43:30:3050
autopilot_sweeper.stderr.log:2026-04-15 16:20:18:0
com.openclaw.inbox-triage not running (pid -, runs 1) 0 PASS DM 확인: 수신함 트리아지 결과 message_id=11602 2026-04-15 16:25:28 inbox_triage_stdout.log:2026-04-15 16:25:28:0
inbox_triage_stderr.log:2026-04-15 16:25:28:0
ai.openclaw.memory-guardian not running (pid -, runs 27) 0 PASS 조건부 critical DM, 최근 발송 없음 2026-04-15 16:19:18 memory_guardian.out:2026-04-15 16:19:18:0
memory_guardian.err:2026-04-15 16:19:18:0
com.openclaw.ron-orchestrator not running (pid -, runs 5) 0 PASS N/A/조건부, 최근 발송 없음 2026-04-15 16:40:40 ron_orchestrator.log:2026-04-15 16:40:40:3495
ron_orchestrator_error.log:2026-04-15 16:24:18:0
com.openclaw.analyst-macro not running (pid -, runs 1) 0 PASS market 도달 플래그 true; latest.json telegram_sent=true 2026-04-15 16:25:28 analyst_macro_stdout.log:2026-04-15 16:25:28:0
analyst_macro_stderr.log:2026-04-15 16:25:28:0
com.openclaw.analyst-fundamental not running (pid -, runs 1) 0 PASS 미확인/누락: latest.json telegram_sent=false 2026-04-15 16:25:28 analyst_fundamental_stdout.log:2026-04-15 16:25:28:0
analyst_fundamental_stderr.log:2026-04-15 16:25:28:0
com.openclaw.analyst-technical not running (pid -, runs 1) 0 PASS market 전송 성공 로그 sent: True; latest.json telegram_sent=true 2026-04-15 16:25:28 analyst_technical_stdout.log:2026-04-15 16:25:28:0
analyst_technical_stderr.log:2026-04-15 16:25:28:0
com.openclaw.analyst-pm not running (pid -, runs 1) 0 PASS market 전송 성공 로그 sent: True; latest.json telegram_sent=true 2026-04-15 16:25:28 analyst_pm_stdout.log:2026-04-15 16:25:28:0
analyst_pm_stderr.log:2026-04-15 16:25:28:0
com.openclaw.morning-routine not running (pid -, runs 0) (never exited) PASS Telegram 아님: Google Home TTS 루틴 2026-04-15 16:11:01 morning-routine.log:2026-04-15 16:11:01:1000
morning-routine.err.log:2026-04-15 16:10:58:270
com.openclaw.weekly-report not running (pid -, runs 1) 0 PASS Telegram 아님: Google Home TTS 루틴 2026-04-15 16:25:52 weekly-report.log:2026-04-15 16:25:52:1260
weekly-report.err.log:2026-04-15 16:25:52:707
com.openclaw.kpi-daily not loaded (pid -, runs -) service not found PASS ops route 시도 trace 있음, message_id 없음 2026-04-15 16:25:28 kpi_daily.log:2026-04-15 16:25:28:1008
kpi_error.log:2026-04-15 16:11:02:0
com.openclaw.kpi-weekly not loaded (pid -, runs -) service not found PASS ops route 시도 trace 있음, message_id 없음 2026-04-15 16:25:28 kpi_weekly.log:2026-04-15 16:25:28:632
kpi_weekly_error.log:2026-04-15 16:11:02:0
com.openclaw.cold-alert not running (pid -, runs 1) 0 PASS 조건부 센서 알림, 현재 SKIP/HA 문제 2026-04-15 16:31:31 cold-alert.log:2026-04-15 16:31:31:28
cold-alert.err.log:2026-04-15 16:31:31:32
com.openclaw.door-alert not running (pid -, runs 22) 0 PASS FAIL: HA_UNREACHABLE로 상태 판독 불가 2026-04-15 16:43:46 door-alert.log:2026-04-15 16:43:46:1486
door-alert.err.log:2026-04-15 16:20:32:0
com.openclaw.late-lights not running (pid -, runs 1) 0 PASS 조건부 센서 알림, 현재 SKIP 2026-04-15 16:31:57 late-lights.log:2026-04-15 16:31:57:34
late-lights.err.log:2026-04-15 16:31:21:0
com.openclaw.rain-alert not running (pid -, runs 1) 0 PASS 조건부 센서 알림, 현재 SKIP/HA 문제 2026-04-15 16:31:31 rain-alert.log:2026-04-15 16:31:31:29
rain-alert.err.log:2026-04-15 16:31:31:32
com.openclaw.morning-briefing-telegram not loaded (pid -, runs -) service not found PASS report trace 있음(수동), launchd not loaded/message_id 없음 - morning-briefing-telegram.log:missing:None
morning-briefing-telegram.err.log:missing:None
com.openclaw.weekly-briefing-telegram not loaded (pid -, runs -) service not found PASS not loaded, 발송 증거 없음 - weekly-briefing-telegram.log:missing:None
weekly-briefing-telegram.err.log:missing:None

원본 스크립트 vs wrapper 매핑

label 실제 호출/매핑 OpenClaw 잔존
com.openclaw.cowork-daily-review cowork_daily_review.sh → Claude/Cowork review False
com.openclaw.autopilot-sweeper autopilot_sweeper.py --apply False
com.openclaw.inbox-triage cowork_daily_review.sh with TRIAGE env False
ai.openclaw.memory-guardian memory_guardian.py False
com.openclaw.ron-orchestrator ron_orchestrator_controller.py False
com.openclaw.analyst-macro analyst_runner.sh macro → Claude analyst prompt False
com.openclaw.analyst-fundamental analyst_runner.sh fundamental → Claude analyst prompt False
com.openclaw.analyst-technical analyst_runner.sh technical → Claude analyst prompt (wrapper fixed) False
com.openclaw.analyst-pm analyst_runner.sh pm → Claude analyst prompt False
com.openclaw.morning-routine tts_morning.sh (TTS 원본) False
com.openclaw.weekly-report tts_weekly.sh (TTS 원본) False
com.openclaw.kpi-daily kpi_telegram_wrapper.py → ron_kpi_tracker.py False
com.openclaw.kpi-weekly kpi_telegram_wrapper.py --weekly → ron_kpi_tracker.py --weekly False
com.openclaw.cold-alert auto_cold_alert.sh False
com.openclaw.door-alert auto_door_alert.sh False
com.openclaw.late-lights auto_late_lights.sh False
com.openclaw.rain-alert auto_rain_alert.sh False
com.openclaw.morning-briefing-telegram morning_briefing_wrapper.sh → telegram_briefing_wrapper.py morning False
com.openclaw.weekly-briefing-telegram weekly_briefing_wrapper.sh → telegram_briefing_wrapper.py weekly False

텔레그램/알림 증거

확인한 파일: ~/.hermes/logs/*_last_telegram.tsv, ~/.hermes/logs/sector_trace.log, ~/.hermes/logs/gateway*.log, 관련 서비스 로그.

## blog_monitor (10 hits)
2026-04-15 16:00:24 [SECTOR_TRACE] send_sector(ideas) caller=blog_monitor.py:411 text='<b>파월과 베센트가 은행장들을 긴급 소집한 이유 (feat 미토스)</b>\n\n앤트로픽의 AI 모델 미토스가 사이버 보안 시장에 큰 충격을 주며'
2026-04-15 16:00:29 [SECTOR_TRACE] send_sector(ideas) caller=blog_monitor.py:411 text='<b>원유 상황은 정말 괜찮을까?</b>\n\n호르무즈해협의 통행 제한으로 인해 원유 공급이 심각하게 감소하고 있으며, 한국은 비축유를 통해 210'
2026-04-15 16:00:34 [SECTOR_TRACE] send_sector(ideas) caller=blog_monitor.py:411 text='<b>우리 파키스탄이 달라졌어요 (feat 미국 이란의 종전협상 중재)</b>\n\n파키스탄은 지정학적 위치 덕분에 미국과 중국의 전략적 이해관계 '
2026-04-15 16:00:39 [SECTOR_TRACE] send_sector(ideas) caller=blog_monitor.py:411 text='<b>미국과 이란의 종전 협상이 결렬된 이유는 뭐고, 전쟁은 언제 끝날까?</b>\n\n미국과 이란의 종전 협상이 결렬되면서, 전쟁의 가능성이 높아'
2026-04-15 16:00:44 [SECTOR_TRACE] send_sector(ideas) caller=blog_monitor.py:411 text='<b>트럼프, "호르무즈해협 완전히 막겠다." 선언...</b>\n\n트럼프는 호르무즈 해협을 통과하는 선박에 대한 봉쇄조치를 지시하며, 이란의 통'
2026-04-15 16:00:50 [SECTOR_TRACE] send_sector(ideas) caller=blog_monitor.py:411 text='<b>중국의 황산 수출금지가 일으키는 나비효과? (feat 비료, 구리,니켈)</b>\n\n중국의 황산 수출 금지가 비료와 관련된 공급망에 심각한 '
2026-04-15 16:00:55 [SECTOR_TRACE] send_sector(ideas) caller=blog_monitor.py:411 text='<b>호주, 한국에 경고하다 (feat 석유제품)</b>\n\n한국은 글로벌 공급망 위기 속에서도 210일 이상 석유제품을 비축할 수 있지만, 이는'
2026-04-15 16:01:01 [SECTOR_TRACE] send_sector(ideas) caller=blog_monitor.py:411 text='<b>6시간동안 리치 스타리호에 무슨 일이 일어난 걸까?</b>\n\n리치 스타리호가 호르무즈 해협을 통과하는 과정에서 미국과 중국 간의 대화가 있'
2026-04-15 16:01:07 [SECTOR_TRACE] send_sector(ideas) caller=blog_monitor.py:411 text='<b>미장은 언제부터 오를수 있을까? A/S</b>\n\n미국 증시의 향후 전망은 유동성의 변화에 크게 의존하고 있으며, 현재 역레포(RRP) 잔고'
2026-04-15 16:01:14 [SECTOR_TRACE] send_sector(ideas) caller=blog_monitor.py:411 text='<b>3번째 항공모함 조지 H.W 부시함의 위치가...전쟁 길어지나?</b>\n\n항공모함 조지 H.W. 부시함의 이동 경로가 전쟁의 지속 가능성을'
## gmail_newsletter (2 hits)
2026-04-15 14:26:14 [SECTOR_TRACE] send_sector(report) caller=<stdin>:30 text='📬 <b>[반도체-테크] Credo Technology Deep Dive</b>\n  Damnang · 2026-04-15\n\nCredo Techn'
2026-04-15 14:36:42 [SECTOR_TRACE] send_sector(report) caller=<stdin>:4 text='[cron-report-verify] Gmail newsletter report topic route test — 2026-04-15 14:36'
## kpi (2 hits)
2026-04-15 16:37:26 [SECTOR_TRACE] send_sector(ops) caller=kpi_telegram_wrapper.py:170 text='📊 <b>일일 KPI 리포트</b>\n날짜: <code>2026-04-15</code>\n\n<b>전체</b>\n• 처리/실패/대기: <b>1</b> '
2026-04-15 16:37:29 [SECTOR_TRACE] send_sector(ops) caller=kpi_telegram_wrapper.py:170 text='📈 <b>주간 KPI 리포트</b>\n상태: <b>데이터 부족 (3일)</b>\n\n최근 daily KPI가 7일치 쌓이면 주간 평균/추세를 계산합니'
## morning_report (2 hits)
2026-04-15 16:39:08 [SECTOR_TRACE] send_sector(report) caller=telegram_briefing_wrapper.py text='<b>🌅 아침 투자 브리핑 · Telegram</b>\n<i>2026-04-15 16:39 KST / source=morning_briefing.'
2026-04-15 16:40:51 [SECTOR_TRACE] send_sector(report) caller=telegram_briefing_wrapper.py text='<b>🌅 아침 투자 브리핑 · Telegram</b>\n<i>2026-04-15 16:40 KST / source=morning_briefing.'
## analyst_market (1 hits)
2026-04-15 16:09:25 [SECTOR_TRACE] send_sector(market) caller=<stdin>:4 text='[launchd-analyst-revival] market sector smoke — 2026-04-15 16:09:25 KST'
## last_telegram_tsv
### /Users/ron/.hermes/logs/analyst_technical_last_telegram.tsv
1776238230  ⚠️ Analyst technical 실행 실패 (exit: 0). 로그 확인 필요.

추가 message_id 근거: ~/.hermes/logs/cowork_daily_review.logchat_id: 492860021, message_id: 11602, 2026-04-15T07:30:07Z 기록이 있다.

잔존 이슈 재점검

세션 대상 결과 잔존 이슈
s:2 analyst-technical wrapper 오탐 수정 반영. latest.json telegram_sent=true, market sent: True 로그 확인 analyst-fundamental은 telegram_sent=false로 남아 별도 복구 필요
s:4 kpi daily/weekly plist는 wrapper 경로. sector_trace에 ops 발송 시도 2건 com.openclaw.kpi-daily, kpi-weekly가 현재 launchd domain에 not loaded. message_id 없음
s:6 morning/weekly Telegram wrapper wrapper plist 파일 존재, Hermes 경로. report trace 2건 확인 morning-briefing-telegram, weekly-briefing-telegram not loaded. weekly 발송 증거 없음
s:8 door/cold/rain/late sensors 4개 모두 Hermes 경로, door-alert runs=22/last_exit=0 door-alert는 HA_UNREACHABLE 반복. HA endpoint 도달 실패로 실제 문 상태 알림 불가

해리 시야 커버리지

항목 실제 오는가 도착 위치 근거/상태
아침 브리핑(morning) 부분 report topic telegram_briefing_wrapper.py report trace 16:39/16:40. launchd wrapper not loaded, message_id 없음
수신함 트리아지(inbox) DM cowork_daily_review.log message_id=11602, 트리아지 완료
뉴스레터 다이제스트(gmail_newsletter) report topic sector_trace: Damnang Credo 14:26, newsletter route test 14:36
블로그 모니터(blog_monitor) ideas topic sector_trace: 16:00~16:01 ideas 10건
채권 일일 리포트(bond_daily) 확인 불충분 report/webapp 추정 이번 19 서비스 집합에는 없음. 이전 검증에서 확인됨으로 되어 있으나 현 run에서 message_id 증거는 못 찾음
애널리스트 4종 부분 market topic macro/technical/pm은 true/sent 로그. fundamental은 latest telegram_sent=false
KPI 일일/주간 부분 ops topic wrapper trace는 있음. launchd not loaded, message_id 없음
주말 Weekly 종합 미완 report topic 또는 TTS weekly-briefing-telegram not loaded, weekly-report는 TTS 스크립트만 있고 Telegram 아님

남은 잔존 이슈 우선순위

  1. P0 — not loaded 4개: kpi-daily, kpi-weekly, morning-briefing-telegram, weekly-briefing-telegram이 launchd domain에 없다. bootstrap 재실행 필요.

  2. P0 — door-alert: launchd는 돌지만 HA_UNREACHABLE 반복이라 실제 문 상태 감시 불가. HA URL/DNS/network 수정 필요.

  3. P1 — analyst-fundamental: 산출물은 있으나 telegram_sent=false. market topic 도달 증거를 남기거나 재전송 필요.

  4. P1 — KPI/morning wrapper message_id: sector_trace는 발송 시도 증거라서 최종 도달 증거가 약하다. wrapper에서 _send_raw 결과 message_id를 별도 로그로 남겨야 함.

  5. P2 — bond_daily 현 run 증거 부족: 이전 보고서 의존 상태. 최종 freeze 전 bond 최신 message_id 또는 report topic trace를 한 번 더 확보 필요.

최종 판정

부분 PASS

  • 19개 plist의 경로는 모두 Hermes 기준이며 OpenClaw 경로 잔존은 0으로 확인했다.

  • 15개는 launchd에 loaded 상태이고, 4개 신규 Telegram/KPI wrapper 서비스는 not loaded다.

  • 해리 시야의 주요 경로 중 inbox/newsletter/blog/analyst 일부는 도달 증거가 있다.

  • 하지만 KPI wrapper, morning/weekly Telegram wrapper, door-alert, analyst-fundamental은 아직 완전 PASS가 아니다.

자체평가

  • 정확성: 4.4/5 — 선행 보고서, launchctl print, plist, 로그, 텔레그램 trace를 분리해 확인했다.

  • 완성도: 4.2/5 — 19개 매트릭스와 커버리지는 완성했지만 일부 서비스가 not loaded/도달 미확인으로 남았다.

  • 검증: 4.3/5 — 런타임 상태, 로그 mtime/size, 발송 trace, latest flags를 확인했다. 실제 Telegram API message_id는 일부만 확보.

  • 최소 변경: 5/5 — 검증 전담으로 원본/서비스를 수정하지 않았다.

  • 종합: 4.45/5

Remaining Risks: - sector_trace는 호출 경로 증거이지 최종 Telegram API 성공의 완전 증거가 아니다. message_id 저장을 표준화해야 한다. - launchd state=not running, last_exit=0인 단발성 job은 정상일 수 있으나, 신규 not loaded 서비스는 스케줄 실행 자체가 불가능하다.